Mercurial > emacs
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. */