]> git.eshelyaron.com Git - emacs.git/commitdiff
(window_scroll): Handle scroll_margin
authorRichard M. Stallman <rms@gnu.org>
Mon, 11 Nov 1996 00:34:50 +0000 (00:34 +0000)
committerRichard M. Stallman <rms@gnu.org>
Mon, 11 Nov 1996 00:34:50 +0000 (00:34 +0000)
by putting point at a place that won't force recentering.

src/window.c

index 6f8cd8188f3a31963f1957e9e519c660ea8bef6f..f9905e38c1618de2d135df6019b0ca29d421c5d8 100644 (file)
@@ -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);