]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.2.4382: a custom 'tabline' may cause Esc to work like Enter v8.2.4382
authorBram Moolenaar <Bram@vim.org>
Mon, 14 Feb 2022 19:17:53 +0000 (19:17 +0000)
committerBram Moolenaar <Bram@vim.org>
Mon, 14 Feb 2022 19:17:53 +0000 (19:17 +0000)
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 #9776)

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

index 69f44a9f931547ba8c32a491a9f150334e0b56ef..6cae313fa07889e1c321852e0a4941b3119d1bb9 100644 (file)
@@ -571,7 +571,6 @@ 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.
@@ -592,9 +591,6 @@ 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
 
index adcc4b5bab59a97f38beb9c73137a7e88610ec34..9010090d799a9b65679b9a0259e8c795427075fc 100644 (file)
@@ -1235,6 +1235,7 @@ win_redr_custom(
     int                use_sandbox = FALSE;
     win_T      *ewp;
     int                p_crb_save;
+    int                save_KeyTyped = KeyTyped;
 
     // There is a tiny chance that this gets called recursively: When
     // redrawing a status line triggers redrawing the ruler or tabline.
@@ -1394,6 +1395,9 @@ win_redr_custom(
 
 theend:
     entered = FALSE;
+
+    // A user function may reset KeyTyped, restore it.
+    KeyTyped = save_KeyTyped;
 }
 
 #endif // FEAT_STL_OPT
diff --git a/src/testdir/dumps/Test_wildmenu_pum_40.dump b/src/testdir/dumps/Test_wildmenu_pum_40.dump
new file mode 100644 (file)
index 0000000..75aa01a
--- /dev/null
@@ -0,0 +1,10 @@
+|m+1&#ffffff0|y| |t|a|b| |l|i|n|e| @63
+> +0&&@74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|b+3#0000000&|a|r| @71
+| +0&&@74
index fb1976a19d92c5fc2be3516b02d2e88a9747776d..76a5c7ca42b5601bae371e38b78e050f3f399ebc 100644 (file)
@@ -2107,6 +2107,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')
 
@@ -2298,6 +2307,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')
index 3f860002aefe29a048bf482048fcae4ddd220db3..bccf8d922774d1166bbc92595079578e72468e8a 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4382,
 /**/
     4381,
 /**/