Subject: bug#62048: 30.0.50; Non-nil `line-spacing' takes precendence over 'line-height t text property

From: Eli Zaretskii <[email-masked]>
Date: Thu, 09 Mar 2023 11:47:46 +0200

> From: Ihor Radchenko <[email-masked]>
> Cc: [email-masked]
> Date: Thu, 09 Mar 2023 09:13:13 +0000
> 
> > That shouldn't happen: if an image is taller than the window, then
> > C-n/C-p use window-vscroll to scroll the image only partially, at
> > least as long as line-move-visual is non-nil (which it is by default).
> 
> Interesting. I did not notice this because this feature only manifests
> itself on really tall images. The images that are about screen height
> still feel jumpy.

AFAIU the code, this is intentional: the goal of using vscroll in
C-n/C-p is to make sure the user can see all the parts of the tall
image.  Smooth scrolling is not the goal; if you want that, try
pixel-scroll-precision-mode.

> 1. Scrolling a very tall image with C-n/C-p https://0x0.st/HibG.mkv
>    - Emacs behaves nicely, except at the beginning/end of the image
>    - At the beginning the image suddenly jumps half a screen
>      May this behaviour be somehow customized?
>    - At the end, the image disappears very quickly. Maybe something do
>      to with end of buffer.

No, it happens once the last part is seen in its entirety; see above
regarding the goal.

> 2. Scrolling a very tall image with mouse https://0x0.st/Hibk.mkv
>    - Unexpectedly, most of the tall image is skipped upon mouse scroll.
>      Bug?

I cannot reproduce this on my system, using drawing.svg you posted and
another large image I have here.  Mouse scrolls behave for me like
C-n/C-p does.

> 3. Scrolling a near-screen tall image with C-n/C-p https://0x0.st/Hibn.mkv
>    - Note how the image goes across the screen in just a few "jumps"
>      (C-n strokes). This is the commonly observed behaviour in the images
>      I often deal with. Probably something to do with what initial
>      half-screen jump in (1).

If it jumps after all the portions of the image have been seen, and
the last portion is completely visible, that's the intended behavior.

>      I think that jumping half screen at the beginning/end of the image
>      is too drastic, especially for images near as tall as screen
>      height. It would help if this behaviour is fixed or made
>      customizable.

That's because you expect something C-n/C-p weren't programmed to do,
see above.  If someone wants to work on making the scrolling more
smooth, I won't object, but the current code doesn't try to provide
smooth scrolling, only a chance to see the whole image part by part.

Please don't forget:

  . The code in C-n/C-p that scrolls partially is not only for tall
    images, it is also for tall text (try using a very large font for
    some face or part of the buffer text).  The relevant parts of
    Emacs treat tall screen lines the same no matter what caused the
    large height, whether an image or some tall text.
  . The code in C-n/C-p needs to strike a fine balance between smooth
    scrolling and user expectation that text that is not too large be
    scrolled one line at a time, i.e. that you won't need several
    C-n/C-p key strokes to move the display by a single screen line.
    As image height goes smaller and smaller, at some point it is
    reasonable to expect that a single C-n/C-p will scroll across the
    entire line which contains the image, not just some part of that
    line.  The question is where to draw the line (pun intended); the
    code has some heuristic regarding that.