diff options
author | Eli Zaretskii <eliz@gnu.org> | 2019-10-27 17:07:47 +0200 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2019-10-27 17:07:47 +0200 |
commit | fc0f98a8a87ca48b4c3fb0e66d1bd1e2dcc9aa19 (patch) | |
tree | c39e9fe2cf0ef45672cc39dcd1d7f7ccf631354c /lisp/emacs-lisp/tabulated-list.el | |
parent | 1b687e171e542165a260a9416d103a0af201e0c7 (diff) | |
download | emacs-fc0f98a8a87ca48b4c3fb0e66d1bd1e2dcc9aa19.tar.gz emacs-fc0f98a8a87ca48b4c3fb0e66d1bd1e2dcc9aa19.tar.bz2 emacs-fc0f98a8a87ca48b4c3fb0e66d1bd1e2dcc9aa19.zip |
Fix point position after revert-buffer in tabulated-list mode
* lisp/emacs-lisp/tabulated-list.el (tabulated-list-print):
Don't use count-screen-lines, as it is unreliable when lines
are truncated and the region ends before a newline (the root
cause is in vertical-motion, but is very hard to fix there).
Instead, use vertical-motion directly, as the problems with
counting/not counting the newline that ends the region are not
relevant to what we need in this function, which is simply the
number of the current window line. (Bug#37941)
Diffstat (limited to 'lisp/emacs-lisp/tabulated-list.el')
-rw-r--r-- | lisp/emacs-lisp/tabulated-list.el | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/lisp/emacs-lisp/tabulated-list.el b/lisp/emacs-lisp/tabulated-list.el index 66a859f56ce..88e79174bfc 100644 --- a/lisp/emacs-lisp/tabulated-list.el +++ b/lisp/emacs-lisp/tabulated-list.el @@ -424,7 +424,12 @@ changing `tabulated-list-sort-key'." (setq saved-col (current-column)) (when (eq (window-buffer) (current-buffer)) (setq window-line - (count-screen-lines (window-start) (point))))) + (save-excursion + (save-restriction + (widen) + (narrow-to-region (window-start) (point)) + (goto-char (point-min)) + (vertical-motion (buffer-size))))))) ;; Sort the entries, if necessary. (when sorter (setq entries (sort entries sorter))) |