]> granicus.if.org Git - vim/commitdiff
patch 8.1.0504: when CTRL-C is mapped it triggers InsertLeave v8.1.0504
authorBram Moolenaar <Bram@vim.org>
Fri, 2 Nov 2018 10:59:15 +0000 (11:59 +0100)
committerBram Moolenaar <Bram@vim.org>
Fri, 2 Nov 2018 10:59:15 +0000 (11:59 +0100)
Problem:    When CTRL-C is mapped it triggers InsertLeave.
Solution:   Make CTRL-C behave the same way when typed or used in a mapping.

src/edit.c
src/testdir/test_edit.vim
src/version.c

index 4b9bdffb4795924afd55a8d58fc212ad8d0811bf..239881ee5cf1ed78af9bf12d379aeb6d1254ec4b 100644 (file)
@@ -1048,7 +1048,10 @@ doESCkey:
 
            if (ins_esc(&count, cmdchar, nomove))
            {
-               if (cmdchar != 'r' && cmdchar != 'v')
+               // When CTRL-C was typed got_int will be set, with the result
+               // that the autocommands won't be executed. When mapped got_int
+               // is not set, but let's keep the behavior the same.
+               if (cmdchar != 'r' && cmdchar != 'v' && c != Ctrl_C)
                    ins_apply_autocmds(EVENT_INSERTLEAVE);
                did_cursorhold = FALSE;
                return (c == Ctrl_O);
@@ -2408,7 +2411,7 @@ has_compl_option(int dict_opt)
     int
 vim_is_ctrl_x_key(int c)
 {
-    /* Always allow ^R - let it's results then be checked */
+    // Always allow ^R - let its results then be checked
     if (c == Ctrl_R)
        return TRUE;
 
index 651f1f8fa424239eb81e13abe20e724f28f05fbf..63f58ae7508e55c74d9a37f20bd52319578fef0c 100644 (file)
@@ -1409,3 +1409,33 @@ func Test_edit_alt()
   bwipe XAltFile
   call delete('XAltFile')
 endfunc
+
+func Test_leave_insert_autocmd()
+  new
+  au InsertLeave * let g:did_au = 1
+  let g:did_au = 0
+  call feedkeys("afoo\<Esc>", 'tx')
+  call assert_equal(1, g:did_au)
+  call assert_equal('foo', getline(1))
+
+  let g:did_au = 0
+  call feedkeys("Sbar\<C-C>", 'tx')
+  call assert_equal(0, g:did_au)
+  call assert_equal('bar', getline(1))
+
+  inoremap x xx<Esc>
+  let g:did_au = 0
+  call feedkeys("Saax", 'tx')
+  call assert_equal(1, g:did_au)
+  call assert_equal('aaxx', getline(1))
+
+  inoremap x xx<C-C>
+  let g:did_au = 0
+  call feedkeys("Sbbx", 'tx')
+  call assert_equal(0, g:did_au)
+  call assert_equal('bbxx', getline(1))
+
+  bwipe!
+  au! InsertLeave
+  iunmap x
+endfunc
index bc22e73da1af84ef516b630ef41ac22268f4e565..2c06a0f3911fa2fbdd2b9fe9f931377493becebd 100644 (file)
@@ -792,6 +792,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    504,
 /**/
     503,
 /**/