help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Make scroll-{up, down} move point to {start, end} of newly visible t


From: Spencer Baugh
Subject: Re: Make scroll-{up, down} move point to {start, end} of newly visible text
Date: Wed, 16 Aug 2023 12:20:23 -0400
User-agent: Gnus/5.13 (Gnus v5.13)

Eli Zaretskii <eliz@gnu.org> writes:
>> From: Spencer Baugh <sbaugh@janestreet.com>
>> Date: Mon, 31 Jul 2023 16:18:15 -0400
>> 
>> 
>> After I use scroll-up or scroll-down, I want to start reading the new
>> text on the screen.  But it's easy to lose track of where the new text
>> start, especially with larger values of next-screen-context-lines.
>> 
>> So, I would like scrolling to move point to the division between old and
>> new text.  Then the location of the cursor will help me keep track of
>> which text is new and which text is old.
>
> I don't understand, because what you want happens here by default:
> scrolling always puts at the top of the window the first line of those
> which constitute next-screen-context-lines.  So, for example, if you
> have next-screen-context-lines set to 5, C-v will put the 5th line
> from the window's bottom at the top screen line.
>
> If by "new text start" you mean the first line that was not visible in
> the window before C-v, then set scroll-margin to the value of
> next-screen-context-lines, and then Emacs will put point at that first
> new line.
>
> Is that what you want?

After using it for a bit, I ended up deciding that the other effects of
scroll-margin were too annoying, so I turned it off again.
(scroll-margin interacts poorly with C-M-l for example, because C-M-l
puts the start of the function at the top of the screen, but actually
moving point to the start of the function then causes annoying
scrolling.)

So I still want some other way to achieve this behavior which doesn't
change scroll-margin.

I thought about what behavior I want, exactly, and I think it's this:
when point is off-screen after scroll-up, we should first try to move
point to "window-end before we scrolled", and only if that position is
also off-screen should we move point to window-start.  (Currently we
unconditionally move point to window-start)

Like this:

(defun my-scroll-up-command (&optional arg)
  (interactive "^P")
  (move-to-window-line -1)
  (scroll-up-command arg))

(defun my-scroll-down-command (&optional arg)
  (interactive "^P")
  (move-to-window-line 0)
  (scroll-down-command arg))

except of course this implementation moves point even if it's not
necessary.

Does this seem like a reasonable feature to add to the scrolling code?




reply via email to

[Prev in Thread] Current Thread [Next in Thread]