changeset 13302:b5806be0b36d v8.0.1525

patch 8.0.1525: using :wqa exits even if a job runs in a terminal window commit https://github.com/vim/vim/commit/7a76092a51fc5446426a4bfd9eb6503ec61bf9e9 Author: Bram Moolenaar <Bram@vim.org> Date: Mon Feb 19 23:10:02 2018 +0100 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 #2654)
author Christian Brabandt <cb@256bit.org>
date Mon, 19 Feb 2018 23:15:05 +0100
parents 466abccbe41d
children b97157007be1
files src/buffer.c src/ex_cmds.c src/ex_cmds2.c src/proto/buffer.pro src/testdir/test_terminal.vim src/version.c
diffstat 6 files changed, 23 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -1875,10 +1875,10 @@ no_write_message(void)
 }
 
     void
-no_write_message_nobang(void)
+no_write_message_nobang(buf_T *buf UNUSED)
 {
 #ifdef FEAT_TERMINAL
-    if (term_job_running(curbuf->b_term))
+    if (term_job_running(buf->b_term))
 	EMSG(_("E948: Job still running"));
     else
 #endif
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -3428,6 +3428,14 @@ do_wqall(exarg_T *eap)
 
     FOR_ALL_BUFFERS(buf)
     {
+#ifdef FEAT_TERMINAL
+	if (exiting && term_job_running(buf->b_term))
+	{
+	    no_write_message_nobang(buf);
+	    ++error;
+	}
+	else
+#endif
 	if (bufIsChanged(buf) && !bt_dontwrite(buf))
 	{
 	    /*
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -2110,7 +2110,7 @@ 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;
     }
     return FALSE;
--- a/src/proto/buffer.pro
+++ b/src/proto/buffer.pro
@@ -14,7 +14,7 @@ void set_curbuf(buf_T *buf, int action);
 void enter_buffer(buf_T *buf);
 void do_autochdir(void);
 void no_write_message(void);
-void no_write_message_nobang(void);
+void no_write_message_nobang(buf_T *buf);
 buf_T *buflist_new(char_u *ffname, char_u *sfname, linenr_T lnum, int flags);
 void free_buf_options(buf_T *buf, int free_p_ff);
 int buflist_getfile(int n, linenr_T lnum, int options, int forceit);
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -712,6 +712,15 @@ func Test_terminal_wall()
   unlet g:job
 endfunc
 
+func Test_terminal_wqall()
+  let buf = Run_shell_in_terminal({})
+  call assert_fails('wqall', 'E948')
+  call Stop_shell_in_terminal(buf)
+  call term_wait(buf)
+  exe buf . 'bwipe'
+  unlet g:job
+endfunc
+
 func Test_terminal_composing_unicode()
   let save_enc = &encoding
   set encoding=utf-8
--- a/src/version.c
+++ b/src/version.c
@@ -772,6 +772,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1525,
+/**/
     1524,
 /**/
     1523,