neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

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:
Mruntime/doc/autocmd.txt | 3++-
Msrc/nvim/eval/funcs.c | 2+-
Mtest/functional/autocmd/termxx_spec.lua | 7+++++++
Mtest/functional/terminal/buffer_spec.lua | 5++---
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)