Skip to content

Commit

Permalink
Fix follow-scroll-down in a small buffer which starts slightly scrolled
Browse files Browse the repository at this point in the history
This fixes bug #51814.

* lisp/follow.el (follow-scroll-down): Do away with the optimization of doing
vertical-motion over only one window.  Instead move over all windows, to
checck for being close to point-min, and setting point accordingly.
  • Loading branch information
Alan Mackenzie committed Nov 13, 2021
1 parent 4802419 commit d4536ff
Showing 1 changed file with 19 additions and 13 deletions.
32 changes: 19 additions & 13 deletions lisp/follow.el
Expand Up @@ -669,24 +669,30 @@ Works like `scroll-down' when not in Follow mode."
(t
(let* ((orig-point (point))
(windows (follow-all-followers))
(win (car (reverse windows)))
(start (window-start (car windows))))
(start (window-start (car windows)))
(lines 0))
(if (eq start (point-min))
(if (or (null scroll-error-top-bottom)
(bobp))
(signal 'beginning-of-buffer nil)
(goto-char (point-min)))
(select-window win)
(goto-char start)
(vertical-motion (- (- (window-height win)
(if header-line-format 2 1) ; always mode-line
(if tab-line-format 1 0)
next-screen-context-lines)))
(set-window-start win (point))
(if (< orig-point (window-end win t))
(goto-char orig-point)
(goto-char start)
(vertical-motion (- next-screen-context-lines 1)))
(select-window (car windows))
(dolist (win windows)
(setq lines
(+ lines
(- (window-height win)
(if header-line-format 2 1) ; Count mode-line, too.
(if tab-line-format 1 0)))))
(setq lines (- lines next-screen-context-lines))
(goto-char start)
(let ((at-top (> (vertical-motion (- lines)) (- lines))))
(set-window-start (car windows) (point))
(if at-top
(goto-char orig-point)
(goto-char start)
(vertical-motion (- next-screen-context-lines 1))
(if (< orig-point (point))
(goto-char orig-point))))
(setq follow-internal-force-redisplay t))))))
(put 'follow-scroll-down 'scroll-command t)

Expand Down

0 comments on commit d4536ff

Please sign in to comment.