On Sat, 24 Sep 2016, Ioan-Adrian Ratiu <adi@adirat.com> wrote: > 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 messaged based on the (point) location. Store the state > of all displayed windows when refreshing a notmuch-show buffer and > re-apply the current shown message for all windows. > > Signed-off-by: Ioan-Adrian Ratiu <adi@adirat.com> > --- > emacs/notmuch-show.el | 19 +++++++++++++------ > 1 file changed, 13 insertions(+), 6 deletions(-) > > diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el > index 641398d..c39065f 100644 > --- a/emacs/notmuch-show.el > +++ b/emacs/notmuch-show.el > @@ -1317,8 +1317,13 @@ If no messages match the query return NIL." > > This includes: > - the list of open messages, > - - the current message." > - (list (notmuch-show-get-message-id) (notmuch-show-get-message-ids-for-open-messages))) > + - the combination of current message id with/for each visible window." > + (let* ((win-list (get-buffer-window-list (current-buffer) t)) Should this be (get-buffer-window-list (current-buffer) nil t)) ? I am assuming you don't care about the minibuffer, but do want all frames? > + (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)))) Before I make a comment here I should stay I rather unsure about how emacs deals with point when there are multiple windows. I think each window has a value for point for each buffer regardless of whether that buffer is currently displayed in that window. If I understand the code correctly this only resets point for the windows currently displaying buffer. I note that this is better than the current refresh-single-buffer code: however, if you actually want it running on a timer in the background, rather then you may require better behaviour. As it is improvement on what we currently do I leave this to you to decide. Best wishes Mark > (defun notmuch-show-get-query () > "Return the current query in this show buffer" > @@ -1345,8 +1350,8 @@ This includes: > This includes: > - opening the messages previously opened, > - closing all other messages, > - - moving to the correct current message." > - (let ((current (car state)) > + - moving to the correct current message in every displayed window." > + (let ((win-msg-alist (car state)) > (open (cadr state))) > > ;; Open those that were open. > @@ -1355,8 +1360,10 @@ This includes: > (member (notmuch-show-get-message-id) open)) > until (not (notmuch-show-goto-message-next))) > > - ;; Go to the previously open message. > - (notmuch-show-goto-message current))) > + (dolist (win-msg-pair win-msg-alist) > + (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) > "Refresh the current view. > -- > 2.10.0