Commit bb1a9481 authored by Eli Zaretskii's avatar Eli Zaretskii
Browse files

Fix posn-at-point at beginning of a display string

* src/xdisp.c (pos_visible_p): Account for the line-number width
when the display string at CHARPOS ends in a newline.  (Bug#42039)
parent 0c4b0336
Pipeline #5940 failed with stage
in 10 seconds
...@@ -1782,6 +1782,12 @@ pos_visible_p (struct window *w, ptrdiff_t charpos, int *x, int *y, ...@@ -1782,6 +1782,12 @@ pos_visible_p (struct window *w, ptrdiff_t charpos, int *x, int *y,
start_display (&it3, w, top); start_display (&it3, w, top);
if (start > CHARPOS (top)) if (start > CHARPOS (top))
move_it_to (&it3, start - 1, -1, -1, -1, MOVE_TO_POS); move_it_to (&it3, start - 1, -1, -1, -1, MOVE_TO_POS);
/* Record the line-number width, if any. Do it here,
before subsequent calls to start_display etc. reset
the line_number_produced_p flag, and we can no
longer be sure we are not using stale info. */
int lnum_pixel_width =
it3.line_number_produced_p ? it3.lnum_pixel_width : 0;
/* Move forward one more line if the position before /* Move forward one more line if the position before
the display string is a newline or if it is the the display string is a newline or if it is the
rightmost character on a line that is rightmost character on a line that is
...@@ -1850,10 +1856,14 @@ pos_visible_p (struct window *w, ptrdiff_t charpos, int *x, int *y, ...@@ -1850,10 +1856,14 @@ pos_visible_p (struct window *w, ptrdiff_t charpos, int *x, int *y,
top_x = it3.current_x - it3.pixel_width; top_x = it3.current_x - it3.pixel_width;
/* Account for line-number display, if IT3 still /* Account for line-number display, if IT3 still
didn't. This can happen if START - 1 is the didn't. This can happen if START - 1 is the
first character on its display line. */ first or the last character on its display line. */
if (!it3.line_number_produced_p if (!it3.line_number_produced_p)
&& it.line_number_produced_p) {
top_x += it.lnum_pixel_width; if (lnum_pixel_width > 0)
top_x += lnum_pixel_width;
else if (it.line_number_produced_p)
top_x += it.lnum_pixel_width;
}
/* Normally, we would exit the above loop because we /* Normally, we would exit the above loop because we
found the display element whose character found the display element whose character
position is CHARPOS. For the contingency that we position is CHARPOS. For the contingency that we
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment