1
0
forked from aniani/vim

patch 9.1.1068: getchar() can't distinguish between C-I and Tab

Problem:  getchar() can't distinguish between C-I and Tab.
Solution: Add {opts} to pass extra flags to getchar() and getcharstr(),
          with "number" and "simplify" keys.

related: #10603
closes: #16554

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
zeertzjq
2025-02-02 09:14:35 +01:00
committed by Christian Brabandt
parent cbc1f409c1
commit e0a2ab397f
9 changed files with 198 additions and 52 deletions

View File

@@ -2562,6 +2562,75 @@ func Test_getchar()
call assert_equal("\<M-F2>", getchar(0))
call assert_equal(0, getchar(0))
call feedkeys("\<Tab>", '')
call assert_equal(char2nr("\<Tab>"), getchar())
call feedkeys("\<Tab>", '')
call assert_equal(char2nr("\<Tab>"), getchar(-1))
call feedkeys("\<Tab>", '')
call assert_equal(char2nr("\<Tab>"), getchar(-1, {}))
call feedkeys("\<Tab>", '')
call assert_equal(char2nr("\<Tab>"), getchar(-1, #{number: v:true}))
call assert_equal(0, getchar(0))
call assert_equal(0, getchar(1))
call assert_equal(0, getchar(0, #{number: v:true}))
call assert_equal(0, getchar(1, #{number: v:true}))
call feedkeys("\<Tab>", '')
call assert_equal("\<Tab>", getcharstr())
call feedkeys("\<Tab>", '')
call assert_equal("\<Tab>", getcharstr(-1))
call feedkeys("\<Tab>", '')
call assert_equal("\<Tab>", getcharstr(-1, {}))
call feedkeys("\<Tab>", '')
call assert_equal("\<Tab>", getchar(-1, #{number: v:false}))
call assert_equal('', getcharstr(0))
call assert_equal('', getcharstr(1))
call assert_equal('', getchar(0, #{number: v:false}))
call assert_equal('', getchar(1, #{number: v:false}))
for key in ["C-I", "C-X", "M-x"]
let lines =<< eval trim END
call feedkeys("\<*{key}>", '')
call assert_equal(char2nr("\<{key}>"), getchar())
call feedkeys("\<*{key}>", '')
call assert_equal(char2nr("\<{key}>"), getchar(-1))
call feedkeys("\<*{key}>", '')
call assert_equal(char2nr("\<{key}>"), getchar(-1, {{}}))
call feedkeys("\<*{key}>", '')
call assert_equal(char2nr("\<{key}>"), getchar(-1, {{'number': 1}}))
call feedkeys("\<*{key}>", '')
call assert_equal(char2nr("\<{key}>"), getchar(-1, {{'simplify': 1}}))
call feedkeys("\<*{key}>", '')
call assert_equal("\<*{key}>", getchar(-1, {{'simplify': v:false}}))
call assert_equal(0, getchar(0))
call assert_equal(0, getchar(1))
END
call v9.CheckLegacyAndVim9Success(lines)
let lines =<< eval trim END
call feedkeys("\<*{key}>", '')
call assert_equal("\<{key}>", getcharstr())
call feedkeys("\<*{key}>", '')
call assert_equal("\<{key}>", getcharstr(-1))
call feedkeys("\<*{key}>", '')
call assert_equal("\<{key}>", getcharstr(-1, {{}}))
call feedkeys("\<*{key}>", '')
call assert_equal("\<{key}>", getchar(-1, {{'number': 0}}))
call feedkeys("\<*{key}>", '')
call assert_equal("\<{key}>", getcharstr(-1, {{'simplify': 1}}))
call feedkeys("\<*{key}>", '')
call assert_equal("\<*{key}>", getcharstr(-1, {{'simplify': v:false}}))
call assert_equal('', getcharstr(0))
call assert_equal('', getcharstr(1))
END
call v9.CheckLegacyAndVim9Success(lines)
endfor
call assert_fails('call getchar(1, 1)', 'E1206:')
call assert_fails('call getcharstr(1, 1)', 'E1206:')
call assert_fails('call getcharstr(1, #{number: v:true})', 'E475:')
call assert_fails('call getcharstr(1, #{number: v:false})', 'E475:')
call setline(1, 'xxxx')
call test_setmouse(1, 3)
let v:mouse_win = 9