aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEli Zaretskii2020-06-26 15:01:44 +0300
committerEli Zaretskii2020-06-26 15:01:44 +0300
commitbb1a9481c9044ced4b7d7f514557b5ab508f80db (patch)
tree7700228849e90bb643cdccd7bc990299dca62068
parent0c4b033670e34898414b7f9af263d21d0923c7d7 (diff)
downloademacs-bb1a9481c9044ced4b7d7f514557b5ab508f80db.tar.gz
emacs-bb1a9481c9044ced4b7d7f514557b5ab508f80db.zip
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)
-rw-r--r--src/xdisp.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/xdisp.c b/src/xdisp.c
index a280b48de99..15901af9a8d 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,
1782 start_display (&it3, w, top); 1782 start_display (&it3, w, top);
1783 if (start > CHARPOS (top)) 1783 if (start > CHARPOS (top))
1784 move_it_to (&it3, start - 1, -1, -1, -1, MOVE_TO_POS); 1784 move_it_to (&it3, start - 1, -1, -1, -1, MOVE_TO_POS);
1785 /* Record the line-number width, if any. Do it here,
1786 before subsequent calls to start_display etc. reset
1787 the line_number_produced_p flag, and we can no
1788 longer be sure we are not using stale info. */
1789 int lnum_pixel_width =
1790 it3.line_number_produced_p ? it3.lnum_pixel_width : 0;
1785 /* Move forward one more line if the position before 1791 /* Move forward one more line if the position before
1786 the display string is a newline or if it is the 1792 the display string is a newline or if it is the
1787 rightmost character on a line that is 1793 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 top_x = it3.current_x - it3.pixel_width; 1856 top_x = it3.current_x - it3.pixel_width;
1851 /* Account for line-number display, if IT3 still 1857 /* Account for line-number display, if IT3 still
1852 didn't. This can happen if START - 1 is the 1858 didn't. This can happen if START - 1 is the
1853 first character on its display line. */ 1859 first or the last character on its display line. */
1854 if (!it3.line_number_produced_p 1860 if (!it3.line_number_produced_p)
1855 && it.line_number_produced_p) 1861 {
1856 top_x += it.lnum_pixel_width; 1862 if (lnum_pixel_width > 0)
1863 top_x += lnum_pixel_width;
1864 else if (it.line_number_produced_p)
1865 top_x += it.lnum_pixel_width;
1866 }
1857 /* Normally, we would exit the above loop because we 1867 /* Normally, we would exit the above loop because we
1858 found the display element whose character 1868 found the display element whose character
1859 position is CHARPOS. For the contingency that we 1869 position is CHARPOS. For the contingency that we