emacs: address: allow internal completion on an individual basis
authorMark Walters <markwalters1009@gmail.com>
Fri, 20 May 2016 20:13:03 +0000 (21:13 +0100)
committerDavid Bremner <david@tethera.net>
Sun, 4 Sep 2016 11:07:59 +0000 (08:07 -0300)
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
emacs/notmuch-company.el

index c6f5f11136093c8d857e236da4525d414cdf8225..10eaab196267bbad86c967e1318ea6083a577b44 100644 (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'."
index 610e223deffc6eec337da69e28a3ecc5be8881bd..168315ff225fb68034979ad38cab1ebd976cde33 100644 (file)
 (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)