]> code.delx.au - gnu-emacs/commitdiff
Fix bug #13277 with TTY cursor positioning in a line with overlay arrow.
authorEli Zaretskii <eliz@gnu.org>
Thu, 27 Dec 2012 17:29:14 +0000 (19:29 +0200)
committerEli Zaretskii <eliz@gnu.org>
Thu, 27 Dec 2012 17:29:14 +0000 (19:29 +0200)
 src/xdisp.c (set_cursor_from_row): Don't confuse a truncation or
 continuation glyph on a TTY with an indication of an empty line.
 src/dispextern.h: Improve commentary to glyph->charpos and
 glyph->object.

src/ChangeLog
src/dispextern.h
src/xdisp.c

index fccdc1dfcaed8db105bde3cef0799bd360f2a8a9..fefe16a5f8f882ff4dcf019fa4764e6fc4af1b42 100644 (file)
@@ -1,3 +1,9 @@
+2012-12-27  Eli Zaretskii  <eliz@gnu.org>
+
+       * xdisp.c (set_cursor_from_row): Don't confuse a truncation or
+       continuation glyph on a TTY with an indication of an empty line.
+       (Bug#13277)
+
 2012-12-27  Glenn Morris  <rgm@gnu.org>
 
        * cygw32.c (Fcygwin_convert_file_name_to_windows)
index c5ebb808b05e22c8cdd43fe3150a3b29bed16502..df0098df4784ac631f3e3fd16696dfa918399f3a 100644 (file)
@@ -317,13 +317,18 @@ struct glyph
      Lisp string, this is a position in that string.  If it is a
      buffer, this is a position in that buffer.  A value of -1
      together with a null object means glyph is a truncation glyph at
-     the start of a row.  */
+     the start of a row.  Right truncation and continuation glyphs at
+     the right edge of a row have their position set to the next
+     buffer position that is not shown on this row.  Glyphs inserted
+     by redisplay, such as the empty space after the end of a line on
+     TTYs, have this set to -1.  */
   ptrdiff_t charpos;
 
-  /* Lisp object source of this glyph.  Currently either a buffer or
-     string, if the glyph was produced from characters which came from
+  /* Lisp object source of this glyph.  Currently either a buffer or a
+     string, if the glyph was produced from characters which came from
      a buffer or a string; or 0 if the glyph was inserted by redisplay
-     for its own purposes such as padding.  */
+     for its own purposes such as padding or truncation/continuation
+     glyphs on TTYs.  */
   Lisp_Object object;
 
   /* Width in pixels.  */
index 8336594ca6142aefc982795074ae11abedd5c326..4ec0e29f67c74849e5da35583be801093fae3144 100644 (file)
@@ -14241,7 +14241,12 @@ set_cursor_from_row (struct window *w, struct glyph_row *row,
         CHARPOS is zero or negative.  */
       int empty_line_p =
        (row->reversed_p ? glyph > glyphs_end : glyph < glyphs_end)
-       && INTEGERP (glyph->object) && glyph->charpos > 0;
+       && INTEGERP (glyph->object) && glyph->charpos > 0
+       /* On a TTY, continued and truncated rows also have a glyph at
+          their end whose OBJECT is zero and whose CHARPOS is
+          positive (the continuation and truncation glyphs), but such
+          rows are obviously not "empty".  */
+       && !(row->continued_p || row->truncated_on_right_p);
 
       if (row->ends_in_ellipsis_p && pos_after == last_pos)
        {