emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] /srv/bzr/emacs/trunk r100623: Avoid recentering when lines


From: Eli Zaretskii
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r100623: Avoid recentering when lines differ in their height.
Date: Sun, 20 Jun 2010 21:04:30 +0300
User-agent: Bazaar (2.0.3)

------------------------------------------------------------
revno: 100623
committer: Eli Zaretskii <address@hidden>
branch nick: trunk
timestamp: Sun 2010-06-20 21:04:30 +0300
message:
  Avoid recentering when lines differ in their height.
  
   xdisp.c (try_scrolling): When scroll-conservatively is set to
   most-positive-fixnum, be extra accurate when scrolling window
   start, to avoid missing the cursor line.
modified:
  src/ChangeLog
  src/xdisp.c
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2010-06-19 09:40:15 +0000
+++ b/src/ChangeLog     2010-06-20 18:04:30 +0000
@@ -1,3 +1,9 @@
+2010-06-20  Eli Zaretskii  <address@hidden>
+
+       * xdisp.c (try_scrolling): When scroll-conservatively is set to
+       most-positive-fixnum, be extra accurate when scrolling window
+       start, to avoid missing the cursor line.
+
 2010-06-19  Eli Zaretskii  <address@hidden>
 
        * xdisp.c (try_scrolling): Compute the limit for searching point

=== modified file 'src/xdisp.c'
--- a/src/xdisp.c       2010-06-19 11:57:19 +0000
+++ b/src/xdisp.c       2010-06-20 18:04:30 +0000
@@ -13486,7 +13486,26 @@
        return SCROLLING_FAILED;
 
       start_display (&it, w, startp);
-      move_it_vertically (&it, amount_to_scroll);
+      if (scroll_max < INT_MAX)
+       move_it_vertically (&it, amount_to_scroll);
+      else
+       {
+         /* Extra precision for users who set scroll-conservatively
+            to most-positive-fixnum: make sure the amount we scroll
+            the window start is never less than amount_to_scroll,
+            which was computed as distance from window bottom to
+            point.  This matters when lines at window top and lines
+            below window bottom have different height.  */
+         struct it it1 = it;
+         /* We use a temporary it1 because line_bottom_y can modify
+            its argument, if it moves one line down; see there.  */
+         int start_y = line_bottom_y (&it1);
+
+         do {
+           move_it_by_lines (&it, 1, 1);
+           it1 = it;
+         } while (line_bottom_y (&it1) - start_y < amount_to_scroll);
+       }
 
       /* If STARTP is unchanged, move it down another screen line.  */
       if (CHARPOS (it.current.pos) == CHARPOS (startp))


reply via email to

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