forked from aniani/vim
updated for version 7.1-125
This commit is contained in:
@@ -5515,11 +5515,11 @@ wipe_buffer(buf, aucmd)
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (!aucmd) /* Don't trigger BufDelete autocommands here. */
|
||||
++autocmd_block;
|
||||
block_autocmds();
|
||||
#endif
|
||||
close_buffer(NULL, buf, DOBUF_WIPE);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (!aucmd)
|
||||
--autocmd_block;
|
||||
unblock_autocmds();
|
||||
#endif
|
||||
}
|
||||
|
@@ -840,11 +840,11 @@ diff_file(tmp_orig, tmp_new, tmp_diff)
|
||||
tmp_orig, tmp_new);
|
||||
append_redir(cmd, p_srr, tmp_diff);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
++autocmd_block; /* Avoid ShellCmdPost stuff */
|
||||
block_autocmds(); /* Avoid ShellCmdPost stuff */
|
||||
#endif
|
||||
(void)call_shell(cmd, SHELL_FILTER|SHELL_SILENT|SHELL_DOOUT);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
--autocmd_block;
|
||||
unblock_autocmds();
|
||||
#endif
|
||||
vim_free(cmd);
|
||||
}
|
||||
@@ -949,11 +949,11 @@ ex_diffpatch(eap)
|
||||
# endif
|
||||
eap->arg);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
++autocmd_block; /* Avoid ShellCmdPost stuff */
|
||||
block_autocmds(); /* Avoid ShellCmdPost stuff */
|
||||
#endif
|
||||
(void)call_shell(buf, SHELL_FILTER | SHELL_COOKED);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
--autocmd_block;
|
||||
unblock_autocmds();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@@ -5925,7 +5925,7 @@ ex_window()
|
||||
|
||||
# ifdef FEAT_AUTOCMD
|
||||
/* Don't execute autocommands while creating the window. */
|
||||
++autocmd_block;
|
||||
block_autocmds();
|
||||
# endif
|
||||
/* don't use a new tab page */
|
||||
cmdmod.tab = 0;
|
||||
@@ -5934,6 +5934,9 @@ ex_window()
|
||||
if (win_split((int)p_cwh, WSP_BOT) == FAIL)
|
||||
{
|
||||
beep_flush();
|
||||
# ifdef FEAT_AUTOCMD
|
||||
unblock_autocmds();
|
||||
# endif
|
||||
return K_IGNORE;
|
||||
}
|
||||
cmdwin_type = ccline.cmdfirstc;
|
||||
@@ -5956,7 +5959,7 @@ ex_window()
|
||||
|
||||
# ifdef FEAT_AUTOCMD
|
||||
/* Do execute autocommands for setting the filetype (load syntax). */
|
||||
--autocmd_block;
|
||||
unblock_autocmds();
|
||||
# endif
|
||||
|
||||
/* Showing the prompt may have set need_wait_return, reset it. */
|
||||
@@ -6110,7 +6113,7 @@ ex_window()
|
||||
|
||||
# ifdef FEAT_AUTOCMD
|
||||
/* Don't execute autocommands while deleting the window. */
|
||||
++autocmd_block;
|
||||
block_autocmds();
|
||||
# endif
|
||||
wp = curwin;
|
||||
bp = curbuf;
|
||||
@@ -6122,7 +6125,7 @@ ex_window()
|
||||
win_size_restore(&winsizes);
|
||||
|
||||
# ifdef FEAT_AUTOCMD
|
||||
--autocmd_block;
|
||||
unblock_autocmds();
|
||||
# endif
|
||||
}
|
||||
|
||||
|
37
src/fileio.c
37
src/fileio.c
@@ -7165,6 +7165,7 @@ static void auto_next_pat __ARGS((AutoPatCmd *apc, int stop_at_last));
|
||||
|
||||
static event_T last_event;
|
||||
static int last_group;
|
||||
static int autocmd_blocked = 0; /* block all autocmds */
|
||||
|
||||
/*
|
||||
* Show the autocommands for one AutoPat.
|
||||
@@ -8454,7 +8455,7 @@ apply_autocmds_group(event, fname, fname_io, force, group, buf, eap)
|
||||
* Quickly return if there are no autocommands for this event or
|
||||
* autocommands are blocked.
|
||||
*/
|
||||
if (first_autopat[(int)event] == NULL || autocmd_block > 0)
|
||||
if (first_autopat[(int)event] == NULL || autocmd_blocked > 0)
|
||||
goto BYPASS_AU;
|
||||
|
||||
/*
|
||||
@@ -8768,6 +8769,40 @@ BYPASS_AU:
|
||||
return retval;
|
||||
}
|
||||
|
||||
# ifdef FEAT_EVAL
|
||||
static char_u *old_termresponse = NULL;
|
||||
# endif
|
||||
|
||||
/*
|
||||
* Block triggering autocommands until unblock_autocmd() is called.
|
||||
* Can be used recursively, so long as it's symmetric.
|
||||
*/
|
||||
void
|
||||
block_autocmds()
|
||||
{
|
||||
# ifdef FEAT_EVAL
|
||||
/* Remember the value of v:termresponse. */
|
||||
if (autocmd_blocked == 0)
|
||||
old_termresponse = get_vim_var_str(VV_TERMRESPONSE);
|
||||
# endif
|
||||
++autocmd_blocked;
|
||||
}
|
||||
|
||||
void
|
||||
unblock_autocmds()
|
||||
{
|
||||
--autocmd_blocked;
|
||||
|
||||
# ifdef FEAT_EVAL
|
||||
/* When v:termresponse was set while autocommands were blocked, trigger
|
||||
* the autocommands now. Esp. useful when executing a shell command
|
||||
* during startup (vimdiff). */
|
||||
if (autocmd_blocked == 0
|
||||
&& get_vim_var_str(VV_TERMRESPONSE) != old_termresponse)
|
||||
apply_autocmds(EVENT_TERMRESPONSE, NULL, NULL, FALSE, curbuf);
|
||||
# endif
|
||||
}
|
||||
|
||||
/*
|
||||
* Find next autocommand pattern that matches.
|
||||
*/
|
||||
|
@@ -366,7 +366,6 @@ EXTERN int cterm_normal_bg_color INIT(= 0);
|
||||
EXTERN int autocmd_busy INIT(= FALSE); /* Is apply_autocmds() busy? */
|
||||
EXTERN int autocmd_no_enter INIT(= FALSE); /* *Enter autocmds disabled */
|
||||
EXTERN int autocmd_no_leave INIT(= FALSE); /* *Leave autocmds disabled */
|
||||
EXTERN int autocmd_block INIT(= 0); /* block all autocmds */
|
||||
EXTERN int modified_was_set; /* did ":set modified" */
|
||||
EXTERN int did_filetype INIT(= FALSE); /* FileType event found */
|
||||
EXTERN int keep_filetype INIT(= FALSE); /* value for did_filetype when
|
||||
|
@@ -972,7 +972,7 @@ free_all_mem()
|
||||
return;
|
||||
entered = TRUE;
|
||||
|
||||
++autocmd_block; /* don't want to trigger autocommands here */
|
||||
block_autocmds(); /* don't want to trigger autocommands here */
|
||||
|
||||
#ifdef FEAT_WINDOWS
|
||||
/* close all tabs and windows */
|
||||
|
@@ -40,6 +40,8 @@ int has_cursorhold __ARGS((void));
|
||||
int trigger_cursorhold __ARGS((void));
|
||||
int has_cursormoved __ARGS((void));
|
||||
int has_cursormovedI __ARGS((void));
|
||||
void block_autocmds __ARGS((void));
|
||||
void unblock_autocmds __ARGS((void));
|
||||
int has_autocmd __ARGS((event_T event, char_u *sfname, buf_T *buf));
|
||||
char_u *get_augroup_name __ARGS((expand_T *xp, int idx));
|
||||
char_u *set_context_in_autocmd __ARGS((expand_T *xp, char_u *arg, int doautocmd));
|
||||
|
@@ -666,6 +666,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
125,
|
||||
/**/
|
||||
124,
|
||||
/**/
|
||||
|
16
src/window.c
16
src/window.c
@@ -1291,7 +1291,7 @@ make_windows(count, vertical)
|
||||
* Don't execute autocommands while creating the windows. Must do that
|
||||
* when putting the buffers in the windows.
|
||||
*/
|
||||
++autocmd_block;
|
||||
block_autocmds();
|
||||
#endif
|
||||
|
||||
/* todo is number of windows left to create */
|
||||
@@ -1313,7 +1313,7 @@ make_windows(count, vertical)
|
||||
}
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
--autocmd_block;
|
||||
unblock_autocmds();
|
||||
#endif
|
||||
|
||||
/* return actual number of windows */
|
||||
@@ -3415,7 +3415,7 @@ make_tabpages(maxcount)
|
||||
* Don't execute autocommands while creating the tab pages. Must do that
|
||||
* when putting the buffers in the windows.
|
||||
*/
|
||||
++autocmd_block;
|
||||
block_autocmds();
|
||||
#endif
|
||||
|
||||
for (todo = count - 1; todo > 0; --todo)
|
||||
@@ -3423,7 +3423,7 @@ make_tabpages(maxcount)
|
||||
break;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
--autocmd_block;
|
||||
unblock_autocmds();
|
||||
#endif
|
||||
|
||||
/* return actual number of tab pages */
|
||||
@@ -4162,7 +4162,7 @@ win_alloc(after)
|
||||
/* Don't execute autocommands while the window is not properly
|
||||
* initialized yet. gui_create_scrollbar() may trigger a FocusGained
|
||||
* event. */
|
||||
++autocmd_block;
|
||||
block_autocmds();
|
||||
#endif
|
||||
/*
|
||||
* link the window in the window list
|
||||
@@ -4207,7 +4207,7 @@ win_alloc(after)
|
||||
foldInitWin(newwin);
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
--autocmd_block;
|
||||
unblock_autocmds();
|
||||
#endif
|
||||
#ifdef FEAT_SEARCH_EXTRA
|
||||
newwin->w_match_head = NULL;
|
||||
@@ -4232,7 +4232,7 @@ win_free(wp, tp)
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Don't execute autocommands while the window is halfway being deleted.
|
||||
* gui_mch_destroy_scrollbar() may trigger a FocusGained event. */
|
||||
++autocmd_block;
|
||||
block_autocmds();
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_MZSCHEME
|
||||
@@ -4295,7 +4295,7 @@ win_free(wp, tp)
|
||||
vim_free(wp);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
--autocmd_block;
|
||||
unblock_autocmds();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user