aboutsummaryrefslogtreecommitdiffhomepage
path: root/emacs
diff options
context:
space:
mode:
authorGravatar Austin Clements <amdragon@MIT.EDU>2012-02-21 10:42:31 -0500
committerGravatar David Bremner <bremner@debian.org>2012-02-25 10:35:08 -0400
commit4d77f18b1dbf4e6261b3d16cbbb50cb2127ebccf (patch)
tree129ec879e4c328e40dbdee8b478e480d05248d43 /emacs
parent2f86290aaf6e4b0de54ea75ca17ce129bfbf3730 (diff)
emacs: When refreshing a show buffer, only mark read when resetting state
If we retain state while refreshing a show buffer, it should not mark any messages read since it's not a navigation operation (it especially shouldn't mark the first message matching the query read, which is what it did previously). If the user or caller requests that refresh reset the state of the buffer, then we consider that a navigation operation, so we do mark the message under point after the refresh read. This is implemented by moving responsibility for initial positioning and read-marking out of notmuch-show-worker and into its caller. Since notmuch-show-worker is now exclusively about building the show buffer, we rename it to notmuch-show-build-buffer.
Diffstat (limited to 'emacs')
-rw-r--r--emacs/notmuch-show.el26
1 files changed, 15 insertions, 11 deletions
diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
index aa98eff8..6d24ed02 100644
--- a/emacs/notmuch-show.el
+++ b/emacs/notmuch-show.el
@@ -1080,9 +1080,14 @@ function is used."
(setq notmuch-show-thread-id thread-id
notmuch-show-parent-buffer parent-buffer
notmuch-show-query-context query-context)
- (notmuch-show-worker)))
+ (notmuch-show-build-buffer)
-(defun notmuch-show-worker ()
+ ;; Move to the first open message and mark it read
+ (if (notmuch-show-message-visible-p)
+ (notmuch-show-mark-read)
+ (notmuch-show-next-open-message))))
+
+(defun notmuch-show-build-buffer ()
(let ((inhibit-read-only t))
(notmuch-show-mode)
@@ -1109,14 +1114,8 @@ function is used."
(run-hooks 'notmuch-show-hook))
- ;; Move straight to the first open message
- (unless (notmuch-show-message-visible-p)
- (notmuch-show-next-open-message))
-
;; Set the header line to the subject of the first open message.
- (setq header-line-format (notmuch-show-strip-re (notmuch-show-get-pretty-subject)))
-
- (notmuch-show-mark-read)))
+ (setq header-line-format (notmuch-show-strip-re (notmuch-show-get-pretty-subject)))))
(defun notmuch-show-capture-state ()
"Capture the state of the current buffer.
@@ -1163,9 +1162,14 @@ buffer is stored and re-applied after the refresh."
(if retain-state
(setq state (notmuch-show-capture-state)))
(erase-buffer)
- (notmuch-show-worker)
+ (notmuch-show-build-buffer)
(if state
- (notmuch-show-apply-state state))))
+ (notmuch-show-apply-state state)
+ ;; We're resetting state, so navigate to the first open message
+ ;; and mark it read, just like opening a new show buffer.
+ (if (notmuch-show-message-visible-p)
+ (notmuch-show-mark-read)
+ (notmuch-show-next-open-message)))))
(defvar notmuch-show-stash-map
(let ((map (make-sparse-keymap)))