In order to select a From address, the user simply presses M instead of
m to begin composing a message. By default the list of names/addresses
to be used during completion will be automatically generated by the
settings in the notmuch configuration file. The user can customize
the notmuch-identities variable to provide an alternate list.
 emacs/notmuch-hello.el |    3 ++-
 emacs/notmuch-mua.el   |   40 ++++++++++++++++++++++++++++++++++++++--
 emacs/notmuch.el       |    3 ++-
 3 files changed, 42 insertions(+), 4 deletions(-)

diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el
index e58dd24..5f3bcc8 100644
--- a/emacs/notmuch-hello.el
+++ b/emacs/notmuch-hello.el
@@ -298,7 +298,8 @@ should be. Returns a cons cell `(tags-per-line width)'."
     (define-key map "=" 'notmuch-hello-update)
     (define-key map "G" 'notmuch-hello-poll-and-update)
     (define-key map (kbd "<C-tab>") 'widget-backward)
-    (define-key map "m" 'notmuch-mua-mail)
+    (define-key map "m" 'notmuch-mua-new-mail)
+    (define-key map "M" 'notmuch-mua-new-mail-prompt-for-sender)
     (define-key map "s" 'notmuch-hello-goto-search)
   "Keymap for \"notmuch hello\" buffers.")
diff --git a/emacs/notmuch-mua.el b/emacs/notmuch-mua.el
index dc7b386..76bcba4 100644
--- a/emacs/notmuch-mua.el
+++ b/emacs/notmuch-mua.el
@@ -118,8 +118,7 @@ list."

 (defun notmuch-mua-mail (&optional to subject other-headers continue
                                   switch-function yank-action send-actions)
-  "Invoke the notmuch mail composition window."
-  (interactive)
+  "Invoke the notmuch mail composition window with optional headers."

   (when notmuch-mua-user-agent-function
     (let ((user-agent (funcall notmuch-mua-user-agent-function)))
@@ -138,6 +137,43 @@ list."


+(defcustom notmuch-identities nil
+  "Identities that can be used as the From: address when composing a new 
+If this variable is left unset, then a list will be constructed from the
+name and addresses configured in the notmuch configuration file."
+  :group 'notmuch
+  :type '(repeat string))
+(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)))))
+(defun notmuch-mua-new-mail-from (&optional sender)
+  (if sender
+      (notmuch-mua-mail nil nil (list (cons 'from sender)))
+    (notmuch-mua-mail)))
+(defvar notmuch-mua-sender-history nil)
+(defun notmuch-mua-new-mail (&optional prompt-for-sender)
+  "Begin composing a new email with notmuch."
+  (interactive "P")
+  (if prompt-for-sender
+      (let* ((collection (notmuch-mua-sender-collection))
+            (sender (ido-completing-read "Send mail From: " collection
+                                         nil 'confirm nil 
'notmuch-mua-sender-history (car collection))))
+       (notmuch-mua-new-mail-from sender))
+    (notmuch-mua-mail)))
+(defun notmuch-mua-new-mail-prompt-for-sender ()
+  "Begin composing a new email with notmuch, and prompt for the From: address."
+  (interactive)
+  (notmuch-mua-new-mail t))
 (defun notmuch-mua-send-and-exit (&optional arg)
   (interactive "P")
   (message-send-and-exit arg))
diff --git a/emacs/notmuch.el b/emacs/notmuch.el
index 64f72a0..0c1c8d0 100644
--- a/emacs/notmuch.el
+++ b/emacs/notmuch.el
@@ -204,7 +204,8 @@ For a mouse binding, return nil."
     (define-key map "p" 'notmuch-search-previous-thread)
     (define-key map "n" 'notmuch-search-next-thread)
     (define-key map "r" 'notmuch-search-reply-to-thread)
-    (define-key map "m" 'notmuch-mua-mail)
+    (define-key map "m" 'notmuch-mua-new-mail)
+    (define-key map "M" 'notmuch-mua-new-mail-prompt-for-sender)
     (define-key map "s" 'notmuch-search)
     (define-key map "o" 'notmuch-search-toggle-order)
     (define-key map "c" 'notmuch-search-stash-map)

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: not available

Reply via email to