From c52e2e2fe4e5caf0fee470ec6c154825b33eb26a Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 16 Mar 2018 19:15:33 +0200 Subject: [PATCH] Fix 'posn-at-point' when line numbers are displayed * src/xdisp.c (pos_visible_p): For the leftmost glyph, adjust the X coordinate due to line-number display. (Bug#30834) --- src/xdisp.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/xdisp.c b/src/xdisp.c index 424f1735b5c..a97d4db6070 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -1381,6 +1381,29 @@ pos_visible_p (struct window *w, ptrdiff_t charpos, int *x, int *y, move_it_to (&it, charpos, -1, it.last_visible_y - 1, -1, (charpos >= 0 ? MOVE_TO_POS : 0) | MOVE_TO_Y); + /* Adjust for line numbers, if CHARPOS is at or beyond first_visible_x, + but we didn't yet produce the line-number glyphs. */ + if (!NILP (Vdisplay_line_numbers) + && it.current_x >= it.first_visible_x + && IT_CHARPOS (it) == charpos + && !it.line_number_produced_p) + { + /* If the pixel width of line numbers was not yet known, compute + it now. This usually happens in the first display line of a + window. */ + if (!it.lnum_pixel_width) + { + struct it it2; + void *it2data = NULL; + + SAVE_IT (it2, it, it2data); + move_it_by_lines (&it, 1); + it2.lnum_pixel_width = it.lnum_pixel_width; + RESTORE_IT (&it, &it2, it2data); + } + it.current_x += it.lnum_pixel_width; + } + if (charpos >= 0 && (((!it.bidi_p || it.bidi_it.scan_dir != -1) && IT_CHARPOS (it) >= charpos) -- 2.39.2