[notmuch] [PATCH] notmuch-show-get-header: new function; return alist of parsed header fields.

David Bremner david at tethera.net
Sat Dec 5 06:05:51 PST 2009

This function parses the displayed message to recover header
fields. It uses mailheader.el to do the actual header parsing, after
preprocessing to remove indentation.  It relies on the variables
notmuch-show-message-begin-regexp, notmuch-show-header-begin-regexp,
and notmuch-show-message-end-regexp.

This is another patch needed for org-mode links. Really I just need
some way to get the author and subject of the current message in
notmuch-show-mode.  It seems like a generally useful function,
although of course it would be more efficient to cache these headers
somewhere if the function is being invoked many times.

 notmuch.el |   24 ++++++++++++++++++++++++
 1 files changed, 24 insertions(+), 0 deletions(-)

diff --git a/notmuch.el b/notmuch.el
index f7048d5..cf472f7 100644
--- a/notmuch.el
+++ b/notmuch.el
@@ -203,6 +203,30 @@ Unlike builtin `previous-line' this version accepts no arguments."
     (re-search-forward notmuch-show-tags-regexp)
     (split-string (buffer-substring (match-beginning 1) (match-end 1)))))
+(defun notmuch-show-get-header ()
+  "Retrieve and parse the header from the current message. Returns an alist with of (header . value) 
+where header is a symbol and value is a string.  The summary from notmuch-show is returned as the 
+pseudoheader summary"
+  (require 'mailheader)
+  (save-excursion
+    (beginning-of-line)
+    (if (not (looking-at notmuch-show-message-begin-regexp))
+	(re-search-backward notmuch-show-message-begin-regexp))
+    (re-search-forward (concat notmuch-show-header-begin-regexp "\n[[:space:]]*\\(.*\\)\n"))
+    (let* ((summary (buffer-substring-no-properties (match-beginning 1) (match-end 1)))
+	  (beg (point)))
+      (re-search-forward notmuch-show-header-end-regexp)
+      (let ((text (buffer-substring beg (match-beginning 0))))
+	(with-temp-buffer
+	  (insert text)
+	  (goto-char (point-min))
+	  (while (looking-at "\\([[:space:]]*\\)[A-Za-z][-A-Za-z0-9]*:")
+	    (delete-region (match-beginning 1) (match-end 1))
+	    (forward-line)
+	    )
+	  (goto-char (point-min))
+	  (cons (cons 'summary summary) (mail-header-extract-no-properties)))))))
 (defun notmuch-show-add-tag (&rest toadd)
   "Add a tag to the current message."

More information about the notmuch mailing list