Mercurial > vim
diff src/edit.c @ 34307:a66a01e2094a v9.1.0088
patch 9.1.0088: TextChanged not triggered for :norm! commands
Commit: https://github.com/vim/vim/commit/c9e79e52845d51f48f5ea3753a62ab3fe0e40184
Author: Christian Brabandt <cb@256bit.org>
Date: Fri Feb 9 19:34:36 2024 +0100
patch 9.1.0088: TextChanged not triggered for :norm! commands
Problem: TextChanged not triggered for :norm! commands
(machakann, after v9.0.2031)
Solution: Only reset curbuf->b_last_changedtick if TextChangedI
was triggered in insert mode (and not blocked)
Note: for unknown reasons, the test fails on Windows (but seems to work
fine when running interactively)
fixes: #13967
closes: #13984
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Fri, 09 Feb 2024 19:45:05 +0100 |
parents | a0a4a774117b |
children | 67674e379c26 |
line wrap: on
line diff
--- a/src/edit.c +++ b/src/edit.c @@ -843,7 +843,12 @@ doESCkey: if (cmdchar != 'r' && cmdchar != 'v' && c != Ctrl_C) ins_apply_autocmds(EVENT_INSERTLEAVE); did_cursorhold = FALSE; - curbuf->b_last_changedtick = CHANGEDTICK(curbuf); + + // ins_redraw() triggers TextChangedI only when no characters + // are in the typeahead buffer, so only reset curbuf->b_last_changedtick + // if the TextChangedI was not blocked by char_avail() (e.g. using :norm!) + if (!char_avail()) + curbuf->b_last_changedtick = CHANGEDTICK(curbuf); return (c == Ctrl_O); } continue;