aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-01-14 19:31:11 +0800
committerzeertzjq <zeertzjq@outlook.com>2023-01-14 20:09:56 +0800
commit81473c8ab241286aafe8724d173df2c6b692e119 (patch)
treec9e230a4a641d473903a8f66c3a01391efdd2a46
parentef77598bfba1cd588f6b310d1806b725b8bec9cb (diff)
downloadrneovim-81473c8ab241286aafe8724d173df2c6b692e119.tar.gz
rneovim-81473c8ab241286aafe8724d173df2c6b692e119.tar.bz2
rneovim-81473c8ab241286aafe8724d173df2c6b692e119.zip
vim-patch:8.2.4382: a custom 'tabline' may cause Esc to work like Enter
Problem: A custom 'tabline' 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#9776) https://github.com/vim/vim/commit/e4835bf34001471a102528659af009bc46361141 Co-authored-by: Bram Moolenaar <Bram@vim.org>
-rw-r--r--src/nvim/statusline.c8
-rw-r--r--src/nvim/testdir/test_cmdline.vim15
2 files changed, 19 insertions, 4 deletions
diff --git a/src/nvim/statusline.c b/src/nvim/statusline.c
index 4f1453a815..ca157ba697 100644
--- a/src/nvim/statusline.c
+++ b/src/nvim/statusline.c
@@ -268,6 +268,7 @@ static void win_redr_custom(win_T *wp, bool draw_winbar, bool draw_ruler)
StlClickRecord *tabtab;
win_T *ewp;
int p_crb_save;
+ bool save_KeyTyped = KeyTyped;
bool is_stl_global = global_stl_height() > 0;
ScreenGrid *grid = &default_grid;
@@ -422,6 +423,9 @@ static void win_redr_custom(win_T *wp, bool draw_winbar, bool draw_ruler)
theend:
entered = false;
+
+ // A user function may reset KeyTyped, restore it.
+ KeyTyped = save_KeyTyped;
}
void win_redr_winbar(win_T *wp)
@@ -639,7 +643,6 @@ 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.
@@ -650,9 +653,6 @@ 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 68560d5d49..8fc6e9847d 100644
--- a/src/nvim/testdir/test_cmdline.vim
+++ b/src/nvim/testdir/test_cmdline.vim
@@ -2312,6 +2312,15 @@ func Test_wildmenu_pum()
set statusline=%!MyStatusLine()
set laststatus=2
endfunc
+
+ func MyTabLine()
+ return 'my tab line'
+ endfunc
+ func SetupTabline()
+ set statusline=
+ set tabline=%!MyTabLine()
+ set showtabline=2
+ endfunc
[CODE]
call writefile(commands, 'Xtest')
@@ -2503,6 +2512,12 @@ func Test_wildmenu_pum()
call term_sendkeys(buf, "\<Esc>")
call VerifyScreenDump(buf, 'Test_wildmenu_pum_39', {})
+ " Esc still works to abort the command when 'tabline' is set
+ call term_sendkeys(buf, ":call SetupTabline()\<CR>")
+ call term_sendkeys(buf, ":si\<Tab>")
+ call term_sendkeys(buf, "\<Esc>")
+ call VerifyScreenDump(buf, 'Test_wildmenu_pum_40', {})
+
call term_sendkeys(buf, "\<C-U>\<CR>")
call StopVimInTerminal(buf)
call delete('Xtest')