diff options
author | Richard M. Stallman <rms@gnu.org> | 1996-11-11 00:34:50 +0000 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 1996-11-11 00:34:50 +0000 |
commit | c0947cc677506a63de635e0267540ec4ca12a34d (patch) | |
tree | f9b30037793a2ea551bc24cdef5cc43b1891da38 | |
parent | 5a7a97397d46684e2348ae93134f378e09289030 (diff) | |
download | emacs-c0947cc677506a63de635e0267540ec4ca12a34d.tar.gz |
(window_scroll): Handle scroll_margin
by putting point at a place that won't force recentering.
-rw-r--r-- | src/window.c | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/src/window.c b/src/window.c index 6f8cd8188f3..f9905e38c16 100644 --- a/src/window.c +++ b/src/window.c @@ -2684,18 +2684,43 @@ window_scroll (window, n, noerror) 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); |