aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEli Zaretskii2022-10-26 17:21:45 +0300
committerEli Zaretskii2022-10-26 17:21:45 +0300
commitd6e08ff459df4cda9eda0c5c842313d02851ba3d (patch)
tree225d8c69d405bb01a2c48f0834c80d81bbf700c8 /src
parent4a1e77ced6b3d00e9ffde5855dbc3df8f9ecd619 (diff)
downloademacs-d6e08ff459df4cda9eda0c5c842313d02851ba3d.tar.gz
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')
-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,
637 scan_byte = CHAR_TO_BYTE (scan); 637 scan_byte = CHAR_TO_BYTE (scan);
638 if (scan >= end) 638 if (scan >= end)
639 goto endloop; 639 goto endloop;
640 /* We may have over-stepped cmp_it.stop_pos while skipping
641 the invisible text. If so, update cmp_it.stop_pos. */
642 if (scan > cmp_it.stop_pos && cmp_it.id < 0)
643 composition_reseat_it (&cmp_it, scan, scan_byte, end,
644 w, -1, NULL, Qnil);
640 } 645 }
641 646
642 /* Test reaching the goal column. We do this after skipping 647 /* 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,
1358 pos = newpos; 1363 pos = newpos;
1359 pos_byte = CHAR_TO_BYTE (pos); 1364 pos_byte = CHAR_TO_BYTE (pos);
1360 } 1365 }
1366 if (newpos > cmp_it.stop_pos && cmp_it.id < 0)
1367 composition_reseat_it (&cmp_it, pos, pos_byte, to,
1368 win, -1, NULL, Qnil);
1361 1369
1362 rarely_quit (++quit_count); 1370 rarely_quit (++quit_count);
1363 } 1371 }