commit 484f4554021f3ecc169c1d57bf911deefdd35eda
parent 4e4e1b09d30523076f3841a2c65d7ddcd9c481c4
Author: zeertzjq <zeertzjq@outlook.com>
Date: Thu, 29 Jan 2026 16:29:49 +0800
test(terminal): status is -1 in TermClose if buffer is deleted (#37609)
Diffstat:
4 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt
@@ -1077,7 +1077,8 @@ TermLeave After leaving |Terminal-mode|.
*TermClose*
TermClose When a |terminal| job ends.
Sets these |v:event| keys:
- status
+ status job exit status, or -1 if the
+ terminal buffer is deleted
*TermRequest*
TermRequest When a |:terminal| child process emits an OSC,
DCS, or APC sequence. Sets |v:termrequest|. The
diff --git a/src/nvim/eval/funcs.c b/src/nvim/eval/funcs.c
@@ -3632,7 +3632,7 @@ void f_jobstart(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
// Terminal URI: "term://$CWD//$PID:$CMD"
snprintf(NameBuff, sizeof(NameBuff), "term://%s//%d:%s", IObuff, pid, cmd);
- // Buffer has no terminal associated yet; unset 'swapfile' to ensure no swapfile is created.
+ // Unset 'swapfile' to ensure no swapfile is created.
buf->b_p_swf = false;
setfname(buf, NameBuff, NULL, true);
diff --git a/test/functional/autocmd/termxx_spec.lua b/test/functional/autocmd/termxx_spec.lua
@@ -184,6 +184,13 @@ describe('autocmd TermClose', function()
retry(nil, nil, function()
eq(42, eval('g:status'))
end)
+
+ command('set shellcmdflag= | terminal INTERACT')
+ retry(nil, nil, function()
+ matches('^interact %$ ?$', api.nvim_buf_get_lines(0, 0, 1, true)[1])
+ end)
+ command('bwipe!')
+ eq(-1, eval('g:status'))
end)
end)
diff --git a/test/functional/terminal/buffer_spec.lua b/test/functional/terminal/buffer_spec.lua
@@ -89,11 +89,10 @@ describe(':terminal buffer', function()
end)
it('does not create swap files', function()
- local swapfile = api.nvim_exec('swapname', true):gsub('\n', '')
- eq(nil, io.open(swapfile))
+ eq('No swap file', n.exec_capture('swapname'))
end)
- it('does not create undofiles files', function()
+ it('does not create undo files', function()
local undofile = api.nvim_eval('undofile(bufname("%"))')
eq(nil, io.open(undofile))
end)