mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
eventloop: K_EVENT should not finish operator
normal_finish_command() and normal_prepare() assume that any pending operator needs to be finished after any subsequent key. Set `finish_op = false` in nv_event() to indicate that the pending operator shouldn't be finished in normal_execute(). This is how nv_visual() indicates that 'v' or 'V' in operator-pending mode should not finish the current pending operator. fixes #5398 fixes #6166 (partially; mappings are still interrupted)
This commit is contained in:
parent
fec6ca7511
commit
541dde36e3
@ -7958,6 +7958,7 @@ static void nv_event(cmdarg_T *cap)
|
|||||||
may_garbage_collect = false;
|
may_garbage_collect = false;
|
||||||
multiqueue_process_events(main_loop.events);
|
multiqueue_process_events(main_loop.events);
|
||||||
cap->retval |= CA_COMMAND_BUSY; // don't call edit() now
|
cap->retval |= CA_COMMAND_BUSY; // don't call edit() now
|
||||||
|
finish_op = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Trigger FocusGained event.
|
/// Trigger FocusGained event.
|
||||||
|
@ -329,24 +329,80 @@ describe('api', function()
|
|||||||
}
|
}
|
||||||
eq({ { {mode='n', blocking=false},
|
eq({ { {mode='n', blocking=false},
|
||||||
13,
|
13,
|
||||||
{mode='n', blocking=false}, -- TODO: should be blocked=true
|
{mode='n', blocking=false}, -- TODO: should be blocked=true ?
|
||||||
1 },
|
1 },
|
||||||
NIL}, meths.call_atomic(req))
|
NIL}, meths.call_atomic(req))
|
||||||
eq({mode='r', blocking=true}, nvim("get_mode"))
|
eq({mode='r', blocking=true}, nvim("get_mode"))
|
||||||
end)
|
end)
|
||||||
-- TODO: bug #6166
|
|
||||||
it("during insert-mode map-pending, returns blocking=true #6166", function()
|
it("during insert-mode map-pending, returns blocking=true #6166", function()
|
||||||
command("inoremap xx foo")
|
command("inoremap xx foo")
|
||||||
nvim("input", "ix")
|
nvim("input", "ix")
|
||||||
eq({mode='i', blocking=true}, nvim("get_mode"))
|
eq({mode='i', blocking=true}, nvim("get_mode"))
|
||||||
end)
|
end)
|
||||||
-- TODO: bug #6166
|
|
||||||
it("during normal-mode gU, returns blocking=false #6166", function()
|
it("during normal-mode gU, returns blocking=false #6166", function()
|
||||||
nvim("input", "gu")
|
nvim("input", "gu")
|
||||||
eq({mode='no', blocking=false}, nvim("get_mode"))
|
eq({mode='no', blocking=false}, nvim("get_mode"))
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
describe('RPC (K_EVENT) #6166', function()
|
||||||
|
it('does not complete/interrupt normal-mode operator', function()
|
||||||
|
helpers.insert([[
|
||||||
|
FIRST LINE
|
||||||
|
SECOND LINE]])
|
||||||
|
nvim('input', 'gg')
|
||||||
|
nvim('input', 'gu')
|
||||||
|
-- Make any non-async RPC request.
|
||||||
|
nvim('get_current_buf')
|
||||||
|
-- Buffer should not change.
|
||||||
|
helpers.expect([[
|
||||||
|
FIRST LINE
|
||||||
|
SECOND LINE]])
|
||||||
|
-- Now send input to complete the operator.
|
||||||
|
nvim("input", "j")
|
||||||
|
helpers.expect([[
|
||||||
|
first line
|
||||||
|
second line]])
|
||||||
|
end)
|
||||||
|
-- TODO: bug #6166
|
||||||
|
pending('does not complete/interrupt normal-mode mapping', function()
|
||||||
|
command("nnoremap dd :let g:foo='it worked...'<CR>")
|
||||||
|
helpers.insert([[
|
||||||
|
FIRST LINE
|
||||||
|
SECOND LINE]])
|
||||||
|
nvim('input', 'gg')
|
||||||
|
nvim('input', 'd')
|
||||||
|
helpers.expect([[
|
||||||
|
FIRST LINE
|
||||||
|
SECOND LINE]])
|
||||||
|
-- Make any non-async RPC request. (expect() does RPC, but be explicit)
|
||||||
|
nvim('get_current_buf')
|
||||||
|
-- Send input to complete the mapping.
|
||||||
|
nvim('input', 'd')
|
||||||
|
helpers.expect([[
|
||||||
|
FIRST LINE
|
||||||
|
SECOND LINE]])
|
||||||
|
eq('it worked...', eval('g:foo'))
|
||||||
|
end)
|
||||||
|
it('does not complete/interrupt insert-mode mapping', function()
|
||||||
|
command("inoremap xx foo")
|
||||||
|
helpers.insert([[
|
||||||
|
FIRST LINE
|
||||||
|
SECOND LINE]])
|
||||||
|
nvim('input', 'ix')
|
||||||
|
helpers.expect([[
|
||||||
|
FIRST LINE
|
||||||
|
SECOND LINxE]])
|
||||||
|
-- Make any non-async RPC request. (expect() does RPC, but be explicit)
|
||||||
|
nvim('get_current_buf')
|
||||||
|
-- Send input to complete the mapping.
|
||||||
|
nvim('input', 'x')
|
||||||
|
helpers.expect([[
|
||||||
|
FIRST LINE
|
||||||
|
SECOND LINxxE]]) -- TODO: should be "SECOND LINfooE" #6166
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
|
||||||
describe('nvim_replace_termcodes', function()
|
describe('nvim_replace_termcodes', function()
|
||||||
it('escapes K_SPECIAL as K_SPECIAL KS_SPECIAL KE_FILLER', function()
|
it('escapes K_SPECIAL as K_SPECIAL KS_SPECIAL KE_FILLER', function()
|
||||||
eq('\128\254X', helpers.nvim('replace_termcodes', '\128', true, true, true))
|
eq('\128\254X', helpers.nvim('replace_termcodes', '\128', true, true, true))
|
||||||
|
Loading…
Reference in New Issue
Block a user