emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r112274: Fix vertical cursor motion w


From: Eli Zaretskii
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r112274: Fix vertical cursor motion when there are overlay strings at EOL.
Date: Sat, 13 Apr 2013 11:54:02 +0300
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 112274
committer: Eli Zaretskii <address@hidden>
branch nick: trunk
timestamp: Sat 2013-04-13 11:54:02 +0300
message:
  Fix vertical cursor motion when there are overlay strings at EOL.
  
   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 <address@hidden> in
   http://lists.gnu.org/archive/html/emacs-devel/2013-04/msg00362.html.
modified:
  src/ChangeLog
  src/indent.c
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2013-04-12 17:32:52 +0000
+++ b/src/ChangeLog     2013-04-13 08:54:02 +0000
@@ -1,3 +1,13 @@
+2013-04-13  Eli Zaretskii  <address@hidden>
+
+       * 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 <address@hidden> in
+       http://lists.gnu.org/archive/html/emacs-devel/2013-04/msg00362.html.
+
 2013-04-12  Stefan Monnier  <address@hidden>
 
        * window.c (select_window): `record_buffer' even if window is

=== modified file 'src/indent.c'
--- a/src/indent.c      2013-04-02 01:54:56 +0000
+++ b/src/indent.c      2013-04-13 08:54:02 +0000
@@ -2006,11 +2006,15 @@
          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')


reply via email to

[Prev in Thread] Current Thread [Next in Thread]