X-Git-Url: https://git.notmuchmail.org/git?a=blobdiff_plain;f=notmuch.el;h=ab56f4803faca8efe5188a441c66b65f8fed4ee6;hb=bc69bf09cb8c989f4b3b8116f0907b7618000299;hp=f0db47c3a5d61a705a3ecc6356e67fde24c309ce;hpb=f99b46c60734b5b71bedcb1434cdd6dc24080bc6;p=notmuch diff --git a/notmuch.el b/notmuch.el index f0db47c3..ab56f480 100644 --- a/notmuch.el +++ b/notmuch.el @@ -90,8 +90,10 @@ (define-key map "+" 'notmuch-show-add-tag) (define-key map "x" 'notmuch-show-archive-thread-then-exit) (define-key map "a" 'notmuch-show-archive-thread) - (define-key map "p" 'notmuch-show-previous-message) - (define-key map "n" 'notmuch-show-next-message) + (define-key map "P" 'notmuch-show-previous-message) + (define-key map "N" 'notmuch-show-next-message) + (define-key map "p" 'notmuch-show-previous-open-message) + (define-key map "n" 'notmuch-show-next-open-message) (define-key map (kbd "DEL") 'notmuch-show-rewind) (define-key map " " 'notmuch-show-advance-and-archive) map) @@ -523,7 +525,7 @@ Returns nil if already on the last message in the buffer." nil)) (defun notmuch-show-next-message () - "Advance to the beginning of the next message in the buffer. + "Advance to the next message (whether open or closed) and remove the unread tag from that message. Moves to the last visible character of the current message if @@ -548,7 +550,7 @@ message if already within the last message in the buffer." (point)))) (defun notmuch-show-next-unread-message () - "Advance to the beginning of the next unread message in the buffer. + "Advance to the next unread message. Moves to the last visible character of the current message if there are no more unread messages past the current point." @@ -561,17 +563,22 @@ there are no more unread messages past the current point." (notmuch-show-mark-read)) (defun notmuch-show-next-open-message () - "Advance to the next open message (that is, body is not invisible)." + "Advance to the next open message (that is, body is visible). + +Moves to the last visible character of the final message in the buffer +if there are no more open messages." + (interactive) (while (and (notmuch-show-next-message-without-marking-read) (not (notmuch-show-message-open-p)))) (notmuch-show-mark-read)) -(defun notmuch-show-previous-message () +(defun notmuch-show-previous-message-without-marking-read () "Backup to the beginning of the previous message in the buffer. If within a message rather than at the beginning of it, then -simply move to the beginning of the current message." - (interactive) +simply move to the beginning of the current message. + +Returns nil if already on the first message in the buffer." (let ((start (point))) (notmuch-show-move-to-current-message-summary-line) (if (not (< (point) start)) @@ -580,8 +587,22 @@ simply move to the beginning of the current message." (re-search-backward notmuch-show-message-begin-regexp nil t) (re-search-backward notmuch-show-message-begin-regexp nil t) (notmuch-show-move-to-current-message-summary-line) - )) - (recenter 0))) + (recenter 0) + (if (= (point) start) + nil + t)) + (recenter 0) + nil))) + +(defun notmuch-show-previous-message () + "Backup to the previous message (whether open or closed) +and remove the unread tag from that message. + +If within a message rather than at the beginning of it, then +simply move to the beginning of the current message." + (interactive) + (notmuch-show-previous-message-without-marking-read) + (notmuch-show-mark-read)) (defun notmuch-show-find-previous-message () "Returns the position of the previous message in the buffer. @@ -594,9 +615,19 @@ it." ; Looks like we have to use both. (save-excursion (save-window-excursion - (notmuch-show-previous-message) + (notmuch-show-previous-message-without-marking-read) (point)))) +(defun notmuch-show-previous-open-message () + "Backup to previous open message (that is, body is visible). + +Moves to the first message in the buffer if there are no previous +open messages." + (interactive) + (while (and (notmuch-show-previous-message-without-marking-read) + (not (notmuch-show-message-open-p)))) + (notmuch-show-mark-read)) + (defun notmuch-show-rewind () "Backup through the thread, (reverse scrolling compared to \\[notmuch-show-advance-and-archive]). @@ -616,7 +647,13 @@ any effects from previous calls to (condition-case nil (scroll-down nil) ((beginning-of-buffer) nil)) - (goto-char (window-start))) + (goto-char (window-start)) + ; Because count-lines counts invivisible lines, we may have + ; scrolled to far. If so., notice this and fix it up. + (if (< (point) previous) + (progn + (goto-char previous) + (recenter 0)))) (notmuch-show-previous-message)))) (defun notmuch-show-advance-and-archive () @@ -1405,8 +1442,7 @@ which match the current search terms." (defun notmuch-search-remove-tag (tag) "Remove a tag from the currently selected thread. -The tag is removed from messages in the currently selected thread -which match the current search terms." +The tag is removed from all messages in the currently selected thread." (interactive (list (notmuch-select-tag-with-completion "Tag to remove: " (notmuch-search-find-thread-id)))) (notmuch-call-notmuch-process "tag" (concat "-" tag) (notmuch-search-find-thread-id))