emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] /srv/bzr/emacs/trunk r105414: Really fix bug #9224 with ve


From: Eli Zaretskii
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r105414: Really fix bug #9224 with vertical-motion under word-wrap.
Date: Sat, 06 Aug 2011 14:49:35 +0300
User-agent: Bazaar (2.3.1)

------------------------------------------------------------
revno: 105414
fixes bug(s): http://debbugs.gnu.org/9224
committer: Eli Zaretskii <address@hidden>
branch nick: trunk
timestamp: Sat 2011-08-06 14:49:35 +0300
message:
  Really fix bug #9224 with vertical-motion under word-wrap.
  
   src/xdisp.c (move_it_in_display_line_to): Fix vertical-motion in a buffer
   with word-wrap under bidirectional display.
modified:
  src/ChangeLog
  src/xdisp.c
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2011-08-06 10:59:36 +0000
+++ b/src/ChangeLog     2011-08-06 11:49:35 +0000
@@ -3,6 +3,8 @@
        * xdisp.c (set_cursor_from_row): Fix cursor positioning when a
        display property strides EOL and includes a newline, as in
        longlines-mode.  (Bug#9254)
+       (move_it_in_display_line_to): Fix vertical-motion in a buffer with
+       word-wrap under bidirectional display.  (Bug#9224)
 
        * bidi.c (bidi_unshelve_cache): Don't reset the cache if JUST_FREE
        is non-zero, even if the data buffer is NULL.  Fixes a crash in

=== modified file 'src/xdisp.c'
--- a/src/xdisp.c       2011-08-06 10:59:36 +0000
+++ b/src/xdisp.c       2011-08-06 11:49:35 +0000
@@ -8009,13 +8009,19 @@
             positions smaller than TO_CHARPOS, return
             MOVE_POS_MATCH_OR_ZV, like the unidirectional display
             did.  */
-         if (it->bidi_p && (op & MOVE_TO_POS) != 0
-             && !saw_smaller_pos
-             && IT_CHARPOS (*it) > to_charpos)
+         if (it->bidi_p && (op & MOVE_TO_POS) != 0)
            {
-             if (IT_CHARPOS (ppos_it) < ZV)
-               RESTORE_IT (it, &ppos_it, ppos_data);
-             goto buffer_pos_reached;
+             if (!saw_smaller_pos && IT_CHARPOS (*it) > to_charpos)
+               {
+                 if (IT_CHARPOS (ppos_it) < ZV)
+                   RESTORE_IT (it, &ppos_it, ppos_data);
+                 goto buffer_pos_reached;
+               }
+             else if (it->line_wrap == WORD_WRAP && atpos_it.sp >= 0
+                      && IT_CHARPOS (*it) > to_charpos)
+               goto buffer_pos_reached;
+             else
+               result = MOVE_NEWLINE_OR_CR;
            }
          else
            result = MOVE_NEWLINE_OR_CR;


reply via email to

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