Mercurial > vim
comparison src/testdir/test_autocmd.vim @ 33676:46cd1fc257de v9.0.2075
patch 9.0.2075: TextChangedI may not always trigger
Commit: https://github.com/vim/vim/commit/4bca4897a12dfb91b3b27e3083fd5f370bd857d1
Author: Christian Brabandt <cb@256bit.org>
Date: Fri Oct 27 19:26:49 2023 +0200
patch 9.0.2075: TextChangedI may not always trigger
Problem: TextChangedI may not always trigger
Solution: trigger it in more cases: for insert/
append/change operations, and when
opening a new line,
fixes: #13367
closes: #13375
Signed-off-by: Christian Brabandt <cb@256bit.org>
Signed-off-by: Evgeni Chasnovski <evgeni.chasnovski@gmail.com>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Fri, 27 Oct 2023 19:45:04 +0200 |
parents | 830a5f8053cb |
children | c3804ff17204 |
comparison
equal
deleted
inserted
replaced
33675:b562d3f78dd5 | 33676:46cd1fc257de |
---|---|
2564 au! TextChangedP <buffer> :call TextChangedAutocmd('P') | 2564 au! TextChangedP <buffer> :call TextChangedAutocmd('P') |
2565 | 2565 |
2566 call cursor(3, 1) | 2566 call cursor(3, 1) |
2567 let g:autocmd = '' | 2567 let g:autocmd = '' |
2568 call feedkeys("o\<esc>", 'tnix') | 2568 call feedkeys("o\<esc>", 'tnix') |
2569 " `TextChangedI` triggers only if text is actually changed in Insert mode | 2569 call assert_equal('I', g:autocmd) |
2570 call assert_equal('', g:autocmd) | |
2571 | 2570 |
2572 let g:autocmd = '' | 2571 let g:autocmd = '' |
2573 call feedkeys("Sf", 'tnix') | 2572 call feedkeys("Sf", 'tnix') |
2574 call assert_equal('I', g:autocmd) | 2573 call assert_equal('II', g:autocmd) |
2575 | 2574 |
2576 let g:autocmd = '' | 2575 let g:autocmd = '' |
2577 call feedkeys("Sf\<C-N>", 'tnix') | 2576 call feedkeys("Sf\<C-N>", 'tnix') |
2578 call assert_equal('IP', g:autocmd) | 2577 call assert_equal('IIP', g:autocmd) |
2579 | 2578 |
2580 let g:autocmd = '' | 2579 let g:autocmd = '' |
2581 call feedkeys("Sf\<C-N>\<C-N>", 'tnix') | 2580 call feedkeys("Sf\<C-N>\<C-N>", 'tnix') |
2582 call assert_equal('IPP', g:autocmd) | 2581 call assert_equal('IIPP', g:autocmd) |
2583 | 2582 |
2584 let g:autocmd = '' | 2583 let g:autocmd = '' |
2585 call feedkeys("Sf\<C-N>\<C-N>\<C-N>", 'tnix') | 2584 call feedkeys("Sf\<C-N>\<C-N>\<C-N>", 'tnix') |
2586 call assert_equal('IPPP', g:autocmd) | 2585 call assert_equal('IIPPP', g:autocmd) |
2587 | 2586 |
2588 let g:autocmd = '' | 2587 let g:autocmd = '' |
2589 call feedkeys("Sf\<C-N>\<C-N>\<C-N>\<C-N>", 'tnix') | 2588 call feedkeys("Sf\<C-N>\<C-N>\<C-N>\<C-N>", 'tnix') |
2590 call assert_equal('IPPPP', g:autocmd) | 2589 call assert_equal('IIPPPP', g:autocmd) |
2591 | 2590 |
2592 call assert_equal(['foo', 'bar', 'foobar', 'foo'], getline(1, '$')) | 2591 call assert_equal(['foo', 'bar', 'foobar', 'foo'], getline(1, '$')) |
2593 " TODO: how should it handle completeopt=noinsert,noselect? | 2592 " TODO: how should it handle completeopt=noinsert,noselect? |
2594 | 2593 |
2595 " CleanUp | 2594 " CleanUp |
3619 " TextChanged should only trigger if change was done in Normal mode | 3618 " TextChanged should only trigger if change was done in Normal mode |
3620 let g:autocmd_n = '' | 3619 let g:autocmd_n = '' |
3621 call feedkeys("ibar\<esc>", 'tnix') | 3620 call feedkeys("ibar\<esc>", 'tnix') |
3622 call assert_equal('', g:autocmd_n) | 3621 call assert_equal('', g:autocmd_n) |
3623 | 3622 |
3623 " If change is a mix of Normal and Insert modes, TextChangedI should trigger | |
3624 func s:validate_mixed_textchangedi(keys) | |
3625 call feedkeys("ifoo\<esc>", 'tnix') | |
3626 let g:autocmd_i = '' | |
3627 let g:autocmd_n = '' | |
3628 call feedkeys(a:keys, 'tnix') | |
3629 call assert_notequal('', g:autocmd_i) | |
3630 call assert_equal('', g:autocmd_n) | |
3631 endfunc | |
3632 | |
3633 call s:validate_mixed_textchangedi("o\<esc>") | |
3634 call s:validate_mixed_textchangedi("O\<esc>") | |
3635 call s:validate_mixed_textchangedi("ciw\<esc>") | |
3636 call s:validate_mixed_textchangedi("cc\<esc>") | |
3637 call s:validate_mixed_textchangedi("C\<esc>") | |
3638 call s:validate_mixed_textchangedi("s\<esc>") | |
3639 call s:validate_mixed_textchangedi("S\<esc>") | |
3640 | |
3641 | |
3624 " CleanUp | 3642 " CleanUp |
3625 call test_override("char_avail", 0) | 3643 call test_override("char_avail", 0) |
3626 au! TextChanged <buffer> | 3644 au! TextChanged <buffer> |
3627 au! TextChangedI <buffer> | 3645 au! TextChangedI <buffer> |
3628 augroup! Test_TextChanged | 3646 augroup! Test_TextChanged |