aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2020-03-10 20:59:13 -0400
committerJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2020-12-01 08:52:33 -0500
commit56f5e3bd6b9ea522f8099eb6f602490144f3c64a (patch)
tree60fecf042baf13d10316c5c3aa0b940d32b1bf0a
parent11249ad0216c6dac1ba20558038d0fb75add0495 (diff)
downloadrneovim-56f5e3bd6b9ea522f8099eb6f602490144f3c64a.tar.gz
rneovim-56f5e3bd6b9ea522f8099eb6f602490144f3c64a.tar.bz2
rneovim-56f5e3bd6b9ea522f8099eb6f602490144f3c64a.zip
vim-patch:8.0.1525: using :wqa exits even if a job runs in a terminal window
Problem: Using :wqa exits even if a job runs in a terminal window. (Jason Felice) Solution: Check if a terminal has a running job. (closes vim/vim#2654) https://github.com/vim/vim/commit/7a76092a51fc5446426a4bfd9eb6503ec61bf9e9
-rw-r--r--src/nvim/buffer.c7
-rw-r--r--src/nvim/ex_cmds.c7
-rw-r--r--src/nvim/ex_cmds2.c2
-rw-r--r--test/functional/terminal/buffer_spec.lua5
4 files changed, 16 insertions, 5 deletions
diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c
index a46784fdb6..839d61cd2e 100644
--- a/src/nvim/buffer.c
+++ b/src/nvim/buffer.c
@@ -1645,10 +1645,11 @@ void no_write_message(void)
}
}
-void no_write_message_nobang(void)
+void no_write_message_nobang(const buf_T *const buf)
+ FUNC_ATTR_NONNULL_ALL
{
- if (curbuf->terminal
- && channel_job_running((uint64_t)curbuf->b_p_channel)) {
+ if (buf->terminal
+ && channel_job_running((uint64_t)buf->b_p_channel)) {
EMSG(_("E948: Job still running"));
} else {
EMSG(_("E37: No write since last change"));
diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c
index d2ccbe3e6d..b0a51eaefd 100644
--- a/src/nvim/ex_cmds.c
+++ b/src/nvim/ex_cmds.c
@@ -1965,7 +1965,12 @@ void do_wqall(exarg_T *eap)
}
FOR_ALL_BUFFERS(buf) {
- if (!bufIsChanged(buf) || bt_dontwrite(buf)) {
+ if (exiting
+ && buf->terminal
+ && channel_job_running((uint64_t)buf->b_p_channel)) {
+ no_write_message_nobang(buf);
+ error++;
+ } else if (!bufIsChanged(buf) || bt_dontwrite(buf)) {
continue;
}
/*
diff --git a/src/nvim/ex_cmds2.c b/src/nvim/ex_cmds2.c
index dfbbe2e1ac..3b9c44c3cd 100644
--- a/src/nvim/ex_cmds2.c
+++ b/src/nvim/ex_cmds2.c
@@ -1297,7 +1297,7 @@ bool check_changed(buf_T *buf, int flags)
if (flags & CCGD_EXCMD) {
no_write_message();
} else {
- no_write_message_nobang();
+ no_write_message_nobang(curbuf);
}
return true;
}
diff --git a/test/functional/terminal/buffer_spec.lua b/test/functional/terminal/buffer_spec.lua
index 8e171d31aa..209537831f 100644
--- a/test/functional/terminal/buffer_spec.lua
+++ b/test/functional/terminal/buffer_spec.lua
@@ -6,6 +6,7 @@ local eval, feed_command, source = helpers.eval, helpers.feed_command, helpers.s
local eq, neq = helpers.eq, helpers.neq
local write_file = helpers.write_file
local command= helpers.command
+local exc_exec = helpers.exc_exec
describe(':terminal buffer', function()
local screen
@@ -253,6 +254,10 @@ describe(':terminal buffer', function()
]])
command('bdelete!')
end)
+
+ it('handles wqall', function()
+ eq('Vim(wqall):E948: Job still running', exc_exec('wqall'))
+ end)
end)
describe('No heap-buffer-overflow when using', function()