summaryrefslogtreecommitdiff
path: root/src/indent.c
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2022-10-26 17:21:45 +0300
committerEli Zaretskii <eliz@gnu.org>2022-10-26 17:21:45 +0300
commitd6e08ff459df4cda9eda0c5c842313d02851ba3d (patch)
tree225d8c69d405bb01a2c48f0834c80d81bbf700c8 /src/indent.c
parent4a1e77ced6b3d00e9ffde5855dbc3df8f9ecd619 (diff)
downloademacs-d6e08ff459df4cda9eda0c5c842313d02851ba3d.tar.gz
emacs-d6e08ff459df4cda9eda0c5c842313d02851ba3d.tar.bz2
emacs-d6e08ff459df4cda9eda0c5c842313d02851ba3d.zip
Fix rare problems with current-column when text is invisible
* src/indent.c (scan_for_column, compute_motion): Don't miss compositions when the position to check for composition happens to be inside invisible text. (Bug#58791)
Diffstat (limited to 'src/indent.c')
-rw-r--r--src/indent.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/indent.c b/src/indent.c
index aa905f387bb..4bf597a339f 100644
--- a/src/indent.c
+++ b/src/indent.c
@@ -637,6 +637,11 @@ scan_for_column (ptrdiff_t *endpos, EMACS_INT *goalcol,
scan_byte = CHAR_TO_BYTE (scan);
if (scan >= end)
goto endloop;
+ /* We may have over-stepped cmp_it.stop_pos while skipping
+ the invisible text. If so, update cmp_it.stop_pos. */
+ if (scan > cmp_it.stop_pos && cmp_it.id < 0)
+ composition_reseat_it (&cmp_it, scan, scan_byte, end,
+ w, -1, NULL, Qnil);
}
/* Test reaching the goal column. We do this after skipping
@@ -1358,6 +1363,9 @@ compute_motion (ptrdiff_t from, ptrdiff_t frombyte, EMACS_INT fromvpos,
pos = newpos;
pos_byte = CHAR_TO_BYTE (pos);
}
+ if (newpos > cmp_it.stop_pos && cmp_it.id < 0)
+ composition_reseat_it (&cmp_it, pos, pos_byte, to,
+ win, -1, NULL, Qnil);
rarely_quit (++quit_count);
}