aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2018-11-03 07:04:33 -0400
committerJustin M. Keyes <justinkz@gmail.com>2018-11-03 12:04:33 +0100
commita6661178aa5dc2f1687131685423cb72f28e141a (patch)
treec2035127ab52eba21a6619fa317b5d1d6848e2bf /src
parent87d67814e58b875a1cb4de4c39c252e028b5eafb (diff)
downloadrneovim-a6661178aa5dc2f1687131685423cb72f28e141a.tar.gz
rneovim-a6661178aa5dc2f1687131685423cb72f28e141a.tar.bz2
rneovim-a6661178aa5dc2f1687131685423cb72f28e141a.zip
vim-patch:8.1.0504: when CTRL-C is mapped it triggers InsertLeave (#9192)
Problem: When CTRL-C is mapped it triggers InsertLeave. Solution: Make CTRL-C behave the same way when typed or used in a mapping. https://github.com/vim/vim/commit/4dbc2627641a6b950c30c31cbf7b7e6c36da1927
Diffstat (limited to 'src')
-rw-r--r--src/nvim/edit.c5
-rw-r--r--src/nvim/testdir/test_edit.vim30
2 files changed, 34 insertions, 1 deletions
diff --git a/src/nvim/edit.c b/src/nvim/edit.c
index 7a0487bb64..d20660bfb9 100644
--- a/src/nvim/edit.c
+++ b/src/nvim/edit.c
@@ -468,7 +468,10 @@ static void insert_enter(InsertState *s)
}
foldUpdateAfterInsert();
- if (s->cmdchar != 'r' && s->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 (s->cmdchar != 'r' && s->cmdchar != 'v' && s->c != Ctrl_C) {
ins_apply_autocmds(EVENT_INSERTLEAVE);
}
did_cursorhold = false;
diff --git a/src/nvim/testdir/test_edit.vim b/src/nvim/testdir/test_edit.vim
index b1fce07f39..f8946c6929 100644
--- a/src/nvim/testdir/test_edit.vim
+++ b/src/nvim/testdir/test_edit.vim
@@ -1413,3 +1413,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