emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] trunk r115527: Fix bug #16148 with visual-mode cursor moti


From: Eli Zaretskii
Subject: [Emacs-diffs] trunk r115527: Fix bug #16148 with visual-mode cursor motion and whitespace-newline-mode.
Date: Sat, 14 Dec 2013 19:33:32 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 115527
revision-id: address@hidden
parent: address@hidden
fixes bug: http://debbugs.gnu.org/16148
committer: Eli Zaretskii <address@hidden>
branch nick: trunk
timestamp: Sat 2013-12-14 21:32:50 +0200
message:
  Fix bug #16148 with visual-mode cursor motion and whitespace-newline-mode.
  
   src/xdisp.c (Fmove_point_visually): Expect overshoot in move_it_to
   when character at point is displayed from a display vector.
modified:
  src/ChangeLog                  changelog-20091113204419-o5vbwnq5f7feedwu-1438
  src/xdisp.c                    xdisp.c-20091113204419-o5vbwnq5f7feedwu-240
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2013-12-14 18:04:09 +0000
+++ b/src/ChangeLog     2013-12-14 19:32:50 +0000
@@ -1,3 +1,9 @@
+2013-12-14  Eli Zaretskii  <address@hidden>
+
+       * 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  <address@hidden>
 
        * gnutls.c: Replace `:verify_hostname_error' with `:verify_error',

=== modified file 'src/xdisp.c'
--- a/src/xdisp.c       2013-12-10 02:32:52 +0000
+++ b/src/xdisp.c       2013-12-14 19:32:50 +0000
@@ -20505,11 +20505,12 @@
       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 @@
         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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]