vim-patch:9.0.0756 #20680

Problem:    No autocmd event for changing text in a terminal window.
Solution:   Add TextChangedT. (Shougo Matsushita, closes vim/vim#11366)

4ccaedfcd7
This commit is contained in:
Shougo 2022-11-07 12:02:29 +09:00 committed by GitHub
parent c4f3d41d6b
commit 4fd876271a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 25 additions and 0 deletions

View File

@ -996,6 +996,10 @@ TextChangedP After a change was made to the text in the
current buffer in Insert mode, only when the current buffer in Insert mode, only when the
popup menu is visible. Otherwise the same as popup menu is visible. Otherwise the same as
TextChanged. TextChanged.
*TextChangedT*
TextChangedT After a change was made to the text in the
current buffer in |Terminal-mode|. Otherwise
the same as TextChanged.
*TextYankPost* *TextYankPost*
TextYankPost Just after a |yank| or |deleting| command, but not TextYankPost Just after a |yank| or |deleting| command, but not
if the black hole register |quote_| is used nor if the black hole register |quote_| is used nor

View File

@ -108,6 +108,7 @@ return {
'TextChanged', -- text was modified 'TextChanged', -- text was modified
'TextChangedI', -- text was modified in Insert mode(no popup) 'TextChangedI', -- text was modified in Insert mode(no popup)
'TextChangedP', -- text was modified in Insert mode(popup) 'TextChangedP', -- text was modified in Insert mode(popup)
'TextChangedT', -- text was modified in Terminal mode
'TextYankPost', -- after a yank or delete was done (y, d, c) 'TextYankPost', -- after a yank or delete was done (y, d, c)
'UIEnter', -- after UI attaches 'UIEnter', -- after UI attaches
'UILeave', -- after UI detaches 'UILeave', -- after UI detaches

View File

@ -523,6 +523,18 @@ static int terminal_check(VimState *state)
if (must_redraw) { if (must_redraw) {
update_screen(); update_screen();
// Make sure an invoked autocmd doesn't delete the buffer (and the
// terminal) under our fingers.
curbuf->b_locked++;
// save and restore curwin and curbuf, in case the autocmd changes them
aco_save_T aco;
aucmd_prepbuf(&aco, curbuf);
apply_autocmds(EVENT_TEXTCHANGEDT, NULL, NULL, false, curbuf);
aucmd_restbuf(&aco);
curbuf->b_locked--;
} }
if (need_maketitle) { // Update title in terminal-mode. #7248 if (need_maketitle) { // Update title in terminal-mode. #7248

View File

@ -410,6 +410,14 @@ describe('on_lines does not emit out-of-bounds line indexes when', function()
feed_command('bdelete!') feed_command('bdelete!')
eq('', exec_lua([[return _G.cb_error]])) eq('', exec_lua([[return _G.cb_error]]))
end) end)
it('runs TextChangedT event', function()
meths.set_var('called', 0)
command('autocmd TextChangedT * ++once let g:called = 1')
feed_command('terminal')
feed('iaa')
eq(1, meths.get_var('called'))
end)
end) end)
it('terminal truncates number of composing characters to 5', function() it('terminal truncates number of composing characters to 5', function()