Most of the time, every entry in the list of identities has the same user name
part. It can then be filled in automatically, and the user can only be prompted
for the email address, which makes the interface much cleaner.
Hi Jameson,

Once again, a very good suggestion. I had doubts at first (because I sometimes
send mails using a nickname or on behalf of a group using that group's name),
but then I noticed I already had only one name in notmuch-identities :) So
here's a patch.

It handle 3 different cases:
- notmuch-identities is not set --> only one name
- notmuch-identities set with only one name
- notmuch-identities set with several different names

I tried to make it as compact and readable as possible, so the first two cases
are handled by a single call to ido-completing-read. But there is probably still
room for improvements: reviews, comments and suggestions are welcome.


 emacs/notmuch-mua.el |   33 +++++++++++++++++++++++----------
 1 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/emacs/notmuch-mua.el b/emacs/notmuch-mua.el
index 556d2bf..274c5da 100644
--- a/emacs/notmuch-mua.el
+++ b/emacs/notmuch-mua.el
@@ -162,20 +162,33 @@ the From: header is already filled in by notmuch."
   :group 'notmuch
   :type 'boolean)

-(defun notmuch-mua-sender-collection ()
-  (if notmuch-identities
-      notmuch-identities
-    (mapcar (lambda (address)
-             (concat (notmuch-user-name) " <" address ">"))
-           (cons (notmuch-user-primary-email) (notmuch-user-other-email)))))
 (defvar notmuch-mua-sender-history nil)

 (defun notmuch-mua-prompt-for-sender ()
-  (let ((collection (notmuch-mua-sender-collection)))
-    (ido-completing-read "Send mail From: " collection
-                        nil 'confirm nil 'notmuch-mua-sender-history (car 
+  (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 
+         (setq name          (caar components)
+               addresses     (mapcar 'cadr components)
+               one-name-only (eval
+                              (cons 'and
+                                    (mapcar (lambda (identity)
+                                              (string-equal name (car 
+                                            components)))))
+      ;; If notmuch-identities is nil, use values from the notmuch 
configuration file.
+      (setq name          (notmuch-user-name)
+           addresses     (cons (notmuch-user-primary-email) 
+           one-name-only t))
+    ;; Now prompt the user, either for an email address only or for a full 
+    (if one-name-only
+       (let ((address
+              (ido-completing-read (concat "Sender address for " name ": ") 
+                                   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 

 (defun notmuch-mua-new-mail (&optional prompt-for-sender)
   "Invoke the notmuch mail composition window.

Reply via email to