diff options
author | Richard M. Stallman <rms@gnu.org> | 1997-05-27 04:59:29 +0000 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 1997-05-27 04:59:29 +0000 |
commit | 1baa6c56adb8f945d0775ca09f8ee1a6e4a2b654 (patch) | |
tree | 2cc3bcdd9ae8d02e6bd99a81c6723323785d1ce2 | |
parent | f3f1fe9ed46e7dda7977d762683ecb4e1ad3645f (diff) | |
download | emacs-1baa6c56adb8f945d0775ca09f8ee1a6e4a2b654.tar.gz |
(compute_motion): Return correctly if skip_invisible
takes us past TO.
-rw-r--r-- | src/indent.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/indent.c b/src/indent.c index 507b8e36cbe..66392353828 100644 --- a/src/indent.c +++ b/src/indent.c @@ -997,6 +997,8 @@ compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width, { while (pos == next_boundary) { + int newpos; + /* If the caller says that the screen position came from an earlier call to compute_motion, then we've already accounted for the overlay strings at point. This is only true the first time @@ -1020,7 +1022,12 @@ compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width, (but not necessarily all that there are here), and store in next_boundary the next position where we need to call skip_invisible. */ - pos = skip_invisible (pos, &next_boundary, to, window); + newpos = skip_invisible (pos, &next_boundary, to, window); + + if (newpos >= to) + goto after_loop; + + pos = newpos; } /* Handle right margin. */ @@ -1361,6 +1368,8 @@ compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width, } } + after_loop: + /* Remember any final width run in the cache. */ if (current_buffer->width_run_cache && width_run_width == 1 |