I <sandra.snan at handgranat.org> wrote earlier:
> 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.
That?s not right, I sent the same patch twice.
Here?s the one for just compose-mail because the other one has problems with
non-ascii characters. I guess I?d need to re-implement more and more of notmuch
reply in the elisp. I started doing that but I figure that I?d send these
patches and see if it was something you like at all.
Signed-off-by: Sandra Snan <sandra.snan at handgranat.org>
---
emacs/notmuch.el | 61 ++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 48 insertions(+), 13 deletions(-)
diff --git a/emacs/notmuch.el b/emacs/notmuch.el
index 117a365..baafac8 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,51 @@ 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)
+ (with-temp-buffer
+ (call-process notmuch-command nil t nil "reply" query-string)
+ (let ((body
+ (progn (goto-char (point-min))
+ (if (re-search-forward "^$" nil t)
+ (buffer-substring-no-properties (+ (point) 1) (point-max))
+ ""))))
+ (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 +1264,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 +1686,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