aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Anders <greg@gpanders.com>2023-08-10 09:53:56 -0500
committerGregory Anders <greg@gpanders.com>2023-08-10 09:53:56 -0500
commit3fb372eba48796b5d0a7758f91e168be8e70e183 (patch)
tree63f99758c8a4dca73a37ebd434bee62c88cd5d2b
parent6e703f778fe7836663ad93761db676d5e2528d3e (diff)
downloadrneovim-3fb372eba48796b5d0a7758f91e168be8e70e183.tar.gz
rneovim-3fb372eba48796b5d0a7758f91e168be8e70e183.tar.bz2
rneovim-3fb372eba48796b5d0a7758f91e168be8e70e183.zip
Use Lua autocommand and make TermClose autocommand global
-rw-r--r--runtime/doc/news.txt4
-rw-r--r--runtime/doc/various.txt4
-rw-r--r--runtime/doc/vim_diff.txt2
-rw-r--r--runtime/lua/vim/_editor.lua17
-rw-r--r--src/nvim/eval/funcs.c10
5 files changed, 25 insertions, 12 deletions
diff --git a/runtime/doc/news.txt b/runtime/doc/news.txt
index 713569e1ad..179cdfef25 100644
--- a/runtime/doc/news.txt
+++ b/runtime/doc/news.txt
@@ -181,6 +181,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*
diff --git a/runtime/doc/various.txt b/runtime/doc/various.txt
index 52e8f4d86c..33f57580c7 100644
--- a/runtime/doc/various.txt
+++ b/runtime/doc/various.txt
@@ -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
<
diff --git a/runtime/doc/vim_diff.txt b/runtime/doc/vim_diff.txt
index 15bb13d5a9..07b4572a27 100644
--- a/runtime/doc/vim_diff.txt
+++ b/runtime/doc/vim_diff.txt
@@ -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|.
diff --git a/runtime/lua/vim/_editor.lua b/runtime/lua/vim/_editor.lua
index 58fbc923e1..8c10cc7da3 100644
--- a/runtime/lua/vim/_editor.lua
+++ b/runtime/lua/vim/_editor.lua
@@ -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',
diff --git a/src/nvim/eval/funcs.c b/src/nvim/eval/funcs.c
index aebd6b25f6..177f64ebba 100644
--- a/src/nvim/eval/funcs.c
+++ b/src/nvim/eval/funcs.c
@@ -8502,16 +8502,6 @@ static void f_termopen(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
channel_terminal_open(curbuf, chan);
channel_create_event(chan, NULL);
-
- do_cmdline_cmd("augroup nvim_terminal_close");
- do_cmdline_cmd("autocmd! TermClose <buffer> "
- " if !v:event.status |"
- " let info = nvim_get_chan_info(&channel) |"
- " if get(info, 'argv', []) ==# [&shell] |"
- " exec 'bdelete! ' .. expand('<abuf>') |"
- " endif |"
- " endif");
- do_cmdline_cmd("augroup END");
}
/// "timer_info([timer])" function