Improve keymap (#768)
* Improve keymap * improve * rename * Add tests * Use nightly for testing * Enable failing test * Add manual test case
This commit is contained in:
@@ -37,60 +37,117 @@ describe('keymap', function()
|
||||
describe('fallback', function()
|
||||
before_each(spec.before)
|
||||
|
||||
local keys = function(keys, mode)
|
||||
local run_fallback = function(keys, fallback)
|
||||
local state = {}
|
||||
feedkeys.call(keys, mode, function()
|
||||
feedkeys.call(keys, '', function()
|
||||
fallback()
|
||||
end)
|
||||
feedkeys.call('', '', function()
|
||||
if api.is_cmdline_mode() then
|
||||
state.buffer = { api.get_current_line() }
|
||||
else
|
||||
state.buffer = vim.api.nvim_buf_get_lines(0, 0, -1, false)
|
||||
end
|
||||
state.cursor = api.get_cursor()
|
||||
state.wildmenumode = vim.fn.wildmenumode() == 1
|
||||
end)
|
||||
feedkeys.call('', 'x')
|
||||
return state
|
||||
end
|
||||
|
||||
it('recursive', function()
|
||||
vim.api.nvim_buf_set_keymap(0, 'i', '(', '()<Left>', {
|
||||
expr = false,
|
||||
noremap = false,
|
||||
silent = true,
|
||||
})
|
||||
local fallback = keymap.fallback(0, 'i', keymap.get_map('i', '('))
|
||||
local state = keys('i' .. fallback.keys, fallback.noremap and 'n' or 'm')
|
||||
assert.are.same({ '()' }, state.buffer)
|
||||
assert.are.same({ 1, 1 }, state.cursor)
|
||||
end)
|
||||
describe('basic', function()
|
||||
it('<Plug>', function()
|
||||
vim.api.nvim_buf_set_keymap(0, 'i', '<Plug>(pairs)', '()<Left>', { noremap = true })
|
||||
vim.api.nvim_buf_set_keymap(0, 'i', '(', '<Plug>(pairs)', { noremap = false })
|
||||
local fallback = keymap.fallback(0, 'i', keymap.get_map('i', '('))
|
||||
local state = run_fallback('i', fallback)
|
||||
assert.are.same({ '()' }, state.buffer)
|
||||
assert.are.same({ 1, 1 }, state.cursor)
|
||||
end)
|
||||
|
||||
it('recursive expr', function()
|
||||
vim.api.nvim_buf_set_keymap(0, 'i', '(', '"()<Left>"', {
|
||||
expr = true,
|
||||
noremap = false,
|
||||
silent = true,
|
||||
})
|
||||
local fallback = keymap.fallback(0, 'i', keymap.get_map('i', '('))
|
||||
local state = keys('i' .. fallback.keys, fallback.noremap and 'n' or 'm')
|
||||
assert.are.same({ '()' }, state.buffer)
|
||||
assert.are.same({ 1, 1 }, state.cursor)
|
||||
end)
|
||||
it('<C-r>=', function()
|
||||
vim.api.nvim_buf_set_keymap(0, 'i', '(', '<C-r>="()"<CR><Left>', {})
|
||||
local fallback = keymap.fallback(0, 'i', keymap.get_map('i', '('))
|
||||
local state = run_fallback('i', fallback)
|
||||
assert.are.same({ '()' }, state.buffer)
|
||||
assert.are.same({ 1, 1 }, state.cursor)
|
||||
end)
|
||||
|
||||
it('recursive callback', function()
|
||||
pcall(function()
|
||||
it('callback', function()
|
||||
vim.api.nvim_buf_set_keymap(0, 'i', '(', '', {
|
||||
callback = function()
|
||||
vim.api.nvim_feedkeys('()' .. keymap.t('<Left>'), 'int', true)
|
||||
end,
|
||||
})
|
||||
local fallback = keymap.fallback(0, 'i', keymap.get_map('i', '('))
|
||||
local state = run_fallback('i', fallback)
|
||||
assert.are.same({ '()' }, state.buffer)
|
||||
assert.are.same({ 1, 1 }, state.cursor)
|
||||
end)
|
||||
|
||||
it('expr-callback', function()
|
||||
vim.api.nvim_buf_set_keymap(0, 'i', '(', '', {
|
||||
expr = true,
|
||||
noremap = false,
|
||||
silent = true,
|
||||
callback = function()
|
||||
return keymap.t('()<Left>')
|
||||
return '()' .. keymap.t('<Left>')
|
||||
end,
|
||||
})
|
||||
local fallback = keymap.fallback(0, 'i', keymap.get_map('i', '('))
|
||||
local state = keys('i' .. fallback.keys, fallback.noremap and 'n' or 'm')
|
||||
local state = run_fallback('i', fallback)
|
||||
assert.are.same({ '()' }, state.buffer)
|
||||
assert.are.same({ 1, 1 }, state.cursor)
|
||||
end)
|
||||
|
||||
-- it('cmdline default <Tab>', function()
|
||||
-- local fallback = keymap.fallback(0, 'c', keymap.get_map('c', '<Tab>'))
|
||||
-- local state = run_fallback(':', fallback)
|
||||
-- assert.are.same({ '' }, state.buffer)
|
||||
-- assert.are.same({ 1, 0 }, state.cursor)
|
||||
-- end)
|
||||
end)
|
||||
|
||||
describe('recursive', function()
|
||||
it('non-expr', function()
|
||||
vim.api.nvim_buf_set_keymap(0, 'i', '(', '()<Left>', {
|
||||
expr = false,
|
||||
noremap = false,
|
||||
silent = true,
|
||||
})
|
||||
local fallback = keymap.fallback(0, 'i', keymap.get_map('i', '('))
|
||||
local state = run_fallback('i', fallback)
|
||||
assert.are.same({ '()' }, state.buffer)
|
||||
assert.are.same({ 1, 1 }, state.cursor)
|
||||
end)
|
||||
|
||||
it('expr', function()
|
||||
vim.api.nvim_buf_set_keymap(0, 'i', '(', '"()<Left>"', {
|
||||
expr = true,
|
||||
noremap = false,
|
||||
silent = true,
|
||||
})
|
||||
local fallback = keymap.fallback(0, 'i', keymap.get_map('i', '('))
|
||||
local state = run_fallback('i', fallback)
|
||||
assert.are.same({ '()' }, state.buffer)
|
||||
assert.are.same({ 1, 1 }, state.cursor)
|
||||
end)
|
||||
|
||||
it('expr-callback', function()
|
||||
pcall(function()
|
||||
vim.api.nvim_buf_set_keymap(0, 'i', '(', '', {
|
||||
expr = true,
|
||||
noremap = false,
|
||||
silent = true,
|
||||
callback = function()
|
||||
return keymap.t('()<Left>')
|
||||
end,
|
||||
})
|
||||
local fallback = keymap.fallback(0, 'i', keymap.get_map('i', '('))
|
||||
local state = run_fallback('i', fallback)
|
||||
assert.are.same({ '()' }, state.buffer)
|
||||
assert.are.same({ 1, 1 }, state.cursor)
|
||||
end)
|
||||
end)
|
||||
end)
|
||||
end)
|
||||
|
||||
@@ -113,16 +170,18 @@ describe('keymap', function()
|
||||
assert.are.same({ 'aiueo', 'aiueo' }, vim.api.nvim_buf_get_lines(0, 0, -1, true))
|
||||
end)
|
||||
|
||||
-- it('#744', function()
|
||||
-- vim.api.nvim_buf_set_keymap(0, 'i', '<C-r>', 'recursive', {
|
||||
-- noremap = true
|
||||
-- })
|
||||
-- vim.api.nvim_buf_set_keymap(0, 'i', '<CR>', '<CR>recursive', {
|
||||
-- noremap = false
|
||||
-- })
|
||||
-- keymap.listen('i', '<CR>', function(_, fallback) fallback() end)
|
||||
-- feedkeys.call(keymap.t('i<CR>'), 'tx')
|
||||
-- assert.are.same({ '', 'recursive' }, vim.api.nvim_buf_get_lines(0, 0, -1, true))
|
||||
-- end)
|
||||
it('#744', function()
|
||||
vim.api.nvim_buf_set_keymap(0, 'i', '<C-r>', 'recursive', {
|
||||
noremap = true,
|
||||
})
|
||||
vim.api.nvim_buf_set_keymap(0, 'i', '<CR>', '<CR>recursive', {
|
||||
noremap = false,
|
||||
})
|
||||
keymap.listen('i', '<CR>', function(_, fallback)
|
||||
fallback()
|
||||
end)
|
||||
feedkeys.call(keymap.t('i<CR>'), 'tx')
|
||||
assert.are.same({ '', 'recursive' }, vim.api.nvim_buf_get_lines(0, 0, -1, true))
|
||||
end)
|
||||
end)
|
||||
end)
|
||||
|
||||
Reference in New Issue
Block a user