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

From: Eli Zaretskii <[email-masked]>
Date: Thu, 11 Aug 2016 18:28:32 +0300

> From: [email-masked]
> Date: Thu, 11 Aug 2016 08:03:18 -0400
> Cc: [email-masked], Oleksandr Gavenko <[email-masked]>
> 
> >> lines      real-scroll-margin
> >> 3,4,5,6         1
> >> 7,8,9,10        2
> >> 11,12,13,14     3
> >>>15             4
> >>
> >> I count from 3 as when try make less lines Emacs warn.
> >>
> >> I think that whose modify scroll-margin want to see as many
> >> as possible margin value up to its customization value.
> >>
> >> This formula produce such values:
> >>
> >> best-scroll-margin = min( (line_count - 1)/2,  scroll-margin)
> >>
> >> So previous table changed to:
> >>
> >> lines      best-scroll-margin
> >> 3,4             1
> >> 5,6             2
> >> 7,8             3
> >>>9              4
> >>
> >> Also as you can see in proposal case
> >> user switch start work from 9 lines in window, not 15!
> >>
> >> Please implement described behaviour.
> >
> > I'm having a hard time understanding this report.  However, it seems
> > like more like a wishlist request than a bug: you want to change the
> > scrolling behavior.  I'm going to change this to wishlist for now, but
> > let me know if I've misunderstood, please.
> 
> I think the complaint is that the `scroll-margin' effective value is
> capped at a 1/4 of the window height, as seen in this
> window_scroll_pixel_based (window.c):
> 
>   this_scroll_margin = max (0, scroll_margin);
>   this_scroll_margin
>     = min (this_scroll_margin, window_total_lines / 4);

Which reveals a subtle bug: the actual scroll margin should be 1 for 7
lines, 2 for 11, etc.  The problem is that the value of
window_total_lines includes the mode line, which it shouldn't.  Maybe
this should be fixed.

> Whereas, it seems more logical to cap it at half window height.

No, I think it would leave too few lines for moving the cursor.  This
has been Emacs behavior since time immemoriam, so if we want to have a
different behavior, it should be implemented an opt-in option, not the
default.