Sorry for the delayed answer - had to do some "real work" yesterday. ;-)
vroonhof(a)math.ethz.ch wrote:
> Now we only need to find out the real problem :-). Could you put a
> breakpoint in this code from window.c
>
> if (INTP (Vwindow_pixel_scroll_increment))
> fheight = XINT (Vwindow_pixel_scroll_increment);
> else if (!NILP (Vwindow_pixel_scroll_increment))
> default_face_height_and_width (window, &fheight, &fwidth);
>
> [I am particularly interested in the value of fheight at this point. I
> have a feeling it might be 0 (which is really bad, in that case please
> single step in to default_face_height_and_width to see where the 0 is
> coming from)]
You had the right feeling ...! After loading a file larger than the visible
buffer and pressing the PgDown key, it stops at the breakpoint in the
"else" branch (line 4107) and fheight has indeed a value of 0. But where
does the 0 come from? Good question. I must admit that single stepping
through default_face_height_and_width didn't make this clear to me. In
other words: If I set a second breakpoint at the next line, i.e.
if (Dynarr_length (dla) >= 1)
modeline = Dynarr_atp (dla, 0)->modeline;
dl = Dynarr_atp (dla, modeline);
then fheight already has a value of 14 (which is my current default font
size and thus correct), so it seems like default_face_height_and_width
returns the correct value after its first pass. But pressing PgDown a
second time still does not scroll, although one should think that fheight
is non-zero now. In fact, my debugger shows a value of +804392872 when
stopping again at the first breakpoint (overflow?). Continue to the 2nd
breakpoint and fheight == 14 again.
Don't know if this is of great help; let me know what I can do to provide
any further information.
> if (value > 0)
> {
> /* Go for partial display line scrolling. This just means bumping
> the clip by a reasonable amount and redisplaying, everything else
> remains unchanged. */
> if (!NILP (Vwindow_pixel_scroll_increment)
> &&
> Dynarr_length (dla) >= (1 + modeline)
> &&
> (dl->ascent - dl->top_clip) - fheight * value > 0)
> {
> WINDOW_TEXT_TOP_CLIP (w) += value * fheight;
> MARK_WINDOWS_CHANGED (w);
>
> [Your XEmacs is probably not scrolling because this if statement is
> true. Could you please find out why (fheight == 0 is the only
> reason I can think of).]
Looks like that ...
Markus