]>
Commit | Line | Data |
---|---|---|
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 |