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)
This commit is contained in:
parent
33cba5405c
commit
4a20174d79
1 changed files with 23 additions and 0 deletions
23
src/xdisp.c
23
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)
|
||||
|
|
Loading…
Add table
Reference in a new issue