From: Jan Tatarik Date: Wed, 19 Feb 2014 22:22:42 +0000 (+0100) Subject: BBDB completion in message-mode X-Git-Url: https://code.delx.au/gnu-emacs-elpa/commitdiff_plain/fab3d049295d052bebf409e84bc4ac69800e190d?ds=sidebyside BBDB completion in message-mode --- diff --git a/company-bbdb.el b/company-bbdb.el new file mode 100644 index 000000000..4e7fdda60 --- /dev/null +++ b/company-bbdb.el @@ -0,0 +1,53 @@ +;;; company-bbdb.el --- A company-mode completion back-end for BBDB in message-mode + +;; Copyright (C) 2013-2014 Free Software Foundation, Inc. + +;; Author: Jan Tatarik + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . + +(require 'company) +(eval-when-compile (require 'cl)) +(require 'bbdb nil t) +(require 'bbdb-com nil t) + +(defvar company-bbdb-records (make-hash-table :test 'equal)) + +;;;###autoload +(defun company-bbdb (command &optional arg &rest ignore) + "A `company-mode' completion back-end for `bbdb'." + (interactive (list 'interactive)) + (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))) + + (sorted t) + (no-cache t) + (t nil))) + +(provide 'company-bbdb) +;;; company-bbdb.el ends here diff --git a/company.el b/company.el index 18d1d386f..2814ab744 100644 --- a/company.el +++ b/company.el @@ -256,6 +256,7 @@ If this many lines are not available, prefer to display the tooltip above." (defvar company-safe-backends '((company-abbrev . "Abbrev") + (company-bbdb . "BBDB") (company-capf . "completion-at-point-functions") (company-clang . "Clang") (company-cmake . "CMake") @@ -290,6 +291,7 @@ If this many lines are not available, prefer to display the tooltip above." (defcustom company-backends `(,@(unless company--include-capf (list 'company-elisp)) + company-bbdb company-nxml company-css company-eclim company-semantic company-clang company-xcode company-ropemacs company-cmake