[Bug: 21.4.15] Bad interaction between scroll-conservatively, scroll-step and beginning-of-buffer.
Jerry James
james at xemacs.org
Mon May 3 13:09:54 EDT 2004
I wrote:
> With the divide by zero fix I just sent to xemacs-patches, I found that
> the profiler returned pretty much immediately upon pressing M-<, and
> reported that too little time to measure had passed ... whereupon there
> was a long delay until the buffer of interest was redrawn. So it looks
> like M-< executes pretty much instantly, and the problem is somewhere in
> redisplay.
Look at this code in redisplay.c (lines 6583 - 6598 in current CVS):
/* We still haven't gotten the window regenerated with point
visible. Next we try scrolling a little and see if point comes
back onto the screen. */
if (scroll_step > 0)
{
int scrolled = scroll_conservatively;
for (; scrolled >= 0; scrolled -= scroll_step)
{
startp = vmotion (w, startp,
(pointm < startp) ? -scroll_step : scroll_step, 0);
regenerate_window (w, startp, pointm, DESIRED_DISP);
if (point_visible (w, pointm, DESIRED_DISP))
goto regeneration_done;
}
}
Setting a breakpoint here with GDB shows that this part of the code is
NOT hit when doing M->, but is when doing M-<. Basically, on M-< with
Lawrence's variable settings, we are scrolling the buffer back one line
at a time and asking, "Are we there yet? I have to go to the bathroom!
Jimmy's touching me!"
If the place we are trying to reach is "close", this makes sense. So
why don't we get here when doing M->? Does some code elsewhere note
that we are going "far away" and skip this altogether somehow?
--
Jerry James
http://www.ittc.ku.edu/~james/
More information about the XEmacs-Beta
mailing list