patch 8.2.4481: cmdline popup menu not removed when 'lazyredraw' is set
Problem: Cmdline popup menu not removed when 'lazyredraw' is set.
Solution: Temporarily reset 'lazyredraw' when removing the popup menu.
(closes #9857)
diff --git a/src/cmdexpand.c b/src/cmdexpand.c
index 84dc643..e9db8cf 100644
--- a/src/cmdexpand.c
+++ b/src/cmdexpand.c
@@ -377,9 +377,13 @@
*/
void cmdline_pum_remove(void)
{
+ int save_p_lz = p_lz;
+
pum_undisplay();
VIM_CLEAR(compl_match_array);
+ p_lz = FALSE; // avoid the popup menu hanging around
update_screen(0);
+ p_lz = save_p_lz;
redrawcmd();
}
diff --git a/src/testdir/dumps/Test_wildmenu_pum_41.dump b/src/testdir/dumps/Test_wildmenu_pum_41.dump
new file mode 100644
index 0000000..6f23d92
--- /dev/null
+++ b/src/testdir/dumps/Test_wildmenu_pum_41.dump
@@ -0,0 +1,10 @@
+| +0&#ffffff0@74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000001#e0e0e08|a|b@1|r|e|v|i|a|t|e| @4| +0#4040ff13#ffffff0@58
+| +0#0000001#ffd7ff255|a|b|c|l|e|a|r| @7| +0#4040ff13#ffffff0@58
+| +0#0000001#ffd7ff255|a|b|o|v|e|l|e|f|t| @5| +0#4040ff13#ffffff0@58
+| +0#0000001#ffd7ff255|a|b|s|t|r|a|c|t| @6| +0#4040ff13#ffffff0@58
+|:+0#0000000&|a|b@1|r|e|v|i|a|t|e> @63
diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim
index d7e46d9..d7a8c4a 100644
--- a/src/testdir/test_cmdline.vim
+++ b/src/testdir/test_cmdline.vim
@@ -2181,6 +2181,11 @@
set tabline=%!MyTabLine()
set showtabline=2
endfunc
+
+ func DoFeedKeys()
+ let &wildcharm = char2nr("\t")
+ call feedkeys(":edit $VIMRUNTIME/\<Tab>\<Left>\<C-U>ab\<Tab>")
+ endfunc
[CODE]
call writefile(commands, 'Xtest')
@@ -2378,6 +2383,12 @@
call term_sendkeys(buf, "\<Esc>")
call VerifyScreenDump(buf, 'Test_wildmenu_pum_40', {})
+ " popup is cleared also when 'lazyredraw' is set
+ call term_sendkeys(buf, ":set showtabline=1 laststatus=1 lazyredraw\<CR>")
+ call term_sendkeys(buf, ":call DoFeedKeys()\<CR>")
+ call VerifyScreenDump(buf, 'Test_wildmenu_pum_41', {})
+ call term_sendkeys(buf, "\<Esc>")
+
call term_sendkeys(buf, "\<C-U>\<CR>")
call StopVimInTerminal(buf)
call delete('Xtest')
diff --git a/src/version.c b/src/version.c
index b9b6aac..11b4bd5 100644
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4481,
+/**/
4480,
/**/
4479,