From: Bram Moolenaar Date: Tue, 7 Aug 2018 14:33:18 +0000 (+0200) Subject: patch 8.1.0243: using :term ++close ++hidden closes a window X-Git-Tag: v8.1.0243 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5db7eec42337f0eecdc332f582eecf37278044e8;p=vim 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) --- diff --git a/src/terminal.c b/src/terminal.c index 427e027c5..66a73690f 100644 --- 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; + 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; } diff --git a/src/testdir/test_terminal.vim b/src/testdir/test_terminal.vim index 912632470..b82dae13e 100644 --- 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 diff --git a/src/version.c b/src/version.c index 5a263a93e..46125c029 100644 --- a/src/version.c +++ b/src/version.c @@ -794,6 +794,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 243, /**/ 242, /**/