Patch 7.4.680
Problem:    CTRL-W in Insert mode does not work well for multi-byte
            characters.
Solution:   Use mb_get_class(). (Yasuhiro Matsumoto)
Files:      src/edit.c, src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
            src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
            src/testdir/Make_vms.mms, src/testdir/Makefile,
            src/testdir/test_erasebackword.in,
            src/testdir/test_erasebackword.ok,


*** ../vim-7.4.679/src/edit.c   2015-03-20 18:11:44.967196356 +0100
--- src/edit.c  2015-03-24 17:40:27.705563807 +0100
***************
*** 9047,9118 ****
        /*
         * Delete upto starting point, start of line or previous word.
         */
!       else do
        {
  #ifdef FEAT_RIGHTLEFT
!           if (!revins_on) /* put cursor on char to be deleted */
  #endif
!               dec_cursor();
  
!           /* start of word? */
!           if (mode == BACKSPACE_WORD && !vim_isspace(gchar_cursor()))
!           {
!               mode = BACKSPACE_WORD_NOT_SPACE;
!               temp = vim_iswordc(gchar_cursor());
!           }
!           /* end of word? */
!           else if (mode == BACKSPACE_WORD_NOT_SPACE
!                   && (vim_isspace(cc = gchar_cursor())
!                           || vim_iswordc(cc) != temp))
!           {
  #ifdef FEAT_RIGHTLEFT
!               if (!revins_on)
  #endif
!                   inc_cursor();
  #ifdef FEAT_RIGHTLEFT
!               else if (State & REPLACE_FLAG)
!                   dec_cursor();
  #endif
!               break;
!           }
!           if (State & REPLACE_FLAG)
!               replace_do_bs(-1);
!           else
!           {
  #ifdef FEAT_MBYTE
!               if (enc_utf8 && p_deco)
!                   (void)utfc_ptr2char(ml_get_cursor(), cpc);
  #endif
!               (void)del_char(FALSE);
  #ifdef FEAT_MBYTE
!               /*
!                * If there are combining characters and 'delcombine' is set
!                * move the cursor back.  Don't back up before the base
!                * character.
!                */
!               if (enc_utf8 && p_deco && cpc[0] != NUL)
!                   inc_cursor();
  #endif
  #ifdef FEAT_RIGHTLEFT
!               if (revins_chars)
!               {
!                   revins_chars--;
!                   revins_legal++;
                }
!               if (revins_on && gchar_cursor() == NUL)
                    break;
! #endif
!           }
!           /* Just a single backspace?: */
!           if (mode == BACKSPACE_CHAR)
!               break;
!       } while (
  #ifdef FEAT_RIGHTLEFT
!               revins_on ||
  #endif
!               (curwin->w_cursor.col > mincol
!                && (curwin->w_cursor.lnum != Insstart_orig.lnum
!                    || curwin->w_cursor.col != Insstart_orig.col)));
        did_backspace = TRUE;
      }
  #ifdef FEAT_SMARTINDENT
--- 9047,9140 ----
        /*
         * Delete upto starting point, start of line or previous word.
         */
!       else
        {
+ #ifdef FEAT_MBYTE
+           int cclass = 0, prev_cclass = 0;
+ 
+           if (has_mbyte)
+               cclass = mb_get_class(ml_get_cursor());
+ #endif
+           do
+           {
  #ifdef FEAT_RIGHTLEFT
!               if (!revins_on) /* put cursor on char to be deleted */
  #endif
!                   dec_cursor();
  
!               cc = gchar_cursor();
! #ifdef FEAT_MBYTE
!               /* look multi-byte character class */
!               if (has_mbyte)
!               {
!                   prev_cclass = cclass;
!                   cclass = mb_get_class(ml_get_cursor());
!               }
! #endif
! 
!               /* start of word? */
!               if (mode == BACKSPACE_WORD && !vim_isspace(cc))
!               {
!                   mode = BACKSPACE_WORD_NOT_SPACE;
!                   temp = vim_iswordc(cc);
!               }
!               /* end of word? */
!               else if (mode == BACKSPACE_WORD_NOT_SPACE
!                       && ((vim_isspace(cc) || vim_iswordc(cc) != temp)
! #ifdef FEAT_MBYTE
!                       || prev_cclass != cclass
! #endif
!                       ))
!               {
  #ifdef FEAT_RIGHTLEFT
!                   if (!revins_on)
  #endif
!                       inc_cursor();
  #ifdef FEAT_RIGHTLEFT
!                   else if (State & REPLACE_FLAG)
!                       dec_cursor();
  #endif
!                   break;
!               }
!               if (State & REPLACE_FLAG)
!                   replace_do_bs(-1);
!               else
!               {
  #ifdef FEAT_MBYTE
!                   if (enc_utf8 && p_deco)
!                       (void)utfc_ptr2char(ml_get_cursor(), cpc);
  #endif
!                   (void)del_char(FALSE);
  #ifdef FEAT_MBYTE
!                   /*
!                    * If there are combining characters and 'delcombine' is set
!                    * move the cursor back.  Don't back up before the base
!                    * character.
!                    */
!                   if (enc_utf8 && p_deco && cpc[0] != NUL)
!                       inc_cursor();
  #endif
  #ifdef FEAT_RIGHTLEFT
!                   if (revins_chars)
!                   {
!                       revins_chars--;
!                       revins_legal++;
!                   }
!                   if (revins_on && gchar_cursor() == NUL)
!                       break;
! #endif
                }
!               /* Just a single backspace?: */
!               if (mode == BACKSPACE_CHAR)
                    break;
!           } while (
  #ifdef FEAT_RIGHTLEFT
!                   revins_on ||
  #endif
!                   (curwin->w_cursor.col > mincol
!                   && (curwin->w_cursor.lnum != Insstart_orig.lnum
!                       || curwin->w_cursor.col != Insstart_orig.col)));
!       }
        did_backspace = TRUE;
      }
  #ifdef FEAT_SMARTINDENT
*** ../vim-7.4.679/src/testdir/Make_amiga.mak   2015-03-13 15:02:46.254059251 
+0100
--- src/testdir/Make_amiga.mak  2015-03-24 17:36:08.200314390 +0100
***************
*** 43,48 ****
--- 43,49 ----
                test_changelist.out \
                test_close_count.out \
                test_command_count.out \
+               test_erasebackword.out \
                test_eval.out \
                test_insertcount.out \
                test_listlbr.out \
***************
*** 185,190 ****
--- 186,192 ----
  test_changelist.out: test_changelist.in
  test_close_count.out: test_close_count.in
  test_command_count.out: test_command_count.in
+ test_erasebackword.out: test_erasebackword.in
  test_eval.out: test_eval.in
  test_insertcount.out: test_insertcount.in
  test_listlbr.out: test_listlbr.in
*** ../vim-7.4.679/src/testdir/Make_dos.mak     2015-03-13 15:02:46.258059206 
+0100
--- src/testdir/Make_dos.mak    2015-03-24 17:36:16.360226912 +0100
***************
*** 42,47 ****
--- 42,48 ----
                test_changelist.out \
                test_close_count.out \
                test_command_count.out \
+               test_erasebackword.out \
                test_eval.out \
                test_insertcount.out \
                test_listlbr.out \
*** ../vim-7.4.679/src/testdir/Make_ming.mak    2015-03-13 15:02:46.258059206 
+0100
--- src/testdir/Make_ming.mak   2015-03-24 17:36:20.296184745 +0100
***************
*** 64,69 ****
--- 64,70 ----
                test_changelist.out \
                test_close_count.out \
                test_command_count.out \
+               test_erasebackword.out \
                test_eval.out \
                test_insertcount.out \
                test_listlbr.out \
*** ../vim-7.4.679/src/testdir/Make_os2.mak     2015-03-13 15:02:46.258059206 
+0100
--- src/testdir/Make_os2.mak    2015-03-24 17:36:22.864157273 +0100
***************
*** 44,49 ****
--- 44,50 ----
                test_changelist.out \
                test_close_count.out \
                test_command_count.out \
+               test_erasebackword.out \
                test_eval.out \
                test_insertcount.out \
                test_listlbr.out \
*** ../vim-7.4.679/src/testdir/Make_vms.mms     2015-03-13 15:02:46.258059206 
+0100
--- src/testdir/Make_vms.mms    2015-03-24 17:36:33.368044688 +0100
***************
*** 4,10 ****
  # Authors:    Zoltan Arpadffy, <[email protected]>
  #             Sandor Kopanyi,  <[email protected]>
  #
! # Last change:  2015 Mar 13
  #
  # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
  # Edit the lines in the Configuration section below to select.
--- 4,10 ----
  # Authors:    Zoltan Arpadffy, <[email protected]>
  #             Sandor Kopanyi,  <[email protected]>
  #
! # Last change:  2015 Mar 24
  #
  # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
  # Edit the lines in the Configuration section below to select.
***************
*** 103,108 ****
--- 103,109 ----
         test_changelist.out \
         test_close_count.out \
         test_command_count.out \
+        test_erasebackword.out \
         test_eval.out \
         test_insertcount.out \
         test_listlbr.out \
*** ../vim-7.4.679/src/testdir/Makefile 2015-03-13 15:02:46.258059206 +0100
--- src/testdir/Makefile        2015-03-24 17:36:58.747773608 +0100
***************
*** 40,45 ****
--- 40,46 ----
                test_changelist.out \
                test_close_count.out \
                test_command_count.out \
+               test_erasebackword.out \
                test_eval.out \
                test_insertcount.out \
                test_listlbr.out \
*** ../vim-7.4.679/src/testdir/test_erasebackword.in    2015-03-24 
17:49:11.672057691 +0100
--- src/testdir/test_erasebackword.in   2015-01-30 03:19:14.000000000 +0100
***************
*** 0 ****
--- 1,19 ----
+ Test for erasing backword
+ 
+ STARTTEST
+ :so small.vim
+ :so mbyte.vim
+ :set encoding=utf-8
+ G
+ o wwwこんにちわ世界ワールドvim   
+ o wwwこんにちわ世界ワールドvim    
+ o wwwこんにちわ世界ワールドvim     
+ o wwwこんにちわ世界ワールドvim      
+ o wwwこんにちわ世界ワールドvim       
+ o wwwこんにちわ世界ワールドvim        
+ :/^test/,$w! test.out
+ :qa!
+ ENDTEST
+ 
+ test starts here:
+ 
*** ../vim-7.4.679/src/testdir/test_erasebackword.ok    2015-03-24 
17:49:11.676057649 +0100
--- src/testdir/test_erasebackword.ok   2015-01-30 03:19:33.000000000 +0100
***************
*** 0 ****
--- 1,8 ----
+ test starts here:
+ 
+  wwwこんにちわ世界ワールド
+  wwwこんにちわ世界
+  wwwこんにちわ
+  www
+  
+ 
*** ../vim-7.4.679/src/version.c        2015-03-24 17:12:04.477113277 +0100
--- src/version.c       2015-03-24 17:17:06.769333643 +0100
***************
*** 743,744 ****
--- 743,746 ----
  {   /* Add new patch number below this line */
+ /**/
+     680,
  /**/

-- 
TALL KNIGHT: We are now no longer the Knights Who Say Ni!
ONE KNIGHT:  Ni!
OTHERS:      Sh!
ONE KNIGHT:  (whispers) Sorry.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui