Eli Zaretskii writes: >> Cc: "Kim F. Storm" >> Date: Sat, 27 Jul 2024 10:57:44 -0700 >> From: Steven Allen via "Bug reports for GNU Emacs, >> the Swiss army knife of text editors" >> >> 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. Is this about detecting the correct column? > In addition, when we move to another screen line, the value of vscroll > cannot be meaningfully kept, because its meaning is tightly coupled to > the screen line where it was applied. In essence, vscroll is a trick > to allow display of a tall display element (image, text using a large > fonts, etc.) in a window whose height is too small to show all of the > display element at once. > >> After commenting this line out, I can't tell a difference, even >> when scrolling images with and without `auto-window-vscroll' and >> `try-vscroll'. > > 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. >> I was hoping Kim could shed some light on this. > > I'd be thrilled to hear from Kim, but I'm as guilty of the code in > line-move as he is, so "blame" me if you want. Ah, sorry, should have gone back further in the blame history.