aboutsummaryrefslogtreecommitdiffhomepage
path: root/emacs/notmuch.el
diff options
context:
space:
mode:
authorGravatar David Edmondson <dme@dme.org>2011-12-28 08:29:58 +0000
committerGravatar David Bremner <bremner@debian.org>2012-01-15 22:32:14 -0400
commitef5c1d73f8e736425682dc4db0ce285e6e2de0f5 (patch)
tree41ef99b2df4f97752700eff04001a8f07f04badd /emacs/notmuch.el
parent4b256ff557e924fbaffca144d25a9d5f92026146 (diff)
emacs: Cycle through notmuch buffers rather than jumping to the last.
As suggested by j4ni in #notmuch, rename `notmuch-jump-to-recent-buffer' as `notmuch-cycle-notmuch-buffers' and have it behave accordingly. Consider `message-mode' buffers to be of interest.
Diffstat (limited to 'emacs/notmuch.el')
-rw-r--r--emacs/notmuch.el42
1 files changed, 30 insertions, 12 deletions
diff --git a/emacs/notmuch.el b/emacs/notmuch.el
index d952c410..ef4dcc78 100644
--- a/emacs/notmuch.el
+++ b/emacs/notmuch.el
@@ -1069,21 +1069,39 @@ current search results AND that are tagged with the given tag."
(interactive)
(notmuch-hello))
+(defun notmuch-interesting-buffer (b)
+ "Is the current buffer of interest to a notmuch user?"
+ (with-current-buffer b
+ (memq major-mode '(notmuch-show-mode
+ notmuch-search-mode
+ notmuch-hello-mode
+ message-mode))))
+
;;;###autoload
-(defun notmuch-jump-to-recent-buffer ()
- "Jump to the most recent notmuch buffer (search, show or hello).
+(defun notmuch-cycle-notmuch-buffers ()
+ "Cycle through any existing notmuch buffers (search, show or hello).
-If no recent buffer is found, run `notmuch'."
+If the current buffer is the only notmuch buffer, bury it. If no
+notmuch buffers exist, run `notmuch'."
(interactive)
- (let ((last
- (loop for buffer in (buffer-list)
- if (with-current-buffer buffer
- (memq major-mode '(notmuch-show-mode
- notmuch-search-mode
- notmuch-hello-mode)))
- return buffer)))
- (if last
- (switch-to-buffer last)
+
+ (let (start first)
+ ;; If the current buffer is a notmuch buffer, remember it and then
+ ;; bury it.
+ (when (notmuch-interesting-buffer (current-buffer))
+ (setq start (current-buffer))
+ (bury-buffer))
+
+ ;; Find the first notmuch buffer.
+ (setq first (loop for buffer in (buffer-list)
+ if (notmuch-interesting-buffer buffer)
+ return buffer))
+
+ (if first
+ ;; If the first one we found is any other than the starting
+ ;; buffer, switch to it.
+ (unless (eq first start)
+ (switch-to-buffer first))
(notmuch))))
(setq mail-user-agent 'notmuch-user-agent)