emacs: allow opting out of notmuch's address completion

IMO Notmuch should not override the default completion mechanism by
default, at least not globally. But since users are already used to
this behavior it is probably too late to change it. Do the next best
thing and at least allow users to opt out.
This commit is contained in:
Jonas Bernoulli 2021-01-10 15:01:11 +01:00 committed by David Bremner
parent 9b5fd49ab2
commit 055294454f

View file

@ -54,21 +54,28 @@ If the hash is not present it attempts to load a saved hash."
(defcustom notmuch-address-command 'internal (defcustom notmuch-address-command 'internal
"Determines how address completion candidates are generated. "Determines how address completion candidates are generated.
If it is a string then that string should be an external program If this is a string, then that string should be an external
which must take a single argument (searched string) and output a program, which must take a single argument (searched string)
list of completion candidates, one per line. and output a list of completion candidates, one per line.
Alternatively, it can be the symbol `internal', in which case If this is the symbol `internal', then an implementation is used
internal completion is used; the variable that relies on the \"notmuch address\" command, but does not use
`notmuch-address-internal-completion' can be used to customize any third-party (i.e. \"external\") programs.
this case.
Finally, if this variable is nil then address completion is If this is the symbol `as-is', then Notmuch does not modify the
disabled." value of `message-completion-alist'. This option has to be set to
this value before `notmuch' is loaded, otherwise the modification
to `message-completion-alist' may already have taken place. This
setting obviously does not prevent `message-completion-alist'
from being modified at all; the user or some third-party package
may still modify it.
Finally, if this is nil, then address completion is disabled."
:type '(radio :type '(radio
(const :tag "Use internal address completion" internal) (const :tag "Use internal address completion" internal)
(const :tag "Disable address completion" nil) (string :tag "Use external completion command")
(string :tag "Use external completion command")) (const :tag "Disable address completion" nil)
(const :tag "Use default or third-party mechanism" as-is))
:group 'notmuch-send :group 'notmuch-send
:group 'notmuch-address :group 'notmuch-address
:group 'notmuch-external) :group 'notmuch-external)
@ -160,12 +167,13 @@ matching `notmuch-address-completion-headers-regexp'."
(message "calling notmuch-address-message-insinuate is no longer needed")) (message "calling notmuch-address-message-insinuate is no longer needed"))
(defun notmuch-address-setup () (defun notmuch-address-setup ()
(when (and notmuch-address-use-company (unless (eq notmuch-address-command 'as-is)
(require 'company nil t)) (when (and notmuch-address-use-company
(notmuch-company-setup)) (require 'company nil t))
(cl-pushnew (cons notmuch-address-completion-headers-regexp (notmuch-company-setup))
#'notmuch-address-expand-name) (cl-pushnew (cons notmuch-address-completion-headers-regexp
message-completion-alist :test #'equal)) #'notmuch-address-expand-name)
message-completion-alist :test #'equal)))
(defun notmuch-address-toggle-internal-completion () (defun notmuch-address-toggle-internal-completion ()
"Toggle use of internal completion for current buffer. "Toggle use of internal completion for current buffer.