summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-11-21 14:47:57 +0100
committerBram Moolenaar <Bram@vim.org>2017-11-21 14:47:57 +0100
commitff5467965e3871d3dc0288416fcc6b1e2ba4f822 (patch)
tree7ef859cb24a0f4db34f47e20fdcaca09b2e57152
parent91ffda9852916004c9f318cd01b2f90751329bad (diff)
downloadvim-git-8.0.1328.tar.gz
patch 8.0.1328: trouble when using ":term ++close" with autocmdv8.0.1328
Problem: Trouble when using ":term ++close" with autocmd. (Gabriel Barta) Solution: Use aucmd_prepbuf() and aucmd_restbuf() instead of setting curbuf. (closes #2339)
-rw-r--r--src/terminal.c6
-rw-r--r--src/testdir/test_terminal.vim38
-rw-r--r--src/version.c2
3 files changed, 41 insertions, 5 deletions
diff --git a/src/terminal.c b/src/terminal.c
index a4caa42ed..2e6b39918 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -51,6 +51,7 @@
* - implement term_setsize()
* - Termdebug does not work when Vim build with mzscheme. gdb hangs.
* - MS-Windows GUI: WinBar has tearoff item
+ * - Adding WinBar to terminal window doesn't display, text isn't shifted down.
* - MS-Windows GUI: still need to type a key after shell exits? #1924
* - After executing a shell command the status line isn't redraw.
* - What to store in a session file? Shell at the prompt would be OK to
@@ -2172,10 +2173,13 @@ term_channel_closed(channel_T *ch)
if (term->tl_finish == 'c')
{
+ aco_save_T aco;
+
/* ++close or term_finish == "close" */
ch_log(NULL, "terminal job finished, closing window");
- curbuf = term->tl_buffer;
+ aucmd_prepbuf(&aco, term->tl_buffer);
do_bufdel(DOBUF_WIPE, (char_u *)"", 1, fnum, fnum, FALSE);
+ aucmd_restbuf(&aco);
break;
}
if (term->tl_finish == 'o' && term->tl_buffer->b_nwindows == 0)
diff --git a/src/testdir/test_terminal.vim b/src/testdir/test_terminal.vim
index 4d20794ea..295ccf1c9 100644
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -352,9 +352,7 @@ func Test_terminal_curwin()
call delete('Xtext')
endfunc
-func Test_finish_open_close()
- call assert_equal(1, winnr('$'))
-
+func s:get_sleep_cmd()
if s:python != ''
let cmd = s:python . " test_short_sleep.py"
let waittime = 500
@@ -367,12 +365,18 @@ func Test_finish_open_close()
let cmd = 'sleep 1'
endif
endif
+ return [cmd, waittime]
+endfunc
+
+func Test_terminal_finish_open_close()
+ call assert_equal(1, winnr('$'))
+
+ let [cmd, waittime] = s:get_sleep_cmd()
exe 'terminal ++close ' . cmd
call assert_equal(2, winnr('$'))
wincmd p
call WaitFor("winnr('$') == 1", waittime)
- call assert_equal(1, winnr('$'))
call term_start(cmd, {'term_finish': 'close'})
call assert_equal(2, winnr('$'))
@@ -743,3 +747,29 @@ func Test_terminal_composing_unicode()
unlet g:job
let &encoding = save_enc
endfunc
+
+func Test_terminal_aucmd_on_close()
+ fun Nop()
+ let s:called = 1
+ endfun
+
+ aug repro
+ au!
+ au BufWinLeave * call Nop()
+ aug END
+
+ let [cmd, waittime] = s:get_sleep_cmd()
+
+ call assert_equal(1, winnr('$'))
+ new
+ call setline(1, ['one', 'two'])
+ exe 'term ++close ' . cmd
+ wincmd p
+ call WaitFor("winnr('$') == 2", waittime)
+ call assert_equal(1, s:called)
+ bwipe!
+
+ unlet s:called
+ au! repro
+ delfunc Nop
+endfunc
diff --git a/src/version.c b/src/version.c
index 9df29eb7d..d311de91b 100644
--- 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 */
/**/
+ 1328,
+/**/
1327,
/**/
1326,