emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: window.c: suggested patch window_scroll_pixel_based


From: Martin Fredriksson
Subject: Re: window.c: suggested patch window_scroll_pixel_based
Date: Tue, 31 Dec 2002 07:27:10 +0100

On måndag, dec 30, 2002, at 16:27 Europe/Stockholm, Richard Stallman wrote:

I suggest following patch to window.c (window_scroll_pixel_based), to
    make 'scroll-down' be able to reach the start of the buffer.  This
patch partly backs out of 1.433 (rms, 2002/12/23). I apologize if I have misunderstood the issue. I have verified the patch on OpenBSD/X11
    and OSX/Carbon.

This problem does not happen for me, and your change reintroduces code
that seems to be entirely wrong as far as I can tell.  Why do you
think it is right to test `start' here?  It appears to me that BEGV
is correct.

Line 4151--4152:
  if ((n > 0 && IT_CHARPOS (it) == ZV)
      || (n < 0 && IT_CHARPOS (it) == BEGV))

The comparison with ZV seems to be correct since the function
'move_it_to' (called on line 4144) never sets IT_CHARPOS(it) to ZV
unless ZV is visible in the same window.

For backwards movement, however, the function
'move_it_vertically_backword' (called on line 4142) sets
IT_CHARPOS(it) to BEGV when BEGV is less than a screenfull from
current position (as it should).  The comparison "IT_CHARPOS(it) ==
BEGV" now becomes true, and the move is aborted (with
Fsignal(Qbeginning_of_buffer), even though IT_CHARPOS(it) is not
visible.  Since the window is not set until 'set_marker_restricted',
etc, is called on line 4196--, the result is that the window is not
scrolled as it should be.

I believe that it is correct to test IT_CHARPOS(it) == CHARPOS(start)
instead, since that is true when the scroll should not be done (when the
new start position is the same as the current).  From what I can see and
understand, it is perfectly ok for IT_CHARPOS(it) == BEGV, and scrolling
should still be done.

Note that I've only tested with scroll_preserve_screen_position
non-zero.  I do not know if that complicates things.  I must admit I
have a hard time understanding all the issues involved here.

/m




reply via email to

[Prev in Thread] Current Thread [Next in Thread]