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

From: Eli Zaretskii <[email-masked]>
Date: Sat, 11 Mar 2023 14:28:51 +0200

> From: Ihor Radchenko <[email-masked]>
> Cc: [email-masked]
> Date: Sat, 11 Mar 2023 11:10:10 +0000
> 
> Eli Zaretskii <[email-masked]> writes:
> 
> >> Observed: top of the image is displayed
> >> Expected: bottom of the image is partially revealed
> >
> > I don't understand the expectation.  Scrolling by vscroll only happens
> > when before the scroll some part of the image is visible, which is not
> > what happens here.
> >
> > If you want to change that, feel free to hack on the code in
> > simple.el, but there was no intent to cover this particular use case,
> > and the code is already quite complicated (to say the least).
> > ...
> > You should always keep in mind that Emacs has no idea about what's
> > beyond the window, for display purposes.  There's no way of saying
> > whether a given 'display property whose value is an image spec will be
> > taller than the window, except by actually displaying that image (or
> > at least simulating the display internally).  So you expect something
> > that it is far from easy to do.
> >
> > Scrolling commands were never meant to allow smooth scrolling through
> > tall screen lines.
> 
> What if the code instead tries to vscroll standard line height first and
> only then decide if we want to scroll further, displaying tall line?

You mean, use vscroll even for lines whose height is the same as the
default font?  That'd be a waste, no?

And how do you propose to "decide if we want to scroll further"?

> > What do you want to customize, and in what terms?
> 
> I was referring to
> 
> >> 	      (if (and (< arg 0)
> >> 		       (< (point) (window-start))
> >> 		       (> lh winh))
> >> 		  (set-window-vscroll
> >> 		   nil
> >> 		   (- lh dlh) t)))
> 
> May we allow users to customize ~(> lh winh)~ condition?

I don't mind, but make sure some other place in this set of twisty
little passages don't assume we test against the window's height.

> Also, on the initial report. Is it possible to increase default
> buffer-wise line-spacing via text property? (AFAIU, decreasing is
> impossible).

The mechanism for overriding doesn't depend on the value, it depends
on the hierarchy of settings, as the ELisp manual describes.  When the
manual says "However, no matter what you specify, the actual line
height can never be less than the default", it means the default
height described in the previous paragraph:

     The height of the line contents is the maximum height of any
  character or image on that display line, including the final newline if
  there is one.  (A display line that is continued doesn’t include a final
  newline.)  That is the default line height, if you do nothing to specify
  a greater height.  (In the most common case, this equals the height of
  the corresponding frame’s default font, see *note Frame Font::.)