fix(keywordprg): retain terminal buffer after K (#17046)

This commit is contained in:
Daniel Steinberg 2022-01-13 00:04:30 -05:00 committed by GitHub
parent 39a35dd006
commit 3ee1ba35a7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 5 deletions

View File

@ -4437,11 +4437,7 @@ static void nv_ident(cmdarg_T *cap)
// Start insert mode in terminal buffer
restart_edit = 'i';
add_map((char_u *)"<buffer> <esc> <Cmd>call jobstop(&channel)<CR>", TERM_FOCUS, true);
do_cmdline_cmd("autocmd TermClose <buffer> "
" if !v:event.status |"
" exec 'bdelete! ' .. expand('<abuf>') |"
" endif");
add_map((char_u *)"<buffer> <esc> <Cmd>bdelete!<CR>", TERM_FOCUS, true);
}
}

View File

@ -33,6 +33,29 @@ describe('K', function()
feed('i'..test_file..'<ESC>K')
retry(nil, nil, function() eq(1, eval('filereadable("'..test_file..'")')) end)
eq({'fnord'}, eval("readfile('"..test_file.."')"))
-- Confirm that Neovim is still in terminal mode after K is pressed (#16692).
helpers.sleep(500)
eq('t', eval('mode()'))
feed('<space>') -- Any key, not just <space>, can be used here to escape.
eq('n', eval('mode()'))
end)
it("<esc> kills the buffer for a running 'keywordprg' command", function()
helpers.source('set keywordprg=less')
eval('writefile(["hello", "world"], "' .. test_file .. '")')
feed('i' .. test_file .. '<esc>K')
eq('t', eval('mode()'))
-- Confirm that an arbitrary keypress doesn't escape (i.e., the process is
-- still running). If the process were no longer running, an arbitrary
-- keypress would escape.
helpers.sleep(500)
feed('<space>')
eq('t', eval('mode()'))
-- Confirm that <esc> kills the buffer for the running command.
local bufnr = eval('bufnr()')
feed('<esc>')
eq('n', eval('mode()'))
helpers.neq(bufnr, eval('bufnr()'))
end)
end)