Fix part 2 of bug #9771 with lines that start with a display vector.
authorEli Zaretskii <eliz@gnu.org>
Wed, 19 Oct 2011 09:48:35 +0000 (11:48 +0200)
committerEli Zaretskii <eliz@gnu.org>
Wed, 19 Oct 2011 09:48:35 +0000 (11:48 +0200)
 src/xdisp.c (start_display): If the character at POS is displayed
 via a display vector, reset IT->current.dpvec_index to zero.

src/ChangeLog
src/xdisp.c

index ce049eb..9abbe45 100644 (file)
@@ -1,3 +1,9 @@
+2011-10-19  Eli Zaretskii  <eliz@gnu.org>
+
+       * xdisp.c (start_display): If the character at POS is displayed
+       via a display vector, reset IT->current.dpvec_index to zero.
+       (Bug#9771, part 2)
+
 2011-10-18  Chong Yidong  <cyd@gnu.org>
 
        * xdisp.c (get_next_display_element): Handle U+2010 and U+2011
index 7576361..50ddd6b 100644 (file)
@@ -2851,6 +2851,13 @@ start_display (struct it *it, struct window *w, struct text_pos pos)
 
              it->continuation_lines_width += it->current_x;
            }
+         /* If the character at POS is displayed via a display
+            vector, move_it_to above stops at the final glyph of
+            IT->dpvec.  To make the caller redisplay that character
+            again (a.k.a. start at POS), we need to reset the
+            dpvec_index to the beginning of IT->dpvec.  */
+         else if (it->current.dpvec_index >= 0)
+           it->current.dpvec_index = 0;
 
          /* We're starting a new display line, not affected by the
             height of the continued line, so clear the appropriate