mirror of
https://github.com/vim/vim.git
synced 2025-09-06 21:53:38 -04:00
patch 8.2.4203: entering a character with CTRL-V may include modifiers
Problem: Entering a character with CTRL-V may include modifiers. Solution: Reset "mod_mask" when entering a character with digits after CTRL-V. (closes #9610)
This commit is contained in:
parent
acc4b5648b
commit
502d8ae3e8
@ -1909,6 +1909,11 @@ get_literal(int noReduceKeys)
|
|||||||
if ((nc == ESC || nc == CSI) && !noReduceKeys)
|
if ((nc == ESC || nc == CSI) && !noReduceKeys)
|
||||||
nc = decodeModifyOtherKeys(nc);
|
nc = decodeModifyOtherKeys(nc);
|
||||||
|
|
||||||
|
if ((mod_mask & ~MOD_MASK_SHIFT) != 0)
|
||||||
|
// A character with non-Shift modifiers should not be a valid
|
||||||
|
// character for i_CTRL-V_digit.
|
||||||
|
break;
|
||||||
|
|
||||||
#ifdef FEAT_CMDL_INFO
|
#ifdef FEAT_CMDL_INFO
|
||||||
if (!(State & CMDLINE) && MB_BYTE2LEN_CHECK(nc) == 1)
|
if (!(State & CMDLINE) && MB_BYTE2LEN_CHECK(nc) == 1)
|
||||||
add_to_showcmd(nc);
|
add_to_showcmd(nc);
|
||||||
@ -1986,7 +1991,11 @@ get_literal(int noReduceKeys)
|
|||||||
--allow_keys;
|
--allow_keys;
|
||||||
#endif
|
#endif
|
||||||
if (nc)
|
if (nc)
|
||||||
|
{
|
||||||
vungetc(nc);
|
vungetc(nc);
|
||||||
|
// A character typed with i_CTRL-V_digit cannot have modifiers.
|
||||||
|
mod_mask = 0;
|
||||||
|
}
|
||||||
got_int = FALSE; // CTRL-C typed after CTRL-V is not an interrupt
|
got_int = FALSE; // CTRL-C typed after CTRL-V is not an interrupt
|
||||||
return cc;
|
return cc;
|
||||||
}
|
}
|
||||||
|
@ -1073,14 +1073,16 @@ func Test_edit_DROP()
|
|||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_edit_CTRL_V()
|
func Test_edit_CTRL_V()
|
||||||
CheckFeature ebcdic
|
CheckNotFeature ebcdic
|
||||||
|
|
||||||
new
|
new
|
||||||
call setline(1, ['abc'])
|
call setline(1, ['abc'])
|
||||||
call cursor(2, 1)
|
call cursor(2, 1)
|
||||||
|
|
||||||
" force some redraws
|
" force some redraws
|
||||||
set showmode showcmd
|
set showmode showcmd
|
||||||
"call test_override_char_avail(1)
|
call test_override('char_avail', 1)
|
||||||
call test_override('ALL', 1)
|
|
||||||
call feedkeys("A\<c-v>\<c-n>\<c-v>\<c-l>\<c-v>\<c-b>\<esc>", 'tnix')
|
call feedkeys("A\<c-v>\<c-n>\<c-v>\<c-l>\<c-v>\<c-b>\<esc>", 'tnix')
|
||||||
call assert_equal(["abc\x0e\x0c\x02"], getline(1, '$'))
|
call assert_equal(["abc\x0e\x0c\x02"], getline(1, '$'))
|
||||||
|
|
||||||
@ -1093,8 +1095,19 @@ func Test_edit_CTRL_V()
|
|||||||
set norl
|
set norl
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call test_override('ALL', 0)
|
|
||||||
set noshowmode showcmd
|
set noshowmode showcmd
|
||||||
|
call test_override('char_avail', 0)
|
||||||
|
|
||||||
|
" No modifiers should be applied to the char typed using i_CTRL-V_digit.
|
||||||
|
call feedkeys(":append\<CR>\<C-V>76c\<C-V>76\<C-F2>\<C-V>u3c0j\<C-V>u3c0\<M-F3>\<CR>.\<CR>", 'tnix')
|
||||||
|
call assert_equal('LcL<C-F2>πjπ<M-F3>', getline(2))
|
||||||
|
|
||||||
|
if has('osx')
|
||||||
|
" A char with a modifier should not be a valid char for i_CTRL-V_digit.
|
||||||
|
call feedkeys("o\<C-V>\<D-j>\<C-V>\<D-1>\<C-V>\<D-o>\<C-V>\<D-x>\<C-V>\<D-u>", 'tnix')
|
||||||
|
call assert_equal('<D-j><D-1><D-o><D-x><D-u>', getline(3))
|
||||||
|
endif
|
||||||
|
|
||||||
bw!
|
bw!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
4203,
|
||||||
/**/
|
/**/
|
||||||
4202,
|
4202,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user