]> granicus.if.org Git - vim/commitdiff
patch 8.1.2346: CTRL-R CTRL-R doesn't work with modifyOtherKeys v8.1.2346
authorBram Moolenaar <Bram@vim.org>
Tue, 26 Nov 2019 13:28:15 +0000 (14:28 +0100)
committerBram Moolenaar <Bram@vim.org>
Tue, 26 Nov 2019 13:28:15 +0000 (14:28 +0100)
Problem:    CTRL-R CTRL-R doesn't work with modifyOtherKeys.
Solution:   Allow key codes when fetching argument for CTRL-R. (closes #5266)
            Also fix CTRL-G in Insert mode.

src/edit.c
src/ex_getln.c
src/testdir/test_termcodes.vim
src/version.c

index 1c168b6a8bbd7d48afaa905b3105cd153705f691..c74f1bb3628e651782128a58115d4975a401de68 100644 (file)
@@ -3906,6 +3906,7 @@ ins_reg(void)
      * deleted when ESC is hit.
      */
     ++no_mapping;
+    ++allow_keys;
     regname = plain_vgetc();
     LANGMAP_ADJUST(regname, TRUE);
     if (regname == Ctrl_R || regname == Ctrl_O || regname == Ctrl_P)
@@ -3919,6 +3920,7 @@ ins_reg(void)
        LANGMAP_ADJUST(regname, TRUE);
     }
     --no_mapping;
+    --allow_keys;
 
 #ifdef FEAT_EVAL
     /* Don't call u_sync() while typing the expression or giving an error
@@ -4010,8 +4012,10 @@ ins_ctrl_g(void)
      * deleted when ESC is hit.
      */
     ++no_mapping;
+    ++allow_keys;
     c = plain_vgetc();
     --no_mapping;
+    --allow_keys;
     switch (c)
     {
        /* CTRL-G k and CTRL-G <Up>: cursor up to Insstart.col */
index 0a3d9d4dafe4bb87c018bad32f83867f230cf1c0..6832158749c2d5008d101b1f6bf08f37aff06b92 100644 (file)
@@ -1747,6 +1747,7 @@ getcmdline_int(
 #endif
                putcmdline('"', TRUE);
                ++no_mapping;
+               ++allow_keys;
                i = c = plain_vgetc();  /* CTRL-R <char> */
                if (i == Ctrl_O)
                    i = Ctrl_R;         /* CTRL-R CTRL-O == CTRL-R CTRL-R */
@@ -1754,6 +1755,7 @@ getcmdline_int(
                    c = plain_vgetc();  /* CTRL-R CTRL-R <char> */
                extra_char = NUL;
                --no_mapping;
+               --allow_keys;
 #ifdef FEAT_EVAL
                /*
                 * Insert the result of an expression.
index 2678dae29208336294070838a0ce62f6ce725a49..05f0d18df40059bd8d4de6bb377a510b4a947469 100644 (file)
@@ -1209,6 +1209,27 @@ func Test_modifyOtherKeys_basic()
   call RunTest_modifyOtherKeys(function('GetEscCodeCSIu'))
 endfunc
 
+func Test_modifyOtherKeys_no_mapping()
+  set timeoutlen=10
+
+  let @a = 'aaa'
+  call feedkeys(":let x = '" .. GetEscCodeCSI27('R', 5) .. GetEscCodeCSI27('R', 5) .. "a'\<CR>", 'Lx!')
+  call assert_equal("let x = 'aaa'", @:)
+
+  new
+  call feedkeys("a" .. GetEscCodeCSI27('R', 5) .. GetEscCodeCSI27('R', 5) .. "a\<Esc>", 'Lx!')
+  call assert_equal("aaa", getline(1))
+  bwipe!
+
+  new
+  call feedkeys("axx\<CR>yy" .. GetEscCodeCSI27('G', 5) .. GetEscCodeCSI27('K', 5) .. "a\<Esc>", 'Lx!')
+  call assert_equal("axx", getline(1))
+  call assert_equal("yy", getline(2))
+  bwipe!
+
+  set timeoutlen&
+endfunc
+
 func RunTest_mapping_shift(key, func)
   call setline(1, '')
   if a:key == '|'
index c35a5c05e0f9ce4d0bb414b7cc4c14c235792e90..b47808dd839a26ae9d3d188a00839ac02ea52230 100644 (file)
@@ -737,6 +737,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2346,
 /**/
     2345,
 /**/