On Fri, Apr 10, 2020 at 5:16 PM João Távora <joaotavora@gmail.com> wrote:
>
> On Fri, Apr 10, 2020 at 5:09 PM João Távora <joaotavora@gmail.com> wrote:
>
> > leaves me wondering if there isn't a hook ordering bug here. Maybe it's
> > just a question of delaying entry in tabulated-list-mode until important stuff
> > is set up.
>
> Or maybe all that's needed is this (100% untested) change:
>
> diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el
Finally looked into the problem and no, this doesn't work because
flymake-diagnostics-buffer-mode erases local vars before setting up the
tabulated-list-mode derived mode. This is kind of a chicken-and-egg
issue that can only be fixed in flymake.el with some ugly hacks.
But after some analysis, I think it is tabulated-list-mode, or rather
its recent adaptation to display-line-numbers-mode, which is in the
wrong here. It used to be that using a mode derived from
tabulated-list-mode didn't immediately force a request for refreshing its
rows. After display-line-numbers-mode came along, that ceased to be
true in some situations.
Reading the special code in tabulated-list-mode concerned with line
numbers, the latter seem to affect only the header line, not the
buffer's contents. So this seems to be the correct fix:
commit 0145b3c87f329e51c729703d778848cdc8393a33
Author: João Távora <joaotavora@gmail.com>
Date: Sun Apr 12 13:10:45 2020 +0100
Fix tabulated-list-mode bootstrapping problem
Fixes: bug#40529
Don't refresh all the tabulated-list rows when entering
tabulated-list-mode just because display-line-number-mode is t.
* lisp/emacs-lisp/tabulated-list.el (tabulated-list-mode): Don't
call tabulated-list-revert, just tabulated-list-init-header.
diff --git a/lisp/emacs-lisp/tabulated-list.el b/lisp/emacs-lisp/tabulated-list.el
index 501cc3a29e..68eaef1fcd 100644
--- a/lisp/emacs-lisp/tabulated-list.el
+++ b/lisp/emacs-lisp/tabulated-list.el
@@ -765,7 +765,7 @@ tabulated-list-mode
;; column of the first entry happens to begin with a R2L letter.
(setq bidi-paragraph-direction 'left-to-right)
;; This is for if/when they turn on display-line-numbers
- (add-hook 'display-line-numbers-mode-hook #'tabulated-list-revert nil t)
+ (add-hook 'display-line-numbers-mode-hook #'tabulated-list-init-header nil t)
;; This is for if/when they customize the line-number face or when
;; the line-number width needs to change due to scrolling.
(setq-local tabulated-list--current-lnum-width 0)