diff --git a/7.1.125 b/7.1.125 new file mode 100644 index 0000000..f202db4 --- /dev/null +++ b/7.1.125 @@ -0,0 +1,454 @@ +To: vim-dev@vim.org +Subject: patch 7.1.125 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.125 +Problem: The TermResponse autocommand event is not always triggered. (Aron + Griffis) +Solution: When unblocking autocommands check if v:termresponse changed and + trigger the event then. +Files: src/buffer.c, src/diff.c, src/ex_getln.c, src/fileio.c, + src/globals.h, src/misc2.c, src/proto/fileio.pro, src/window.c + + +*** ../vim-7.1.124/src/buffer.c Sun Aug 12 15:50:26 2007 +--- src/buffer.c Wed Sep 26 20:05:38 2007 +*************** +*** 5515,5525 **** + + #ifdef FEAT_AUTOCMD + if (!aucmd) /* Don't trigger BufDelete autocommands here. */ +! ++autocmd_block; + #endif + close_buffer(NULL, buf, DOBUF_WIPE); + #ifdef FEAT_AUTOCMD + if (!aucmd) +! --autocmd_block; + #endif + } +--- 5512,5522 ---- + + #ifdef FEAT_AUTOCMD + if (!aucmd) /* Don't trigger BufDelete autocommands here. */ +! block_autocmds(); + #endif + close_buffer(NULL, buf, DOBUF_WIPE); + #ifdef FEAT_AUTOCMD + if (!aucmd) +! unblock_autocmds(); + #endif + } +*** ../vim-7.1.124/src/diff.c Tue Feb 20 04:43:13 2007 +--- src/diff.c Tue Sep 25 22:01:40 2007 +*************** +*** 840,850 **** + tmp_orig, tmp_new); + append_redir(cmd, p_srr, tmp_diff); + #ifdef FEAT_AUTOCMD +! ++autocmd_block; /* Avoid ShellCmdPost stuff */ + #endif + (void)call_shell(cmd, SHELL_FILTER|SHELL_SILENT|SHELL_DOOUT); + #ifdef FEAT_AUTOCMD +! --autocmd_block; + #endif + vim_free(cmd); + } +--- 840,850 ---- + tmp_orig, tmp_new); + append_redir(cmd, p_srr, tmp_diff); + #ifdef FEAT_AUTOCMD +! block_autocmds(); /* Avoid ShellCmdPost stuff */ + #endif + (void)call_shell(cmd, SHELL_FILTER|SHELL_SILENT|SHELL_DOOUT); + #ifdef FEAT_AUTOCMD +! unblock_autocmds(); + #endif + vim_free(cmd); + } +*************** +*** 949,959 **** + # endif + eap->arg); + #ifdef FEAT_AUTOCMD +! ++autocmd_block; /* Avoid ShellCmdPost stuff */ + #endif + (void)call_shell(buf, SHELL_FILTER | SHELL_COOKED); + #ifdef FEAT_AUTOCMD +! --autocmd_block; + #endif + } + +--- 949,959 ---- + # endif + eap->arg); + #ifdef FEAT_AUTOCMD +! block_autocmds(); /* Avoid ShellCmdPost stuff */ + #endif + (void)call_shell(buf, SHELL_FILTER | SHELL_COOKED); + #ifdef FEAT_AUTOCMD +! unblock_autocmds(); + #endif + } + +*** ../vim-7.1.124/src/ex_getln.c Thu Sep 13 18:25:08 2007 +--- src/ex_getln.c Tue Sep 25 22:03:05 2007 +*************** +*** 5925,5931 **** + + # ifdef FEAT_AUTOCMD + /* Don't execute autocommands while creating the window. */ +! ++autocmd_block; + # endif + /* don't use a new tab page */ + cmdmod.tab = 0; +--- 5925,5931 ---- + + # ifdef FEAT_AUTOCMD + /* Don't execute autocommands while creating the window. */ +! block_autocmds(); + # endif + /* don't use a new tab page */ + cmdmod.tab = 0; +*************** +*** 5934,5939 **** +--- 5934,5942 ---- + 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,5962 **** + + # ifdef FEAT_AUTOCMD + /* Do execute autocommands for setting the filetype (load syntax). */ +! --autocmd_block; + # endif + + /* Showing the prompt may have set need_wait_return, reset it. */ +--- 5959,5965 ---- + + # ifdef FEAT_AUTOCMD + /* Do execute autocommands for setting the filetype (load syntax). */ +! unblock_autocmds(); + # endif + + /* Showing the prompt may have set need_wait_return, reset it. */ +*************** +*** 6110,6116 **** + + # ifdef FEAT_AUTOCMD + /* Don't execute autocommands while deleting the window. */ +! ++autocmd_block; + # endif + wp = curwin; + bp = curbuf; +--- 6113,6119 ---- + + # ifdef FEAT_AUTOCMD + /* Don't execute autocommands while deleting the window. */ +! block_autocmds(); + # endif + wp = curwin; + bp = curbuf; +*************** +*** 6122,6128 **** + win_size_restore(&winsizes); + + # ifdef FEAT_AUTOCMD +! --autocmd_block; + # endif + } + +--- 6125,6131 ---- + win_size_restore(&winsizes); + + # ifdef FEAT_AUTOCMD +! unblock_autocmds(); + # endif + } + +*** ../vim-7.1.124/src/fileio.c Sun Aug 12 15:50:26 2007 +--- src/fileio.c Wed Sep 26 20:02:54 2007 +*************** +*** 7165,7170 **** +--- 7187,7193 ---- + + static event_T last_event; + static int last_group; ++ static int autocmd_blocked = 0; /* block all autocmds */ + + /* + * Show the autocommands for one AutoPat. +*************** +*** 8454,8460 **** + * Quickly return if there are no autocommands for this event or + * autocommands are blocked. + */ +! if (first_autopat[(int)event] == NULL || autocmd_block > 0) + goto BYPASS_AU; + + /* +--- 8477,8483 ---- + * Quickly return if there are no autocommands for this event or + * autocommands are blocked. + */ +! if (first_autopat[(int)event] == NULL || autocmd_blocked > 0) + goto BYPASS_AU; + + /* +*************** +*** 8766,8771 **** +--- 8789,8828 ---- + aubuflocal_remove(buf); + + 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 + } + + /* +*** ../vim-7.1.124/src/globals.h Tue Sep 25 17:54:41 2007 +--- src/globals.h Tue Sep 25 22:03:39 2007 +*************** +*** 366,372 **** + 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 +--- 366,371 ---- +*** ../vim-7.1.124/src/misc2.c Thu May 10 19:58:47 2007 +--- src/misc2.c Tue Sep 25 22:04:39 2007 +*************** +*** 972,978 **** + return; + entered = TRUE; + +! ++autocmd_block; /* don't want to trigger autocommands here */ + + #ifdef FEAT_WINDOWS + /* close all tabs and windows */ +--- 973,979 ---- + return; + entered = TRUE; + +! block_autocmds(); /* don't want to trigger autocommands here */ + + #ifdef FEAT_WINDOWS + /* close all tabs and windows */ +*** ../vim-7.1.124/src/proto/fileio.pro Thu Jun 28 21:57:08 2007 +--- src/proto/fileio.pro Wed Sep 26 20:05:02 2007 +*************** +*** 40,45 **** +--- 41,48 ---- + 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)); +*** ../vim-7.1.124/src/window.c Tue Sep 25 14:50:19 2007 +--- src/window.c Tue Sep 25 22:05:45 2007 +*************** +*** 1291,1297 **** + * Don't execute autocommands while creating the windows. Must do that + * when putting the buffers in the windows. + */ +! ++autocmd_block; + #endif + + /* todo is number of windows left to create */ +--- 1291,1297 ---- + * 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 */ +*************** +*** 1313,1319 **** + } + + #ifdef FEAT_AUTOCMD +! --autocmd_block; + #endif + + /* return actual number of windows */ +--- 1313,1319 ---- + } + + #ifdef FEAT_AUTOCMD +! unblock_autocmds(); + #endif + + /* return actual number of windows */ +*************** +*** 3415,3421 **** + * Don't execute autocommands while creating the tab pages. Must do that + * when putting the buffers in the windows. + */ +! ++autocmd_block; + #endif + + for (todo = count - 1; todo > 0; --todo) +--- 3415,3421 ---- + * 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) +*************** +*** 3423,3429 **** + break; + + #ifdef FEAT_AUTOCMD +! --autocmd_block; + #endif + + /* return actual number of tab pages */ +--- 3423,3429 ---- + break; + + #ifdef FEAT_AUTOCMD +! unblock_autocmds(); + #endif + + /* return actual number of tab pages */ +*************** +*** 4162,4168 **** + /* Don't execute autocommands while the window is not properly + * initialized yet. gui_create_scrollbar() may trigger a FocusGained + * event. */ +! ++autocmd_block; + #endif + /* + * link the window in the window list +--- 4162,4168 ---- + /* 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 +*************** +*** 4207,4213 **** + foldInitWin(newwin); + #endif + #ifdef FEAT_AUTOCMD +! --autocmd_block; + #endif + #ifdef FEAT_SEARCH_EXTRA + newwin->w_match_head = NULL; +--- 4207,4213 ---- + foldInitWin(newwin); + #endif + #ifdef FEAT_AUTOCMD +! unblock_autocmds(); + #endif + #ifdef FEAT_SEARCH_EXTRA + newwin->w_match_head = NULL; +*************** +*** 4232,4238 **** + #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; + #endif + + #ifdef FEAT_MZSCHEME +--- 4232,4238 ---- + #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_MZSCHEME +*************** +*** 4295,4301 **** + vim_free(wp); + + #ifdef FEAT_AUTOCMD +! --autocmd_block; + #endif + } + +--- 4295,4301 ---- + vim_free(wp); + + #ifdef FEAT_AUTOCMD +! unblock_autocmds(); + #endif + } + +*** ../vim-7.1.124/src/version.c Sat Sep 29 13:15:29 2007 +--- src/version.c Sat Sep 29 14:08:31 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 125, + /**/ + +-- +MICHAEL PALIN PLAYED: 1ST SOLDIER WITH A KEEN INTEREST IN BIRDS, DENNIS, MR + DUCK (A VILLAGE CARPENTER WHO IS ALMOST KEENER THAN + ANYONE ELSE TO BURN WITCHES), THREE-HEADED KNIGHT, SIR + GALAHAD, KING OF SWAMP CASTLE, BROTHER MAYNARD'S ROOMATE + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org ///