mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:8.2.4002: first char typed in Select mode can be wrong
Problem: First char typed in Select mode can be wrong.
Solution: Escape special bytes in the input buffer. (closes vim/vim#9469)
6cac77016b
The `buf` should already be large enough, but I'll change its size
anyway in case future patches change the meaning of `MB_MAXBYTES` macro.
`fix_input_buffer()` cannot be used here because of the `using_script()`
check, and there is already equivalent code in its place.
This commit is contained in:
parent
8f1efb018b
commit
5c897b6d0c
@ -984,7 +984,7 @@ int ins_typebuf(char_u *str, int noremap, int offset, bool nottyped, bool silent
|
||||
/// @return the length of what was inserted
|
||||
int ins_char_typebuf(int c, int modifier)
|
||||
{
|
||||
char_u buf[MB_MAXBYTES + 4];
|
||||
char_u buf[MB_MAXBYTES * 3 + 4];
|
||||
int len = 0;
|
||||
if (modifier != 0) {
|
||||
buf[0] = K_SPECIAL;
|
||||
|
@ -1,5 +1,6 @@
|
||||
" Tests for Unicode manipulations
|
||||
|
||||
source check.vim
|
||||
source view_util.vim
|
||||
|
||||
" Visual block Insert adjusts for multi-byte char
|
||||
@ -148,4 +149,55 @@ func Test_print_overlong()
|
||||
bwipe!
|
||||
endfunc
|
||||
|
||||
func Test_recording_with_select_mode_utf8()
|
||||
call Run_test_recording_with_select_mode_utf8()
|
||||
endfunc
|
||||
|
||||
func Run_test_recording_with_select_mode_utf8()
|
||||
new
|
||||
|
||||
" No escaping
|
||||
call feedkeys("qacc12345\<Esc>gH哦\<Esc>q", "tx")
|
||||
call assert_equal("哦", getline(1))
|
||||
call assert_equal("cc12345\<Esc>gH哦\<Esc>", @a)
|
||||
call setline(1, 'asdf')
|
||||
normal! @a
|
||||
call assert_equal("哦", getline(1))
|
||||
|
||||
" 固 is 0xE5 0x9B 0xBA where 0x9B is CSI
|
||||
call feedkeys("qacc12345\<Esc>gH固\<Esc>q", "tx")
|
||||
call assert_equal("固", getline(1))
|
||||
call assert_equal("cc12345\<Esc>gH固\<Esc>", @a)
|
||||
call setline(1, 'asdf')
|
||||
normal! @a
|
||||
call assert_equal("固", getline(1))
|
||||
|
||||
" 四 is 0xE5 0x9B 0x9B where 0x9B is CSI
|
||||
call feedkeys("qacc12345\<Esc>gH四\<Esc>q", "tx")
|
||||
call assert_equal("四", getline(1))
|
||||
call assert_equal("cc12345\<Esc>gH四\<Esc>", @a)
|
||||
call setline(1, 'asdf')
|
||||
normal! @a
|
||||
call assert_equal("四", getline(1))
|
||||
|
||||
" 倒 is 0xE5 0x80 0x92 where 0x80 is K_SPECIAL
|
||||
call feedkeys("qacc12345\<Esc>gH倒\<Esc>q", "tx")
|
||||
call assert_equal("倒", getline(1))
|
||||
call assert_equal("cc12345\<Esc>gH倒\<Esc>", @a)
|
||||
call setline(1, 'asdf')
|
||||
normal! @a
|
||||
call assert_equal("倒", getline(1))
|
||||
|
||||
bwipe!
|
||||
endfunc
|
||||
|
||||
" This must be done as one of the last tests, because it starts the GUI, which
|
||||
" cannot be undone.
|
||||
func Test_zz_recording_with_select_mode_utf8_gui()
|
||||
CheckCanRunGui
|
||||
|
||||
gui -f
|
||||
call Run_test_recording_with_select_mode_utf8()
|
||||
endfunc
|
||||
|
||||
" vim: shiftwidth=2 sts=2 expandtab
|
||||
|
Loading…
Reference in New Issue
Block a user