changeset 14459:ecf6c05d8ac3 v8.1.0243

patch 8.1.0243: using :term ++close ++hidden closes a window commit https://github.com/vim/vim/commit/5db7eec42337f0eecdc332f582eecf37278044e8 Author: Bram Moolenaar <Bram@vim.org> Date: Tue Aug 7 16:33:18 2018 +0200 patch 8.1.0243: using :term ++close ++hidden closes a window Problem: Using :term ++close ++hidden closes a window. (Marcin Szamotulski) Solution: Don't close the window if only using it temporarily for unloading the terminal buffer. (closes #3287)
author Christian Brabandt <cb@256bit.org>
date Tue, 07 Aug 2018 16:45:05 +0200
parents 929cbd7d2884
children abfda8a2268e
files src/terminal.c src/testdir/test_terminal.vim src/version.c
diffstat 3 files changed, 22 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -2818,11 +2818,17 @@ term_after_channel_closed(term_T *term)
 	if (term->tl_finish == TL_FINISH_CLOSE)
 	{
 	    aco_save_T	aco;
-
-	    /* ++close or term_finish == "close" */
+	    int		do_set_w_closing = term->tl_buffer->b_nwindows == 0;
+
+	    // ++close or term_finish == "close"
 	    ch_log(NULL, "terminal job finished, closing window");
 	    aucmd_prepbuf(&aco, term->tl_buffer);
+	    // Avoid closing the window if we temporarily use it.
+	    if (do_set_w_closing)
+		curwin->w_closing = TRUE;
 	    do_bufdel(DOBUF_WIPE, (char_u *)"", 1, fnum, fnum, FALSE);
+	    if (do_set_w_closing)
+		curwin->w_closing = FALSE;
 	    aucmd_restbuf(&aco);
 	    return TRUE;
 	}
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -1621,3 +1621,15 @@ func Test_terminal_hidden()
   call WaitForAssert({-> assert_equal('finished', term_getstatus(bnr))})
   bwipe!
 endfunc
+
+func Test_terminal_hidden_and_close()
+  if !has('unix')
+    return
+  endif
+  call assert_equal(1, winnr('$'))
+  term ++hidden ++close ls
+  let bnr = bufnr('$')
+  call assert_equal('terminal', getbufvar(bnr, '&buftype'))
+  call WaitForAssert({-> assert_false(bufexists(bnr))})
+  call assert_equal(1, winnr('$'))
+endfunc
--- a/src/version.c
+++ b/src/version.c
@@ -795,6 +795,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    243,
+/**/
     242,
 /**/
     241,