summaryrefslogtreecommitdiff
path: root/src/window.c
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1996-11-11 00:34:50 +0000
committerRichard M. Stallman <rms@gnu.org>1996-11-11 00:34:50 +0000
commitc0947cc677506a63de635e0267540ec4ca12a34d (patch)
treef9b30037793a2ea551bc24cdef5cc43b1891da38 /src/window.c
parent5a7a97397d46684e2348ae93134f378e09289030 (diff)
downloademacs-c0947cc677506a63de635e0267540ec4ca12a34d.tar.gz
(window_scroll): Handle scroll_margin
by putting point at a place that won't force recentering.
Diffstat (limited to 'src/window.c')
-rw-r--r--src/window.c31
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);