]> granicus.if.org Git - vim/commitdiff
updated for version 7.1-125 v7.1.125
authorBram Moolenaar <Bram@vim.org>
Sat, 29 Sep 2007 12:16:41 +0000 (12:16 +0000)
committerBram Moolenaar <Bram@vim.org>
Sat, 29 Sep 2007 12:16:41 +0000 (12:16 +0000)
src/buffer.c
src/diff.c
src/ex_getln.c
src/fileio.c
src/globals.h
src/misc2.c
src/proto/fileio.pro
src/version.c
src/window.c

index c94790154b8e253c3bbf89cd2e78f66edd4d015c..c29fb236ef0b34d286edfcca785f30081f57c30e 100644 (file)
@@ -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
 }
index b6f33541541730f22dbf2a6068c37f846c6f730f..23142cf036112d1f35533add5ccbf59dac6da38b 100644 (file)
@@ -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
     }
 
index 4a311b4c1c172a69fa51517301f3ccdd32cdc9b6..f417619894e7096cfaecd36a869e66e0df756eae 100644 (file)
@@ -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
     }
 
index 801caba96bcf0ebbbdf7095c1a2ec5f27cd9a083..84416df083986feeabe8cf70d05d22e28eb9b60e 100644 (file)
@@ -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.
  */
index ede2e2e36409a3d66b82ff9f9bb3c7453abc457b..7fec4e6435d0d4ae64300c895762bb20d3a0aa6a 100644 (file)
@@ -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
index 9e314c27832006779dc1289d0341bb2b6ffa76bd..165b65bbea1faea815dd42743bb58e75fc568869 100644 (file)
@@ -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 */
index 068117ad6e6ae08c85190e4b56101e9d880db13c..fd7a04f62b47f68c307540cde8efafddd124fbc7 100644 (file)
@@ -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));
index 3a310ad56a6c5d150dfcfa8735d3182b851fe2da..eef1e8869afdd12e90cb586d686bcfad40ac61b5 100644 (file)
@@ -666,6 +666,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    125,
 /**/
     124,
 /**/
index 95f4a246ca0e3f81854f7c1a110acf773e106f1a..74e36468728d4e86be52d54ae9061d5abdfc21c3 100644 (file)
@@ -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
 }