]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix vertical cursor motion when there are overlay strings at EOL.
authorEli Zaretskii <eliz@gnu.org>
Sat, 13 Apr 2013 08:54:02 +0000 (11:54 +0300)
committerEli Zaretskii <eliz@gnu.org>
Sat, 13 Apr 2013 08:54:02 +0000 (11:54 +0300)
 src/indent.c (Fvertical_motion): Don't consider display strings on
 overlay strings as display strings on the buffer position we
 started from.  This prevents vertical cursor motion from jumping
 more than one line when there's an overlay string with a display
 property at end of line.
 Reported by Karl Chen <Karl.Chen@quarl.org> in
 http://lists.gnu.org/archive/html/emacs-devel/2013-04/msg00362.html.

src/ChangeLog
src/indent.c

index 08f33eb7d0232cb055393a698da16d3a33250e95..af2d38d2e873fb28f0deb5c37e2207a4826514d8 100644 (file)
@@ -1,3 +1,13 @@
+2013-04-13  Eli Zaretskii  <eliz@gnu.org>
+
+       * indent.c (Fvertical_motion): Don't consider display strings on
+       overlay strings as display strings on the buffer position we
+       started from.  This prevents vertical cursor motion from jumping
+       more than one line when there's an overlay string with a display
+       property at end of line.
+       Reported by Karl Chen <Karl.Chen@quarl.org> in
+       http://lists.gnu.org/archive/html/emacs-devel/2013-04/msg00362.html.
+
 2013-04-12  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        * window.c (select_window): `record_buffer' even if window is
index 67796ab8a8fc1ee800342ad6bc69fd49b82fe76d..47358e17db8174f2c087cbd78c24039ac229db1b 100644 (file)
@@ -2006,11 +2006,15 @@ whether or not it is currently displayed in some window.  */)
          const char *s = SSDATA (it.string);
          const char *e = s + SBYTES (it.string);
 
+         disp_string_at_start_p =
          /* If it.area is anything but TEXT_AREA, we need not bother
             about the display string, as it doesn't affect cursor
             positioning.  */
-         disp_string_at_start_p =
-           it.string_from_display_prop_p && it.area == TEXT_AREA;
+           it.area == TEXT_AREA
+           && it.string_from_display_prop_p
+           /* A display string on anything but buffer text (e.g., on
+              an overlay string) doesn't affect cursor positioning.  */
+           && (it.sp > 0 && it.stack[it.sp - 1].method == GET_FROM_BUFFER);
          while (s < e)
            {
              if (*s++ == '\n')