patch 8.2.1988: still in Insert mode when opening terminal popup
Problem: Still in Insert mode when opening terminal popup with a <Cmd>
mapping in Insert mode.
Solution: Exit Insert mode. (closes #7295)
diff --git a/src/edit.c b/src/edit.c
index d92a951..8c5cec3 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -1033,6 +1033,11 @@
case K_COMMAND: // <Cmd>command<CR>
do_cmdline(NULL, getcmdkeycmd, NULL, 0);
+#ifdef FEAT_TERMINAL
+ if (term_use_loop())
+ // Started a terminal that gets the input, exit Insert mode.
+ goto doESCkey;
+#endif
break;
case K_CURSORHOLD: // Didn't type something for a while.
diff --git a/src/testdir/test_terminal.vim b/src/testdir/test_terminal.vim
index 8d68ceb..7d6bdbc 100644
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -1237,6 +1237,24 @@
unlet s:winid
endfunc
+func Test_terminal_popup_insert_cmd()
+ CheckUnix
+
+ inoremap <F3> <Cmd>call StartTermInPopup()<CR>
+ func StartTermInPopup()
+ call term_start(['/bin/sh', '-c', 'cat'], #{hidden: v:true})->popup_create(#{highlight: 'Pmenu'})
+ endfunc
+ call feedkeys("i\<F3>")
+ sleep 10m
+ call assert_equal('n', mode())
+
+ call feedkeys("\<C-D>", 'xt')
+ sleep 20m
+ call feedkeys(":q\<CR>", 'xt')
+ delfunc StartTermInPopup
+ iunmap <F3>
+endfunc
+
func Check_dump01(off)
call assert_equal('one two three four five', trim(getline(a:off + 1)))
call assert_equal('~ Select Word', trim(getline(a:off + 7)))
diff --git a/src/version.c b/src/version.c
index b031e63..502a876 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1988,
+/**/
1987,
/**/
1986,