Merge #15440 close 'shell' :terminal automatically

This commit is contained in:
Justin M. Keyes
2023-08-13 05:23:15 -07:00
committed by GitHub
8 changed files with 55 additions and 22 deletions

View File

@@ -190,6 +190,10 @@ The following changes to existing APIs or features add new behavior.
supports it, unless |'keywordprg'| was customized before calling
|vim.lsp.start()|.
• Terminal buffers started with no arguments (and use 'shell') close
automatically if the job exited without error, eliminating the (often
unwanted) "[Process exited 0]" message.
==============================================================================
REMOVED FEATURES *news-removed*

View File

@@ -249,6 +249,10 @@ gx Opens the current filepath or URL (decided by
Fails if changes have been made to the current buffer,
unless 'hidden' is set.
If {cmd} is omitted, and the 'shell' job exits with no
error, the buffer is closed automatically
|default-autocmds|.
To enter |Terminal-mode| automatically: >
autocmd TermOpen * startinsert
<

View File

@@ -133,6 +133,8 @@ remove them and ":autocmd {group}" to see how they're defined.
nvim_terminal:
- BufReadCmd: Treats "term://" buffers as |terminal| buffers. |terminal-start|
- TermClose: A |terminal| buffer started with no arguments (which thus uses
'shell') and which exits with no error is closed automatically.
nvim_cmdwin:
- CmdwinEnter: Limits syntax sync to maxlines=1 in the |cmdwin|.

View File

@@ -1107,13 +1107,26 @@ end
function vim._init_default_autocmds()
local nvim_terminal_augroup = vim.api.nvim_create_augroup('nvim_terminal', {})
vim.api.nvim_create_autocmd({ 'bufreadcmd' }, {
vim.api.nvim_create_autocmd({ 'BufReadCmd' }, {
pattern = 'term://*',
group = nvim_terminal_augroup,
nested = true,
command = "if !exists('b:term_title')|call termopen(matchstr(expand(\"<amatch>\"), '\\c\\mterm://\\%(.\\{-}//\\%(\\d\\+:\\)\\?\\)\\?\\zs.*'), {'cwd': expand(get(matchlist(expand(\"<amatch>\"), '\\c\\mterm://\\(.\\{-}\\)//'), 1, ''))})",
})
vim.api.nvim_create_autocmd({ 'cmdwinenter' }, {
vim.api.nvim_create_autocmd({ 'TermClose' }, {
group = nvim_terminal_augroup,
desc = 'Automatically close terminal buffers when started with no arguments and exiting without an error',
callback = function(args)
if vim.v.event.status == 0 then
local info = vim.api.nvim_get_chan_info(vim.bo[args.buf].channel)
local argv = info.argv or {}
if #argv == 1 and argv[1] == vim.o.shell then
vim.cmd({ cmd = 'bdelete', args = { args.buf }, bang = true })
end
end
end,
})
vim.api.nvim_create_autocmd({ 'CmdwinEnter' }, {
pattern = '[:>]',
group = vim.api.nvim_create_augroup('nvim_cmdwin', {}),
command = 'syntax sync minlines=1 maxlines=1',