Mercurial > emacs
changeset 56551:a98f5bbbf5bc
(move_it_in_display_line_to): Check BUFFER_POS_REACHED_P after
we have ensured that the glyph fits on the current line (or returned
MOVE_LINE_CONTINUED otherwise).
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Mon, 26 Jul 2004 23:16:48 +0000 |
parents | 371bf470dbbf |
children | 12ee8343c078 |
files | src/xdisp.c |
diffstat | 1 files changed, 19 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/xdisp.c Mon Jul 26 23:16:23 2004 +0000 +++ b/src/xdisp.c Mon Jul 26 23:16:48 2004 +0000 @@ -5649,9 +5649,13 @@ { int x, i, ascent = 0, descent = 0; - /* Stop when ZV or TO_CHARPOS reached. */ + /* Stop when ZV reached. + We used to stop here when TO_CHARPOS reached as well, but that is + too soon if this glyph does not fit on this line. So we handle it + explicitly below. */ if (!get_next_display_element (it) - || BUFFER_POS_REACHED_P ()) + || (it->truncate_lines_p + && BUFFER_POS_REACHED_P ())) { result = MOVE_POS_MATCH_OR_ZV; break; @@ -5711,6 +5715,8 @@ /* We want to leave anything reaching TO_X to the caller. */ if ((op & MOVE_TO_X) && new_x > to_x) { + if (BUFFER_POS_REACHED_P ()) + goto buffer_pos_reached; it->current_x = x; result = MOVE_X_REACHED; break; @@ -5772,6 +5778,8 @@ result = MOVE_LINE_CONTINUED; break; } + else if (BUFFER_POS_REACHED_P ()) + goto buffer_pos_reached; else if (new_x > it->first_visible_x) { /* Glyph is visible. Increment number of glyphs that @@ -5788,6 +5796,15 @@ if (result != MOVE_UNDEFINED) break; } + else if (BUFFER_POS_REACHED_P ()) + { + buffer_pos_reached: + it->current_x = x; + it->max_ascent = ascent; + it->max_descent = descent; + result = MOVE_POS_MATCH_OR_ZV; + break; + } else if ((op & MOVE_TO_X) && it->current_x >= to_x) { /* Stop when TO_X specified and reached. This check is