:group 'notmuch-send
:group 'notmuch-external)
+(defcustom notmuch-address-post-completion-functions nil
+ "Functions called after completing address.
+
+The completed address is passed as an argument to each function.
+Note that this hook will be invoked for completion in headers
+matching `notmuch-address-completion-headers-regexp'.
+"
+ :type 'hook
+ :group 'notmuch-address
+ :group 'notmuch-hooks)
+
(defun notmuch-address-selection-function (prompt collection initial-input)
"Call (`completing-read'
PROMPT COLLECTION nil nil INITIAL-INPUT 'notmuch-address-history)"
: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)
+ (notmuch-setq-local notmuch-address-command 'internal))
+ (if (boundp 'company-idle-delay)
+ (if (local-variable-p 'company-idle-delay)
+ (kill-local-variable 'company-idle-delay)
+ (notmuch-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'."
(t
(funcall notmuch-address-selection-function
(format "Address (%s matches): " num-options)
- (cdr options) (car options))))))
+ ;; We put the first match as the initial
+ ;; input; we put all the matches as
+ ;; possible completions, moving the
+ ;; first match to the end of the list
+ ;; makes cursor up/down in the list work
+ ;; better.
+ (append (cdr options) (list (car options)))
+ (car options))))))
(if chosen
(progn
(push chosen notmuch-address-history)
(delete-region beg end)
- (insert chosen))
+ (insert chosen)
+ (run-hook-with-args 'notmuch-address-post-completion-functions chosen))
(message "No matches.")
(ding))))
(t nil)))