summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-11-14 21:34:59 +0100
committerBram Moolenaar <Bram@vim.org>2020-11-14 21:34:59 +0100
commite41decc892a115335259096c3bc0204dd99b372b (patch)
tree45f16ad3fce28d98a5f9f259f16be11c37f0671a
parent6453cc8078af403956d0e8c1849cf5ec0aae86b2 (diff)
patch 8.2.1988: still in Insert mode when opening terminal popupv8.2.1988
Problem: Still in Insert mode when opening terminal popup with a <Cmd> mapping in Insert mode. Solution: Exit Insert mode. (closes #7295)
-rw-r--r--src/edit.c5
-rw-r--r--src/testdir/test_terminal.vim18
-rw-r--r--src/version.c2
3 files changed, 25 insertions, 0 deletions
diff --git a/src/edit.c b/src/edit.c
index d92a951398..8c5cec3a76 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -1033,6 +1033,11 @@ doESCkey:
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 8d68ceb5b4..7d6bdbcf6c 100644
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -1237,6 +1237,24 @@ func Test_terminal_popup_with_cmd()
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 b031e631aa..502a876da4 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1988,
+/**/
1987,
/**/
1986,