# HG changeset patch # User Kim F. Storm # Date 1121427135 0 # Node ID ed5290d55baac25c12b2fc2a904ce6c20d77e3a8 # Parent c62fc2db1d413f169995f495a05aacec1cd9068a Fix redisplay loop in last change. (IT_POS_VALID_AFTER_MOVE_P): New macro. (move_it_vertically_backward, move_it_by_lines): Use it. diff -r c62fc2db1d41 -r ed5290d55baa src/xdisp.c --- 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. */