mirror of
https://github.com/neovim/neovim.git
synced 2025-09-07 03:48:18 +00:00
Merge pull request #18873 from neovim/backport-18872-to-release-0.7
[Backport release-0.7] vim-patch:8.2.5058: input() does not handle composing characters properly
This commit is contained in:
@@ -631,7 +631,7 @@ void stuffReadbuffSpec(const char *s)
|
|||||||
stuffReadbuffLen(s, 3);
|
stuffReadbuffLen(s, 3);
|
||||||
s += 3;
|
s += 3;
|
||||||
} else {
|
} else {
|
||||||
int c = mb_ptr2char_adv((const char_u **)&s);
|
int c = mb_cptr2char_adv((const char_u **)&s);
|
||||||
if (c == CAR || c == NL || c == ESC) {
|
if (c == CAR || c == NL || c == ESC) {
|
||||||
c = ' ';
|
c = ' ';
|
||||||
}
|
}
|
||||||
|
@@ -1180,6 +1180,45 @@ func Test_col()
|
|||||||
bw!
|
bw!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Test for input()
|
||||||
|
func Test_input_func()
|
||||||
|
" Test for prompt with multiple lines
|
||||||
|
redir => v
|
||||||
|
call feedkeys(":let c = input(\"A\\nB\\nC\\n? \")\<CR>B\<CR>", 'xt')
|
||||||
|
redir END
|
||||||
|
call assert_equal("B", c)
|
||||||
|
call assert_equal(['A', 'B', 'C'], split(v, "\n"))
|
||||||
|
|
||||||
|
" Test for default value
|
||||||
|
call feedkeys(":let c = input('color? ', 'red')\<CR>\<CR>", 'xt')
|
||||||
|
call assert_equal('red', c)
|
||||||
|
|
||||||
|
" Test for completion at the input prompt
|
||||||
|
func! Tcomplete(arglead, cmdline, pos)
|
||||||
|
return "item1\nitem2\nitem3"
|
||||||
|
endfunc
|
||||||
|
call feedkeys(":let c = input('Q? ', '', 'custom,Tcomplete')\<CR>"
|
||||||
|
\ .. "\<C-A>\<CR>", 'xt')
|
||||||
|
delfunc Tcomplete
|
||||||
|
call assert_equal('item1 item2 item3', c)
|
||||||
|
|
||||||
|
" Test for using special characters as default input
|
||||||
|
call feedkeys(":let c = input('name? ', \"x\\<BS>y\")\<CR>\<CR>", 'xt')
|
||||||
|
call assert_equal('y', c)
|
||||||
|
|
||||||
|
" Test for using text with composing characters as default input
|
||||||
|
call feedkeys(":let c = input('name? ', \"ã̳\")\<CR>\<CR>", 'xt')
|
||||||
|
call assert_equal('ã̳', c)
|
||||||
|
|
||||||
|
" Test for using <CR> as default input
|
||||||
|
call feedkeys(":let c = input('name? ', \"\\<CR>\")\<CR>x\<CR>", 'xt')
|
||||||
|
call assert_equal(' x', c)
|
||||||
|
|
||||||
|
call assert_fails("call input('F:', '', 'invalid')", 'E180:')
|
||||||
|
call assert_fails("call input('F:', '', [])", 'E730:')
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" Test for inputlist()
|
||||||
func Test_inputlist()
|
func Test_inputlist()
|
||||||
call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>1\<cr>", 'tx')
|
call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>1\<cr>", 'tx')
|
||||||
call assert_equal(1, c)
|
call assert_equal(1, c)
|
||||||
|
Reference in New Issue
Block a user