[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: set-window-vscroll causes infinite loop in redisplay
From: |
Kim F. Storm |
Subject: |
Re: set-window-vscroll causes infinite loop in redisplay |
Date: |
26 Feb 2003 01:20:51 +0100 |
User-agent: |
Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50 |
"D. Goel" <address@hidden> writes:
> hello
>
> I can get set-window-vscroll to work from M-: or from inside functions
> containing that one single command.
>
> Example:
>
> (defun vel-scroll-up-fractional (acc)
> (set-window-vscroll nil acc))
>
> works just fine when acc is 0.5
>
> However,
> try
>
> (defun vel-scroll-up (amount acc)
> (scroll-up amount)
> (set-window-vscroll nil acc))
>
> where amount is 0 and acc is 0.5. (the first one is a dummy line
> supposed to do nothing here..)
>
> And the second line seems to have no effect at all.
>
I can confirm this (not) happening here too.
The problem seems to that after a scroll (even a zero scroll), the
function window_scroll_pixel_based sets w->force_start = Qt, which
later causes the redisplay engine to set w->vscroll to 0.
Since this happens during redisplay, the set-window-vscroll
function has already been called, and the explicit setting of
w->vscroll is lost.
The following version is one way to work-around this problem:
(defun vel-scroll-up (amount acc)
(scroll-up amount)
(sit-for 0)
(set-window-vscroll nil acc))
I think the proper fix is to define a separate w->vscroll_extra member
(controlled via set-window-vscroll) which specifies the smooth scroll
offset the user wants ... and let the automatic vscroll adjustment
take this into account (except at the top and bottom of the buffer).
--
Kim F. Storm <address@hidden> http://www.cua.dk