aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-01-14 19:29:55 +0800
committerzeertzjq <zeertzjq@outlook.com>2023-01-14 20:09:56 +0800
commitef77598bfba1cd588f6b310d1806b725b8bec9cb (patch)
tree9edf76bb7dcdd45ff7c6b1a241c72135de92d9d0
parentbf0839044254482e02cc5e05b07e0b465a47e1e4 (diff)
downloadrneovim-ef77598bfba1cd588f6b310d1806b725b8bec9cb.tar.gz
rneovim-ef77598bfba1cd588f6b310d1806b725b8bec9cb.tar.bz2
rneovim-ef77598bfba1cd588f6b310d1806b725b8bec9cb.zip
vim-patch:8.2.4346: a custom statusline may cause Esc to work like Enter
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 vim/vim#9749) https://github.com/vim/vim/commit/481acb11413a436653e235d2098990b2ad47d195 Co-authored-by: Bram Moolenaar <Bram@vim.org>
-rw-r--r--src/nvim/statusline.c4
-rw-r--r--src/nvim/testdir/test_cmdline.vim15
2 files changed, 19 insertions, 0 deletions
diff --git a/src/nvim/statusline.c b/src/nvim/statusline.c
index 7647c1fcfb..4f1453a815 100644
--- a/src/nvim/statusline.c
+++ b/src/nvim/statusline.c
@@ -639,6 +639,7 @@ int fillchar_status(int *attr, win_T *wp)
void redraw_custom_statusline(win_T *wp)
{
static bool entered = false;
+ bool saved_KeyTyped = KeyTyped;
// When called recursively return. This can happen when the statusline
// contains an expression that triggers a redraw.
@@ -649,6 +650,9 @@ void redraw_custom_statusline(win_T *wp)
win_redr_custom(wp, false, false);
entered = false;
+
+ // A user function may reset KeyTyped, restore it.
+ KeyTyped = saved_KeyTyped;
}
static void ui_ext_tabline_update(void)
diff --git a/src/nvim/testdir/test_cmdline.vim b/src/nvim/testdir/test_cmdline.vim
index 2f4048cc33..68560d5d49 100644
--- a/src/nvim/testdir/test_cmdline.vim
+++ b/src/nvim/testdir/test_cmdline.vim
@@ -2304,6 +2304,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')
@@ -2487,6 +2495,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)