summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-02-11 18:51:45 +0000
committerBram Moolenaar <Bram@vim.org>2022-02-11 18:51:45 +0000
commit481acb11413a436653e235d2098990b2ad47d195 (patch)
treee2012f19845ed8251e04528df52aa39b5e7a59d6
parentf6246f51e3d85a982a899b4a8fd9045a5e23016f (diff)
downloadvim-git-481acb11413a436653e235d2098990b2ad47d195.tar.gz
patch 8.2.4346: a custom statusline may cause Esc to work like Enterv8.2.4346
Problem: A custom statusline may cause Esc to work like Enter on the command line when the popup menu is displayed. Solution: Save and restore KeyTyped. (closes #9749)
-rw-r--r--src/drawscreen.c4
-rw-r--r--src/testdir/dumps/Test_wildmenu_pum_39.dump10
-rw-r--r--src/testdir/test_cmdline.vim15
-rw-r--r--src/version.c2
4 files changed, 31 insertions, 0 deletions
diff --git a/src/drawscreen.c b/src/drawscreen.c
index 6cae313fa..69f44a9f9 100644
--- a/src/drawscreen.c
+++ b/src/drawscreen.c
@@ -571,6 +571,7 @@ redraw_custom_statusline(win_T *wp)
{
static int entered = FALSE;
int saved_did_emsg = did_emsg;
+ int saved_KeyTyped = KeyTyped;
// When called recursively return. This can happen when the statusline
// contains an expression that triggers a redraw.
@@ -591,6 +592,9 @@ redraw_custom_statusline(win_T *wp)
}
did_emsg |= saved_did_emsg;
entered = FALSE;
+
+ // A user function may reset KeyTyped, restore it.
+ KeyTyped = saved_KeyTyped;
}
#endif
diff --git a/src/testdir/dumps/Test_wildmenu_pum_39.dump b/src/testdir/dumps/Test_wildmenu_pum_39.dump
new file mode 100644
index 000000000..27be763ee
--- /dev/null
+++ b/src/testdir/dumps/Test_wildmenu_pum_39.dump
@@ -0,0 +1,10 @@
+> +0&#ffffff0@74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|s+3#0000000&|t|a|t|u|s| @68
+| +0&&@74
diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim
index 1beb9af4b..6d0dc5bef 100644
--- a/src/testdir/test_cmdline.vim
+++ b/src/testdir/test_cmdline.vim
@@ -1983,6 +1983,14 @@ func Test_wildmenu_pum()
return repeat(['aaaa'], 120)
endfunc
command -nargs=* -complete=customlist,CmdCompl Tcmd
+
+ func MyStatusLine() abort
+ return 'status'
+ endfunc
+ func SetupStatusline()
+ set statusline=%!MyStatusLine()
+ set laststatus=2
+ endfunc
[CODE]
call writefile(commands, 'Xtest')
@@ -2166,6 +2174,13 @@ func Test_wildmenu_pum()
call term_sendkeys(buf, ":ls\<CR>")
call term_sendkeys(buf, ":com\<Tab> ")
call VerifyScreenDump(buf, 'Test_wildmenu_pum_38', {})
+ call term_sendkeys(buf, "\<C-U>\<CR>")
+
+ " Esc still works to abort the command when 'statusline' is set
+ call term_sendkeys(buf, ":call SetupStatusline()\<CR>")
+ call term_sendkeys(buf, ":si\<Tab>")
+ call term_sendkeys(buf, "\<Esc>")
+ call VerifyScreenDump(buf, 'Test_wildmenu_pum_39', {})
call term_sendkeys(buf, "\<C-U>\<CR>")
call StopVimInTerminal(buf)
diff --git a/src/version.c b/src/version.c
index b70fb291a..07e46ae95 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4346,
+/**/
4345,
/**/
4344,