emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master defdee7: Fix 'move-to-window-line' when EOB is on l


From: Eli Zaretskii
Subject: [Emacs-diffs] master defdee7: Fix 'move-to-window-line' when EOB is on last screen line
Date: Mon, 27 Jun 2016 15:29:27 +0000 (UTC)

branch: master
commit defdee72c4de5e1aa4fc5c63b81983afc969769a
Author: Eli Zaretskii <address@hidden>
Commit: Eli Zaretskii <address@hidden>

    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'.
---
 doc/lispref/positions.texi |   14 ++++++++------
 src/window.c               |   18 ++++++++----------
 2 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/doc/lispref/positions.texi b/doc/lispref/positions.texi
index 1d748b8..796a066 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
address@hidden is negative, that specifies a position
address@hidden@address@hidden 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 @address@hidden@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 fe10241..e123b89 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);



reply via email to

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