There is still heavy flashing in the buffer tabs for me during Gnus usage..
Well I wrote a small debug tool to see where the tabs are being
called.[1]
Here is the result (edited)
#<buffer "*Article*">
backtrace(#<buffer "*debug-tab*"> t)
[..]
update-tab-in-gutter(#<buffer "*Article*">)
select-window(#<window on "*Article*" 0x48aca>)
# bind (window point)
# (unwind-protect ...)
# bind (save-selected-window-window)
# (unwind-protect ...)
# bind (ihandles)
gnus-display-mime()
# bind (gnus-article-buffer buffer-read-only)
gnus-article-prepare-display()
[..]
gnus-article-prepare(53659 nil)
[..]
call-interactively(gnus-summary-next-page)
So the problem is still the same. update-tab-in-gutter is run in a
save-selected-window-window form.
Same reasoning as before applies
1. In this case running the buffer tab updater is unnecessary as we
are in save-selected-window-window. As an ugly hack one could
disable the hook there but that shouldn't be necessary:
2. It really shouldn't matter that the buffer tabs are changed inside
this form because at redisplay time everything should be back in
the old state. [I thought this was what all the recent work was about]
Jan
Footnotes:
[1]
(require 'advice)
(defvar debug-tab-triggered t)
(defvar dt-buffer (get-buffer-create "*debug-tab*"))
(defun debug-tab-go ()
(interactive)
(setq debug-tab-triggered nil))
(global-set-key [f8] 'debug-tab-go)
(defadvice update-tab-in-gutter (before debugtab)
(unless debug-tab-triggered
(setq debug-tab-triggered t)
(erase-buffer dt-buffer)
(print (ad-get-arg 0) dt-buffer)
(backtrace dt-buffer t)))