diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-10-17 21:00:50 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-17 21:00:50 +0800 |
commit | 637ab296cba9e37e7374a8c076342487398605ee (patch) | |
tree | c49271b58bbe1f8d8cb9f265f7f2aac7fb6a757a /src/nvim/ex_getln.c | |
parent | 39911d76be560c998cc7dee51c5d94f811164f66 (diff) | |
download | rneovim-637ab296cba9e37e7374a8c076342487398605ee.tar.gz rneovim-637ab296cba9e37e7374a8c076342487398605ee.tar.bz2 rneovim-637ab296cba9e37e7374a8c076342487398605ee.zip |
feat(api): nvim_select_popupmenu_item support cmdline pum (#20652)
Diffstat (limited to 'src/nvim/ex_getln.c')
-rw-r--r-- | src/nvim/ex_getln.c | 42 |
1 files changed, 30 insertions, 12 deletions
diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index 52abbd13f3..a1e4bc96b5 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -919,6 +919,22 @@ static int command_line_check(VimState *state) return 1; } +static void command_line_end_wildmenu(CommandLineState *s) +{ + if (cmdline_pum_active()) { + cmdline_pum_remove(); + } + if (s->xpc.xp_numfiles != -1) { + (void)ExpandOne(&s->xpc, NULL, NULL, 0, WILD_FREE); + } + s->did_wild_list = false; + if (!p_wmnu || (s->c != K_UP && s->c != K_DOWN)) { + s->xpc.xp_context = EXPAND_NOTHING; + } + s->wim_index = 0; + wildmenu_cleanup(&ccline); +} + static int command_line_execute(VimState *state, int key) { if (key == K_IGNORE || key == K_NOP) { @@ -937,6 +953,19 @@ static int command_line_execute(VimState *state, int key) map_execute_lua(); } + // nvim_select_popupmenu_item() can be called from the handling of + // K_EVENT, K_COMMAND, or K_LUA. + if (pum_want.active) { + if (cmdline_pum_active()) { + nextwild(&s->xpc, WILD_PUM_WANT, 0, s->firstc != '@'); + if (pum_want.finish) { + nextwild(&s->xpc, WILD_APPLY, WILD_NO_BEEP, s->firstc != '@'); + command_line_end_wildmenu(s); + } + } + pum_want.active = false; + } + if (!cmdline_was_last_drawn) { redrawcmdline(); } @@ -1016,18 +1045,7 @@ static int command_line_execute(VimState *state, int key) if (!(s->c == p_wc && KeyTyped) && s->c != p_wcm && s->c != Ctrl_Z && s->c != Ctrl_N && s->c != Ctrl_P && s->c != Ctrl_A && s->c != Ctrl_L) { - if (cmdline_pum_active()) { - cmdline_pum_remove(); - } - if (s->xpc.xp_numfiles != -1) { - (void)ExpandOne(&s->xpc, NULL, NULL, 0, WILD_FREE); - } - s->did_wild_list = false; - if (!p_wmnu || (s->c != K_UP && s->c != K_DOWN)) { - s->xpc.xp_context = EXPAND_NOTHING; - } - s->wim_index = 0; - wildmenu_cleanup(&ccline); + command_line_end_wildmenu(s); } if (p_wmnu) { |