# HG changeset patch # User Christian Brabandt # Date 1711903503 -7200 # Node ID d432af20fe5476ffc0bbc91d74be92b5a378e2bb # Parent 2c3f939d46bf121db927da65e64bfa1936a1a199 patch 9.1.0230: TextChanged autocommand not triggered under some circumstances Commit: https://github.com/vim/vim/commit/86032702932995db74fed265ba99ae0c823cb75d Author: Christian Brabandt Date: Sun Mar 31 18:38:09 2024 +0200 patch 9.1.0230: TextChanged autocommand not triggered under some circumstances Problem: TextChanged autocommand not triggered under some circumstances (Sergey Vlasov) Solution: Trigger TextChanged when TextChangedI has not been triggered fixes: #14332 closes: #14339 Signed-off-by: Christian Brabandt diff --git a/src/edit.c b/src/edit.c --- a/src/edit.c +++ b/src/edit.c @@ -845,9 +845,10 @@ doESCkey: did_cursorhold = FALSE; // ins_redraw() triggers TextChangedI only when no characters - // are in the typeahead buffer, so only reset curbuf->b_last_changedtick + // are in the typeahead buffer, so reset curbuf->b_last_changedtick only // if the TextChangedI was not blocked by char_avail() (e.g. using :norm!) - if (!char_avail()) + // and the TextChangeDI autocommand has been trigered + if (!char_avail() && curbuf->b_last_changedtick_i == CHANGEDTICK(curbuf)) curbuf->b_last_changedtick = CHANGEDTICK(curbuf); return (c == Ctrl_O); } diff --git a/src/testdir/test_autocmd.vim b/src/testdir/test_autocmd.vim --- a/src/testdir/test_autocmd.vim +++ b/src/testdir/test_autocmd.vim @@ -4530,4 +4530,24 @@ func Test_implicit_session() call delete(expected) endfunc +" Test TextChangedI and TextChanged +func Test_Changed_ChangedI_2() + CheckRunVimInTerminal + call writefile(['one', 'two', 'three'], 'XTextChangedI2', 'D') + let before =<< trim END + autocmd TextChanged,TextChangedI * call writefile([b:changedtick], 'XTextChangedI3') + nnoremap o + call writefile([], 'XTextChangedI3') + END + + call writefile(before, 'Xinit', 'D') + let buf = RunVimInTerminal('-S Xinit XtextChangedI2', {}) + call term_sendkeys(buf, "\") + call term_wait(buf) + call StopVimInTerminal(buf) + call assert_equal(['4'], readfile('XTextChangedI3')) + + call delete('XTextChangedI3') +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -705,6 +705,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 230, +/**/ 229, /**/ 228,