changeset 19015:533ccefb099d

(redisplay_window): When text has not changed, call compute_motion starting from the former PT if possible. If PT is unchanged from w->last_point, don't do compute_motion at all.
author Richard M. Stallman <rms@gnu.org>
date Mon, 28 Jul 1997 04:55:45 +0000
parents 63c862461563
children 8f73ca5bbaeb
files src/xdisp.c
diffstat 1 files changed, 31 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/xdisp.c	Mon Jul 28 01:19:19 1997 +0000
+++ b/src/xdisp.c	Mon Jul 28 04:55:45 1997 +0000
@@ -1839,13 +1839,37 @@
     {
       int this_scroll_margin = scroll_margin;
 
-      pos = *compute_motion (startp, 0, (hscroll ? 1 - hscroll : 0), 0,
-			     PT, height,
-			     /* BUG FIX: See the comment of
-                                Fpos_visible_in_window_p (window.c).  */
-			     - (1 << (BITS_PER_SHORT - 1)),
-			     width, hscroll,
-			     pos_tab_offset (w, startp), w);
+      /* Find where PT is located now on the frame.  */
+      if (PT == w->last_point)
+	{
+	  pos.hpos = (w->last_point_x
+		      + (hscroll ? 1 - hscroll : 0)
+		      - WINDOW_LEFT_MARGIN (w));
+	  pos.vpos = w->last_point_y;
+	  pos.bufpos = PT;
+	}
+      else if (PT > w->last_point)
+	{
+	  pos = *compute_motion (w->last_point, w->last_point_y,
+				 w->last_point_x + (hscroll ? 1 - hscroll : 0),
+				 0,
+				 PT, height,
+				 /* BUG FIX: See the comment of
+				    Fpos_visible_in_window_p (window.c).  */
+				 - (1 << (BITS_PER_SHORT - 1)),
+				 width, hscroll,
+				 pos_tab_offset (w, startp), w);
+	}
+      else
+	{
+	  pos = *compute_motion (startp, 0, (hscroll ? 1 - hscroll : 0), 0,
+				 PT, height,
+				 /* BUG FIX: See the comment of
+				    Fpos_visible_in_window_p (window.c).  */
+				 - (1 << (BITS_PER_SHORT - 1)),
+				 width, hscroll,
+				 pos_tab_offset (w, startp), w);
+	}
 
       /* Don't use a scroll margin that is negative or too large.  */
       if (this_scroll_margin < 0)