From: Eli Zaretskii Date: Mon, 27 Jun 2016 15:27:58 +0000 (+0300) Subject: Fix 'move-to-window-line' when EOB is on last screen line X-Git-Tag: emacs-26.0.90~1840^2~157 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=defdee72c4de5e1aa4fc5c63b81983afc969769a;p=emacs.git 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'. --- diff --git a/doc/lispref/positions.texi b/doc/lispref/positions.texi index 1d748b87529..796a06615ae 100644 --- a/doc/lispref/positions.texi +++ b/doc/lispref/positions.texi @@ -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 diff --git a/src/window.c b/src/window.c index fe10241c45c..e123b89aae3 100644 --- a/src/window.c +++ b/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);