mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	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 <cb@256bit.org>
			
			
This commit is contained in:
		| @@ -845,9 +845,10 @@ doESCkey: | |||||||
| 		did_cursorhold = FALSE; | 		did_cursorhold = FALSE; | ||||||
|  |  | ||||||
| 		// ins_redraw() triggers TextChangedI only when no characters | 		// 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 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); | 		    curbuf->b_last_changedtick = CHANGEDTICK(curbuf); | ||||||
| 		return (c == Ctrl_O); | 		return (c == Ctrl_O); | ||||||
| 	    } | 	    } | ||||||
|   | |||||||
| @@ -4530,4 +4530,24 @@ func Test_implicit_session() | |||||||
|   call delete(expected) |   call delete(expected) | ||||||
| endfunc | 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 <CR> o<Esc> | ||||||
|  |       call writefile([], 'XTextChangedI3') | ||||||
|  |   END | ||||||
|  |  | ||||||
|  |   call writefile(before, 'Xinit', 'D') | ||||||
|  |   let buf = RunVimInTerminal('-S Xinit XtextChangedI2', {}) | ||||||
|  |   call term_sendkeys(buf, "\<cr>") | ||||||
|  |   call term_wait(buf) | ||||||
|  |   call StopVimInTerminal(buf) | ||||||
|  |   call assert_equal(['4'], readfile('XTextChangedI3')) | ||||||
|  |  | ||||||
|  |   call delete('XTextChangedI3') | ||||||
|  | endfunc | ||||||
|  |  | ||||||
| " vim: shiftwidth=2 sts=2 expandtab | " vim: shiftwidth=2 sts=2 expandtab | ||||||
|   | |||||||
| @@ -704,6 +704,8 @@ static char *(features[]) = | |||||||
|  |  | ||||||
| static int included_patches[] = | static int included_patches[] = | ||||||
| {   /* Add new patch number below this line */ | {   /* Add new patch number below this line */ | ||||||
|  | /**/ | ||||||
|  |     230, | ||||||
| /**/ | /**/ | ||||||
|     229, |     229, | ||||||
| /**/ | /**/ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user