To: vim_dev@googlegroups.com
Subject: Patch 7.4.680
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
------------
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, <arpadffy@polarhome.com>
# Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
#
! # 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, <arpadffy@polarhome.com>
# Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
#
! # 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 -- Bram@Moolenaar.net -- 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 ///