changeset 28371:c3a7be75ef16 v8.2.4711

patch 8.2.4711: when 'insermode' is set :edit from <Cmd> mapping misbehaves Commit: https://github.com/vim/vim/commit/3a56b6d405fc0f1ca928b77382f97d0c552bea64 Author: zeertzjq <zeertzjq@outlook.com> Date: Fri Apr 8 11:56:14 2022 +0100 patch 8.2.4711: when 'insermode' is set :edit from <Cmd> mapping misbehaves Problem: When 'insermode' is set :edit from <Cmd> mapping misbehaves. Solution: Don't set "need_start_insertmode" when already in Insert mode. (closes #10116)
author Bram Moolenaar <Bram@vim.org>
date Fri, 08 Apr 2022 13:00:04 +0200
parents 953e5ee8ce51
children efc1c3dc2b0d
files src/ex_cmds.c src/testdir/test_edit.vim src/version.c
diffstat 3 files changed, 26 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -3182,7 +3182,7 @@ do_ecmd(
 	redraw_curbuf_later(NOT_VALID);	// redraw this buffer later
     }
 
-    if (p_im)
+    if (p_im && (State & INSERT) == 0)
 	need_start_insertmode = TRUE;
 
 #ifdef FEAT_AUTOCHDIR
--- a/src/testdir/test_edit.vim
+++ b/src/testdir/test_edit.vim
@@ -1840,6 +1840,29 @@ func Test_edit_file_no_read_perm()
   call delete('Xfile')
 endfunc
 
+" Using :edit without leaving 'insertmode' should not cause Insert mode to be
+" re-entered immediately after <C-L>
+func Test_edit_insertmode_ex_edit()
+  CheckRunVimInTerminal
+
+  let lines =<< trim END
+    set insertmode noruler
+    inoremap <C-B> <Cmd>edit Xfoo<CR>
+  END
+  call writefile(lines, 'Xtest_edit_insertmode_ex_edit')
+
+  let buf = RunVimInTerminal('-S Xtest_edit_insertmode_ex_edit', #{rows: 6})
+  call TermWait(buf, 50)
+  call assert_match('^-- INSERT --\s*$', term_getline(buf, 6))
+  call term_sendkeys(buf, "\<C-B>\<C-L>")
+  call TermWait(buf, 50)
+  call assert_notmatch('^-- INSERT --\s*$', term_getline(buf, 6))
+
+  " clean up
+  call StopVimInTerminal(buf)
+  call delete('Xtest_edit_insertmode_ex_edit')
+endfunc
+
 " Pressing escape in 'insertmode' should beep
 func Test_edit_insertmode_esc_beeps()
   new
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4711,
+/**/
     4710,
 /**/
     4709,