forked from aniani/vim
patch 7.4.2077
Problem: Cannot update 'tabline' when a tab was closed. Solution: Add the TabClosed autocmd event. (partly by Felipe Morales)
This commit is contained in:
@@ -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
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@@ -294,7 +294,8 @@ Name triggered by ~
|
|||||||
|CursorMovedI| the cursor was moved in Insert mode
|
|CursorMovedI| the cursor was moved in Insert mode
|
||||||
|
|
||||||
|WinNew| after creating a new window
|
|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
|
|WinEnter| after entering another window
|
||||||
|WinLeave| before leaving a window
|
|WinLeave| before leaving a window
|
||||||
|TabEnter| after entering another tab page
|
|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
|
|TextChanged| after a change was made to the text in Normal mode
|
||||||
|TextChangedI| after a change was made to the text in Insert 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
|
|ColorScheme| after loading a color scheme
|
||||||
|
|
||||||
|RemoteReply| a reply from a server Vim was received
|
|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
|
where this option was set, and <amatch> for
|
||||||
the new value of 'syntax'.
|
the new value of 'syntax'.
|
||||||
See |:syn-on|.
|
See |:syn-on|.
|
||||||
|
*TabClosed*
|
||||||
|
TabClosed After closing a tab page.
|
||||||
*TabEnter*
|
*TabEnter*
|
||||||
TabEnter Just after entering a tab page. |tab-page|
|
TabEnter Just after entering a tab page. |tab-page|
|
||||||
After triggering the WinEnter and before
|
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").
|
WinLeave autocommands (but not for ":new").
|
||||||
Not used for ":qa" or ":q" when exiting Vim.
|
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}*
|
6. Patterns *autocmd-patterns* *{pat}*
|
||||||
|
|
||||||
|
|||||||
@@ -7707,6 +7707,7 @@ static struct event_name
|
|||||||
{"SwapExists", EVENT_SWAPEXISTS},
|
{"SwapExists", EVENT_SWAPEXISTS},
|
||||||
{"Syntax", EVENT_SYNTAX},
|
{"Syntax", EVENT_SYNTAX},
|
||||||
{"TabNew", EVENT_TABNEW},
|
{"TabNew", EVENT_TABNEW},
|
||||||
|
{"TabClosed", EVENT_TABCLOSED},
|
||||||
{"TabEnter", EVENT_TABENTER},
|
{"TabEnter", EVENT_TABENTER},
|
||||||
{"TabLeave", EVENT_TABLEAVE},
|
{"TabLeave", EVENT_TABLEAVE},
|
||||||
{"TermChanged", EVENT_TERMCHANGED},
|
{"TermChanged", EVENT_TERMCHANGED},
|
||||||
|
|||||||
@@ -87,6 +87,7 @@ func Test_win_tab_autocmd()
|
|||||||
au WinEnter * call add(g:record, 'WinEnter')
|
au WinEnter * call add(g:record, 'WinEnter')
|
||||||
au WinLeave * call add(g:record, 'WinLeave')
|
au WinLeave * call add(g:record, 'WinLeave')
|
||||||
au TabNew * call add(g:record, 'TabNew')
|
au TabNew * call add(g:record, 'TabNew')
|
||||||
|
au TabClosed * call add(g:record, 'TabClosed')
|
||||||
au TabEnter * call add(g:record, 'TabEnter')
|
au TabEnter * call add(g:record, 'TabEnter')
|
||||||
au TabLeave * call add(g:record, 'TabLeave')
|
au TabLeave * call add(g:record, 'TabLeave')
|
||||||
augroup END
|
augroup END
|
||||||
@@ -99,10 +100,21 @@ func Test_win_tab_autocmd()
|
|||||||
call assert_equal([
|
call assert_equal([
|
||||||
\ 'WinLeave', 'WinNew', 'WinEnter',
|
\ 'WinLeave', 'WinNew', 'WinEnter',
|
||||||
\ 'WinLeave', 'TabLeave', 'WinNew', 'WinEnter', 'TabNew', 'TabEnter',
|
\ 'WinLeave', 'TabLeave', 'WinNew', 'WinEnter', 'TabNew', 'TabEnter',
|
||||||
\ 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter',
|
\ 'WinLeave', 'TabLeave', 'TabClosed', 'WinEnter', 'TabEnter',
|
||||||
\ 'WinLeave', 'WinEnter'
|
\ 'WinLeave', 'WinEnter'
|
||||||
\ ], g:record)
|
\ ], 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
|
augroup testing
|
||||||
au!
|
au!
|
||||||
augroup END
|
augroup END
|
||||||
|
|||||||
@@ -758,6 +758,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
2077,
|
||||||
/**/
|
/**/
|
||||||
2076,
|
2076,
|
||||||
/**/
|
/**/
|
||||||
|
|||||||
@@ -1331,6 +1331,7 @@ enum auto_event
|
|||||||
EVENT_TABENTER, /* after entering a tab page */
|
EVENT_TABENTER, /* after entering a tab page */
|
||||||
EVENT_TABLEAVE, /* before leaving a tab page */
|
EVENT_TABLEAVE, /* before leaving a tab page */
|
||||||
EVENT_TABNEW, /* when entering a new tab page */
|
EVENT_TABNEW, /* when entering a new tab page */
|
||||||
|
EVENT_TABCLOSED, /* after closing a tab page */
|
||||||
EVENT_SHELLCMDPOST, /* after ":!cmd" */
|
EVENT_SHELLCMDPOST, /* after ":!cmd" */
|
||||||
EVENT_SHELLFILTERPOST, /* after ":1,2!cmd", ":w !cmd", ":r !cmd". */
|
EVENT_SHELLFILTERPOST, /* after ":1,2!cmd", ":w !cmd", ":r !cmd". */
|
||||||
EVENT_TEXTCHANGED, /* text was modified */
|
EVENT_TEXTCHANGED, /* text was modified */
|
||||||
|
|||||||
@@ -2095,6 +2095,9 @@ close_windows(
|
|||||||
win_T *wp;
|
win_T *wp;
|
||||||
tabpage_T *tp, *nexttp;
|
tabpage_T *tp, *nexttp;
|
||||||
int h = tabline_height();
|
int h = tabline_height();
|
||||||
|
#ifdef FEAT_AUTOCMD
|
||||||
|
int count = tabpage_index(NULL);
|
||||||
|
#endif
|
||||||
|
|
||||||
++RedrawingDisabled;
|
++RedrawingDisabled;
|
||||||
|
|
||||||
@@ -2138,6 +2141,11 @@ close_windows(
|
|||||||
|
|
||||||
--RedrawingDisabled;
|
--RedrawingDisabled;
|
||||||
|
|
||||||
|
#ifdef FEAT_AUTOCMD
|
||||||
|
if (count != tabpage_index(NULL))
|
||||||
|
apply_autocmds(EVENT_TABCLOSED, NULL, NULL, FALSE, curbuf);
|
||||||
|
#endif
|
||||||
|
|
||||||
redraw_tabline = TRUE;
|
redraw_tabline = TRUE;
|
||||||
if (h != tabline_height())
|
if (h != tabline_height())
|
||||||
shell_new_rows();
|
shell_new_rows();
|
||||||
@@ -2220,6 +2228,7 @@ close_last_window_tabpage(
|
|||||||
/* Since goto_tabpage_tp above did not trigger *Enter autocommands, do
|
/* Since goto_tabpage_tp above did not trigger *Enter autocommands, do
|
||||||
* that now. */
|
* that now. */
|
||||||
#ifdef FEAT_AUTOCMD
|
#ifdef FEAT_AUTOCMD
|
||||||
|
apply_autocmds(EVENT_TABCLOSED, NULL, NULL, FALSE, curbuf);
|
||||||
apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf);
|
apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf);
|
||||||
apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
|
apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
|
||||||
if (old_curbuf != curbuf)
|
if (old_curbuf != curbuf)
|
||||||
|
|||||||
Reference in New Issue
Block a user