Fix 'move-to-window-line' when EOB is on last screen line
* src/window.c (displayed_window_lines): Fix an off-by-one error when the bottom of the last display line is exactly at window's last pixel. Remove kludgey fix for TTY frames that is no longer needed. (Bug#15760) (Fmove_to_window_line): Doc fix. * doc/lispref/positions.texi (Screen Lines): Clarify and make more accurate the documentation of 'move-to-window-line'.
This commit is contained in:
parent
8040d99b62
commit
defdee72c4
2 changed files with 16 additions and 16 deletions
|
@ -590,10 +590,12 @@ any buffer, whether or not it is currently displayed in some window.
|
|||
@deffn Command move-to-window-line count
|
||||
This function moves point with respect to the text currently displayed
|
||||
in the selected window. It moves point to the beginning of the screen
|
||||
line @var{count} screen lines from the top of the window. If
|
||||
@var{count} is negative, that specifies a position
|
||||
@w{@minus{}@var{count}} lines from the bottom (or the last line of the
|
||||
buffer, if the buffer ends above the specified screen position).
|
||||
line @var{count} screen lines from the top of the window; zero means
|
||||
the topmost line. If @var{count} is negative, that specifies a
|
||||
position @w{@minus{}@var{count}} lines from the bottom (or the last
|
||||
line of the buffer, if the buffer ends above the specified screen
|
||||
position); thus, @var{count} of -1 specifies the last fully visible
|
||||
screen line of the window.
|
||||
|
||||
If @var{count} is @code{nil}, then point moves to the beginning of the
|
||||
line in the middle of the window. If the absolute value of @var{count}
|
||||
|
@ -604,8 +606,8 @@ location onto the screen.
|
|||
|
||||
In an interactive call, @var{count} is the numeric prefix argument.
|
||||
|
||||
The value returned is the window line number point has moved to, with
|
||||
the top line in the window numbered 0.
|
||||
The value returned is the screen line number point has moved to,
|
||||
relative to the top line of the window.
|
||||
@end deffn
|
||||
|
||||
@vindex move-to-window-group-line-function
|
||||
|
|
18
src/window.c
18
src/window.c
|
@ -5651,21 +5651,14 @@ displayed_window_lines (struct window *w)
|
|||
bottom_y = line_bottom_y (&it);
|
||||
bidi_unshelve_cache (itdata, false);
|
||||
|
||||
/* rms: On a non-window display,
|
||||
the value of it.vpos at the bottom of the screen
|
||||
seems to be 1 larger than window_box_height (w).
|
||||
This kludge fixes a bug whereby (move-to-window-line -1)
|
||||
when ZV is on the last screen line
|
||||
moves to the previous screen line instead of the last one. */
|
||||
if (! FRAME_WINDOW_P (XFRAME (w->frame)))
|
||||
height++;
|
||||
|
||||
/* Add in empty lines at the bottom of the window. */
|
||||
if (bottom_y < height)
|
||||
{
|
||||
int uy = FRAME_LINE_HEIGHT (it.f);
|
||||
it.vpos += (height - bottom_y + uy - 1) / uy;
|
||||
}
|
||||
else if (bottom_y == height)
|
||||
it.vpos++;
|
||||
|
||||
if (old_buffer)
|
||||
set_buffer_internal (old_buffer);
|
||||
|
@ -5940,7 +5933,12 @@ DEFUN ("move-to-window-line", Fmove_to_window_line, Smove_to_window_line,
|
|||
doc: /* Position point relative to window.
|
||||
ARG nil means position point at center of window.
|
||||
Else, ARG specifies vertical position within the window;
|
||||
zero means top of window, negative means relative to bottom of window. */)
|
||||
zero means top of window, negative means relative to bottom
|
||||
of window, -1 meaning the last fully visible display line
|
||||
of the window.
|
||||
|
||||
Value is the screen line of the window point moved to, counting
|
||||
from the top of the window. */)
|
||||
(Lisp_Object arg)
|
||||
{
|
||||
struct window *w = XWINDOW (selected_window);
|
||||
|
|
Loading…
Add table
Reference in a new issue