-;;; company-bbdb.el --- A company-mode completion back-end for BBDB in message-mode
+;;; company-bbdb.el --- company-mode completion back-end for BBDB in message-mode
;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
(require 'company)
-(eval-when-compile (require 'cl))
-(require 'bbdb nil t)
-(require 'bbdb-com nil t)
+(require 'cl-lib)
-(defvar company-bbdb-records (make-hash-table :test 'equal))
+(declare-function bbdb-record-get-field "bbdb")
+(declare-function bbdb-records "bbdb")
+(declare-function bbdb-dwim-mail "bbdb-com")
+(declare-function bbdb-search "bbdb-com")
+
+(defun company-bbdb--candidates (arg)
+ (cl-mapcan (lambda (record)
+ (mapcar (lambda (mail) (bbdb-dwim-mail record mail))
+ (bbdb-record-get-field record 'mail)))
+ (eval '(bbdb-search (bbdb-records) arg nil arg))))
;;;###autoload
(defun company-bbdb (command &optional arg &rest ignore)
- "A `company-mode' completion back-end for `bbdb'."
+ "`company-mode' completion back-end for `bbdb'."
(interactive (list 'interactive))
- (case command
+ (cl-case command
(interactive (company-begin-backend 'company-bbdb))
(prefix (and (eq major-mode 'message-mode)
(featurep 'bbdb-com)
(looking-back "^\\(To\\|Cc\\|Bcc\\):.*"
(line-beginning-position))
(company-grab-symbol)))
- (candidates (mapcan (lambda (record)
- (mapcar (lambda (mail)
- (let ((full-mail (bbdb-dwim-mail record mail)))
- (puthash full-mail record company-bbdb-records)
- full-mail))
- (bbdb-record-get-field record 'mail)))
- (bbdb-search (bbdb-records) arg nil arg)))
-
+ (candidates (company-bbdb--candidates arg))
(sorted t)
- (no-cache t)
- (t nil)))
+ (no-cache t)))
(provide 'company-bbdb)
;;; company-bbdb.el ends here