]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix bug #16148 with visual-mode cursor motion and whitespace-newline-mode.
authorEli Zaretskii <eliz@gnu.org>
Sat, 14 Dec 2013 19:32:50 +0000 (21:32 +0200)
committerEli Zaretskii <eliz@gnu.org>
Sat, 14 Dec 2013 19:32:50 +0000 (21:32 +0200)
 src/xdisp.c (Fmove_point_visually): Expect overshoot in move_it_to
 when character at point is displayed from a display vector.

src/ChangeLog
src/xdisp.c

index 081a6b8631c9f8adef4bb52a7530ff3c46189b54..1422f6b1f683278fa873e8d31da55890a9b7a102 100644 (file)
@@ -1,3 +1,9 @@
+2013-12-14  Eli Zaretskii  <eliz@gnu.org>
+
+       * xdisp.c (Fmove_point_visually): Expect overshoot in move_it_to
+       when character at point is displayed from a display vector.
+       (Bug#16148)
+
 2013-12-14  Teodor Zlatanov  <tzz@lifelogs.com>
 
        * gnutls.c: Replace `:verify_hostname_error' with `:verify_error',
index 6daa9131154c1832f2cd4bd1a65280f9837e295c..3974810908af1c70b5692033b17f633c36d60e27 100644 (file)
@@ -20505,11 +20505,12 @@ Value is the new character position of point.  */)
       SET_TEXT_POS (pt, PT, PT_BYTE);
       start_display (&it, w, pt);
 
-      if (it.cmp_it.id < 0
-         && it.method == GET_FROM_STRING
-         && it.area == TEXT_AREA
-         && it.string_from_display_prop_p
-         && (it.sp > 0 && it.stack[it.sp - 1].method == GET_FROM_BUFFER))
+      if ((it.cmp_it.id < 0
+          && it.method == GET_FROM_STRING
+          && it.area == TEXT_AREA
+          && it.string_from_display_prop_p
+          && (it.sp > 0 && it.stack[it.sp - 1].method == GET_FROM_BUFFER))
+         || it.method == GET_FROM_DISPLAY_VECTOR)
        overshoot_expected = true;
 
       /* Find the X coordinate of point.  We start from the beginning
@@ -20553,7 +20554,12 @@ Value is the new character position of point.  */)
         glyph to the left of point, so we need to correct the X
         coordinate.  */
       if (overshoot_expected)
-       pt_x += pixel_width;
+       {
+         if (it.bidi_p)
+           pt_x += pixel_width * it.bidi_it.scan_dir;
+         else
+           pt_x += pixel_width;
+       }
 
       /* Compute target X coordinate, either to the left or to the
         right of point.  On TTY frames, all characters have the same