On Fri, Apr 10, 2020 at 5:16 PM João Távora wrote: > > On Fri, Apr 10, 2020 at 5:09 PM João Távora 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 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)