# HG changeset patch # User Richard M. Stallman # Date 1125797321 0 # Node ID 33c5395c982b96e5e12fe03d1fe91f01dd543207 # Parent 66bec6e31ceacaedb5aaa324e57255eec7f95b74 (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. diff -r 66bec6e31cea -r 33c5395c982b src/xdisp.c --- 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. */