summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvimboss <devnull@localhost>2007-09-29 12:16:41 +0000
committervimboss <devnull@localhost>2007-09-29 12:16:41 +0000
commit3733a3921fb7207ecae0ef918c333f58840ce45c (patch)
treedf1c313bb5c0cae5db59d08f852971a0c10fd89c
parentadb8deb03a6cfa1bebdae2f6f0b680d95ac4fba8 (diff)
downloadvim-3733a3921fb7207ecae0ef918c333f58840ce45c.tar.gz
updated for version 7.1-125v7.1.125v7-1-125
-rw-r--r--src/buffer.c4
-rw-r--r--src/diff.c8
-rw-r--r--src/ex_getln.c11
-rw-r--r--src/fileio.c37
-rw-r--r--src/globals.h1
-rw-r--r--src/misc2.c2
-rw-r--r--src/proto/fileio.pro2
-rw-r--r--src/version.c2
-rw-r--r--src/window.c16
9 files changed, 62 insertions, 21 deletions
diff --git a/src/buffer.c b/src/buffer.c
index c9479015..c29fb236 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -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
}
diff --git a/src/diff.c b/src/diff.c
index b6f33541..23142cf0 100644
--- a/src/diff.c
+++ b/src/diff.c
@@ -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
}
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 4a311b4c..f4176198 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -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
}
diff --git a/src/fileio.c b/src/fileio.c
index 801caba9..84416df0 100644
--- a/src/fileio.c
+++ b/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.
*/
diff --git a/src/globals.h b/src/globals.h
index ede2e2e3..7fec4e64 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -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
diff --git a/src/misc2.c b/src/misc2.c
index 9e314c27..165b65bb 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -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 */
diff --git a/src/proto/fileio.pro b/src/proto/fileio.pro
index 068117ad..fd7a04f6 100644
--- a/src/proto/fileio.pro
+++ b/src/proto/fileio.pro
@@ -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));
diff --git a/src/version.c b/src/version.c
index 3a310ad5..eef1e886 100644
--- a/src/version.c
+++ b/src/version.c
@@ -667,6 +667,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 125,
+/**/
124,
/**/
123,
diff --git a/src/window.c b/src/window.c
index 95f4a246..74e36468 100644
--- a/src/window.c
+++ b/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
}