mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
Merge pull request #17191 from zeertzjq/vim-8.2.4203
vim-patch:8.2.4203: entering a character with CTRL-V may include modifiers
This commit is contained in:
commit
3d0149f984
@ -5635,8 +5635,12 @@ int get_literal(void)
|
|||||||
i = 0;
|
i = 0;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
nc = plain_vgetc();
|
nc = plain_vgetc();
|
||||||
if (!(State & CMDLINE)
|
if ((mod_mask & ~MOD_MASK_SHIFT) != 0) {
|
||||||
&& MB_BYTE2LEN_CHECK(nc) == 1) {
|
// 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);
|
add_to_showcmd(nc);
|
||||||
}
|
}
|
||||||
if (nc == 'x' || nc == 'X') {
|
if (nc == 'x' || nc == 'X') {
|
||||||
@ -5702,6 +5706,8 @@ int get_literal(void)
|
|||||||
--no_mapping;
|
--no_mapping;
|
||||||
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;
|
||||||
|
@ -12,9 +12,9 @@ endfunc
|
|||||||
" Command to check for the absence of a feature.
|
" Command to check for the absence of a feature.
|
||||||
command -nargs=1 CheckNotFeature call CheckNotFeature(<f-args>)
|
command -nargs=1 CheckNotFeature call CheckNotFeature(<f-args>)
|
||||||
func CheckNotFeature(name)
|
func CheckNotFeature(name)
|
||||||
if !has(a:name, 1)
|
" if !has(a:name, 1)
|
||||||
throw 'Checking for non-existent feature ' .. a:name
|
" throw 'Checking for non-existent feature ' .. a:name
|
||||||
endif
|
" endif
|
||||||
if has(a:name)
|
if has(a:name)
|
||||||
throw 'Skipped: ' .. a:name .. ' feature present'
|
throw 'Skipped: ' .. a:name .. ' feature present'
|
||||||
endif
|
endif
|
||||||
|
@ -1006,16 +1006,16 @@ func Test_edit_DROP()
|
|||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_edit_CTRL_V()
|
func Test_edit_CTRL_V()
|
||||||
if has("ebcdic")
|
CheckNotFeature ebcdic
|
||||||
return
|
|
||||||
endif
|
|
||||||
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, '$'))
|
||||||
|
|
||||||
@ -1028,8 +1028,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
|
||||||
|
|
||||||
|
@ -75,4 +75,57 @@ describe('insert-mode', function()
|
|||||||
expect('hello oooworld')
|
expect('hello oooworld')
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
describe('Ctrl-V', function()
|
||||||
|
it('supports entering the decimal value of a character', function()
|
||||||
|
feed('i<C-V>076<C-V>167')
|
||||||
|
expect('L§')
|
||||||
|
end)
|
||||||
|
|
||||||
|
it('supports entering the octal value of a character with "o"', function()
|
||||||
|
feed('i<C-V>o114<C-V>o247<Esc>')
|
||||||
|
expect('L§')
|
||||||
|
end)
|
||||||
|
|
||||||
|
it('supports entering the octal value of a character with "O"', function()
|
||||||
|
feed('i<C-V>O114<C-V>O247<Esc>')
|
||||||
|
expect('L§')
|
||||||
|
end)
|
||||||
|
|
||||||
|
it('supports entering the hexadecimal value of a character with "x"', function()
|
||||||
|
feed('i<C-V>x4c<C-V>xA7<Esc>')
|
||||||
|
expect('L§')
|
||||||
|
end)
|
||||||
|
|
||||||
|
it('supports entering the hexadecimal value of a character with "X"', function()
|
||||||
|
feed('i<C-V>X4c<C-V>XA7<Esc>')
|
||||||
|
expect('L§')
|
||||||
|
end)
|
||||||
|
|
||||||
|
it('supports entering the hexadecimal value of a character with "u"', function()
|
||||||
|
feed('i<C-V>u25ba<C-V>u25C7<Esc>')
|
||||||
|
expect('►◇')
|
||||||
|
end)
|
||||||
|
|
||||||
|
it('supports entering the hexadecimal value of a character with "U"', function()
|
||||||
|
feed('i<C-V>U0001f600<C-V>U0001F601<Esc>')
|
||||||
|
expect('😀😁')
|
||||||
|
end)
|
||||||
|
|
||||||
|
it('entering character by value is interrupted by invalid character', function()
|
||||||
|
feed('i<C-V>76c<C-V>76<C-F2><C-V>u3c0j<C-V>u3c0<M-F3><C-V>U1f600j<C-V>U1f600<D-F4><Esc>')
|
||||||
|
expect('LcL<C-F2>πjπ<M-F3>😀j😀<D-F4>')
|
||||||
|
end)
|
||||||
|
|
||||||
|
it('shows o, O, u, U, x, X, and digits with modifiers', function()
|
||||||
|
feed('i<C-V><M-o><C-V><D-o><C-V><M-O><C-V><D-O><Esc>')
|
||||||
|
expect('<M-o><D-o><M-O><D-O>')
|
||||||
|
feed('cc<C-V><M-u><C-V><D-u><C-V><M-U><C-V><D-U><Esc>')
|
||||||
|
expect('<M-u><D-u><M-U><D-U>')
|
||||||
|
feed('cc<C-V><M-x><C-V><D-x><C-V><M-X><C-V><D-X><Esc>')
|
||||||
|
expect('<M-x><D-x><M-X><D-X>')
|
||||||
|
feed('cc<C-V><M-1><C-V><D-2><C-V><M-7><C-V><D-8><Esc>')
|
||||||
|
expect('<M-1><D-2><M-7><D-8>')
|
||||||
|
end)
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
|
Loading…
Reference in New Issue
Block a user