I <sandra.s...@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.s...@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 _______________________________________________ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch