From aab9b5cf471e20531f09f9619c542f7cad7fbe62 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Wed, 4 Nov 2009 08:42:38 -0800 Subject: [PATCH] notmuch.el: Start implementing the magic space bar. Currently this will either advance by screenfuls, or to the next message if it's already within a screenful, and will mark each message read as it is left. It doesn't yet complete the magic by archiving the messages nor by advancing to the next thread in the search. --- notmuch.el | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/notmuch.el b/notmuch.el index a6cb8236..062beafc 100644 --- a/notmuch.el +++ b/notmuch.el @@ -39,6 +39,7 @@ (define-key map "x" 'kill-this-buffer) (define-key map "+" 'notmuch-show-add-tag) (define-key map "-" 'notmuch-show-remove-tag) + (define-key map " " 'notmuch-show-advance-marking-read) map) "Keymap for \"notmuch show\" buffers.") (fset 'notmuch-show-mode-map notmuch-show-mode-map) @@ -144,6 +145,19 @@ last message in the buffer." (notmuch-show-move-to-current-message-summary-line) (recenter 0)) +(defun notmuch-show-find-next-message () + "Returns the position of the next message in the buffer. + +Or the beginning of the current message if already within the last +message in the buffer." + ; save-excursion doesn't save our window position + ; save-window-excursion doesn't save point + ; Looks like we have to use both. + (save-excursion + (save-window-excursion + (notmuch-show-next-message) + (point)))) + (defun notmuch-show-previous-message () "Backup to the beginning of the previous message in the buffer. @@ -162,12 +176,29 @@ simply move to the beginning of the current message." (recenter 0))) (defun notmuch-show-mark-read-then-next-message () - "Remove uread tag from current message, then advance to next message." + "Remove unread tag from current message, then advance to next message." (interactive) (if (member "unread" (notmuch-show-get-tags)) (notmuch-show-remove-tag "unread")) (notmuch-show-next-message)) +(defun notmuch-show-advance-marking-read () + "Advance through buffer, marking messages as read. + +This command is intended to be one of the simplest ways to +process a thread of email. It does the following: + +If the current message in the thread is not yet fully visible, +scroll by a near screenful to read more of the message. + +Otherwise, (the end of the current message is already within the +current window), remove the \"unread\" tag from the current +message and advance to the next message." + (interactive) + (if (< (notmuch-show-find-next-message) (window-end)) + (notmuch-show-mark-read-then-next-message) + (scroll-up nil))) + (defun notmuch-show-markup-citations-region (beg end) (goto-char beg) (beginning-of-line)