Subject: bug#12403: closed (Re: bug#12403: 24.2; scroll-margin breaks emacs24)

From: [email-masked] (GNU bug Tracking System)
Date: Wed, 12 Sep 2012 17:16:02 +0000

Your bug report

#12403: 24.2; scroll-margin breaks emacs24

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
12403: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=12403
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#12403: 24.2; scroll-margin breaks emacs24
From: Eli Zaretskii <[email-masked]>
To: [email-masked]
Cc: [email-masked]
Date: Wed, 12 Sep 2012 20:15:03 +0300
List-Id: <debbugs-submit.debbugs.gnu.org>

> Date: Mon, 10 Sep 2012 19:39:41 +0300
> From: Eli Zaretskii <[email-masked]>
> Cc: [email-masked]
> 
> > Try with the following (under a graphical session):
> > 
> > emacs -q
> > 
> > open the tutorial, scroll with the arrow keys until you reach the bottom.
> > Everything looks ok.
> > 
> > kill emacs. Start again, this time:
> > 
> > C-x set-variable scroll-margin 5
> > 
> > open the tutorial, scroll down with the arrow keys until you reach the
> > bottom.  Text on the page looks *badly* garbled (this is not just
> > character left-overs from the previous screenfull, a lot of lines look
> > repeated at some point in the same line).
> 
> Confirmed :-(.  However, this bug was present even in the first
> pretest of Emacs 24, 24.0.90.
> 
> I will take a look.

Fixed in revision 108138 on the emacs-24 branch, with the following
patch:

=== modified file 'src/ChangeLog'
--- src/ChangeLog	2012-09-12 14:59:56 +0000
+++ src/ChangeLog	2012-09-12 17:10:02 +0000
@@ -1,3 +1,11 @@
+2012-09-12  Eli Zaretskii  <[email-masked]>
+
+	* xdisp.c (try_window_reusing_current_matrix): Under bidi
+	reordering, locate the cursor by calling set_cursor_from_row; if
+	that fails, clear the desired glyph matrix before returning a
+	failure indication to the caller.  Fixes leaving garbled display
+	when fast scrolling with a down-key.  (Bug#12403)
+
 2012-09-12  Jan DjÃ¤rv  <[email-masked]>
 
 	* gtkutil.c (x_wm_set_size_hint): Use 1 col for base_width so it

=== modified file 'src/xdisp.c'
--- src/xdisp.c	2012-05-30 18:09:17 +0000
+++ src/xdisp.c	2012-09-12 16:58:45 +0000
@@ -16593,28 +16593,33 @@ try_window_reusing_current_matrix (struc
 	    }
 	  if (row < bottom_row)
 	    {
-	      struct glyph *glyph = row->glyphs[TEXT_AREA] + w->cursor.hpos;
-	      struct glyph *end = row->glyphs[TEXT_AREA] + row->used[TEXT_AREA];
-
-	      /* Can't use this optimization with bidi-reordered glyph
-		 rows, unless cursor is already at point. */
+	      /* Can't simply scan the row for point with
+		 bidi-reordered glyph rows.  Let set_cursor_from_row
+		 figure out where to put the cursor, and if it fails,
+		 give up.  */
 	      if (!NILP (BVAR (XBUFFER (w->buffer), bidi_display_reordering)))
 		{
-		  if (!(w->cursor.hpos >= 0
-			&& w->cursor.hpos < row->used[TEXT_AREA]
-			&& BUFFERP (glyph->object)
-			&& glyph->charpos == PT))
-		    return 0;
+		  if (!set_cursor_from_row (w, row, w->current_matrix,
+					    0, 0, 0, 0))
+		    {
+		      clear_glyph_matrix (w->desired_matrix);
+		      return 0;
+		    }
 		}
 	      else
-		for (; glyph < end
-		       && (!BUFFERP (glyph->object)
-			   || glyph->charpos < PT);
-		     glyph++)
-		  {
-		    w->cursor.hpos++;
-		    w->cursor.x += glyph->pixel_width;
-		  }
+		{
+		  struct glyph *glyph = row->glyphs[TEXT_AREA] + w->cursor.hpos;
+		  struct glyph *end = row->glyphs[TEXT_AREA] + row->used[TEXT_AREA];
+
+		  for (; glyph < end
+			 && (!BUFFERP (glyph->object)
+			     || glyph->charpos < PT);
+		       glyph++)
+		    {
+		      w->cursor.hpos++;
+		      w->cursor.x += glyph->pixel_width;
+		    }
+		}
 	    }
 	}

Subject: 24.2; scroll-margin breaks emacs24
From: Yuri D'Elia <[email-masked]>
To: [email-masked]
Date: Mon, 10 Sep 2012 16:50:22 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

emacs24 as shipped by debian breaks "scroll-margin".

   http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=681991

It seems that setting scroll-margin on *any* value breaks the redisplay
while scrolling.

Try with the following (under a graphical session):

emacs -q

open the tutorial, scroll with the arrow keys until you reach the bottom.
Everything looks ok.

kill emacs. Start again, this time:

C-x set-variable scroll-margin 5

open the tutorial, scroll down with the arrow keys until you reach the
bottom.  Text on the page looks *badly* garbled (this is not just
character left-overs from the previous screenfull, a lot of lines look
repeated at some point in the same line).

In GNU Emacs 24.2.1 (x86_64-pc-linux-gnu, GTK+ Version 2.24.10)
  of 2012-09-09 on trouble, modified by Debian
Windowing system distributor `The X.Org Foundation', version 11.0.11203902
Configured using:
  `configure '--build' 'x86_64-linux-gnu' '--build' 'x86_64-linux-gnu'
  '--prefix=/usr' '--sharedstatedir=/var/lib' '--libexecdir=/usr/lib'
  '--localstatedir=/var/lib' '--infodir=/usr/share/info'
  '--mandir=/usr/share/man' '--with-pop=yes'
 
'--enable-locallisppath=/etc/emacs24:/etc/emacs:/usr/local/share/emacs/24.2/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/24.2/site-lisp:/usr/share/emacs/site-lisp'
  '--with-crt-dir=/usr/lib/x86_64-linux-gnu' '--with-x=yes'
  '--with-x-toolkit=gtk' '--with-toolkit-scroll-bars'
  'build_alias=x86_64-linux-gnu' 'CFLAGS=-g -O2 -fstack-protector
  --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall'
  'CPPFLAGS=-D_FORTIFY_SOURCE=2''

Important settings:
   value of $LC_ALL: nil
   value of $LC_COLLATE: C
   value of $LC_CTYPE: nil
   value of $LC_MESSAGES: nil
   value of $LC_MONETARY: nil
   value of $LC_NUMERIC: nil
   value of $LC_TIME: nil
   value of $LANG: en_US.UTF-8
   value of $XMODIFIERS: nil
   locale-coding-system: utf-8-unix
   default enable-multibyte-characters: t

Major mode: Fundamental

Minor modes in effect:
   tooltip-mode: t
   mouse-wheel-mode: t
   tool-bar-mode: t
   menu-bar-mode: t
   file-name-shadow-mode: t
   global-font-lock-mode: t
   blink-cursor-mode: t
   auto-composition-mode: t
   auto-encryption-mode: t
   auto-compression-mode: t
   line-number-mode: t
   transient-mark-mode: t

Recent messages:
Loading /etc/emacs/site-start.d/50php-elisp.el (source)...done
Loading /etc/emacs/site-start.d/50psvn.el (source)...done
Loading /etc/emacs/site-start.d/50pymacs.el (source)...done
Loading /etc/emacs/site-start.d/50python-docutils.el (source)...done
Loading /etc/emacs/site-start.d/50python-mode.el (source)...done
Loading /etc/emacs/site-start.d/50w3m-el.el (source)...done
Loading /etc/emacs/site-start.d/50yaml-mode.el (source)...done
Loading /etc/emacs/site-start.d/51debian-el.el (source)...done
For information about GNU Emacs and the GNU system, type C-h C-a.
Making completion list...

Load-path shadows:
/usr/share/emacs/24.2/site-lisp/cmake-data/cmake-mode hides 
/usr/share/emacs/site-lisp/cmake-mode
/usr/share/emacs24/site-lisp/dictionaries-common/ispell hides 
/usr/share/emacs/24.2/lisp/textmodes/ispell
/usr/share/emacs24/site-lisp/dictionaries-common/flyspell hides 
/usr/share/emacs/24.2/lisp/textmodes/flyspell
/usr/share/emacs/site-lisp/rst hides 
/usr/share/emacs/24.2/lisp/textmodes/rst

Features:
(shadow sort gnus-util mail-extr emacsbug message format-spec rfc822 mml
mml-sec mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev
gmm-utils mailheader sendmail regexp-opt rfc2047 rfc2045 ietf-drums
mm-util mail-prsvr mail-utils help-mode easymenu view debian-el
debian-el-loaddefs w3m-load mmm-auto mmm-vars mmm-compat cl
emacs-goodies-el emacs-goodies-custom emacs-goodies-loaddefs easy-mmode
time-date tooltip ediff-hook vc-hooks lisp-float-type mwheel x-win x-dnd
tool-bar dnd fontset image fringe lisp-mode register page menu-bar
rfn-eshadow timer select scroll-bar mouse jit-lock font-lock syntax
facemenu font-core frame cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese hebrew greek romanian slovak
czech european ethiopic indian cyrillic chinese case-table epa-hook
jka-cmpr-hook help simple abbrev minibuffer loaddefs button faces
cus-face files text-properties overlay sha1 md5 base64 format env
code-pages mule custom widget hashtable-print-readable backquote
make-network-process dbusbind dynamic-setting system-font-setting
font-render-setting move-toolbar gtk x-toolkit x multi-tty emacs)