* bug#69972: 29.1; Unexpected behavior when scrolling images
@ 2024-03-24 9:07 Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-03-24 9:42 ` Eli Zaretskii
0 siblings, 1 reply; 8+ messages in thread
From: Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-03-24 9:07 UTC (permalink / raw)
To: 69972
When the image at point is larger than the current window and there is
no content after the image, interactively scrolling down (with the
scroll-up command) unexpectedly scrolls past the image to blankness.
Test this by evaluating the following snippet then interactively running
`scroll-up' repeatedly:
(with-current-buffer (get-buffer-create "*test-scroll-image*")
(erase-buffer)
(insert-image (create-image "splash.png" nil nil
;; Scale the image more if it doesn't take up the whole window.
:scale 5))
(goto-char (point-max))
(pop-to-buffer (current-buffer)))
Even more unexpectedly, when point is before the image, running
`scroll-up' repeatedly eventually scrolls back to the top of the image:
(with-current-buffer (get-buffer-create "*test-scroll-image*")
(erase-buffer)
(insert-image (create-image "splash.png" nil nil :scale 5))
(goto-char (point-min))
(pop-to-buffer (current-buffer)))
Non-interactively, scroll-up scrolls the page down to the very bottom of
the image. IMO this is the expected behavior:
(with-current-buffer (get-buffer-create "*test-scroll-image*")
(erase-buffer)
(insert-image (create-image "splash.png" nil nil :scale 5))
(pop-to-buffer (current-buffer))
(scroll-up 999))
Thank you for your help!!
Joseph
Tested on emacs -Q:
In GNU Emacs 29.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.37,
cairo version 1.16.0)
Windowing system distributor 'The X.Org Foundation', version 11.0.12101007
System Description: Debian GNU/Linux 12 (bookworm)
Configured using:
'configure
CONFIG_SHELL=/gnu/store/v9p25q9l5nnaixkhpap5rnymmwbhf9rp-bash-minimal-5.1.16/bin/bash
SHELL=/gnu/store/v9p25q9l5nnaixkhpap5rnymmwbhf9rp-bash-minimal-5.1.16/bin/bash
--prefix=/gnu/store/f4gxh8n3libmywq8d5jvxxkyqblgilxy-emacs-29.1
--enable-fast-install --with-cairo --with-modules
--with-native-compilation=aot --disable-build-details'
Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES
NATIVE_COMP NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND SQLITE3
THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER X11 XDBE XIM XINPUT2 XPM
GTK3 ZLIB
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#69972: 29.1; Unexpected behavior when scrolling images
2024-03-24 9:07 bug#69972: 29.1; Unexpected behavior when scrolling images Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-03-24 9:42 ` Eli Zaretskii
2024-03-25 1:06 ` Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors
0 siblings, 1 reply; 8+ messages in thread
From: Eli Zaretskii @ 2024-03-24 9:42 UTC (permalink / raw)
To: Joseph Turner; +Cc: 69972
> Date: Sun, 24 Mar 2024 02:07:16 -0700
> From: Joseph Turner via "Bug reports for GNU Emacs,
> the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org>
>
> When the image at point is larger than the current window and there is
> no content after the image, interactively scrolling down (with the
> scroll-up command) unexpectedly scrolls past the image to blankness.
I cannot reproduce this, I think.
> Test this by evaluating the following snippet then interactively running
> `scroll-up' repeatedly:
>
> (with-current-buffer (get-buffer-create "*test-scroll-image*")
> (erase-buffer)
> (insert-image (create-image "splash.png" nil nil
> ;; Scale the image more if it doesn't take up the whole window.
> :scale 5))
> (goto-char (point-max))
> (pop-to-buffer (current-buffer)))
This recipe doesn't include the call to scroll-up, so I'm unsure how
you did that and what you saw. When I try "M-: (scroll-up) RET" or
"M-x scroll-up RET", I get several scrolls by window-size, and then
"End of buffer" error when I hit the end of the buffer. If this is
unexpected, please tell why.
> Even more unexpectedly, when point is before the image, running
> `scroll-up' repeatedly eventually scrolls back to the top of the image:
>
> (with-current-buffer (get-buffer-create "*test-scroll-image*")
> (erase-buffer)
> (insert-image (create-image "splash.png" nil nil :scale 5))
> (goto-char (point-min))
> (pop-to-buffer (current-buffer)))
I do see this, but why is that a problem? You supposed to use
scroll-up-command instead, which handles these marginal cases much
better. scroll-up itself is not smart enough to avoid the perceived
"scroll back to top", which is actually caused by the fact that we
zero out window-vscroll (which is how we handle scrolling past large
images).
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#69972: 29.1; Unexpected behavior when scrolling images
2024-03-24 9:42 ` Eli Zaretskii
@ 2024-03-25 1:06 ` Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-03-25 8:34 ` Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-03-25 12:23 ` Eli Zaretskii
0 siblings, 2 replies; 8+ messages in thread
From: Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-03-25 1:06 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 69972
Eli Zaretskii <eliz@gnu.org> writes:
>> Date: Sun, 24 Mar 2024 02:07:16 -0700
>> From: Joseph Turner via "Bug reports for GNU Emacs,
>> the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org>
>>
>> When the image at point is larger than the current window and there is
>> no content after the image, interactively scrolling down (with the
>> scroll-up command) unexpectedly scrolls past the image to blankness.
>
> I cannot reproduce this, I think.
>
>> Test this by evaluating the following snippet then interactively running
>> `scroll-up' repeatedly:
>>
>> (with-current-buffer (get-buffer-create "*test-scroll-image*")
>> (erase-buffer)
>> (insert-image (create-image "splash.png" nil nil
>> ;; Scale the image more if it doesn't take up the whole window.
>> :scale 5))
>> (goto-char (point-max))
>> (pop-to-buffer (current-buffer)))
>
> This recipe doesn't include the call to scroll-up, so I'm unsure how
> you did that and what you saw. When I try "M-: (scroll-up) RET" or
> "M-x scroll-up RET", I get several scrolls by window-size, and then
> "End of buffer" error when I hit the end of the buffer. If this is
> unexpected, please tell why.
On my machine, I don't get "End of buffer" error. I tested three
different ways in the following snippet
(with-current-buffer (get-buffer-create "*test-scroll-image*")
(erase-buffer)
(insert-image (create-image "splash.png" nil nil
;; Scale the image more if it doesn't take up the whole window.
:scale 5))
(goto-char (point-max))
(pixel-scroll-precision-mode -1) ; Ensure mouse wheel scroll up and down works
(pop-to-buffer (current-buffer)))
1. "M-: (scroll-up) RET" (repeatedly)
2. C-v (repeatedly)
3. <wheel-down> (repeatedly)
With all three methods, at first Emacs gradually scrolls the image, but
then when I reach the bottom of the image, the image disappears entirely
as Emacs scrolls past it all at once.
>> Even more unexpectedly, when point is before the image, running
>> `scroll-up' repeatedly eventually scrolls back to the top of the image:
>>
>> (with-current-buffer (get-buffer-create "*test-scroll-image*")
>> (erase-buffer)
>> (insert-image (create-image "splash.png" nil nil :scale 5))
>> (goto-char (point-min))
>> (pop-to-buffer (current-buffer)))
>
> I do see this, but why is that a problem? You supposed to use
> scroll-up-command instead, which handles these marginal cases much
> better. scroll-up itself is not smart enough to avoid the perceived
> "scroll back to top", which is actually caused by the fact that we
> zero out window-vscroll (which is how we handle scrolling past large
> images).
You're right. This is not a problem in practice. When point is before
the image, both C-v and <wheel-down> produce the same behavior as above.
Joseph
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#69972: 29.1; Unexpected behavior when scrolling images
2024-03-25 1:06 ` Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-03-25 8:34 ` Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-03-25 12:23 ` Eli Zaretskii
1 sibling, 0 replies; 8+ messages in thread
From: Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-03-25 8:34 UTC (permalink / raw)
To: Eli Zaretskii, 69972
Joseph Turner <joseph@ushin.org> writes:
> Eli Zaretskii <eliz@gnu.org> writes:
>
>>> Date: Sun, 24 Mar 2024 02:07:16 -0700
>>> From: Joseph Turner via "Bug reports for GNU Emacs,
>>> the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org>
>>>
>>> When the image at point is larger than the current window and there is
>>> no content after the image, interactively scrolling down (with the
>>> scroll-up command) unexpectedly scrolls past the image to blankness.
>>
>> I cannot reproduce this, I think.
>>
>>> Test this by evaluating the following snippet then interactively running
>>> `scroll-up' repeatedly:
>>>
>>> (with-current-buffer (get-buffer-create "*test-scroll-image*")
>>> (erase-buffer)
>>> (insert-image (create-image "splash.png" nil nil
>>> ;; Scale the image more if it doesn't take up the whole window.
>>> :scale 5))
>>> (goto-char (point-max))
>>> (pop-to-buffer (current-buffer)))
>>
>> This recipe doesn't include the call to scroll-up, so I'm unsure how
>> you did that and what you saw. When I try "M-: (scroll-up) RET" or
>> "M-x scroll-up RET", I get several scrolls by window-size, and then
>> "End of buffer" error when I hit the end of the buffer. If this is
>> unexpected, please tell why.
>
> On my machine, I don't get "End of buffer" error.
Correction - I *do* get "End of buffer" error, but only after fully
scrolling past the image (which IMO is unexpected).
> I tested three different ways in the following snippet
>
> (with-current-buffer (get-buffer-create "*test-scroll-image*")
> (erase-buffer)
> (insert-image (create-image "splash.png" nil nil
> ;; Scale the image more if it doesn't take up the whole window.
> :scale 5))
> (goto-char (point-max))
> (pixel-scroll-precision-mode -1) ; Ensure mouse wheel scroll up and down works
> (pop-to-buffer (current-buffer)))
>
> 1. "M-: (scroll-up) RET" (repeatedly)
> 2. C-v (repeatedly)
> 3. <wheel-down> (repeatedly)
>
> With all three methods, at first Emacs gradually scrolls the image, but
> then when I reach the bottom of the image, the image disappears entirely
> as Emacs scrolls past it all at once.
>
>>> Even more unexpectedly, when point is before the image, running
>>> `scroll-up' repeatedly eventually scrolls back to the top of the image:
>>>
>>> (with-current-buffer (get-buffer-create "*test-scroll-image*")
>>> (erase-buffer)
>>> (insert-image (create-image "splash.png" nil nil :scale 5))
>>> (goto-char (point-min))
>>> (pop-to-buffer (current-buffer)))
>>
>> I do see this, but why is that a problem? You supposed to use
>> scroll-up-command instead, which handles these marginal cases much
>> better. scroll-up itself is not smart enough to avoid the perceived
>> "scroll back to top", which is actually caused by the fact that we
>> zero out window-vscroll (which is how we handle scrolling past large
>> images).
>
> You're right. This is not a problem in practice. When point is before
> the image, both C-v and <wheel-down> produce the same behavior as above.
>
> Joseph
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#69972: 29.1; Unexpected behavior when scrolling images
2024-03-25 1:06 ` Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-03-25 8:34 ` Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-03-25 12:23 ` Eli Zaretskii
2024-03-25 19:43 ` Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors
1 sibling, 1 reply; 8+ messages in thread
From: Eli Zaretskii @ 2024-03-25 12:23 UTC (permalink / raw)
To: Joseph Turner; +Cc: 69972
> From: Joseph Turner <joseph@ushin.org>
> Cc: 69972@debbugs.gnu.org
> Date: Sun, 24 Mar 2024 18:06:44 -0700
>
> (with-current-buffer (get-buffer-create "*test-scroll-image*")
> (erase-buffer)
> (insert-image (create-image "splash.png" nil nil
> ;; Scale the image more if it doesn't take up the whole window.
> :scale 5))
> (goto-char (point-max))
> (pixel-scroll-precision-mode -1) ; Ensure mouse wheel scroll up and down works
> (pop-to-buffer (current-buffer)))
>
> 1. "M-: (scroll-up) RET" (repeatedly)
> 2. C-v (repeatedly)
> 3. <wheel-down> (repeatedly)
>
> With all three methods, at first Emacs gradually scrolls the image, but
> then when I reach the bottom of the image, the image disappears entirely
> as Emacs scrolls past it all at once.
Why is that a problem? The default Emacs scrolling commands don't
guarantee smooth constant-rate scrolling, they guarantee only that you
get to see all the portions of the image, without missing any. So
when you get to the end of the image, there's a heuristic that decides
whether we can scroll past the image, and that is what you see.
I see no bug here.
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#69972: 29.1; Unexpected behavior when scrolling images
2024-03-25 12:23 ` Eli Zaretskii
@ 2024-03-25 19:43 ` Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-03-28 6:24 ` Eli Zaretskii
0 siblings, 1 reply; 8+ messages in thread
From: Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-03-25 19:43 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 69972
Eli Zaretskii <eliz@gnu.org> writes:
>> From: Joseph Turner <joseph@ushin.org>
>> Cc: 69972@debbugs.gnu.org
>> Date: Sun, 24 Mar 2024 18:06:44 -0700
>>
>> 1. "M-: (scroll-up) RET" (repeatedly)
>> 2. C-v (repeatedly)
>> 3. <wheel-down> (repeatedly)
>>
>> With all three methods, at first Emacs gradually scrolls the image, but
>> then when I reach the bottom of the image, the image disappears entirely
>> as Emacs scrolls past it all at once.
>
> Why is that a problem? The default Emacs scrolling commands don't
> guarantee smooth constant-rate scrolling, they guarantee only that you
> get to see all the portions of the image, without missing any. So
> when you get to the end of the image, there's a heuristic that decides
> whether we can scroll past the image, and that is what you see.
>
> I see no bug here.
With pixel-scroll-precision-mode enabled and at least one character after
the image, I am able to smoothly scroll around the image.
(with-current-buffer (get-buffer-create "*test-scroll-image*")
(erase-buffer)
(insert-image (create-image "splash.png" nil nil :scale 10))
(insert " ") ;; There must be some text after the image
(goto-char (point-min))
(pixel-scroll-precision-mode 1)
(pop-to-buffer (current-buffer)))
However, if the window is scrolled to the right, then it is impossible
to scroll down:
(with-current-buffer (get-buffer-create "*test-scroll-image*")
(erase-buffer)
(insert-image (create-image "splash.png" nil nil :scale 10))
(insert-char 8203)
(goto-char (point-min))
(pixel-scroll-precision-mode 1)
(pop-to-buffer (current-buffer))
(set-window-hscroll (get-buffer-window) 1)) ;; Image scrolled to right
In this buffer, if I attempt to scroll down with the mouse wheel, I
immediately get "End of buffer" error and the image does not move.
Thank you!
Joseph
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#69972: 29.1; Unexpected behavior when scrolling images
2024-03-25 19:43 ` Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-03-28 6:24 ` Eli Zaretskii
2024-03-28 11:12 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
0 siblings, 1 reply; 8+ messages in thread
From: Eli Zaretskii @ 2024-03-28 6:24 UTC (permalink / raw)
To: Joseph Turner, Po Lu; +Cc: 69972
> From: Joseph Turner <joseph@ushin.org>
> Cc: 69972@debbugs.gnu.org
> Date: Mon, 25 Mar 2024 12:43:39 -0700
>
> >> With all three methods, at first Emacs gradually scrolls the image, but
> >> then when I reach the bottom of the image, the image disappears entirely
> >> as Emacs scrolls past it all at once.
> >
> > Why is that a problem? The default Emacs scrolling commands don't
> > guarantee smooth constant-rate scrolling, they guarantee only that you
> > get to see all the portions of the image, without missing any. So
> > when you get to the end of the image, there's a heuristic that decides
> > whether we can scroll past the image, and that is what you see.
> >
> > I see no bug here.
>
> With pixel-scroll-precision-mode enabled and at least one character after
> the image, I am able to smoothly scroll around the image.
pixel-scroll-precision-mode indeed attempts to make the scrolling much
more smooth than the default scrolling in these cases.
> However, if the window is scrolled to the right, then it is impossible
> to scroll down:
>
> (with-current-buffer (get-buffer-create "*test-scroll-image*")
> (erase-buffer)
> (insert-image (create-image "splash.png" nil nil :scale 10))
> (insert-char 8203)
> (goto-char (point-min))
> (pixel-scroll-precision-mode 1)
> (pop-to-buffer (current-buffer))
> (set-window-hscroll (get-buffer-window) 1)) ;; Image scrolled to right
>
> In this buffer, if I attempt to scroll down with the mouse wheel, I
> immediately get "End of buffer" error and the image does not move.
Then maybe Po Lu (CC'ed) could look into this and see if
pixel-scroll-precision-mode could do better in this case.
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#69972: 29.1; Unexpected behavior when scrolling images
2024-03-28 6:24 ` Eli Zaretskii
@ 2024-03-28 11:12 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
0 siblings, 0 replies; 8+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-03-28 11:12 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: Joseph Turner, 69972
Eli Zaretskii <eliz@gnu.org> writes:
> Then maybe Po Lu (CC'ed) could look into this and see if
> pixel-scroll-precision-mode could do better in this case.
Thanks. I think a solution to the OP's problem was proposed in a
previous bug report and we're still awaiting feedback, though at the
moment I don't have its bug number at hand.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2024-03-28 11:12 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-03-24 9:07 bug#69972: 29.1; Unexpected behavior when scrolling images Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-03-24 9:42 ` Eli Zaretskii
2024-03-25 1:06 ` Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-03-25 8:34 ` Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-03-25 12:23 ` Eli Zaretskii
2024-03-25 19:43 ` Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-03-28 6:24 ` Eli Zaretskii
2024-03-28 11:12 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.