mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-28 13:44:12 +01:00
emacs: Simplify and fix `notmuch-mua-prompt-for-sender'
`notmuch-mua-prompt-for-sender' is over-engineered and often wrong. It attempts to detect when all identities have the same name and specialize the prompt to just the email address part. However, to do this it uses `mail-extract-address-components', which is meant for displaying email addresses, not general-purpose parsing, and hence performs many canonicalizations that can interfere with this use. For example, configuring notmuch-identities to ("Austin <austin@example.com>"), will cause `notmuch-mua-prompt-for-sender' to lose the name part entirely and return " <austin@example.com>". This patch rewrites `notmuch-mua-prompt-for-sender' to simply prompt for a full identity when notmuch-identities is configured, or to prompt for a sender address when it isn't. The original code also did several strange things, like using `eval' and specifying that this function was interactive. As a side-effect, this patch fixes these problems. And it adds a docstring.
This commit is contained in:
parent
7102b8c782
commit
ed720f4e6d
1 changed files with 13 additions and 24 deletions
|
@ -286,30 +286,19 @@ the From: header is already filled in by notmuch."
|
||||||
(ad-activate 'ido-completing-read)))
|
(ad-activate 'ido-completing-read)))
|
||||||
|
|
||||||
(defun notmuch-mua-prompt-for-sender ()
|
(defun notmuch-mua-prompt-for-sender ()
|
||||||
(interactive)
|
"Prompt for a sender from the user's configured identities."
|
||||||
(let (name addresses one-name-only)
|
|
||||||
;; If notmuch-identities is non-nil, check if there is a fixed user name.
|
|
||||||
(if notmuch-identities
|
(if notmuch-identities
|
||||||
(let ((components (mapcar 'mail-extract-address-components notmuch-identities)))
|
(ido-completing-read "Send mail from: " notmuch-identities
|
||||||
(setq name (caar components)
|
nil nil nil 'notmuch-mua-sender-history
|
||||||
addresses (mapcar 'cadr components)
|
(car notmuch-identities))
|
||||||
one-name-only (eval
|
(let* ((name (notmuch-user-name))
|
||||||
(cons 'and
|
(addrs (cons (notmuch-user-primary-email)
|
||||||
(mapcar (lambda (identity)
|
(notmuch-user-other-email)))
|
||||||
(string-equal name (car identity)))
|
(address
|
||||||
components)))))
|
(ido-completing-read (concat "Sender address for " name ": ") addrs
|
||||||
;; If notmuch-identities is nil, use values from the notmuch configuration file.
|
nil nil nil 'notmuch-mua-sender-history
|
||||||
(setq name (notmuch-user-name)
|
(car addrs))))
|
||||||
addresses (cons (notmuch-user-primary-email) (notmuch-user-other-email))
|
(concat name " <" address ">"))))
|
||||||
one-name-only t))
|
|
||||||
;; Now prompt the user, either for an email address only or for a full identity.
|
|
||||||
(if one-name-only
|
|
||||||
(let ((address
|
|
||||||
(ido-completing-read (concat "Sender address for " name ": ") addresses
|
|
||||||
nil nil nil 'notmuch-mua-sender-history (car addresses))))
|
|
||||||
(concat name " <" address ">"))
|
|
||||||
(ido-completing-read "Send mail From: " notmuch-identities
|
|
||||||
nil nil nil 'notmuch-mua-sender-history (car notmuch-identities)))))
|
|
||||||
|
|
||||||
(put 'notmuch-mua-new-mail 'notmuch-prefix-doc "... and prompt for sender")
|
(put 'notmuch-mua-new-mail 'notmuch-prefix-doc "... and prompt for sender")
|
||||||
(defun notmuch-mua-new-mail (&optional prompt-for-sender)
|
(defun notmuch-mua-new-mail (&optional prompt-for-sender)
|
||||||
|
|
Loading…
Reference in a new issue