summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-01-13 20:54:51 +0100
committerBram Moolenaar <Bram@vim.org>2020-01-13 20:54:51 +0100
commitc10b521628f2b073fa231defa26f23937c91724d (patch)
tree3caad33553c15d1f1ccde619e151178ca462178a /src
parent9df53b62de86f544b41bef5e964b7fc8ae5231e3 (diff)
patch 8.2.0116: BufEnter autocmd not triggered on ":tab drop"v8.2.0116
Problem: BufEnter autocmd not triggered on ":tab drop". (Andy Stewart) Solution: Decrement autocmd_no_enter for the last file. (closes #1660, closes #5473)
Diffstat (limited to 'src')
-rw-r--r--src/arglist.c13
-rw-r--r--src/testdir/test_tabpage.vim28
-rw-r--r--src/version.c2
3 files changed, 41 insertions, 2 deletions
diff --git a/src/arglist.c b/src/arglist.c
index b1a6a0b2f5..942da86c22 100644
--- a/src/arglist.c
+++ b/src/arglist.c
@@ -864,6 +864,7 @@ do_arg_all(
//
int opened_len; // length of opened[]
int use_firstwin = FALSE; // use first window for arglist
+ int tab_drop_empty_window = FALSE;
int split_ret = OK;
int p_ea_save;
alist_T *alist; // argument list to be used
@@ -1027,13 +1028,16 @@ do_arg_all(
last_curwin = curwin;
last_curtab = curtab;
win_enter(lastwin, FALSE);
- // ":drop all" should re-use an empty window to avoid "--remote-tab"
+ // ":tab drop file" should re-use an empty window to avoid "--remote-tab"
// leaving an empty tab page when executed locally.
if (keep_tabs && BUFEMPTY() && curbuf->b_nwindows == 1
&& curbuf->b_ffname == NULL && !curbuf->b_changed)
+ {
use_firstwin = TRUE;
+ tab_drop_empty_window = TRUE;
+ }
- for (i = 0; i < count && i < opened_len && !got_int; ++i)
+ for (i = 0; i < count && !got_int; ++i)
{
if (alist == &global_alist && i == global_alist.al_ga.ga_len - 1)
arg_had_last = TRUE;
@@ -1067,6 +1071,9 @@ do_arg_all(
}
else if (split_ret == OK)
{
+ // trigger events for tab drop
+ if (tab_drop_empty_window && i == count - 1)
+ --autocmd_no_enter;
if (!use_firstwin) // split current window
{
p_ea_save = p_ea;
@@ -1091,6 +1098,8 @@ do_arg_all(
((buf_hide(curwin->w_buffer)
|| bufIsChanged(curwin->w_buffer)) ? ECMD_HIDE : 0)
+ ECMD_OLDBUF, curwin);
+ if (tab_drop_empty_window && i == count - 1)
+ ++autocmd_no_enter;
if (use_firstwin)
++autocmd_no_leave;
use_firstwin = FALSE;
diff --git a/src/testdir/test_tabpage.vim b/src/testdir/test_tabpage.vim
index 392eecbf79..bf721a0b61 100644
--- a/src/testdir/test_tabpage.vim
+++ b/src/testdir/test_tabpage.vim
@@ -222,6 +222,34 @@ function Test_tabpage_with_autocmd()
1tabonly!
endfunction
+" Test autocommands on tab drop
+function Test_tabpage_with_autocmd_tab_drop()
+ augroup TestTabpageGroup
+ au!
+ autocmd TabEnter * call add(s:li, 'TabEnter')
+ autocmd WinEnter * call add(s:li, 'WinEnter')
+ autocmd BufEnter * call add(s:li, 'BufEnter')
+ autocmd TabLeave * call add(s:li, 'TabLeave')
+ autocmd WinLeave * call add(s:li, 'WinLeave')
+ autocmd BufLeave * call add(s:li, 'BufLeave')
+ augroup END
+
+ let s:li = []
+ tab drop test1
+ call assert_equal(['BufLeave', 'BufEnter'], s:li)
+
+ let s:li = []
+ tab drop test2 test3
+ call assert_equal([
+ \ 'TabLeave', 'TabEnter', 'TabLeave', 'TabEnter',
+ \ 'TabLeave', 'WinEnter', 'TabEnter', 'BufEnter',
+ \ 'TabLeave', 'WinEnter', 'TabEnter', 'BufEnter'], s:li)
+
+ autocmd! TestTabpageGroup
+ augroup! TestTabpageGroup
+ 1tabonly!
+endfunction
+
function Test_tabpage_with_tab_modifier()
CheckFeature quickfix
diff --git a/src/version.c b/src/version.c
index 2d502beac6..1e79e03c68 100644
--- a/src/version.c
+++ b/src/version.c
@@ -743,6 +743,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 116,
+/**/
115,
/**/
114,