]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix 'posn-at-point' when line numbers are displayed
authorEli Zaretskii <eliz@gnu.org>
Fri, 16 Mar 2018 17:15:33 +0000 (19:15 +0200)
committerAndrew G Cohen <cohen@andy.bu.edu>
Tue, 11 Dec 2018 06:17:51 +0000 (14:17 +0800)
* src/xdisp.c (pos_visible_p): For the leftmost glyph, adjust the X
coordinate due to line-number display.  (Bug#30834)

src/xdisp.c

index 424f1735b5ccf73bb705172808ea3ed98bd90b21..a97d4db60705d9a51a9fbfa4c62a74c5b7e12964 100644 (file)
@@ -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)