summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2025-03-30 10:29:57 +0300
committerEli Zaretskii <eliz@gnu.org>2025-03-30 10:29:57 +0300
commit209b7e7444df5cb164679c0e55f46cba424ad13c (patch)
treee070a94d36c14a949a7d458e03de6706b943654b
parent651418895d507001f161e2e22ca9b85647bca19b (diff)
downloademacs-209b7e7444df5cb164679c0e55f46cba424ad13c.tar.gz
emacs-209b7e7444df5cb164679c0e55f46cba424ad13c.tar.bz2
emacs-209b7e7444df5cb164679c0e55f46cba424ad13c.zip
Fix display of overlay arrow immediately after invisible text
* src/xdisp.c (overlay_arrow_at_row): Allow the overlay arrow's marker position to be anywhere between the row's start and end charpos. This keeps the overlay arrow on display even when the preceding text is invisible. (Bug#54843)
-rw-r--r--src/xdisp.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/xdisp.c b/src/xdisp.c
index f2b158f00e3..2c676c09827 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -16939,9 +16939,18 @@ overlay_arrow_at_row (struct it *it, struct glyph_row *row)
val = find_symbol_value (var);
+ ptrdiff_t arrow_marker_pos;
if (MARKERP (val)
&& current_buffer == XMARKER (val)->buffer
- && (MATRIX_ROW_START_CHARPOS (row) == marker_position (val)))
+ && (arrow_marker_pos = marker_position (val),
+ /* Normally, the marker position will be at the row's
+ start charpos. But if the previous text lines are
+ invisible, the row's start charpos includes those
+ invisible lines, so we make a more general test that
+ the marker position is anywhere between the start and
+ the end character positions of this row. */
+ (MATRIX_ROW_START_CHARPOS (row) <= arrow_marker_pos
+ && arrow_marker_pos < MATRIX_ROW_END_CHARPOS (row))))
{
if (FRAME_WINDOW_P (it->f)
/* FIXME: if ROW->reversed_p is set, this should test