unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Steven Allen <steven@stebalien.com>, Po Lu <luangruo@yahoo.com>
Cc: 72323@debbugs.gnu.org, storm@cua.dk
Subject: bug#72323: 31.0.50; line-move unconditionally resets vscroll to 0
Date: Sun, 28 Jul 2024 07:50:57 +0300	[thread overview]
Message-ID: <86cymy15n2.fsf@gnu.org> (raw)
In-Reply-To: <87v80qha04.fsf@stebalien.com> (message from Steven Allen on Sat,  27 Jul 2024 13:10:03 -0700)

> From: Steven Allen <steven@stebalien.com>
> Cc: 72323@debbugs.gnu.org, storm@cua.dk
> Date: Sat, 27 Jul 2024 13:10:03 -0700
> 
> >> Fixing home/end (beginning of line, end of line) case seems trivial:
> >> don't call `line-move' in these cases (or have `line-move' short-circuit
> >> when `arg' is 0). However, even after reading all the comments about
> >> scrolling images, I'm still not sure why it's necessary to reset vscroll
> >> to 0.
> >
> > Because otherwise what line-move does cannot be described in sensible
> > terms.  If vscroll is not reset, then what would be the reference for
> > such a "line move"?  By its very definition, line-move moves N screen
> > lines wrt the line which was its starting point, but with vscroll
> > non-zero that starting point could be anywhere.
> 
> I'm a bit confused because vscroll is about scrolling the window and
> `line-move' is about moving point (only incidentally scrolling the
> window if the point leaves it). Clearly `set-window-start' needs to
> reset `vscroll', but I'm not sure I understand why `line-move' does.

vscroll is not just about scrolling the window.  It is basically a
vertical offset from the screen line that shows window-start to the
top-most pixel shown in the window.  It is meant to enable to see the
tall screen line at window-start in its entirety.  Once point moves
off that screen line, vscroll is no longer pertinent, since the
important line, for which vscroll has been determined, has changed.
For example, imagine that the line into which point moves cannot be
displayed in its entirety with this vscroll, because it starts at a
different vertical coordinate (so its lower part could be below the
window bottom).

> Is this about detecting the correct column?

No, I don't think columns are related.

> > line-move is not just for scrolling across images, it is also about
> > scrolling across tall text lines and other display elements.  In any
> > case, asking for removal of that reset is a non-starter, for the
> > reasons explained above, so it isn't going to happen.  The solution
> > for any Lisp program that doesn't want vscroll to be rest is not to
> > call line-move.
> 
> Now that I do more testing, I can see how removing that line breaks
> `line-move' although I'm still not sure why.
> 
> Would it be acceptable to restore the vertical scroll position as long
> as `line-move' hasn't otherwise scrolled the screen? See attached patch.

Sorry, I don't want to make changes in that function whose purpose is
to serve use cases which this function is not designed to support.
The code there is quite fragile and it needs to support a large number
of use cases, some of which with subtle aspects (e.g., did you try
line truncation? did you try visual-line-mode? etc.).  In addition,
the code there is too tightly-coupled with code in the related
functions: line-move-1, line-move-partial, and line-move-finish.  They
all work in unison to support the various use cases, and changing one
without the others is very risky.  It took us a long time to arrive at
what we have there, solving quite a few bugs as we went.  Making
significant changes that at this point in support of application-level
issues would be unimaginable from where I stand.

Problems with pixel-scroll-precision-mode should be solved in that
mode.  I'm against modifying line-move and related subroutines in
order to solve problems in Lisp programs that are not bugs in the
algorithm of line-move.

I've added Po Lu to this discussion in the hope that he could have
comments and suggestions for solving the problems in
pixel-scroll-precision-mode you mentioned in the original message.





  reply	other threads:[~2024-07-28  4:50 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-27 17:57 bug#72323: 31.0.50; line-move unconditionally resets vscroll to 0 Steven Allen via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-07-27 18:11 ` Eli Zaretskii
2024-07-27 20:10   ` Steven Allen via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-07-28  4:50     ` Eli Zaretskii [this message]
2024-07-28 20:07       ` Steven Allen via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-07-28 20:10         ` Steven Allen via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-07-29 11:14           ` Eli Zaretskii
2024-07-29 11:12         ` Eli Zaretskii
2024-07-29 14:30           ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-08-18 17:42             ` Steven Allen via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-08-18 17:38           ` Steven Allen via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-08-18 18:21             ` Eli Zaretskii
2024-08-18 18:40               ` Steven Allen via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-08-18 19:01                 ` Eli Zaretskii
2024-08-18 22:17                   ` Steven Allen via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-08-19 11:06                     ` Eli Zaretskii
2024-08-19 17:30                       ` Steven Allen via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-09-30  0:51                         ` Stefan Kangas

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=86cymy15n2.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=72323@debbugs.gnu.org \
    --cc=luangruo@yahoo.com \
    --cc=steven@stebalien.com \
    --cc=storm@cua.dk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).