Mercurial > emacs
changeset 19015:533ccefb099d
(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.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Mon, 28 Jul 1997 04:55:45 +0000 |
parents | 63c862461563 |
children | 8f73ca5bbaeb |
files | src/xdisp.c |
diffstat | 1 files changed, 31 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- 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)