+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',
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
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