mirror of
https://github.com/neovim/neovim.git
synced 2024-12-30 17:07:55 -07:00
vim-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 vim/vim#9610)
502d8ae3e8
Commenting out test_override() as before.
Commenting out part of CheckNotFeature() because Vim patch 8.2.0427
cannot be ported without breaking a lot of oldtests that check for
removed features.
This commit is contained in:
parent
1b6ae2dbb0
commit
3d9ff675f8
@ -5631,8 +5631,12 @@ int get_literal(void)
|
||||
i = 0;
|
||||
for (;;) {
|
||||
nc = plain_vgetc();
|
||||
if (!(State & CMDLINE)
|
||||
&& MB_BYTE2LEN_CHECK(nc) == 1) {
|
||||
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;
|
||||
}
|
||||
if (!(State & CMDLINE) && MB_BYTE2LEN_CHECK(nc) == 1) {
|
||||
add_to_showcmd(nc);
|
||||
}
|
||||
if (nc == 'x' || nc == 'X') {
|
||||
@ -5698,6 +5702,8 @@ int get_literal(void)
|
||||
--no_mapping;
|
||||
if (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
|
||||
return cc;
|
||||
|
@ -12,9 +12,9 @@ endfunc
|
||||
" Command to check for the absence of a feature.
|
||||
command -nargs=1 CheckNotFeature call CheckNotFeature(<f-args>)
|
||||
func CheckNotFeature(name)
|
||||
if !has(a:name, 1)
|
||||
throw 'Checking for non-existent feature ' .. a:name
|
||||
endif
|
||||
" if !has(a:name, 1)
|
||||
" throw 'Checking for non-existent feature ' .. a:name
|
||||
" endif
|
||||
if has(a:name)
|
||||
throw 'Skipped: ' .. a:name .. ' feature present'
|
||||
endif
|
||||
|
@ -1006,16 +1006,16 @@ func Test_edit_DROP()
|
||||
endfunc
|
||||
|
||||
func Test_edit_CTRL_V()
|
||||
if has("ebcdic")
|
||||
return
|
||||
endif
|
||||
CheckNotFeature ebcdic
|
||||
|
||||
new
|
||||
call setline(1, ['abc'])
|
||||
call cursor(2, 1)
|
||||
|
||||
" force some redraws
|
||||
set showmode showcmd
|
||||
"call test_override_char_avail(1)
|
||||
" call test_override('ALL', 1)
|
||||
" call test_override('char_avail', 1)
|
||||
|
||||
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, '$'))
|
||||
|
||||
@ -1028,8 +1028,19 @@ func Test_edit_CTRL_V()
|
||||
set norl
|
||||
endif
|
||||
|
||||
" call test_override('ALL', 0)
|
||||
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!
|
||||
endfunc
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user