# HG changeset patch # User Richard M. Stallman # Date 847672490 0 # Node ID d62b7f309f2b2ff2f496e605707282d639188ef5 # Parent 40a1e14518214890e77e34e9d7a22ae327d7e388 (window_scroll): Handle scroll_margin by putting point at a place that won't force recentering. diff -r 40a1e1451821 -r d62b7f309f2b src/window.c --- a/src/window.c Sun Nov 10 23:41:13 1996 +0000 +++ b/src/window.c Mon Nov 11 00:34:50 1996 +0000 @@ -2684,18 +2684,43 @@ if (pos < ZV) { + extern int scroll_margin; + + int this_scroll_margin = scroll_margin; + + /* Don't use a scroll margin that is negative or too large. */ + if (this_scroll_margin < 0) + this_scroll_margin = 0; + + if (XINT (w->height) < 4 * scroll_margin) + this_scroll_margin = XINT (w->height) / 4; + set_marker_restricted (w->start, make_number (pos), w->buffer); w->start_at_line_beg = bolp; w->update_mode_line = Qt; XSETFASTINT (w->last_modified, 0); XSETFASTINT (w->last_overlay_modified, 0); + + /* If we scrolled forward, put point enough lines down + that it is outside the scroll margin. */ + if (n > 0 && this_scroll_margin > 0) + { + SET_PT (pos); + Fvertical_motion (make_number (this_scroll_margin), window); + pos = PT; + } + if (pos > opoint) - SET_PT (pos); + { + SET_PT (pos); + } if (n < 0) { + /* If we scrolled backward, put point near the end of the window + but not within the scroll margin. */ SET_PT (pos); - tem = Fvertical_motion (make_number (ht), window); - if (PT > opoint || XFASTINT (tem) < ht) + tem = Fvertical_motion (make_number (ht - this_scroll_margin), window); + if (PT > opoint || XFASTINT (tem) < ht - this_scroll_margin) SET_PT (opoint); else Fvertical_motion (make_number (-1), window);