(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.
This commit is contained in:
parent
85da25e9dc
commit
4cb46737eb
1 changed files with 31 additions and 7 deletions
38
src/xdisp.c
38
src/xdisp.c
|
@ -1839,13 +1839,37 @@ redisplay_window (window, just_this_one, preserve_echo_area)
|
|||
{
|
||||
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)
|
||||
|
|
Loading…
Add table
Reference in a new issue