mirror of
https://github.com/neovim/neovim
synced 2025-07-15 16:51:49 +00:00
feat(complete): CompleteDone reason "cancel", "discard" #32600
Problem: there is no way to distinguish between user's explicit completion stop/cancel and other automated reasons. Solution: update "cancel" reason to be set only on explicit CTRL-e, and set intentionally vague "discard" otherwise.
This commit is contained in:
committed by
GitHub
parent
07c5f41da3
commit
268a3de0a7
@ -470,11 +470,11 @@ CompleteDone After Insert mode completion is done. Either
|
||||
reason Reason for completion being
|
||||
done. Can be one of:
|
||||
- "accept": completion was
|
||||
accepted using |complete_CTRL-Y|.
|
||||
- "cancel": completion was cancelled
|
||||
using |complete_CTRL-E|, pressing
|
||||
a non-keyword character, or
|
||||
triggering a new completion.
|
||||
accepted by |complete_CTRL-Y|.
|
||||
- "cancel": completion was
|
||||
stopped by |complete_CTRL-E.
|
||||
- "discard": completion was
|
||||
ended for other reason.
|
||||
|
||||
*CursorHold*
|
||||
CursorHold When the user doesn't press a key for the time
|
||||
|
@ -581,7 +581,8 @@ static void do_autocmd_completedone(int c, int mode, char *word)
|
||||
tv_dict_add_str(v_event, S_LEN("complete_word"), word != NULL ? word : "");
|
||||
tv_dict_add_str(v_event, S_LEN("complete_type"), mode_str != NULL ? mode_str : "");
|
||||
|
||||
tv_dict_add_str(v_event, S_LEN("reason"), (c == Ctrl_Y ? "accept" : "cancel"));
|
||||
tv_dict_add_str(v_event, S_LEN("reason"),
|
||||
(c == Ctrl_Y ? "accept" : (c == Ctrl_E ? "cancel" : "discard")));
|
||||
tv_dict_set_keys_readonly(v_event);
|
||||
|
||||
ins_apply_autocmds(EVENT_COMPLETEDONE);
|
||||
|
@ -23,18 +23,26 @@ describe('CompleteDone', function()
|
||||
feed('<C-y>')
|
||||
eq('accept', eval('g:donereason'))
|
||||
end)
|
||||
describe('cancel', function()
|
||||
it('on <C-e>', function()
|
||||
feed('<C-e>')
|
||||
eq('cancel', eval('g:donereason'))
|
||||
end)
|
||||
|
||||
it('cancel', function()
|
||||
feed('<C-e>')
|
||||
eq('cancel', eval('g:donereason'))
|
||||
end)
|
||||
|
||||
describe('discard', function()
|
||||
it('on non-keyword character', function()
|
||||
feed('<Esc>')
|
||||
eq('cancel', eval('g:donereason'))
|
||||
feed('<Space>')
|
||||
eq('discard', eval('g:donereason'))
|
||||
end)
|
||||
|
||||
it('on mode change', function()
|
||||
feed('<Esc>')
|
||||
eq('discard', eval('g:donereason'))
|
||||
end)
|
||||
|
||||
it('when overridden by another complete()', function()
|
||||
call('complete', call('col', '.'), { 'bar', 'baz' })
|
||||
eq('cancel', eval('g:donereason'))
|
||||
eq('discard', eval('g:donereason'))
|
||||
end)
|
||||
end)
|
||||
end)
|
||||
|
Reference in New Issue
Block a user