emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] emacs-25 874a10b: Fix scrolling under scroll-preserve-scre


From: Eli Zaretskii
Subject: [Emacs-diffs] emacs-25 874a10b: Fix scrolling under scroll-preserve-screen-position on TTY
Date: Mon, 18 Jan 2016 19:54:53 +0000

branch: emacs-25
commit 874a10b13fb2438322ac1c9b437720ada713631b
Author: Eli Zaretskii <address@hidden>
Commit: Eli Zaretskii <address@hidden>

    Fix scrolling under scroll-preserve-screen-position on TTY
    
    * src/window.c (window_scroll_line_based): When setting point to
    preserve screen coordinates, don't let cursor enter either of the
    two scroll margins.  (Bug#22395)
---
 src/window.c |   21 +++++++++++++++++++--
 1 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/src/window.c b/src/window.c
index 1a75342..2eacc3a 100644
--- a/src/window.c
+++ b/src/window.c
@@ -5212,6 +5212,7 @@ window_scroll_line_based (Lisp_Object window, int n, bool 
whole, bool noerror)
       w->force_start = true;
 
       if (!NILP (Vscroll_preserve_screen_position)
+         && this_scroll_margin == 0
          && (whole || !EQ (Vscroll_preserve_screen_position, Qt)))
        {
          SET_PT_BOTH (pos, pos_byte);
@@ -5237,8 +5238,16 @@ window_scroll_line_based (Lisp_Object window, int n, 
bool whole, bool noerror)
                         marker_byte_position (opoint_marker));
          else if (!NILP (Vscroll_preserve_screen_position))
            {
+             int nlines = window_scroll_preserve_vpos;
+
              SET_PT_BOTH (pos, pos_byte);
-             Fvertical_motion (original_pos, window, Qnil);
+             if (window_scroll_preserve_vpos < this_scroll_margin)
+               nlines = this_scroll_margin;
+             else if (window_scroll_preserve_vpos
+                      >= w->total_lines - this_scroll_margin)
+               nlines = w->total_lines - this_scroll_margin - 1;
+             Fvertical_motion (Fcons (make_number 
(window_scroll_preserve_hpos),
+                                      make_number (nlines)), window, Qnil);
            }
          else
            SET_PT (top_margin);
@@ -5264,8 +5273,16 @@ window_scroll_line_based (Lisp_Object window, int n, 
bool whole, bool noerror)
            {
              if (!NILP (Vscroll_preserve_screen_position))
                {
+                 int nlines = window_scroll_preserve_vpos;
+
                  SET_PT_BOTH (pos, pos_byte);
-                 Fvertical_motion (original_pos, window, Qnil);
+                 if (window_scroll_preserve_vpos < this_scroll_margin)
+                   nlines = this_scroll_margin;
+                 else if (window_scroll_preserve_vpos
+                          >= ht - this_scroll_margin)
+                   nlines = ht - this_scroll_margin - 1;
+                 Fvertical_motion (Fcons (make_number 
(window_scroll_preserve_hpos),
+                                          make_number (nlines)), window, Qnil);
                }
              else
                Fvertical_motion (make_number (-1), window, Qnil);



reply via email to

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