]> granicus.if.org Git - vim/commitdiff
patch 8.1.0243: using :term ++close ++hidden closes a window v8.1.0243
authorBram Moolenaar <Bram@vim.org>
Tue, 7 Aug 2018 14:33:18 +0000 (16:33 +0200)
committerBram Moolenaar <Bram@vim.org>
Tue, 7 Aug 2018 14:33:18 +0000 (16:33 +0200)
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)

src/terminal.c
src/testdir/test_terminal.vim
src/version.c

index 427e027c5bc7d4b4be1fa1fc6ab8be6672f695c2..66a73690fa9dcd2d9d773830fc3cdcb81dff41ce 100644 (file)
@@ -2818,11 +2818,17 @@ term_after_channel_closed(term_T *term)
        if (term->tl_finish == TL_FINISH_CLOSE)
        {
            aco_save_T  aco;
+           int         do_set_w_closing = term->tl_buffer->b_nwindows == 0;
 
-           /* ++close or term_finish == "close" */
+           // ++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;
        }
index 912632470753372dbe2a51b0d9c5675599d19678..b82dae13e3b274c2bb482da41e94efe3e929f889 100644 (file)
@@ -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
index 5a263a93e0449c0fb0ae98de4a9313ce078dcd0a..46125c029d9e79dbc6651d7a1b595a25195c1c60 100644 (file)
@@ -794,6 +794,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    243,
 /**/
     242,
 /**/