]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix bug #11094 with cursor display on display string after invisible text.
authorEli Zaretskii <eliz@gnu.org>
Mon, 9 Apr 2012 08:00:08 +0000 (11:00 +0300)
committerEli Zaretskii <eliz@gnu.org>
Mon, 9 Apr 2012 08:00:08 +0000 (11:00 +0300)
 src/xdisp.c (set_cursor_from_row): If the display string appears in
 the buffer at position that is closer to point than the position
 after the display string, display the cursor on the first glyph of
 the display string.  Fixes cursor display when a 'display' text
 property immediately follows invisible text.

src/ChangeLog
src/xdisp.c

index dbff8e354923bd81132a10d023a47708aa0fdcdd..c1fcfcf2437c6f6003326988179ea5cb746602d4 100644 (file)
@@ -1,3 +1,11 @@
+2012-04-09  Eli Zaretskii  <eliz@gnu.org>
+
+       * xdisp.c (set_cursor_from_row): If the display string appears in
+       the buffer at position that is closer to point than the position
+       after the display string, display the cursor on the first glyph of
+       the display string.  Fixes cursor display when a 'display' text
+       property immediately follows invisible text.  (Bug#11094)
+
 2012-04-09  Paul Eggert  <eggert@cs.ucla.edu>
 
        composite.c: use 'double' consistently
index dcd14a1792ae445784d22d826566a591fad99e6e..7fb3f8035dfae21994d9e8875fb7a118f3a02e67 100644 (file)
@@ -14042,15 +14042,18 @@ set_cursor_from_row (struct window *w, struct glyph_row *row,
                      || pos <= tem)
                    {
                      /* If the string from which this glyph came is
-                        found in the buffer at point, then we've
-                        found the glyph we've been looking for.  If
-                        it comes from an overlay (tem == 0), and it
-                        has the `cursor' property on one of its
+                        found in the buffer at point, or at position
+                        that is closer to point than pos_after, then
+                        we've found the glyph we've been looking for.
+                        If it comes from an overlay (tem == 0), and
+                        it has the `cursor' property on one of its
                         glyphs, record that glyph as a candidate for
                         displaying the cursor.  (As in the
                         unidirectional version, we will display the
                         cursor on the last candidate we find.)  */
-                     if (tem == 0 || tem == pt_old)
+                     if (tem == 0
+                         || tem == pt_old
+                         || (tem - pt_old > 0 && tem < pos_after))
                        {
                          /* The glyphs from this string could have
                             been reordered.  Find the one with the
@@ -14088,7 +14091,8 @@ set_cursor_from_row (struct window *w, struct glyph_row *row,
                                }
                            }
 
-                         if (tem == pt_old)
+                         if (tem == pt_old
+                             || (tem - pt_old > 0 && tem < pos_after))
                            goto compute_x;
                        }
                      if (tem)