company-bbdb.el (2324B)
1 ;;; company-bbdb.el --- company-mode completion backend for BBDB in message-mode 2 3 ;; Copyright (C) 2013-2016, 2020 Free Software Foundation, Inc. 4 5 ;; Author: Jan Tatarik <jan.tatarik@gmail.com> 6 7 ;; This file is part of GNU Emacs. 8 9 ;; GNU Emacs is free software: you can redistribute it and/or modify 10 ;; it under the terms of the GNU General Public License as published by 11 ;; the Free Software Foundation, either version 3 of the License, or 12 ;; (at your option) any later version. 13 14 ;; GNU Emacs is distributed in the hope that it will be useful, 15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of 16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 ;; GNU General Public License for more details. 18 19 ;; You should have received a copy of the GNU General Public License 20 ;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. 21 22 (require 'company) 23 (require 'cl-lib) 24 25 (declare-function bbdb-record-get-field "bbdb") 26 (declare-function bbdb-records "bbdb") 27 (declare-function bbdb-dwim-mail "bbdb-com") 28 (declare-function bbdb-search "bbdb-com") 29 30 (defgroup company-bbdb nil 31 "Completion backend for BBDB." 32 :group 'company) 33 34 (defcustom company-bbdb-modes '(message-mode) 35 "Major modes in which `company-bbdb' may complete." 36 :type '(repeat (symbol :tag "Major mode")) 37 :package-version '(company . "0.8.8")) 38 39 (defun company-bbdb--candidates (arg) 40 (cl-mapcan (lambda (record) 41 (mapcar (lambda (mail) (bbdb-dwim-mail record mail)) 42 (bbdb-record-get-field record 'mail))) 43 (eval '(bbdb-search (bbdb-records) arg nil arg)))) 44 45 ;;;###autoload 46 (defun company-bbdb (command &optional arg &rest ignore) 47 "`company-mode' completion backend for BBDB." 48 (interactive (list 'interactive)) 49 (cl-case command 50 (interactive (company-begin-backend 'company-bbdb)) 51 (prefix (and (memq major-mode company-bbdb-modes) 52 (featurep 'bbdb-com) 53 (let ((case-fold-search t)) 54 (looking-back 55 "^\\([^ :]*-\\)?\\(To\\|B?Cc\\|From\\):.*? *\\([^,;]*\\)" 56 (line-beginning-position))) 57 (match-string-no-properties 3))) 58 (candidates (company-bbdb--candidates arg)) 59 (sorted t) 60 (no-cache t))) 61 62 (provide 'company-bbdb) 63 ;;; company-bbdb.el ends here