]> git.eshelyaron.com Git - emacs.git/commitdiff
Re-enable scroll-margin when cursor-motion optimization is disabled
authorEli Zaretskii <eliz@gnu.org>
Sun, 2 Aug 2020 15:27:33 +0000 (18:27 +0300)
committerEli Zaretskii <eliz@gnu.org>
Sun, 2 Aug 2020 15:27:33 +0000 (18:27 +0300)
* src/xdisp.c (try_window): Fix logic of disabling margins when
cursor is close to BOB or EOB.  Account for header-line, if any,
when computing the scroll margin in pixels.  (Bug#42653)

src/xdisp.c

index fc17014c0297459af81f356751f473316fa2e572..a8cd4dc853cc25fd78a784f91c1a2186204e6d33 100644 (file)
@@ -19223,18 +19223,20 @@ try_window (Lisp_Object window, struct text_pos pos, int flags)
       && !MINI_WINDOW_P (w))
     {
       int this_scroll_margin = window_scroll_margin (w, MARGIN_IN_PIXELS);
+      if (window_wants_header_line (w))
+       this_scroll_margin += CURRENT_HEADER_LINE_HEIGHT (w);
       start_display (&it, w, pos);
 
       if ((w->cursor.y >= 0    /* not vscrolled */
           && w->cursor.y < this_scroll_margin
-          && CHARPOS (pos) > BEGV
-           && it_charpos < ZV)
+          && CHARPOS (pos) > BEGV)
          /* rms: considering make_cursor_line_fully_visible_p here
             seems to give wrong results.  We don't want to recenter
             when the last line is partly visible, we want to allow
             that case to be handled in the usual way.  */
-          || w->cursor.y > (it.last_visible_y - partial_line_height (&it)
-                            - this_scroll_margin - 1))
+         || (it_charpos < ZV   /* if EOB is visible, disable bottom margin */
+             && w->cursor.y > (it.last_visible_y - partial_line_height (&it)
+                               - this_scroll_margin - 1)))
        {
          w->cursor.vpos = -1;
          clear_glyph_matrix (w->desired_matrix);