[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
emacs-27 bb1a948: Fix posn-at-point at beginning of a display string
From: |
Eli Zaretskii |
Subject: |
emacs-27 bb1a948: Fix posn-at-point at beginning of a display string |
Date: |
Fri, 26 Jun 2020 08:03:09 -0400 (EDT) |
branch: emacs-27
commit bb1a9481c9044ced4b7d7f514557b5ab508f80db
Author: Eli Zaretskii <eliz@gnu.org>
Commit: Eli Zaretskii <eliz@gnu.org>
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)
---
src/xdisp.c | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/src/xdisp.c b/src/xdisp.c
index a280b48..15901af 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -1782,6 +1782,12 @@ pos_visible_p (struct window *w, ptrdiff_t charpos, int
*x, int *y,
start_display (&it3, w, top);
if (start > CHARPOS (top))
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
the display string is a newline or if it is the
rightmost character on a line that is
@@ -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;
/* Account for line-number display, if IT3 still
didn't. This can happen if START - 1 is the
- first character on its display line. */
- if (!it3.line_number_produced_p
- && it.line_number_produced_p)
- top_x += it.lnum_pixel_width;
+ first or the last character on its display line. */
+ if (!it3.line_number_produced_p)
+ {
+ 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
found the display element whose character
position is CHARPOS. For the contingency that we
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- emacs-27 bb1a948: Fix posn-at-point at beginning of a display string,
Eli Zaretskii <=