From: Eli Zaretskii Date: Thu, 27 Dec 2012 17:29:14 +0000 (+0200) Subject: Fix bug #13277 with TTY cursor positioning in a line with overlay arrow. X-Git-Tag: emacs-24.2.92~84 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=7a3a74936f32dd6f3778b7d15264ec843e203f04;p=emacs.git Fix bug #13277 with TTY cursor positioning in a line with overlay arrow. 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. --- diff --git a/src/ChangeLog b/src/ChangeLog index fccdc1dfcae..fefe16a5f8f 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2012-12-27 Eli Zaretskii + + * 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 * cygw32.c (Fcygwin_convert_file_name_to_windows) diff --git a/src/dispextern.h b/src/dispextern.h index c5ebb808b05..df0098df478 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -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 - a 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. */ diff --git a/src/xdisp.c b/src/xdisp.c index 8336594ca61..4ec0e29f67c 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -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) {