emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs-26 93818ee: Fix subtle problems in tabulated-list-mo


From: Eli Zaretskii
Subject: [Emacs-diffs] emacs-26 93818ee: Fix subtle problems in tabulated-list-mode with line numbers
Date: Sat, 4 Nov 2017 10:29:27 -0400 (EDT)

branch: emacs-26
commit 93818eed8ab9840095911be7b0ca0f2104320ea0
Author: Eli Zaretskii <address@hidden>
Commit: Eli Zaretskii <address@hidden>

    Fix subtle problems in tabulated-list-mode with line numbers
    
    * lisp/emacs-lisp/tabulated-list.el
    (tabulated-list-watch-line-number-width): Call
    tabulated-list-init-header instead of tabulated-list-revert.
    (tabulated-list-window-scroll-function): New function.
    (tabulated-list-mode): Put 'tabulated-list-window-scroll-function'
    on the buffer-local 'window-scroll-functions' list.
---
 lisp/emacs-lisp/tabulated-list.el | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/lisp/emacs-lisp/tabulated-list.el 
b/lisp/emacs-lisp/tabulated-list.el
index 73ddadf..3889ba8 100644
--- a/lisp/emacs-lisp/tabulated-list.el
+++ b/lisp/emacs-lisp/tabulated-list.el
@@ -603,7 +603,16 @@ With a numeric prefix argument N, sort the Nth column."
       (let ((lnum-width (tabulated-list-line-number-width)))
         (when (not (= tabulated-list--current-lnum-width lnum-width))
           (setq-local tabulated-list--current-lnum-width lnum-width)
-          (tabulated-list-revert)))))
+          (tabulated-list-init-header)))))
+
+(defun tabulated-list-window-scroll-function (window _start)
+  (if display-line-numbers
+      (let ((lnum-width
+             (with-selected-window window
+               (line-number-display-width 'columns))))
+        (when (not (= tabulated-list--current-lnum-width lnum-width))
+          (setq-local tabulated-list--current-lnum-width lnum-width)
+          (tabulated-list-init-header)))))
 
 ;;; The mode definition:
 
@@ -654,7 +663,9 @@ as the ewoc pretty-printer."
   ;; the line-number width needs to change due to scrolling.
   (setq-local tabulated-list--current-lnum-width 0)
   (add-hook 'pre-redisplay-functions
-            #'tabulated-list-watch-line-number-width nil t))
+            #'tabulated-list-watch-line-number-width nil t)
+  (add-hook 'window-scroll-functions
+            #'tabulated-list-window-scroll-function nil t))
 
 (put 'tabulated-list-mode 'mode-class 'special)
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]