| 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, |
| |
| |
| |
| |
| |
| *** 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 |
| |
| |
| |
| *** 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 |
| |
| |
| |
| *** 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 \ |
| |
| |
| |
| *** 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 \ |
| |
| |
| |
| *** 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 \ |
| |
| |
| |
| *** 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 \ |
| |
| |
| |
| *** 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 \ |
| |
| |
| |
| |
| --- 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: |
| + |
| |
| |
| |
| |
| --- 1,8 ---- |
| + test starts here: |
| + |
| + wwwこんにちわ世界ワールド |
| + wwwこんにちわ世界 |
| + wwwこんにちわ |
| + www |
| + |
| + |
| |
| |
| |
| *** 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 /// |