]> granicus.if.org Git - vim/commitdiff
patch 8.2.4346: a custom statusline may cause Esc to work like Enter v8.2.4346
authorBram Moolenaar <Bram@vim.org>
Fri, 11 Feb 2022 18:51:45 +0000 (18:51 +0000)
committerBram Moolenaar <Bram@vim.org>
Fri, 11 Feb 2022 18:51:45 +0000 (18:51 +0000)
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)

src/drawscreen.c
src/testdir/dumps/Test_wildmenu_pum_39.dump [new file with mode: 0644]
src/testdir/test_cmdline.vim
src/version.c

index 6cae313fa07889e1c321852e0a4941b3119d1bb9..69f44a9f931547ba8c32a491a9f150334e0b56ef 100644 (file)
@@ -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 (file)
index 0000000..27be763
--- /dev/null
@@ -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
index 1beb9af4baeaca95dc9c9478a723220a8697930a..6d0dc5bef75e567ab7d1021fd1c1012a08582af9 100644 (file)
@@ -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)
index b70fb291a0a6b96943cd607f97bd5f065940864a..07e46ae95ec1fad8204e504d49cc32130094123a 100644 (file)
@@ -746,6 +746,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4346,
 /**/
     4345,
 /**/