emacs: address: allow internal completion on an individual basis

This commit makes two changes. The first allows the user to override
an external completion method with the internal notmuch address based
completion for an individual buffer.

Secondly, if the user has company-mode enabled then it sets up company
mode (based on internal completion) but disables the automatic timeout
completion -- the user can still activate it in when desired with
standard company commands such as company-complete.
This commit is contained in:
Mark Walters 2016-05-20 21:13:03 +01:00 committed by David Bremner
parent 2cf0ef3998
commit 827c28a04e
2 changed files with 23 additions and 4 deletions

View file

@ -118,17 +118,30 @@ to know how address selection is made by default."
:group 'notmuch-send)
(defun notmuch-address-setup ()
(let* ((use-company (and notmuch-address-use-company
(eq notmuch-address-command 'internal)
(let* ((setup-company (and notmuch-address-use-company
(require 'company nil t)))
(pair (cons notmuch-address-completion-headers-regexp
#'notmuch-address-expand-name)))
(when use-company
(when setup-company
(notmuch-company-setup))
(unless (memq pair message-completion-alist)
(setq message-completion-alist
(push pair message-completion-alist)))))
(defun notmuch-address-toggle-internal-completion ()
"Toggle use of internal completion for current buffer.
This overrides the global setting for address completion and
toggles the setting in this buffer."
(interactive)
(if (local-variable-p 'notmuch-address-command)
(kill-local-variable 'notmuch-address-command)
(setq-local notmuch-address-command 'internal))
(if (boundp 'company-idle-delay)
(if (local-variable-p 'company-idle-delay)
(kill-local-variable 'company-idle-delay)
(setq-local company-idle-delay nil))))
(defun notmuch-address-matching (substring)
"Returns a list of completion candidates matching SUBSTRING.
The candidates are taken from `notmuch-address-completions'."

View file

@ -47,7 +47,13 @@
(defun notmuch-company-setup ()
(company-mode)
(make-local-variable 'company-backends)
(setq company-backends '(notmuch-company)))
(setq company-backends '(notmuch-company))
;; Disable automatic company completion unless an internal
;; completion method is configured. Company completion (using
;; internal completion) can still be accessed via standard company
;; functions, e.g., company-complete.
(unless (eq notmuch-address-command 'internal)
(setq-local company-idle-delay nil)))
;;;###autoload
(defun notmuch-company (command &optional arg &rest _ignore)