[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Set-window-vscroll sometimes doesn't work
From: |
Eli Zaretskii |
Subject: |
Re: Set-window-vscroll sometimes doesn't work |
Date: |
Mon, 19 Oct 2020 20:23:11 +0300 |
> From: Yuan Fu <casouri@gmail.com>
> Date: Mon, 19 Oct 2020 12:56:38 -0400
> Cc: help-gnu-emacs <help-gnu-emacs@gnu.org>
>
> > But in any case, I don't see how move_it_by_lines can have anything to
> > do with this: whatever you do, an image must always remain a single
> > "display element", and the only way we currently have to scroll
> > partial images is via vscroll. Which works, so I don't understand why
> > you need any changes in window_scroll_pixel_based.
> >
>
> What I came up with is this:
>
> For (scroll-up 1):
That's your problem, right there: scroll-up is not the right command
for this. Scroll commands work by setting window-start, and you don't
want that with large images. They also move by window-full, again
something that is not appropriate for scrolling images. You'd need a
different command for your use case.
Please read the code in simple.el, the functions line-move,
line-move-1, and line-move-partial -- those perform scrolling of tall
images when needed. You will find there how to decide when to set
vscroll and to what value; I suggest to use a similar strategy.
>
> 1. If the first row is a normal line (i.e., with normal height), scroll up
> normally by one display line.
> 2. If the first row is an image, adjust vscroll +=
> frame-default-pixel-line-height
> 3. If the first row is an image and we have scrolled to the bottom of the
> image, i.e., vscroll = image-height, scroll up one display line and set
> vscroll to 0.
You can do it this way, but I think it will be confusing because
scroll-up is rarely used with an argument of 1.
But if you insist on doing this inside scroll-up, then items 2 and 3
should do what line-move-visual etc. in simple.el do when they need to
scroll a tall image. They do exactly what you describe above (they
also do other stuff, which you can remove if you want).
> In other words, sometimes we are not really scrolling, but faking a scroll by
> adjusting vscroll. IIUC window_scroll_pixel_based moves it by
> move_it_by_lines and set window-start to it. That’s not what we want when we
> want to fake scroll by adjusting vscroll: in that case we don’t want to
> change window-start.
Indeed, that's not what we want. Which is why scroll commands are not
the right starting point for what you want to do.
> 1. Is there a way to get the line-height that an it is on?
Yes, use line-pixel-height. Again, see the functions in simple.el I
pointed to, they do it already.
> 2. Where is the code that ensures point is always fully visible? When I move
> point around Emacs adjusts scrolling to keep the point fully visible, but I
> don’t know who’s doing that work.
It's in the display engine (xdisp.c). Many places there check whether
the screen line of point is fully visible and retry redisplay if not.
- Re: Set-window-vscroll sometimes doesn't work, (continued)
- Re: Set-window-vscroll sometimes doesn't work, Eli Zaretskii, 2020/10/18
- Re: Set-window-vscroll sometimes doesn't work, Yuan Fu, 2020/10/18
- Re: Set-window-vscroll sometimes doesn't work, Yuan Fu, 2020/10/18
- Re: Set-window-vscroll sometimes doesn't work, Eli Zaretskii, 2020/10/18
- Re: Set-window-vscroll sometimes doesn't work, Yuan Fu, 2020/10/18
- Re: Set-window-vscroll sometimes doesn't work, Eli Zaretskii, 2020/10/18
- Re: Set-window-vscroll sometimes doesn't work, Yuan Fu, 2020/10/19
- Re: Set-window-vscroll sometimes doesn't work, Yuan Fu, 2020/10/19
- Re: Set-window-vscroll sometimes doesn't work, Eli Zaretskii, 2020/10/19
- Re: Set-window-vscroll sometimes doesn't work, Yuan Fu, 2020/10/19
- Re: Set-window-vscroll sometimes doesn't work,
Eli Zaretskii <=
- Re: Set-window-vscroll sometimes doesn't work, Yuan Fu, 2020/10/19
- Re: Set-window-vscroll sometimes doesn't work, Eli Zaretskii, 2020/10/20
- Re: Set-window-vscroll sometimes doesn't work, Yuan Fu, 2020/10/20
- Re: Set-window-vscroll sometimes doesn't work, Yuan Fu, 2020/10/20
- Re: Set-window-vscroll sometimes doesn't work, Eli Zaretskii, 2020/10/21
- Re: Set-window-vscroll sometimes doesn't work, Yuan Fu, 2020/10/21
- Re: Set-window-vscroll sometimes doesn't work, Yuan Fu, 2020/10/22
- Re: Set-window-vscroll sometimes doesn't work, Eli Zaretskii, 2020/10/22
- Re: Set-window-vscroll sometimes doesn't work, Yuan Fu, 2020/10/22
- Re: Set-window-vscroll sometimes doesn't work, Eli Zaretskii, 2020/10/22