[PATCH 2/2] emacs: address: allow internal completion on an individual basis

Mark Walters markwalters1009 at gmail.com
Fri May 20 13:13:03 PDT 2016


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.
---
 emacs/notmuch-address.el | 19 ++++++++++++++++---
 emacs/notmuch-company.el |  8 +++++++-
 2 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/emacs/notmuch-address.el b/emacs/notmuch-address.el
index 3e7bdab..b5bd151 100644
--- a/emacs/notmuch-address.el
+++ b/emacs/notmuch-address.el
@@ -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'."
diff --git a/emacs/notmuch-company.el b/emacs/notmuch-company.el
index dcb59cd..5febc49 100644
--- a/emacs/notmuch-company.el
+++ b/emacs/notmuch-company.el
@@ -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)
-- 
2.1.4



More information about the notmuch mailing list