changeset 18534:7dd83b5325e9 v8.1.2261

patch 8.1.2261: with modifyOtherKeys set 'noesckeys' doesn't work Commit: https://github.com/vim/vim/commit/177c9f2f06b048f4c1e154d29423edf65b128f8c Author: Bram Moolenaar <Bram@vim.org> Date: Wed Nov 6 13:59:16 2019 +0100 patch 8.1.2261: with modifyOtherKeys set 'noesckeys' doesn't work Problem: With modifyOtherKeys set 'noesckeys' doesn't work. (James McCoy) Solution: Disable modifyOtherKeys while in Insert mode when 'noesckeys' is set. (closes #5180)
author Bram Moolenaar <Bram@vim.org>
date Wed, 06 Nov 2019 14:00:03 +0100
parents ec5306efdc01
children 669d5689143b
files src/edit.c src/testdir/test_edit.vim src/version.c
diffstat 3 files changed, 37 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/edit.c
+++ b/src/edit.c
@@ -323,10 +323,16 @@ edit(
     revins_scol = -1;
 #endif
     if (!p_ek)
-	/* Disable bracketed paste mode, we won't recognize the escape
-	 * sequences. */
+    {
+	// Disable bracketed paste mode, we won't recognize the escape
+	// sequences.
 	out_str(T_BD);
 
+	// Disable modifyOtherKeys, keys with modifiers would cause exiting
+	// Insert mode.
+	out_str(T_CTE);
+    }
+
     /*
      * Handle restarting Insert mode.
      * Don't do this for "CTRL-O ." (repeat an insert): In that case we get
@@ -4220,12 +4226,17 @@ ins_esc(
 
     setmouse();
 #ifdef CURSOR_SHAPE
-    ui_cursor_shape();		/* may show different cursor shape */
+    ui_cursor_shape();		// may show different cursor shape
 #endif
     if (!p_ek)
-	/* Re-enable bracketed paste mode. */
+    {
+	// Re-enable bracketed paste mode.
 	out_str(T_BE);
 
+	// Re-enable modifyOtherKeys.
+	out_str(T_CTI);
+    }
+
     // When recording or for CTRL-O, need to display the new mode.
     // Otherwise remove the mode message.
     if (reg_recording != 0 || restart_edit != NUL)
@@ -4233,7 +4244,7 @@ ins_esc(
     else if (p_smd && (got_int || !skip_showmode()))
 	msg("");
 
-    return TRUE;	    /* exit Insert mode */
+    return TRUE;	    // exit Insert mode
 }
 
 #ifdef FEAT_RIGHTLEFT
--- a/src/testdir/test_edit.vim
+++ b/src/testdir/test_edit.vim
@@ -1495,3 +1495,22 @@ func Test_edit_startinsert()
   set backspace&
   bwipe!
 endfunc
+
+func Test_edit_noesckeys()
+  new
+
+  " <Left> moves cursor when 'esckeys' is set
+  exe "set t_kl=\<Esc>OD"
+  set esckeys
+  call feedkeys("axyz\<Esc>ODX", "xt")
+  call assert_equal("xyXz", getline(1))
+
+  " <Left> exits Insert mode when 'esckeys' is off
+  set noesckeys
+  call setline(1, '')
+  call feedkeys("axyz\<Esc>ODX", "xt")
+  call assert_equal(["DX", "xyz"], getline(1, 2))
+
+  bwipe!
+  set esckeys
+endfunc
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2261,
+/**/
     2260,
 /**/
     2259,