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.

Raspunde prin e-mail lui