diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-07-19 23:13:03 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-07-19 23:13:03 +0200 |
commit | 12c11d553053f5a9eae9eb3c518279b12fa928c2 (patch) | |
tree | 9516b5c3300a1799e1a5657457dedd7e8d526749 | |
parent | 4f0383bc3fe5af0229fb66b53fe94329af783eff (diff) | |
download | vim-git-12c11d553053f5a9eae9eb3c518279b12fa928c2.tar.gz |
patch 7.4.2077v7.4.2077
Problem: Cannot update 'tabline' when a tab was closed.
Solution: Add the TabClosed autocmd event. (partly by Felipe Morales)
-rw-r--r-- | runtime/doc/autocmd.txt | 15 | ||||
-rw-r--r-- | src/fileio.c | 1 | ||||
-rw-r--r-- | src/testdir/test_autocmd.vim | 14 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim.h | 1 | ||||
-rw-r--r-- | src/window.c | 9 |
6 files changed, 36 insertions, 6 deletions
diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt index c924af32d..e5fc361f1 100644 --- a/runtime/doc/autocmd.txt +++ b/runtime/doc/autocmd.txt @@ -1,4 +1,4 @@ -*autocmd.txt* For Vim version 7.4. Last change: 2016 Jun 09 +*autocmd.txt* For Vim version 7.4. Last change: 2016 Jul 19 VIM REFERENCE MANUAL by Bram Moolenaar @@ -294,7 +294,8 @@ Name triggered by ~ |CursorMovedI| the cursor was moved in Insert mode |WinNew| after creating a new window -|TabNew| after creating a new window +|TabNew| after creating a new tab page +|TabClosed| after closing a tab page |WinEnter| after entering another window |WinLeave| before leaving a window |TabEnter| after entering another tab page @@ -311,9 +312,6 @@ Name triggered by ~ |TextChanged| after a change was made to the text in Normal mode |TextChangedI| after a change was made to the text in Insert mode -|TextChanged| after a change was made to the text in Normal mode -|TextChangedI| after a change was made to the text in Insert mode - |ColorScheme| after loading a color scheme |RemoteReply| a reply from a server Vim was received @@ -879,6 +877,8 @@ Syntax When the 'syntax' option has been set. The where this option was set, and <amatch> for the new value of 'syntax'. See |:syn-on|. + *TabClosed* +TabClosed After closing a tab page. *TabEnter* TabEnter Just after entering a tab page. |tab-page| After triggering the WinEnter and before @@ -976,6 +976,11 @@ WinLeave Before leaving a window. If the window to be WinLeave autocommands (but not for ":new"). Not used for ":qa" or ":q" when exiting Vim. + *WinNew* +WinNew When a new window was created. Not done for + the fist window, when Vim has just started. + Before a WinEnter event. + ============================================================================== 6. Patterns *autocmd-patterns* *{pat}* diff --git a/src/fileio.c b/src/fileio.c index 0a84576e5..ea01b763f 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -7707,6 +7707,7 @@ static struct event_name {"SwapExists", EVENT_SWAPEXISTS}, {"Syntax", EVENT_SYNTAX}, {"TabNew", EVENT_TABNEW}, + {"TabClosed", EVENT_TABCLOSED}, {"TabEnter", EVENT_TABENTER}, {"TabLeave", EVENT_TABLEAVE}, {"TermChanged", EVENT_TERMCHANGED}, diff --git a/src/testdir/test_autocmd.vim b/src/testdir/test_autocmd.vim index 14254a7fa..580c42fe4 100644 --- a/src/testdir/test_autocmd.vim +++ b/src/testdir/test_autocmd.vim @@ -87,6 +87,7 @@ func Test_win_tab_autocmd() au WinEnter * call add(g:record, 'WinEnter') au WinLeave * call add(g:record, 'WinLeave') au TabNew * call add(g:record, 'TabNew') + au TabClosed * call add(g:record, 'TabClosed') au TabEnter * call add(g:record, 'TabEnter') au TabLeave * call add(g:record, 'TabLeave') augroup END @@ -99,10 +100,21 @@ func Test_win_tab_autocmd() call assert_equal([ \ 'WinLeave', 'WinNew', 'WinEnter', \ 'WinLeave', 'TabLeave', 'WinNew', 'WinEnter', 'TabNew', 'TabEnter', - \ 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', + \ 'WinLeave', 'TabLeave', 'TabClosed', 'WinEnter', 'TabEnter', \ 'WinLeave', 'WinEnter' \ ], g:record) + let g:record = [] + tabnew somefile + tabnext + bwipe somefile + + call assert_equal([ + \ 'WinLeave', 'TabLeave', 'WinNew', 'WinEnter', 'TabNew', 'TabEnter', + \ 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', + \ 'TabClosed' + \ ], g:record) + augroup testing au! augroup END diff --git a/src/version.c b/src/version.c index 6f1d53a26..892894af7 100644 --- a/src/version.c +++ b/src/version.c @@ -759,6 +759,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2077, +/**/ 2076, /**/ 2075, @@ -1331,6 +1331,7 @@ enum auto_event EVENT_TABENTER, /* after entering a tab page */ EVENT_TABLEAVE, /* before leaving a tab page */ EVENT_TABNEW, /* when entering a new tab page */ + EVENT_TABCLOSED, /* after closing a tab page */ EVENT_SHELLCMDPOST, /* after ":!cmd" */ EVENT_SHELLFILTERPOST, /* after ":1,2!cmd", ":w !cmd", ":r !cmd". */ EVENT_TEXTCHANGED, /* text was modified */ diff --git a/src/window.c b/src/window.c index bf650f84b..4fbe6ca58 100644 --- a/src/window.c +++ b/src/window.c @@ -2095,6 +2095,9 @@ close_windows( win_T *wp; tabpage_T *tp, *nexttp; int h = tabline_height(); +#ifdef FEAT_AUTOCMD + int count = tabpage_index(NULL); +#endif ++RedrawingDisabled; @@ -2138,6 +2141,11 @@ close_windows( --RedrawingDisabled; +#ifdef FEAT_AUTOCMD + if (count != tabpage_index(NULL)) + apply_autocmds(EVENT_TABCLOSED, NULL, NULL, FALSE, curbuf); +#endif + redraw_tabline = TRUE; if (h != tabline_height()) shell_new_rows(); @@ -2220,6 +2228,7 @@ close_last_window_tabpage( /* Since goto_tabpage_tp above did not trigger *Enter autocommands, do * that now. */ #ifdef FEAT_AUTOCMD + apply_autocmds(EVENT_TABCLOSED, NULL, NULL, FALSE, curbuf); apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf); apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf); if (old_curbuf != curbuf) |