diff options
author | =?UTF-8?q?Magnus=20Gro=C3=9F?= <magnus.gross@rwth-aachen.de> | 2021-09-12 13:39:55 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-09-12 13:39:55 +0200 |
commit | f1e8876fa2359b572d262772747405d3616db670 (patch) | |
tree | 1b33a32bccaa4522f14f2aad8ee8044295635d0b /src/testdir/test_edit.vim | |
parent | 464393a6961d9b9de2bfe9c05f8e2ae5bdec0293 (diff) |
patch 8.2.3430: no generic way to trigger an autocommand on mode changev8.2.3430
Problem: No generic way to trigger an autocommand on mode change.
Solution: Add the ModeChanged autocommand event. (Magnus Gross, closes #8856)
Diffstat (limited to 'src/testdir/test_edit.vim')
-rw-r--r-- | src/testdir/test_edit.vim | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/testdir/test_edit.vim b/src/testdir/test_edit.vim index 518c21ea84..79ba969b1c 100644 --- a/src/testdir/test_edit.vim +++ b/src/testdir/test_edit.vim @@ -1907,4 +1907,38 @@ func Test_edit_put_CTRL_E() set encoding=utf-8 endfunc +" Test for ModeChanged pattern +func Test_mode_changes() + let g:count = 0 + func! DoIt() + let g:count += 1 + endfunc + let g:index = 0 + let g:mode_seq = ['n', 'i', 'n', 'v', 'V', 'n', 'V', 'v', 'n'] + func! TestMode() + call assert_equal(g:mode_seq[g:index], get(v:event, "old_mode")) + call assert_equal(g:mode_seq[g:index + 1], get(v:event, "new_mode")) + call assert_equal(mode(), get(v:event, "new_mode")) + let g:index += 1 + endfunc + + au ModeChanged * :call TestMode() + au ModeChanged n:* :call DoIt() + call feedkeys("i\<esc>vV\<esc>", 'tnix') + call assert_equal(2, g:count) + + au ModeChanged V:v :call DoIt() + call feedkeys("Vv\<esc>", 'tnix') + call assert_equal(4, g:count) + + call assert_equal(len(g:mode_seq) - 1, g:index) + + au! ModeChanged + delfunc TestMode + unlet! g:mode_seq + unlet! g:index + delfunc DoIt + unlet! g:count +endfunc + " vim: shiftwidth=2 sts=2 expandtab |