diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c index cb2fa231de..86df3357f1 100644 --- a/src/nvim/getchar.c +++ b/src/nvim/getchar.c @@ -631,7 +631,7 @@ void stuffReadbuffSpec(const char *s) stuffReadbuffLen(s, 3); s += 3; } 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) { c = ' '; } diff --git a/src/nvim/testdir/test_functions.vim b/src/nvim/testdir/test_functions.vim index f8be250f73..4b01be877d 100644 --- a/src/nvim/testdir/test_functions.vim +++ b/src/nvim/testdir/test_functions.vim @@ -1180,6 +1180,45 @@ func Test_col() bw! 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? \")\B\", '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')\\", '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')\" + \ .. "\\", '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\\y\")\\", 'xt') + call assert_equal('y', c) + + " Test for using text with composing characters as default input + call feedkeys(":let c = input('name? ', \"ã̳\")\\", 'xt') + call assert_equal('ã̳', c) + + " Test for using as default input + call feedkeys(":let c = input('name? ', \"\\\")\x\", '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() call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\1\", 'tx') call assert_equal(1, c)