patch 8.0.1564: too many #ifdefs
Problem: Too many #ifdefs.
Solution: Graduate the +autocmd feature. Takes away 450 #ifdefs and
increases code size of tiny Vim by only 40 Kbyte.
diff --git a/src/window.c b/src/window.c
index 40a4607..23c324b 100644
--- a/src/window.c
+++ b/src/window.c
@@ -1437,13 +1437,11 @@
if (count > 1)
last_status(TRUE);
-#ifdef FEAT_AUTOCMD
/*
* Don't execute autocommands while creating the windows. Must do that
* when putting the buffers in the windows.
*/
block_autocmds();
-#endif
/* todo is number of windows left to create */
for (todo = count - 1; todo > 0; --todo)
@@ -1461,9 +1459,7 @@
break;
}
-#ifdef FEAT_AUTOCMD
unblock_autocmds();
-#endif
/* return actual number of windows */
return (count - todo);
@@ -2104,19 +2100,14 @@
win_T *wp;
tabpage_T *tp, *nexttp;
int h = tabline_height();
-#ifdef FEAT_AUTOCMD
int count = tabpage_index(NULL);
-#endif
++RedrawingDisabled;
for (wp = firstwin; wp != NULL && !ONE_WINDOW; )
{
if (wp->w_buffer == buf && (!keep_curwin || wp != curwin)
-#ifdef FEAT_AUTOCMD
- && !(wp->w_closing || wp->w_buffer->b_locked > 0)
-#endif
- )
+ && !(wp->w_closing || wp->w_buffer->b_locked > 0))
{
if (win_close(wp, FALSE) == FAIL)
/* If closing the window fails give up, to avoid looping
@@ -2137,10 +2128,7 @@
if (tp != curtab)
for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next)
if (wp->w_buffer == buf
-#ifdef FEAT_AUTOCMD
- && !(wp->w_closing || wp->w_buffer->b_locked > 0)
-#endif
- )
+ && !(wp->w_closing || wp->w_buffer->b_locked > 0))
{
win_close_othertab(wp, FALSE, tp);
@@ -2153,10 +2141,8 @@
--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())
@@ -2181,7 +2167,6 @@
int
one_window(void)
{
-#ifdef FEAT_AUTOCMD
win_T *wp;
int seen_one = FALSE;
@@ -2195,9 +2180,6 @@
}
}
return TRUE;
-#else
- return ONE_WINDOW;
-#endif
}
/*
@@ -2212,9 +2194,7 @@
{
if (ONE_WINDOW)
{
-#ifdef FEAT_AUTOCMD
buf_T *old_curbuf = curbuf;
-#endif
/*
* Closing the last window in a tab page. First go to another tab
@@ -2239,13 +2219,11 @@
}
/* 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)
apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
-#endif
return TRUE;
}
return FALSE;
@@ -2262,9 +2240,7 @@
win_close(win_T *win, int free_buf)
{
win_T *wp;
-#ifdef FEAT_AUTOCMD
int other_buffer = FALSE;
-#endif
int close_curwin = FALSE;
int dir;
int help_window = FALSE;
@@ -2277,7 +2253,6 @@
return FAIL;
}
-#ifdef FEAT_AUTOCMD
if (win->w_closing || (win->w_buffer != NULL
&& win->w_buffer->b_locked > 0))
return FAIL; /* window is already being closed */
@@ -2291,7 +2266,6 @@
EMSG(_("E814: Cannot close window, only autocmd window would remain"));
return FAIL;
}
-#endif
/* When closing the last window in a tab page first go to another tab page
* and then close the window and the tab page to avoid that curwin and
@@ -2306,7 +2280,6 @@
else
clear_snapshot(curtab, SNAP_HELP_IDX);
-#ifdef FEAT_AUTOCMD
if (win == curwin)
{
/*
@@ -2337,13 +2310,12 @@
win->w_closing = FALSE;
if (last_window())
return FAIL;
-# ifdef FEAT_EVAL
+#ifdef FEAT_EVAL
/* autocmds may abort script processing */
if (aborting())
return FAIL;
-# endif
- }
#endif
+ }
#ifdef FEAT_GUI
/* Avoid trouble with scrollbars that are going to be deleted in
@@ -2366,14 +2338,10 @@
bufref_T bufref;
set_bufref(&bufref, curbuf);
-#ifdef FEAT_AUTOCMD
win->w_closing = TRUE;
-#endif
close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, TRUE);
-#ifdef FEAT_AUTOCMD
if (win_valid_any_tab(win))
win->w_closing = FALSE;
-#endif
/* Make sure curbuf is valid. It can become invalid if 'bufhidden' is
* "wipe". */
if (!bufref_valid(&bufref))
@@ -2455,11 +2423,9 @@
if (close_curwin)
{
win_enter_ext(wp, FALSE, TRUE, FALSE, TRUE, TRUE);
-#ifdef FEAT_AUTOCMD
if (other_buffer)
/* careful: after this wp and win may be invalid! */
apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
-#endif
}
/*
@@ -2498,13 +2464,11 @@
tabpage_T *ptp = NULL;
int free_tp = FALSE;
-#ifdef FEAT_AUTOCMD
/* Get here with win->w_buffer == NULL when win_close() detects the tab
* page changed. */
if (win->w_closing || (win->w_buffer != NULL
&& win->w_buffer->b_locked > 0))
return; /* window is already being closed */
-#endif
if (win->w_buffer != NULL)
/* Close the link to the buffer. */
@@ -2586,13 +2550,11 @@
while (first_tabpage->tp_next != NULL)
tabpage_close(TRUE);
-# ifdef FEAT_AUTOCMD
if (aucmd_win != NULL)
{
(void)win_free_mem(aucmd_win, &dummy, NULL);
aucmd_win = NULL;
}
-# endif
while (firstwin != NULL)
(void)win_free_mem(firstwin, &dummy, NULL);
@@ -3331,11 +3293,7 @@
if (one_window())
{
- if (message
-#ifdef FEAT_AUTOCMD
- && !autocmd_busy
-#endif
- )
+ if (message && !autocmd_busy)
MSG(_(m_onlyone));
return;
}
@@ -3349,26 +3307,22 @@
/* Check if it's allowed to abandon this window */
r = can_abandon(wp->w_buffer, forceit);
-#ifdef FEAT_AUTOCMD
if (!win_valid(wp)) /* autocommands messed wp up */
{
nextwp = firstwin;
continue;
}
-#endif
if (!r)
{
#if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
if (message && (p_confirm || cmdmod.confirm) && p_write)
{
dialog_changed(wp->w_buffer, FALSE);
-# ifdef FEAT_AUTOCMD
if (!win_valid(wp)) /* autocommands messed wp up */
{
nextwp = firstwin;
continue;
}
-# endif
}
if (bufIsChanged(wp->w_buffer))
#endif
@@ -3443,7 +3397,6 @@
return OK;
}
-#if defined(FEAT_AUTOCMD) || defined(PROTO)
/*
* Init "aucmd_win". This can only be done after the first
* window is fully initialized, thus it can't be in win_alloc_first().
@@ -3459,7 +3412,6 @@
new_frame(aucmd_win);
}
}
-#endif
/*
* Allocate the first window or the first window in a new tab page.
@@ -3663,12 +3615,10 @@
#endif
redraw_all_later(CLEAR);
-#ifdef FEAT_AUTOCMD
apply_autocmds(EVENT_WINNEW, NULL, NULL, FALSE, curbuf);
apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf);
apply_autocmds(EVENT_TABNEW, NULL, NULL, FALSE, curbuf);
apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
-#endif
return OK;
}
@@ -3710,21 +3660,17 @@
if (count > p_tpm)
count = p_tpm;
-#ifdef FEAT_AUTOCMD
/*
* Don't execute autocommands while creating the tab pages. Must do that
* when putting the buffers in the windows.
*/
block_autocmds();
-#endif
for (todo = count - 1; todo > 0; --todo)
if (win_new_tabpage(0) == FAIL)
break;
-#ifdef FEAT_AUTOCMD
unblock_autocmds();
-#endif
/* return actual number of tab pages */
return (count - todo);
@@ -3841,7 +3787,6 @@
tabpage_T *tp = curtab;
reset_VIsual_and_resel(); /* stop Visual mode */
-#ifdef FEAT_AUTOCMD
if (trigger_leave_autocmds)
{
if (new_curbuf != curbuf)
@@ -3857,7 +3802,6 @@
if (curtab != tp)
return FAIL;
}
-#endif
#if defined(FEAT_GUI)
/* Remove the scrollbars. They may be added back later. */
if (gui.in_use)
@@ -3929,7 +3873,6 @@
gui_may_update_scrollbars();
#endif
-#ifdef FEAT_AUTOCMD
/* Apply autocommands after updating the display, when 'rows' and
* 'columns' have been set correctly. */
if (trigger_enter_autocmds)
@@ -3938,7 +3881,6 @@
if (old_curbuf != curbuf)
apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
}
-#endif
redraw_all_later(CLEAR);
}
@@ -4131,10 +4073,8 @@
text_locked_msg();
return;
}
-#ifdef FEAT_AUTOCMD
if (curbuf_locked())
return;
-#endif
if (wp->w_buffer != curbuf)
reset_VIsual_and_resel();
@@ -4337,14 +4277,11 @@
int trigger_enter_autocmds UNUSED,
int trigger_leave_autocmds UNUSED)
{
-#ifdef FEAT_AUTOCMD
int other_buffer = FALSE;
-#endif
if (wp == curwin && !curwin_invalid) /* nothing to do */
return;
-#ifdef FEAT_AUTOCMD
if (!curwin_invalid && trigger_leave_autocmds)
{
/*
@@ -4360,13 +4297,12 @@
apply_autocmds(EVENT_WINLEAVE, NULL, NULL, FALSE, curbuf);
if (!win_valid(wp))
return;
-# ifdef FEAT_EVAL
+#ifdef FEAT_EVAL
/* autocmds may abort script processing */
if (aborting())
return;
-# endif
- }
#endif
+ }
/* sync undo before leaving the current buffer */
if (undo_sync && curbuf != wp->w_buffer)
@@ -4417,7 +4353,6 @@
shorten_fnames(TRUE);
}
-#ifdef FEAT_AUTOCMD
if (trigger_new_autocmds)
apply_autocmds(EVENT_WINNEW, NULL, NULL, FALSE, curbuf);
if (trigger_enter_autocmds)
@@ -4426,7 +4361,6 @@
if (other_buffer)
apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
}
-#endif
#ifdef FEAT_TITLE
maketitle();
@@ -4544,12 +4478,11 @@
init_var_dict(new_wp->w_vars, &new_wp->w_winvar, VAR_SCOPE);
#endif
-#ifdef FEAT_AUTOCMD
/* Don't execute autocommands while the window is not properly
* initialized yet. gui_create_scrollbar() may trigger a FocusGained
* event. */
block_autocmds();
-#endif
+
/*
* link the window in the window list
*/
@@ -4585,9 +4518,7 @@
#ifdef FEAT_FOLDING
foldInitWin(new_wp);
#endif
-#ifdef FEAT_AUTOCMD
unblock_autocmds();
-#endif
#ifdef FEAT_SEARCH_EXTRA
new_wp->w_match_head = NULL;
new_wp->w_next_match_id = 4;
@@ -4614,11 +4545,9 @@
/* reduce the reference count to the argument list. */
alist_unlink(wp->w_alist);
-#ifdef FEAT_AUTOCMD
/* Don't execute autocommands while the window is halfway being deleted.
* gui_mch_destroy_scrollbar() may trigger a FocusGained event. */
block_autocmds();
-#endif
#ifdef FEAT_LUA
lua_window_free(wp);
@@ -4708,23 +4637,17 @@
vim_free(wp->w_p_cc_cols);
#endif
-#ifdef FEAT_AUTOCMD
if (wp != aucmd_win)
-#endif
win_remove(wp, tp);
-#ifdef FEAT_AUTOCMD
if (autocmd_busy)
{
wp->w_next = au_pending_free_win;
au_pending_free_win = wp;
}
else
-#endif
vim_free(wp);
-#ifdef FEAT_AUTOCMD
unblock_autocmds();
-#endif
}
/*
@@ -6426,11 +6349,7 @@
# ifdef FEAT_QUICKFIX
|| wp->w_p_pvw
# endif
- ) || wp == curwin)
-# ifdef FEAT_AUTOCMD
- && wp != aucmd_win
-# endif
- )
+ ) || wp == curwin) && wp != aucmd_win)
++count;
return (count <= 1);
}
@@ -6613,9 +6532,7 @@
tabpage_T *tp,
int no_display)
{
-# ifdef FEAT_AUTOCMD
block_autocmds();
-# endif
*save_curwin = curwin;
if (tp != NULL)
{
@@ -6667,9 +6584,7 @@
curwin = save_curwin;
curbuf = curwin->w_buffer;
}
-# ifdef FEAT_AUTOCMD
unblock_autocmds();
-# endif
}
/*
@@ -6679,9 +6594,7 @@
void
switch_buffer(bufref_T *save_curbuf, buf_T *buf)
{
-# ifdef FEAT_AUTOCMD
block_autocmds();
-# endif
set_bufref(save_curbuf, curbuf);
--curbuf->b_nwindows;
curbuf = buf;
@@ -6695,9 +6608,7 @@
void
restore_buffer(bufref_T *save_curbuf)
{
-# ifdef FEAT_AUTOCMD
unblock_autocmds();
-# endif
/* Check for valid buffer, just in case. */
if (bufref_valid(save_curbuf))
{