summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1997-05-27 04:59:29 +0000
committerRichard M. Stallman <rms@gnu.org>1997-05-27 04:59:29 +0000
commit1baa6c56adb8f945d0775ca09f8ee1a6e4a2b654 (patch)
tree2cc3bcdd9ae8d02e6bd99a81c6723323785d1ce2
parentf3f1fe9ed46e7dda7977d762683ecb4e1ad3645f (diff)
downloademacs-1baa6c56adb8f945d0775ca09f8ee1a6e4a2b654.tar.gz
(compute_motion): Return correctly if skip_invisible
takes us past TO.
-rw-r--r--src/indent.c11
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