Subject: Re: bug#21080: Scrolling bug

From: Eli Zaretskii <[email-masked]>
Date: Sat, 18 Jul 2015 13:07:20 +0300

> Date: Sat, 18 Jul 2015 00:58:14 +0300
> From: Bru Rom <[email-masked]>
> 
> It can be any file with long enough lines.
> 
> For standard terminal 80x24, let the part of wikipedia article on Emacs be our
> "sample file". Emacs history from it:
> [...]

> Copy text to file, open it in Emacs with emacs -nw -Q
> 
> Next, exact sequence of commands:
> 
> alt-x customize-option
> scroll-conservatively
> Set there 10000, tab into state, enter state, press 0 = Set for Current Session
> Press 'q' to exit
> 
> Then alt-x visual-line-mode
> 
> Then C-End to go to end of buffer. Then scroll up line-by-line with Up. It
> scrolls by 2 over warped lines, but if you go down from start of buffer -
> everything will be ok.

Thanks.  This bug is now fixed in the development sources with the
simple change below (which you could probably easily apply to 24.5 or
previous versions, as that code was in Emacs since Mar 2002).

commit d3816bf8ad1fcfed2a32d23216a55850ee4325b5
Author: Eli Zaretskii <[email-masked]>
Date:   Sat Jul 18 13:02:06 2015 +0300

    Fix scrolling backwards on TTY frames under scroll-conservatively
    
    * src/xdisp.c (move_it_vertically_backward): Fix off-by-one error
    in moving backwards on TTY frames.  (Bug#21080)

diff --git a/src/xdisp.c b/src/xdisp.c
index 5bef44c..16a7a64 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -9428,7 +9428,7 @@ struct overlay_entry
 	     treating terminal frames specially here.  */
 
 	  if (!FRAME_WINDOW_P (it->f))
-	    move_it_vertically (it, target_y - (it->current_y + line_height));
+	    move_it_vertically (it, target_y - it->current_y);
 	  else
 	    {
 	      do