fix(terminal): avoid Insert mode in Terminal buffer (#25820)

This commit is contained in:
zeertzjq 2023-10-29 09:32:03 +08:00 committed by GitHub
parent a5629abce2
commit 82b1a389ba
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 0 deletions

View File

@ -396,6 +396,13 @@ static int insert_check(VimState *state)
Insstart_orig = Insstart;
}
if (curbuf->terminal) {
// Exit Insert mode and go to Terminal mode.
stop_insert_mode = true;
restart_edit = 'I';
stuffcharReadbuff(K_NOP);
}
if (stop_insert_mode && !ins_compl_active()) {
// ":stopinsert" used
s->count = 0;

View File

@ -125,6 +125,20 @@ describe(':terminal', function()
feed('a')
eq({ blocking=false, mode='t' }, nvim('get_mode'))
end)
it('switching to terminal buffer in Insert mode goes to Terminal mode #7164', function()
command('terminal')
command('vnew')
feed('i')
command('let g:events = []')
command('autocmd InsertLeave * let g:events += ["InsertLeave"]')
command('autocmd TermEnter * let g:events += ["TermEnter"]')
command('inoremap <F2> <Cmd>wincmd p<CR>')
eq({ blocking=false, mode='i' }, nvim('get_mode'))
feed('<F2>')
eq({ blocking=false, mode='t' }, nvim('get_mode'))
eq({'InsertLeave', 'TermEnter'}, eval('g:events'))
end)
end)
describe(':terminal (with fake shell)', function()