diff options
author | Dongdong Zhou <dzhou121@gmail.com> | 2017-02-24 06:12:34 +0000 |
---|---|---|
committer | Björn Linse <bjorn.linse@gmail.com> | 2017-10-29 08:18:03 +0100 |
commit | 39e83fa7cb4486d30f788c3b27594d106d5e76ab (patch) | |
tree | cbfb2af155e501477a1edc4c45d47cad3f4fe785 /src | |
parent | 2a3bcd1ff883429a3dd17e7ae5ddc1396abbad17 (diff) | |
download | rneovim-39e83fa7cb4486d30f788c3b27594d106d5e76ab.tar.gz rneovim-39e83fa7cb4486d30f788c3b27594d106d5e76ab.tar.bz2 rneovim-39e83fa7cb4486d30f788c3b27594d106d5e76ab.zip |
ui: allow external ui to draw wildmenu
Co-authored-by: Björn Linse <bjorn.linse@gmail.com>
Updated docs and tests.
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/api/ui_events.in.h | 7 | ||||
-rw-r--r-- | src/nvim/ex_getln.c | 27 |
2 files changed, 29 insertions, 5 deletions
diff --git a/src/nvim/api/ui_events.in.h b/src/nvim/api/ui_events.in.h index 65357d008a..579ba1441a 100644 --- a/src/nvim/api/ui_events.in.h +++ b/src/nvim/api/ui_events.in.h @@ -65,6 +65,7 @@ void popupmenu_hide(void) FUNC_API_SINCE(3) FUNC_API_REMOTE_ONLY; void popupmenu_select(Integer selected) FUNC_API_SINCE(3) FUNC_API_REMOTE_ONLY; + void tabline_update(Tabpage current, Array tabs) FUNC_API_SINCE(3) FUNC_API_REMOTE_ONLY; @@ -84,4 +85,10 @@ void cmdline_block_append(Array lines) void cmdline_block_hide(void) FUNC_API_SINCE(3) FUNC_API_REMOTE_ONLY; +void wildmenu_show(Array content) + FUNC_API_SINCE(3) FUNC_API_REMOTE_ONLY; +void wildmenu_select(Integer selected) + FUNC_API_SINCE(3) FUNC_API_REMOTE_ONLY; +void wildmenu_hide(void) + FUNC_API_SINCE(3) FUNC_API_REMOTE_ONLY; #endif // NVIM_API_UI_EVENTS_IN_H diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index e79476ab53..3d5e1a5476 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -534,6 +534,9 @@ static int command_line_execute(VimState *state, int key) if (!(s->c == p_wc && KeyTyped) && s->c != p_wcm && s->c != Ctrl_N && s->c != Ctrl_P && s->c != Ctrl_A && s->c != Ctrl_L) { + if (ui_is_external(kUIWildmenu)) { + ui_call_wildmenu_hide(); + } if (s->xpc.xp_numfiles != -1) { (void)ExpandOne(&s->xpc, NULL, NULL, 0, WILD_FREE); } @@ -3515,11 +3518,17 @@ ExpandOne ( else findex = -1; } - if (p_wmnu) - win_redr_status_matches(xp, xp->xp_numfiles, xp->xp_files, - findex, cmd_showtail); - if (findex == -1) + if (p_wmnu) { + if (ui_is_external(kUIWildmenu)) { + ui_call_wildmenu_select(findex); + } else { + win_redr_status_matches(xp, xp->xp_numfiles, xp->xp_files, + findex, cmd_showtail); + } + } + if (findex == -1) { return vim_strsave(orig_save); + } return vim_strsave(xp->xp_files[findex]); } else return NULL; @@ -3876,6 +3885,15 @@ static int showmatches(expand_T *xp, int wildmenu) showtail = cmd_showtail; } + if (ui_is_external(kUIWildmenu)) { + Array args = ARRAY_DICT_INIT; + for (i = 0; i < num_files; i++) { + ADD(args, STRING_OBJ(cstr_to_string((char *)files_found[i]))); + } + ui_call_wildmenu_show(args); + return EXPAND_OK; + } + if (!wildmenu) { msg_didany = FALSE; /* lines_left will be set */ msg_start(); /* prepare for paging */ @@ -6128,4 +6146,3 @@ static void set_search_match(pos_T *t) coladvance((colnr_T)MAXCOL); } } - |