Subject: Re: bug#29325: 26.0.90: Info scrolling stuck

From: [email-masked] (Charles A. Roelli)
Date: Mon, 20 Nov 2017 20:52:39 +0100

> Date: Sun, 19 Nov 2017 19:12:00 +0200
> From: Eli Zaretskii <[email-masked]>
>
> > > Does the same problem happen if you scroll with "M-1 M-v" instead of
> > > the mouse wheel?
> > 
> > No: it works fine in that case.
> 
> If this is only about scrolling with the mouse wheel, then perhaps the
> factor which differs between our systems is the amount of scrolling
> per wheel notch.  How many lines does a single notch scroll in your
> case?  And does the problem happen if you turn the wheel slowly?

I don't have access to a GNU/Linux system at the moment, but if I
recall correctly, it would be 5 lines at a time, when scrolling
slowly.

The behavior is different depending on how fast the mouse wheel is
turned.  If it is turned slowly several times in a row, it is possible
to make window-start reach as far as the second or third line of the
buffer.  If you turn it once more, then window-start jerks down a few
lines instead of reaching the start of the buffer.  This can be
repeated ad infinitum.

In contrast, when turning the mouse wheel quickly (a few notches in
one second), it is not possible to get window-start anywhere near the
start of the buffer, except by using non-mouse commands or by setting
point closer to the top of the window first (with the mouse).

> > > 	  (cond ((eq button mouse-wheel-down-event)
> > >                  (condition-case nil (funcall mwheel-scroll-down-function amt)
> > >                    ;; Make sure we do indeed scroll to the beginning of
> > >                    ;; the buffer.
> > >                    (beginning-of-buffer
> > >                     (unwind-protect
> > >                         (funcall mwheel-scroll-down-function)
> > >                       ;; If the first scroll succeeded, then some scrolling
> > >                       ;; is possible: keep scrolling til the beginning but
> > >                       ;; do not signal an error.  For some reason, we have
> > >                       ;; to do it even if the first scroll signaled an
> > >                       ;; error, because otherwise the window is recentered
> > >                       ;; for a reason that escapes me.  This problem seems
> > >                       ;; to only affect scroll-down.  --Stef
> > >                       (set-window-start (selected-window) (point-min))))))
> > 
> > That is, when attempting to scroll down (as in, moving towards
> > beginning of buffer) under some mysterious circumstances, the window
> > gets recentered around point instead of being scrolled.  However, if
> > point is moved to the first line of the window, say, then the
> > scrolling does work as expected (as I've found out by experimenting
> > more with my initial recipe).
> 
> I have serious difficulties dealing with unexplained and undescribed
> problems that happen "under mysterious circumstances".
> 
> If you build with --enable-checking='yes,glyphs', and then turn on
> redisplay tracing with "M-x trace-redisplay" before scrolling with the
> wheel, what do you see?  And how does that trace differ from when you
> scroll with "M-1 M-v"?

Thanks, I will try that soon.  In the meantime, I noticed that I could
also reproduce the bug in Emacs 25.2, but not in 25.1.  I will try to
bisect between the releases.

> (I find it useful to disable blink-cursor-mode and global-eldoc-mode
> before such experiments, because they tend to trigger extra redisplay
> cycles that conceal the interesting parts.)