aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2015-02-16 23:24:31 -0500
committerJustin M. Keyes <justinkz@gmail.com>2015-02-16 23:24:31 -0500
commit662b7227b54d18c0113741edff157cd8648c2594 (patch)
treeaa35b1fcb2e89f4f11976edb4e32b315f746e168 /src
parent0429857689ba98356bc80d01ebd540fe861e8db2 (diff)
parent3ffc5d81c34cfdd535573a50790690c88e4324bb (diff)
downloadrneovim-662b7227b54d18c0113741edff157cd8648c2594.tar.gz
rneovim-662b7227b54d18c0113741edff157cd8648c2594.tar.bz2
rneovim-662b7227b54d18c0113741edff157cd8648c2594.zip
Merge #1717 'TabNew, TabNewEntered, TabClosed'
Diffstat (limited to 'src')
-rw-r--r--src/nvim/ex_docmd.c5
-rw-r--r--src/nvim/fileio.c6
-rw-r--r--src/nvim/fileio.h3
-rw-r--r--src/nvim/window.c3
4 files changed, 16 insertions, 1 deletions
diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c
index 7ff69a3d41..bf9b5c16d7 100644
--- a/src/nvim/ex_docmd.c
+++ b/src/nvim/ex_docmd.c
@@ -5328,10 +5328,12 @@ void tabpage_close_other(tabpage_T *tp, int forceit)
int done = 0;
win_T *wp;
int h = tabline_height();
+ char_u prev_idx[NUMBUFLEN];
/* Limit to 1000 windows, autocommands may add a window while we close
* one. OK, so I'm paranoid... */
while (++done < 1000) {
+ sprintf((char *)prev_idx, "%i", tabpage_index(tp));
wp = tp->tp_firstwin;
ex_win_close(forceit, wp, tp);
@@ -5340,6 +5342,7 @@ void tabpage_close_other(tabpage_T *tp, int forceit)
if (!valid_tabpage(tp) || tp->tp_firstwin == wp)
break;
}
+ apply_autocmds(EVENT_TABCLOSED, prev_idx, prev_idx, FALSE, curbuf);
redraw_tabline = TRUE;
if (h != tabline_height())
@@ -5715,7 +5718,9 @@ void ex_splitview(exarg_T *eap)
if (win_new_tabpage(cmdmod.tab != 0 ? cmdmod.tab
: eap->addr_count == 0 ? 0
: (int)eap->line2 + 1) != FAIL) {
+ apply_autocmds(EVENT_TABNEW, eap->arg, eap->arg, FALSE, curbuf);
do_exedit(eap, old_curwin);
+ apply_autocmds(EVENT_TABNEWENTERED, NULL, NULL, FALSE, curbuf);
/* set the alternate buffer for the window we came from */
if (curwin != old_curwin
diff --git a/src/nvim/fileio.c b/src/nvim/fileio.c
index dd6e5ace3f..762514a237 100644
--- a/src/nvim/fileio.c
+++ b/src/nvim/fileio.c
@@ -5245,8 +5245,11 @@ static struct event_name {
{"StdinReadPre", EVENT_STDINREADPRE},
{"SwapExists", EVENT_SWAPEXISTS},
{"Syntax", EVENT_SYNTAX},
+ {"TabClosed", EVENT_TABCLOSED},
{"TabEnter", EVENT_TABENTER},
{"TabLeave", EVENT_TABLEAVE},
+ {"TabNew", EVENT_TABNEW},
+ {"TabNewEntered", EVENT_TABNEWENTERED},
{"TermChanged", EVENT_TERMCHANGED},
{"TermResponse", EVENT_TERMRESPONSE},
{"TextChanged", EVENT_TEXTCHANGED},
@@ -6632,7 +6635,8 @@ apply_autocmds_group (
|| event == EVENT_QUICKFIXCMDPRE
|| event == EVENT_COLORSCHEME
|| event == EVENT_QUICKFIXCMDPOST
- || event == EVENT_JOBACTIVITY)
+ || event == EVENT_JOBACTIVITY
+ || event == EVENT_TABCLOSED)
fname = vim_strsave(fname);
else
fname = FullName_save(fname, FALSE);
diff --git a/src/nvim/fileio.h b/src/nvim/fileio.h
index 29bd1307f6..7a9e2adae1 100644
--- a/src/nvim/fileio.h
+++ b/src/nvim/fileio.h
@@ -93,8 +93,11 @@ typedef enum auto_event {
EVENT_SPELLFILEMISSING, /* spell file missing */
EVENT_CURSORMOVED, /* cursor was moved */
EVENT_CURSORMOVEDI, /* cursor was moved in Insert mode */
+ EVENT_TABCLOSED, /* a tab has closed */
EVENT_TABLEAVE, /* before leaving a tab page */
EVENT_TABENTER, /* after entering a tab page */
+ EVENT_TABNEW, /* when creating a new tab */
+ EVENT_TABNEWENTERED, /* after entering a new tab */
EVENT_SHELLCMDPOST, /* after ":!cmd" */
EVENT_SHELLFILTERPOST, /* after ":1,2!cmd", ":w !cmd", ":r !cmd". */
EVENT_TEXTCHANGED, /* text was modified */
diff --git a/src/nvim/window.c b/src/nvim/window.c
index 52a1853f4b..adc6e9f1c2 100644
--- a/src/nvim/window.c
+++ b/src/nvim/window.c
@@ -1791,6 +1791,9 @@ static int close_last_window_tabpage(win_T *win, int free_buf, tabpage_T *prev_c
}
/* Since goto_tabpage_tp above did not trigger *Enter autocommands, do
* that now. */
+ char_u prev_idx[NUMBUFLEN];
+ sprintf((char *)prev_idx, "%i", tabpage_index(prev_curtab));
+ apply_autocmds(EVENT_TABCLOSED, prev_idx, prev_idx, FALSE, curbuf);
apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf);
apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
if (old_curbuf != curbuf)