notmuch.el: Make notmuch-show buffer name first subject, instead of thread-id (supers...
authorJesse Rosenthal <jrosenthal@jhu.edu>
Sat, 6 Mar 2010 14:20:21 +0000 (09:20 -0500)
committerCarl Worth <cworth@cworth.org>
Wed, 7 Apr 2010 17:40:06 +0000 (10:40 -0700)
Change the buffer name to a uniquified subject of the thread (i.e. the
subject of the first message in the thread) instead of the thread-id. This
is more meaningful to the user, and will make it easier to scroll through
numerous open buffers.

Note that this patch adds an optional `buffer-name' argument to notmuch
show.

Signed-off-by: Jesse Rosenthal <jrosenthal@jhu.edu>
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
emacs/notmuch-show.el
emacs/notmuch.el

index cc1f9053c4266f4fb6f0943f1bfcaa8999162eff..ed95afbd25673c77a4b67c329730dacac1982020 100644 (file)
@@ -959,7 +959,7 @@ All currently available key bindings:
          (lambda()
            (hl-line-mode 1) ))
 
-(defun notmuch-show (thread-id &optional parent-buffer query-context)
+(defun notmuch-show (thread-id &optional parent-buffer query-context buffer-name)
   "Run \"notmuch show\" with the given thread ID and display results.
 
 The optional PARENT-BUFFER is the notmuch-search buffer from
@@ -967,9 +967,14 @@ which this notmuch-show command was executed, (so that the next
 thread from that buffer can be show when done with this one).
 
 The optional QUERY-CONTEXT is a notmuch search term. Only messages from the thread
-matching this search term are shown if non-nil. "
+matching this search term are shown if non-nil.
+
+The optional BUFFER-NAME provides the neame of the buffer in which the message thread is shown. If it is nil (which occurs when the command is called interactively) the argument to the function is used. "
   (interactive "sNotmuch show: ")
-  (let ((buffer (get-buffer-create (concat "*notmuch-show-" thread-id "*"))))
+  (when (null buffer-name)
+    (setq buffer-name (concat "*notmuch-" thread-id "*")))
+  (let* ((thread-buffer-name (generate-new-buffer-name buffer-name))
+        (buffer (get-buffer-create thread-buffer-name)))
     (switch-to-buffer buffer)
     (notmuch-show-mode)
     (set (make-local-variable 'notmuch-show-parent-buffer) parent-buffer)
index 9ff376786c476cd17ea8783fbe8a4e1f58baf3cc..b32230e03672cd5bb6283e0469bf425d40f9861f 100644 (file)
@@ -411,9 +411,19 @@ Complete list of currently available key bindings:
 (defun notmuch-search-show-thread ()
   "Display the currently selected thread."
   (interactive)
-  (let ((thread-id (notmuch-search-find-thread-id)))
+  (let ((thread-id (notmuch-search-find-thread-id))
+       (subject (notmuch-search-find-subject))
+       buffer-name)
+    (when (string-match "^[ \t]*$" subject)
+      (setq subject "[No Subject]"))
+    (setq buffer-name (concat "*"
+                             (truncate-string-to-width subject 32 nil nil t)
+                             "*"))
     (if (> (length thread-id) 0)
-       (notmuch-show thread-id (current-buffer) notmuch-search-query-string)
+       (notmuch-show thread-id
+                     (current-buffer)
+                     notmuch-search-query-string
+                     buffer-name)
       (error "End of search results"))))
 
 (defun notmuch-search-reply-to-thread ()