Mercurial > emacs
changeset 65326:33c5395c982b
(redisplay_internal): Make UPDATED as long as needed.
(move_it_in_display_line_to): Stop after last char on line even
on a windowing terminal, if that's the specified stop position.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sun, 04 Sep 2005 01:28:41 +0000 |
parents | 66bec6e31cea |
children | 183e1bf747e4 |
files | src/xdisp.c |
diffstat | 1 files changed, 23 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/xdisp.c Sun Sep 04 01:11:43 2005 +0000 +++ b/src/xdisp.c Sun Sep 04 01:28:41 2005 +0000 @@ -6012,6 +6012,8 @@ glyphs have the same width. */ int single_glyph_width = it->pixel_width / it->nglyphs; int new_x; + int x_before_this_char = x; + int hpos_before_this_char = it->hpos; for (i = 0; i < it->nglyphs; ++i, x = new_x) { @@ -6043,8 +6045,22 @@ { ++it->hpos; it->current_x = new_x; + + /* The character's last glyph just barely fits + in this row. */ if (i == it->nglyphs - 1) { + /* If this is the destination position, + return a position *before* it in this row, + now that we know it fits in this row. */ + if (BUFFER_POS_REACHED_P ()) + { + it->hpos = hpos_before_this_char; + it->current_x = x_before_this_char; + result = MOVE_POS_MATCH_OR_ZV; + break; + } + set_iterator_to_next (it, 1); #ifdef HAVE_WINDOW_SYSTEM if (IT_OVERFLOW_NEWLINE_INTO_FRINGE (it)) @@ -10596,9 +10612,13 @@ if (consider_all_windows_p) { Lisp_Object tail, frame; - int i, n = 0, size = 50; - struct frame **updated - = (struct frame **) alloca (size * sizeof *updated); + int i, n = 0, size = 5; + struct frame **updated; + + FOR_EACH_FRAME (tail, frame) + size++; + + updated = (struct frame **) alloca (size * sizeof *updated); /* Recompute # windows showing selected buffer. This will be incremented each time such a window is displayed. */