Subject: Re: bug#5718: scroll-margin in buffer with small line count.

From: [email-masked]
Date: Mon, 30 Jan 2017 23:52:22 -0500

Eli Zaretskii <[email-masked]> writes:

>> From: [email-masked]
>> Cc: [email-masked],  [email-masked],  [email-masked]
>> Date: Sat, 28 Jan 2017 19:57:21 -0500
>> 
>> Okay, I think this is ready now, I'm posting the final patchset for
>> reference.  It's basically the same as the previous stuff, but I've made
>> maximum-scroll-margin customizable, and renamed window-tests.el to
>> test/manual/scroll-tests.el (since it only works in an interactive
>> session).
>> 
>> I'll push to master in a couple of days.
>
> Thanks, it LGTM.  Would you mind to mention the new option in the user
> manual?

Oh right, forgot about that.  Does this look okay?

diff --git c/doc/emacs/display.texi i/doc/emacs/display.texi
index c6e990d..4c4d696 100644
--- c/doc/emacs/display.texi
+++ i/doc/emacs/display.texi
@@ -285,13 +285,17 @@ Auto Scrolling
 @code{scroll-up-aggressively} / @code{scroll-down-aggressively}.
 
 @vindex scroll-margin
+@vindex maximum-scroll-margin
   The variable @code{scroll-margin} restricts how close point can come
 to the top or bottom of a window (even if aggressive scrolling
 specifies a fraction @var{f} that is larger than the window portion
 between the top and the bottom margins).  Its value is a number of screen
 lines; if point comes within that many lines of the top or bottom of
 the window, Emacs performs automatic scrolling.  By default,
-@code{scroll-margin} is 0.
+@code{scroll-margin} is 0.  The effective margin size is limited to a
+quarter of the window height by default, but this limit can be
+increased up to half (or decreased down to zero) by customizing
+@code{maximum-scroll-margin}.
 
 @node Horizontal Scrolling
 @section Horizontal Scrolling
diff --git c/doc/lispref/windows.texi i/doc/lispref/windows.texi
index 6f3de0c..affa28c 100644
--- c/doc/lispref/windows.texi
+++ i/doc/lispref/windows.texi
@@ -3924,6 +3924,21 @@ Textual Scrolling
 out of the margin, closer to the center of the window.
 @end defopt
 
+@defopt maximum-scroll-margin
+This variable limits the effective value of @code{scroll-margin} to a
+fraction of the current window line height.  For example, if the
+current window has 20 lines and @code{maximum-scroll-margin} is 0.1,
+then the scroll margins will never be larger than 2 lines, no matter
+how big @code{scroll-margin} is.
+
+@code{maximum-scroll-margin} itself has a maximum value of 0.5, which
+allows setting margins large to keep the cursor at the middle line of
+the window (or two middle lines if the window has an even number of
+lines).  If it's set to a larger value (or any value other than a
+float between 0.0 and 0.5) then the default value of 0.25 will be used
+instead.
+@end defopt
+
 @defopt scroll-conservatively
 This variable controls how scrolling is done automatically when point
 moves off the screen (or into the scroll margin).  If the value is a