patch 9.1.1200: cmdline pum not cleared for input() completion Commit: https://github.com/vim/vim/commit/1830e787f6ee9828151284c44b494b801c677ee9 Author: zeertzjq <zeert...@outlook.com> Date: Thu Mar 13 20:29:13 2025 +0100
patch 9.1.1200: cmdline pum not cleared for input() completion Problem: Cmdline pum not cleared for input() completion. Solution: Temporary reset RedrawingDisabled in cmdline_pum_cleanup(), like what is done in wildmenu_cleanup() (zeertzjq). fixes: #16874 closes: #16876 Signed-off-by: zeertzjq <zeert...@outlook.com> Signed-off-by: Christian Brabandt <c...@256bit.org> diff --git a/src/cmdexpand.c b/src/cmdexpand.c index 597f78da2..d21827733 100644 --- a/src/cmdexpand.c +++ b/src/cmdexpand.c @@ -419,10 +419,15 @@ cmdline_pum_active(void) * items and refresh the screen. */ void -cmdline_pum_remove(void) +cmdline_pum_remove(cmdline_info_T *cclp UNUSED) { int save_p_lz = p_lz; int save_KeyTyped = KeyTyped; +#ifdef FEAT_EVAL + int save_RedrawingDisabled = RedrawingDisabled; + if (cclp->input_fn) + RedrawingDisabled = 0; +#endif pum_undisplay(); VIM_CLEAR(compl_match_array); @@ -434,12 +439,16 @@ cmdline_pum_remove(void) // When a function is called (e.g. for 'foldtext') KeyTyped might be reset // as a side effect. KeyTyped = save_KeyTyped; +#ifdef FEAT_EVAL + if (cclp->input_fn) + RedrawingDisabled = save_RedrawingDisabled; +#endif } void cmdline_pum_cleanup(cmdline_info_T *cclp) { - cmdline_pum_remove(); + cmdline_pum_remove(cclp); wildmenu_cleanup(cclp); } @@ -1022,7 +1031,7 @@ ExpandOne( // The entries from xp_files may be used in the PUM, remove it. if (compl_match_array != NULL) - cmdline_pum_remove(); + cmdline_pum_remove(get_cmdline_info()); } xp->xp_selected = 0; diff --git a/src/ex_getln.c b/src/ex_getln.c index bc996741a..c4b0a0095 100644 --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -1930,7 +1930,7 @@ getcmdline_int( if (end_wildmenu) { if (cmdline_pum_active()) - cmdline_pum_remove(); + cmdline_pum_remove(&ccline); if (xpc.xp_numfiles != -1) (void)ExpandOne(&xpc, NULL, NULL, 0, WILD_FREE); did_wild_list = FALSE; @@ -2556,7 +2556,7 @@ returncmd: // if certain special keys like <Esc> or <C-\> were used as wildchar. Make // sure to still clean up to avoid memory corruption. if (cmdline_pum_active()) - cmdline_pum_remove(); + cmdline_pum_remove(&ccline); wildmenu_cleanup(&ccline); did_wild_list = FALSE; wim_index = 0; diff --git a/src/proto/cmdexpand.pro b/src/proto/cmdexpand.pro index bfcc5c838..e627639d9 100644 --- a/src/proto/cmdexpand.pro +++ b/src/proto/cmdexpand.pro @@ -3,7 +3,7 @@ int cmdline_fuzzy_complete(char_u *fuzzystr); int nextwild(expand_T *xp, int type, int options, int escape); void cmdline_pum_display(void); int cmdline_pum_active(void); -void cmdline_pum_remove(void); +void cmdline_pum_remove(cmdline_info_T *cclp); void cmdline_pum_cleanup(cmdline_info_T *cclp); int cmdline_compl_startcol(void); char_u *cmdline_compl_pattern(void); diff --git a/src/testdir/dumps/Test_wildmenu_input_func_1.dump b/src/testdir/dumps/Test_wildmenu_input_func_1.dump new file mode 100644 index 000000000..fc76cb096 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_input_func_1.dump @@ -0,0 +1,8 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|C+0#0000000&|o|m@1|a|n|d|?| > @65 diff --git a/src/testdir/dumps/Test_wildmenu_input_func_2.dump b/src/testdir/dumps/Test_wildmenu_input_func_2.dump new file mode 100644 index 000000000..6bbc22d51 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_input_func_2.dump @@ -0,0 +1,8 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|e+0#0000001#ffff4012|c|h|o| +3#0000000#ffffff0@1|e|c|h|o|c|o|n|s|o|l|e| @1|e|c|h|o|e|r@1| @1|e|c|h|o|h|l| @1|e|c|h|o|m|s|g| @1|e|c|h|o|n| @1|e|c|h|o|w|i|n|d|o|w| @12 +|C+0&&|o|m@1|a|n|d|?| |e|c|h|o> @61 diff --git a/src/testdir/dumps/Test_wildmenu_input_func_3.dump b/src/testdir/dumps/Test_wildmenu_input_func_3.dump new file mode 100644 index 000000000..65343fc84 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_input_func_3.dump @@ -0,0 +1,8 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|C+0#0000000&|o|m@1|a|n|d|?| |e|c|h|o| > @60 diff --git a/src/testdir/dumps/Test_wildmenu_input_func_4.dump b/src/testdir/dumps/Test_wildmenu_input_func_4.dump new file mode 100644 index 000000000..2a26168f1 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_input_func_4.dump @@ -0,0 +1,8 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|b+0#0000001#ffff4012|u|f|n|a|m|e|(| +3#0000000#ffffff0@1|b|u|f|n|r|(| @58 +|C+0&&|o|m@1|a|n|d|?| |e|c|h|o| |b|u|f|n|a|m|e|(> @52 diff --git a/src/testdir/dumps/Test_wildmenu_input_func_5.dump b/src/testdir/dumps/Test_wildmenu_input_func_5.dump new file mode 100644 index 000000000..fc76cb096 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_input_func_5.dump @@ -0,0 +1,8 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|C+0#0000000&|o|m@1|a|n|d|?| > @65 diff --git a/src/testdir/dumps/Test_wildmenu_input_func_6.dump b/src/testdir/dumps/Test_wildmenu_input_func_6.dump new file mode 100644 index 000000000..705c36553 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_input_func_6.dump @@ -0,0 +1,8 @@ +| +0#0000001#e0e0e08|e|c|h|o| @10| +0#0000000#ffffff0@58 +| +0#0000001#ffd7ff255|e|c|h|o|c|o|n|s|o|l|e| @3| +0#4040ff13#ffffff0@58 +| +0#0000001#ffd7ff255|e|c|h|o|e|r@1| @7| +0#4040ff13#ffffff0@58 +| +0#0000001#ffd7ff255|e|c|h|o|h|l| @8| +0#4040ff13#ffffff0@58 +| +0#0000001#ffd7ff255|e|c|h|o|m|s|g| @7| +0#4040ff13#ffffff0@58 +| +0#0000001#ffd7ff255|e|c|h|o|n| @9| +0#4040ff13#ffffff0@58 +| +0#0000001#ffd7ff255|e|c|h|o|w|i|n|d|o|w| @4| +0#4040ff13#ffffff0@58 +|C+0#0000000&|o|m@1|a|n|d|?| |e|c|h|o> @61 diff --git a/src/testdir/dumps/Test_wildmenu_input_func_7.dump b/src/testdir/dumps/Test_wildmenu_input_func_7.dump new file mode 100644 index 000000000..65343fc84 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_input_func_7.dump @@ -0,0 +1,8 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|C+0#0000000&|o|m@1|a|n|d|?| |e|c|h|o| > @60 diff --git a/src/testdir/dumps/Test_wildmenu_input_func_8.dump b/src/testdir/dumps/Test_wildmenu_input_func_8.dump new file mode 100644 index 000000000..0ae617908 --- /dev/null +++ b/src/testdir/dumps/Test_wildmenu_input_func_8.dump @@ -0,0 +1,8 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @3| +0#0000001#e0e0e08|b|u|f|n|a|m|e|(| @6| +0#4040ff13#ffffff0@53 +|~| @3| +0#0000001#ffd7ff255|b|u|f|n|r|(| @8| +0#4040ff13#ffffff0@53 +|C+0#0000000&|o|m@1|a|n|d|?| |e|c|h|o| |b|u|f|n|a|m|e|(> @52 diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim index 166c9da87..57b57cb8d 100644 --- a/src/testdir/test_cmdline.vim +++ b/src/testdir/test_cmdline.vim @@ -211,6 +211,37 @@ func Test_wildmenu_screendump() call StopVimInTerminal(buf) endfunc +func Test_wildmenu_with_input_func() + CheckScreendump + + let buf = RunVimInTerminal('-c "set wildmenu"', {'rows': 8}) + + call term_sendkeys(buf, ":call input('Command? ', '', 'command')\<CR>") + call VerifyScreenDump(buf, 'Test_wildmenu_input_func_1', {}) + call term_sendkeys(buf, "ech\<Tab>") + call VerifyScreenDump(buf, 'Test_wildmenu_input_func_2', {}) + call term_sendkeys(buf, "\<Space>") + call VerifyScreenDump(buf, 'Test_wildmenu_input_func_3', {}) + call term_sendkeys(buf, "bufn\<Tab>") + call VerifyScreenDump(buf, 'Test_wildmenu_input_func_4', {}) + call term_sendkeys(buf, "\<CR>") + + call term_sendkeys(buf, ":set wildoptions+=pum\<CR>") + + call term_sendkeys(buf, ":call input('Command? ', '', 'command')\<CR>") + call VerifyScreenDump(buf, 'Test_wildmenu_input_func_5', {}) + call term_sendkeys(buf, "ech\<Tab>") + call VerifyScreenDump(buf, 'Test_wildmenu_input_func_6', {}) + call term_sendkeys(buf, "\<Space>") + call VerifyScreenDump(buf, 'Test_wildmenu_input_func_7', {}) + call term_sendkeys(buf, "bufn\<Tab>") + call VerifyScreenDump(buf, 'Test_wildmenu_input_func_8', {}) + call term_sendkeys(buf, "\<CR>") + + " clean up + call StopVimInTerminal(buf) +endfunc + func Test_redraw_in_autocmd() CheckScreendump diff --git a/src/version.c b/src/version.c index d7ded9f6f..f65999a61 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1200, /**/ 1199, /**/ -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/vim_dev/E1tsoFp-008bWC-EO%40256bit.org.