emacs: notmuch-show: refresh all windows displaying buffer

This updates all windows displaying a notmuch-show buffer when the
buffer refresh function is called.

Each window displaying a notmuch-show buffer has its own currently
displayed message based on the (point) location. We store the state
of all displayed windows when refreshing a notmuch-show buffer and
re-apply the current shown message (point) for all windows.

Implementation note: Each window has it's own (point) value, besides
the buffer's (point) value. Sometimes these values are identical like
in the case where a single window displays a buffer. When multiple
windows display a buffer, (point) returns each window's specific value.
What we are storing in this changeset is the window values not the
buffer point values. The buffer's point is returned only if no window
is displaying the buffer, a case we do not care about here.

Signed-off-by: Ioan-Adrian Ratiu <adi@adirat.com>
This commit is contained in:
Ioan-Adrian Ratiu 2016-10-15 08:32:44 +01:00 committed by David Bremner
parent fae3d361f2
commit 4954bc50e8

View file

@ -1319,8 +1319,13 @@ If no messages match the query return NIL."
This includes: This includes:
- the list of open messages, - the list of open messages,
- the current message." - the combination of current message id with/for each visible window."
(list (notmuch-show-get-message-id) (notmuch-show-get-message-ids-for-open-messages))) (let* ((win-list (get-buffer-window-list (current-buffer) nil t))
(win-id-combo (mapcar (lambda (win)
(with-selected-window win
(list win (notmuch-show-get-message-id))))
win-list)))
(list win-id-combo (notmuch-show-get-message-ids-for-open-messages))))
(defun notmuch-show-get-query () (defun notmuch-show-get-query ()
"Return the current query in this show buffer" "Return the current query in this show buffer"
@ -1347,8 +1352,8 @@ This includes:
This includes: This includes:
- opening the messages previously opened, - opening the messages previously opened,
- closing all other messages, - closing all other messages,
- moving to the correct current message." - moving to the correct current message in every displayed window."
(let ((current (car state)) (let ((win-msg-alist (car state))
(open (cadr state))) (open (cadr state)))
;; Open those that were open. ;; Open those that were open.
@ -1357,8 +1362,10 @@ This includes:
(member (notmuch-show-get-message-id) open)) (member (notmuch-show-get-message-id) open))
until (not (notmuch-show-goto-message-next))) until (not (notmuch-show-goto-message-next)))
;; Go to the previously open message. (dolist (win-msg-pair win-msg-alist)
(notmuch-show-goto-message current))) (with-selected-window (car win-msg-pair)
;; Go to the previously open message in this window
(notmuch-show-goto-message (cadr win-msg-pair))))))
(defun notmuch-show-refresh-view (&optional reset-state) (defun notmuch-show-refresh-view (&optional reset-state)
"Refresh the current view. "Refresh the current view.