changeset 64340:ed5290d55baa

Fix redisplay loop in last change. (IT_POS_VALID_AFTER_MOVE_P): New macro. (move_it_vertically_backward, move_it_by_lines): Use it.
author Kim F. Storm <storm@cua.dk>
date Fri, 15 Jul 2005 11:32:15 +0000
parents c62fc2db1d41
children e461e45e6f66
files src/xdisp.c
diffstat 1 files changed, 13 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/xdisp.c	Fri Jul 15 11:31:55 2005 +0000
+++ b/src/xdisp.c	Fri Jul 15 11:32:15 2005 +0000
@@ -5873,6 +5873,15 @@
 	     Moving an iterator without producing glyphs
  ***********************************************************************/
 
+/* Check if iterator is at a position corresponding to a valid buffer
+   position after some move_it_ call.  */
+
+#define IT_POS_VALID_AFTER_MOVE_P(it)			\
+  ((it)->method == GET_FROM_STRING			\
+   ? IT_STRING_CHARPOS (*it) == 0			\
+   : 1)
+
+
 /* Move iterator IT to a specified buffer or X position within one
    line on the display without producing glyphs.
 
@@ -6386,7 +6395,7 @@
       move_it_to (&it2, start_pos, -1, -1, it2.vpos + 1,
 		  MOVE_TO_POS | MOVE_TO_VPOS);
     }
-  while (it2.method != GET_FROM_BUFFER);
+  while (!IT_POS_VALID_AFTER_MOVE_P (&it2));
   xassert (IT_CHARPOS (*it) >= BEGV);
   it3 = it2;
 
@@ -6586,7 +6595,7 @@
   else if (dvpos > 0)
     {
       move_it_to (it, -1, -1, -1, it->vpos + dvpos, MOVE_TO_VPOS);
-      if (it->method != GET_FROM_BUFFER)
+      if (!IT_POS_VALID_AFTER_MOVE_P (it))
 	move_it_to (it, IT_CHARPOS (*it) + 1, -1, -1, -1, MOVE_TO_POS);
     }
   else
@@ -6608,13 +6617,13 @@
       reseat (it, it->current.pos, 1);
 
       /* Move further back if we end up in a string or an image.  */
-      while (it->method != GET_FROM_BUFFER)
+      while (!IT_POS_VALID_AFTER_MOVE_P (it))
 	{
 	  /* First try to move to start of display line.  */
 	  dvpos += it->vpos;
 	  move_it_vertically_backward (it, 0);
 	  dvpos -= it->vpos;
-	  if (it->method == GET_FROM_BUFFER)
+	  if (IT_POS_VALID_AFTER_MOVE_P (it))
 	    break;
 	  /* If start of line is still in string or image,
 	     move further back.  */