Skip to content

Commit

Permalink
updated for version 7.4.680
Browse files Browse the repository at this point in the history
Problem:    CTRL-W in Insert mode does not work well for multi-byte
            characters.
Solution:   Use mb_get_class(). (Yasuhiro Matsumoto)
  • Loading branch information
brammool committed Mar 24, 2015
1 parent 6383b92 commit 310f2d5
Show file tree
Hide file tree
Showing 8 changed files with 81 additions and 50 deletions.
120 changes: 71 additions & 49 deletions src/edit.c
Expand Up @@ -9047,72 +9047,94 @@ ins_bs(c, mode, inserted_space_p)
/*
* Delete upto starting point, start of line or previous word.
*/
else do
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 */
if (!revins_on) /* put cursor on char to be deleted */
#endif
dec_cursor();
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))
{
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)
if (!revins_on)
#endif
inc_cursor();
inc_cursor();
#ifdef FEAT_RIGHTLEFT
else if (State & REPLACE_FLAG)
dec_cursor();
else if (State & REPLACE_FLAG)
dec_cursor();
#endif
break;
}
if (State & REPLACE_FLAG)
replace_do_bs(-1);
else
{
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);
if (enc_utf8 && p_deco)
(void)utfc_ptr2char(ml_get_cursor(), cpc);
#endif
(void)del_char(FALSE);
(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();
/*
* 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_chars)
{
revins_chars--;
revins_legal++;
}
if (revins_on && gchar_cursor() == NUL)
break;
#endif
}
if (revins_on && gchar_cursor() == NUL)
/* Just a single backspace?: */
if (mode == BACKSPACE_CHAR)
break;
#endif
}
/* Just a single backspace?: */
if (mode == BACKSPACE_CHAR)
break;
} while (
} while (
#ifdef FEAT_RIGHTLEFT
revins_on ||
revins_on ||
#endif
(curwin->w_cursor.col > mincol
&& (curwin->w_cursor.lnum != Insstart_orig.lnum
|| curwin->w_cursor.col != Insstart_orig.col)));
(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
Expand Down
2 changes: 2 additions & 0 deletions src/testdir/Make_amiga.mak
Expand Up @@ -43,6 +43,7 @@ SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
test_changelist.out \
test_close_count.out \
test_command_count.out \
test_erasebackword.out \
test_eval.out \
test_insertcount.out \
test_listlbr.out \
Expand Down Expand Up @@ -185,6 +186,7 @@ test_breakindent.out: test_breakindent.in
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
Expand Down
1 change: 1 addition & 0 deletions src/testdir/Make_dos.mak
Expand Up @@ -42,6 +42,7 @@ SCRIPTS = test3.out test4.out test5.out test6.out test7.out \
test_changelist.out \
test_close_count.out \
test_command_count.out \
test_erasebackword.out \
test_eval.out \
test_insertcount.out \
test_listlbr.out \
Expand Down
1 change: 1 addition & 0 deletions src/testdir/Make_ming.mak
Expand Up @@ -64,6 +64,7 @@ SCRIPTS = test3.out test4.out test5.out test6.out test7.out \
test_changelist.out \
test_close_count.out \
test_command_count.out \
test_erasebackword.out \
test_eval.out \
test_insertcount.out \
test_listlbr.out \
Expand Down
1 change: 1 addition & 0 deletions src/testdir/Make_os2.mak
Expand Up @@ -44,6 +44,7 @@ SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
test_changelist.out \
test_close_count.out \
test_command_count.out \
test_erasebackword.out \
test_eval.out \
test_insertcount.out \
test_listlbr.out \
Expand Down
3 changes: 2 additions & 1 deletion src/testdir/Make_vms.mms
Expand Up @@ -4,7 +4,7 @@
# Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
# Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
#
# Last change: 2015 Mar 13
# 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.
Expand Down Expand Up @@ -103,6 +103,7 @@ SCRIPT = test1.out test2.out test3.out test4.out test5.out \
test_changelist.out \
test_close_count.out \
test_command_count.out \
test_erasebackword.out \
test_eval.out \
test_insertcount.out \
test_listlbr.out \
Expand Down
1 change: 1 addition & 0 deletions src/testdir/Makefile
Expand Up @@ -40,6 +40,7 @@ SCRIPTS = test1.out test2.out test3.out test4.out test5.out test6.out \
test_changelist.out \
test_close_count.out \
test_command_count.out \
test_erasebackword.out \
test_eval.out \
test_insertcount.out \
test_listlbr.out \
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -741,6 +741,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
680,
/**/
679,
/**/
Expand Down

0 comments on commit 310f2d5

Please sign in to comment.