unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
From: Austin Clements <amdragon@MIT.EDU>
To: notmuch@notmuchmail.org
Cc: bjonnh-nm@bjonnh.net
Subject: [PATCH 4/4] emacs: Simplify and fix `notmuch-mua-prompt-for-sender'
Date: Thu, 20 Feb 2014 14:16:37 -0500	[thread overview]
Message-ID: <1392923797-17045-5-git-send-email-amdragon@mit.edu> (raw)
In-Reply-To: <1392923797-17045-1-git-send-email-amdragon@mit.edu>

`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, but this has
several problems.  First, 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>".  Second, though less serious, the
prompt specialization means the user can't enter a different name like
they can if their identities have different names.

This patch rewrites `notmuch-mua-prompt-for-sender' to simply prompt
for a full identity, where the list of identities is derived from
either notmuch-identities or the user's Notmuch configuration.

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.
---
 emacs/notmuch-mua.el | 33 +++++++++------------------------
 1 file changed, 9 insertions(+), 24 deletions(-)

diff --git a/emacs/notmuch-mua.el b/emacs/notmuch-mua.el
index f2df770..4a485a4 100644
--- a/emacs/notmuch-mua.el
+++ b/emacs/notmuch-mua.el
@@ -286,30 +286,15 @@ the From: header is already filled in by notmuch."
       (ad-activate 'ido-completing-read)))
 
 (defun notmuch-mua-prompt-for-sender ()
-  (interactive)
-  (let (name addresses one-name-only)
-    ;; If notmuch-identities is non-nil, check if there is a fixed user name.
-    (if notmuch-identities
-	(let ((components (mapcar 'mail-extract-address-components notmuch-identities)))
-	  (setq name          (caar components)
-		addresses     (mapcar 'cadr components)
-		one-name-only (eval
-			       (cons 'and
-				     (mapcar (lambda (identity)
-					       (string-equal name (car identity)))
-					     components)))))
-      ;; If notmuch-identities is nil, use values from the notmuch configuration file.
-      (setq name          (notmuch-user-name)
-	    addresses     (cons (notmuch-user-primary-email) (notmuch-user-other-email))
-	    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)))))
+  "Prompt for a sender from the user's configured identities."
+  (let ((identities (or notmuch-identities
+			(let ((name (notmuch-user-name)))
+			  (mapcar (lambda (addr) (concat name " <" addr ">"))
+				  (cons (notmuch-user-primary-email)
+					(notmuch-user-other-email)))))))
+    (ido-completing-read "Send mail from: " identities
+			 nil nil nil 'notmuch-mua-sender-history
+			 (car identities))))
 
 (put 'notmuch-mua-new-mail 'notmuch-prefix-doc "... and prompt for sender")
 (defun notmuch-mua-new-mail (&optional prompt-for-sender)
-- 
1.8.4.rc3

  parent reply	other threads:[~2014-02-20 19:16 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-20 19:16 [PATCH 0/4] Bug fixes for identity handling in Emacs Austin Clements
2014-02-20 19:16 ` [PATCH 1/4] emacs: Build forwarded message buffer more directly Austin Clements
2014-02-20 19:16 ` [PATCH 2/4] emacs: Fix exception when fetching empty or unconfigured settings Austin Clements
2014-02-20 19:16 ` [PATCH 3/4] emacs: Fix `notmuch-user-other-email' when no other emails are configured Austin Clements
2014-02-20 19:16 ` Austin Clements [this message]
2014-02-20 22:36   ` [PATCH 4/4] emacs: Simplify and fix `notmuch-mua-prompt-for-sender' Mark Walters
2014-02-21  2:17     ` Austin Clements
2014-02-27 18:10     ` [PATCH v2] " Austin Clements
2014-03-01  9:37       ` Mark Walters
2014-03-05  0:07       ` David Bremner
2014-02-22 10:17   ` [PATCH 4/4] " Tomi Ollila
2014-02-22 23:56 ` [PATCH 0/4] Bug fixes for identity handling in Emacs David Bremner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://notmuchmail.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1392923797-17045-5-git-send-email-amdragon@mit.edu \
    --to=amdragon@mit.edu \
    --cc=bjonnh-nm@bjonnh.net \
    --cc=notmuch@notmuchmail.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).