summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ChangeLog6
-rw-r--r--src/xdisp.c18
2 files changed, 18 insertions, 6 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 081a6b8631c..1422f6b1f68 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -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',
diff --git a/src/xdisp.c b/src/xdisp.c
index 6daa9131154..3974810908a 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -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