mirror of
https://github.com/neovim/neovim.git
synced 2024-12-26 14:11:15 -07:00
4adf2123dd
Problem: Modifiers not simplified when timed out or using feedkeys() with
'n" flag.
Solution: Adjust how mapped flag and timeout are used. (closes vim/vim#10305)
68a573ce2b
91 lines
2.9 KiB
Lua
91 lines
2.9 KiB
Lua
local helpers = require('test.functional.helpers')(after_each)
|
|
|
|
local clear = helpers.clear
|
|
local feed = helpers.feed
|
|
local command = helpers.command
|
|
local eq = helpers.eq
|
|
local expect = helpers.expect
|
|
local eval = helpers.eval
|
|
local insert = helpers.insert
|
|
local meths = helpers.meths
|
|
local sleep = helpers.sleep
|
|
|
|
describe("'pastetoggle' option", function()
|
|
before_each(clear)
|
|
it("toggles 'paste'", function()
|
|
command('set pastetoggle=a')
|
|
eq(0, eval('&paste'))
|
|
feed('a')
|
|
-- Need another key so that the vgetorpeek() function returns.
|
|
feed('j')
|
|
eq(1, eval('&paste'))
|
|
end)
|
|
describe("multiple key 'pastetoggle'", function()
|
|
before_each(function()
|
|
eq(0, eval('&paste'))
|
|
command('set timeoutlen=1 ttimeoutlen=10000')
|
|
end)
|
|
it('is waited for when chars are typed', function()
|
|
local pastetoggle = 'lllll'
|
|
command('set pastetoggle=' .. pastetoggle)
|
|
feed(pastetoggle:sub(0, 2))
|
|
-- sleep() for long enough that vgetorpeek() is gotten into, but short
|
|
-- enough that ttimeoutlen is not reached.
|
|
sleep(200)
|
|
feed(pastetoggle:sub(3, -1))
|
|
-- Need another key so that the vgetorpeek() function returns.
|
|
feed('j')
|
|
eq(1, eval('&paste'))
|
|
end)
|
|
|
|
it('is not waited for when there are no typed chars after mapped chars', function()
|
|
command('set pastetoggle=abc')
|
|
command('imap d a')
|
|
meths.feedkeys('id', 't', true)
|
|
-- sleep() for long enough that vgetorpeek() is gotten into, but short
|
|
-- enough that ttimeoutlen is not reached.
|
|
sleep(200)
|
|
feed('bc')
|
|
-- Need another key so that the vgetorpeek() function returns.
|
|
feed('j')
|
|
-- 'ttimeoutlen' should NOT apply
|
|
eq(0, eval('&paste'))
|
|
end)
|
|
|
|
it('is waited for when there are typed chars after mapped chars', function()
|
|
command('set pastetoggle=abc')
|
|
command('imap d a')
|
|
meths.feedkeys('idb', 't', true)
|
|
-- sleep() for long enough that vgetorpeek() is gotten into, but short
|
|
-- enough that ttimeoutlen is not reached.
|
|
sleep(200)
|
|
feed('c')
|
|
-- Need another key so that the vgetorpeek() function returns.
|
|
feed('j')
|
|
-- 'ttimeoutlen' should apply
|
|
eq(1, eval('&paste'))
|
|
end)
|
|
|
|
it('is waited for when there are typed chars after noremapped chars', function()
|
|
command('set pastetoggle=abc')
|
|
command('inoremap d a')
|
|
meths.feedkeys('idb', 't', true)
|
|
-- sleep() for long enough that vgetorpeek() is gotten into, but short
|
|
-- enough that ttimeoutlen is not reached.
|
|
sleep(200)
|
|
feed('c')
|
|
-- Need another key so that the vgetorpeek() function returns.
|
|
feed('j')
|
|
-- 'ttimeoutlen' should apply
|
|
eq(1, eval('&paste'))
|
|
end)
|
|
end)
|
|
it('does not interfere with character-find', function()
|
|
insert('foo,bar')
|
|
feed('0')
|
|
command('set pastetoggle=,sp')
|
|
feed('dt,')
|
|
expect(',bar')
|
|
end)
|
|
end)
|