# HG changeset patch # User Richard M. Stallman # Date 870065745 0 # Node ID 533ccefb099d318f5c15fa74caf8895584e74d57 # Parent 63c8624615637712943a2fa7f2b2a50f667b480c (redisplay_window): When text has not changed, call compute_motion starting from the former PT if possible. If PT is unchanged from w->last_point, don't do compute_motion at all. diff -r 63c862461563 -r 533ccefb099d src/xdisp.c --- a/src/xdisp.c Mon Jul 28 01:19:19 1997 +0000 +++ b/src/xdisp.c Mon Jul 28 04:55:45 1997 +0000 @@ -1839,13 +1839,37 @@ { int this_scroll_margin = scroll_margin; - pos = *compute_motion (startp, 0, (hscroll ? 1 - hscroll : 0), 0, - PT, height, - /* BUG FIX: See the comment of - Fpos_visible_in_window_p (window.c). */ - - (1 << (BITS_PER_SHORT - 1)), - width, hscroll, - pos_tab_offset (w, startp), w); + /* Find where PT is located now on the frame. */ + if (PT == w->last_point) + { + pos.hpos = (w->last_point_x + + (hscroll ? 1 - hscroll : 0) + - WINDOW_LEFT_MARGIN (w)); + pos.vpos = w->last_point_y; + pos.bufpos = PT; + } + else if (PT > w->last_point) + { + pos = *compute_motion (w->last_point, w->last_point_y, + w->last_point_x + (hscroll ? 1 - hscroll : 0), + 0, + PT, height, + /* BUG FIX: See the comment of + Fpos_visible_in_window_p (window.c). */ + - (1 << (BITS_PER_SHORT - 1)), + width, hscroll, + pos_tab_offset (w, startp), w); + } + else + { + pos = *compute_motion (startp, 0, (hscroll ? 1 - hscroll : 0), 0, + PT, height, + /* BUG FIX: See the comment of + Fpos_visible_in_window_p (window.c). */ + - (1 << (BITS_PER_SHORT - 1)), + width, hscroll, + pos_tab_offset (w, startp), w); + } /* Don't use a scroll margin that is negative or too large. */ if (this_scroll_margin < 0)