As I wrote in the other mail, Emacs has an interface called compose-mail which 
uses whatever mailing mode that you?ve selected in mail-user-agent
so if you like the message mode that?s been hard-coded into notmuch.el, (setq 
mail-user-agent 'message-user-agent) and this will use that.

This is a simpler patch that uses as much of the output of notmuch reply as 
possible, at the expense of emacs more flexible hooks and citing. Both of the 
patches (unfortunately) still just call message-modes signature function 
without one of the standard hooks and wrappers, because I haven?t looked into 
that yet.

Sandra

Signed-off-by: Sandra Snan <sandra.snan at handgranat.org>
---
 emacs/notmuch.el |   66 +++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 53 insertions(+), 13 deletions(-)

diff --git a/emacs/notmuch.el b/emacs/notmuch.el
index 117a365..68e2d43 100644
--- a/emacs/notmuch.el
+++ b/emacs/notmuch.el
@@ -49,7 +49,7 @@

 (require 'cl)
 (require 'mm-view)
-(require 'message)
+(require 'message) ; not sure if this is needed now

 (defvar notmuch-show-stash-map
   (let ((map (make-sparse-keymap)))
@@ -76,7 +76,7 @@
     (define-key map (kbd "M-TAB") 'notmuch-show-previous-button)
     (define-key map (kbd "TAB") 'notmuch-show-next-button)
     (define-key map "s" 'notmuch-search)
-    (define-key map "m" 'message-mail)
+    (define-key map "m" 'compose-mail)
     (define-key map "f" 'notmuch-show-forward-current)
     (define-key map "r" 'notmuch-show-reply)
     (define-key map "|" 'notmuch-show-pipe-message)
@@ -435,16 +435,56 @@ buffer."
       mm-handle (> (notmuch-count-attachments mm-handle) 1))))
   (message "Done"))

-(defun notmuch-reply (query-string)
-  (switch-to-buffer (generate-new-buffer "notmuch-draft"))
-  (call-process notmuch-command nil t nil "reply" query-string)
-  (message-insert-signature)
+
+(defun jump-to-end-of-header ()
+  (re-search-forward "^[^:]*.: \\|^$")
+  (beginning-of-line)
+  (backward-char)
+  (point))
+
+(defun notmuch-regex-header (re)
   (goto-char (point-min))
-  (if (re-search-forward "^$" nil t)
-      (progn
-       (insert "--text follows this line--")
-       (forward-line)))
-  (message-mode))
+  (if (re-search-forward re nil t)
+      (buffer-substring-no-properties (point) (jump-to-end-of-header))
+    ""))
+
+(defun notmuch-other-headers (al)
+  (beginning-of-line)
+  (if (eq (point-at-bol) (point-at-eol))
+      al
+    (if (re-search-forward "^[^:]*.: \\|^$" nil t)
+       (notmuch-other-headers
+         (let ((header (buffer-substring-no-properties (point-at-bol) (- 
(point) 2)))
+               (header-value (buffer-substring-no-properties (point) 
(jump-to-end-of-header))))
+           (forward-char)
+           (if (or (string= "To" header) (string= "Subject" header))
+               al
+             (acons
+              header
+              header-value
+              al))))
+      al)))
+
+(defun notmuch-reply (query-string)
+  (let ((body
+        (save-excursion
+          (let ((filename (notmuch-show-get-filename)))
+            (with-temp-buffer
+              (insert-file-contents filename)
+              (set-mark (point-max))
+              (goto-char (point-min))
+              (run-hooks 'mail-citation-hook)
+              (message-insert-signature) ;; FIXME is there a standard hook for 
signatures, too?
+              (buffer-substring (point-min) (point-max)))))))
+    (with-temp-buffer
+      (call-process notmuch-command nil t nil "reply" query-string)
+      (compose-mail
+       (notmuch-regex-header "^To: ")
+       (notmuch-regex-header "^Subject: ")
+       (progn (goto-char (point-min))
+             (notmuch-other-headers '())))
+      (goto-char (point-max))
+      (insert body))))

 (defun notmuch-show-reply ()
   "Begin composing a reply to the current message in a new buffer."
@@ -1229,7 +1269,7 @@ matching this search term are shown if non-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" 'message-mail)
+    (define-key map "m" 'compose-mail)
     (define-key map "s" 'notmuch-search)
     (define-key map "o" 'notmuch-search-toggle-order)
     (define-key map "=" 'notmuch-search-refresh-view)
@@ -1651,7 +1691,7 @@ current search results AND that are tagged with the given 
tag."
     (define-key map "?" 'notmuch-help)
     (define-key map "x" 'kill-this-buffer)
     (define-key map "q" 'kill-this-buffer)
-    (define-key map "m" 'message-mail)
+    (define-key map "m" 'compose-mail)
     (define-key map "e" 'notmuch-folder-show-empty-toggle)
     (define-key map ">" 'notmuch-folder-last)
     (define-key map "<" 'notmuch-folder-first)
-- 
1.7.0

Reply via email to