[notmuch] [PATCH] To use compose-mail and mail-citation-hook
Sandra Snan
sandra.snan at handgranat.org
Tue Mar 16 12:46:39 PDT 2010
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 version of the patch also tries to yank the body text, calling mail-citation-hook as it does so it works with mu-cite, supercite, trivialcite and so on. I guess I started yak-shaving a bit too much because I kinda began to reconstruct the output of notmuch reply via emacs lisp.
I’ll send another e-mail with the patch for just compose-mail without the mail-citation-hook, too. These patches are mutually exclusive. I’m not used to git so I hope this is all right.
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
More information about the notmuch
mailing list