From 3c46cac204584b0ccabe5abaf064203ac30750f0 Mon Sep 17 00:00:00 2001 From: Karsten Hopp Date: Aug 26 2014 13:44:07 +0000 Subject: - patchlevel 414 --- diff --git a/7.4.414 b/7.4.414 new file mode 100644 index 0000000..2617d93 --- /dev/null +++ b/7.4.414 @@ -0,0 +1,161 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.414 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.414 +Problem: Cannot define a command only when it's used. +Solution: Add the CmdUndefined autocommand event. (partly by Yasuhiro + Matsumoto) +Files: runtime/doc/autocmd.txt, src/ex_docmd.c, src/fileio.c, + src/proto/fileio.pro + + +*** ../vim-7.4.413/runtime/doc/autocmd.txt 2013-11-28 18:53:47.000000000 +0100 +--- runtime/doc/autocmd.txt 2014-08-22 20:10:24.026988365 +0200 +*************** +*** 278,283 **** +--- 278,284 ---- + |ShellCmdPost| after executing a shell command + |ShellFilterPost| after filtering with a shell command + ++ |CmdUndefined| a user command is used but it isn't defined + |FuncUndefined| a user function is used but it isn't defined + |SpellFileMissing| a spell file is used but it can't be found + |SourcePre| before sourcing a Vim script +*************** +*** 462,467 **** +--- 466,481 ---- + *BufWritePost* + BufWritePost After writing the whole buffer to a file + (should undo the commands for BufWritePre). ++ *CmdUndefined* ++ CmdUndefined When a user command is used but it isn't ++ defined. Useful for defining a command only ++ when it's used. The pattern is matched ++ against the command name. Both and ++ are set to the name of the command. ++ NOTE: Autocompletion won't work until the ++ command is defined. An alternative is to ++ always define the user command and have it ++ invoke an autoloaded function. See |autoload|. + *CmdwinEnter* + CmdwinEnter After entering the command-line window. + Useful for setting options specifically for +*************** +*** 663,668 **** +--- 681,688 ---- + when it's used. The pattern is matched + against the function name. Both and + are set to the name of the function. ++ NOTE: When writing Vim scripts a better ++ alternative is to use an autoloaded function. + See |autoload-functions|. + *GUIEnter* + GUIEnter After starting the GUI successfully, and after +*** ../vim-7.4.413/src/ex_docmd.c 2014-08-10 13:34:59.056785459 +0200 +--- src/ex_docmd.c 2014-08-22 20:23:43.426959373 +0200 +*************** +*** 2143,2148 **** +--- 2143,2168 ---- + /* Find the command and let "p" point to after it. */ + p = find_command(&ea, NULL); + ++ #ifdef FEAT_AUTOCMD ++ /* If this looks like an undefined user command and there are CmdUndefined ++ * autocommands defined, trigger the matching autocommands. */ ++ if (p != NULL && ea.cmdidx == CMD_SIZE && !ea.skip ++ && ASCII_ISUPPER(*ea.cmd) ++ && has_cmdundefined()) ++ { ++ char_u *p = ea.cmd; ++ int ret; ++ ++ while (ASCII_ISALNUM(*p)) ++ ++p; ++ p = vim_strnsave(ea.cmd, p - ea.cmd); ++ ret = apply_autocmds(EVENT_CMDUNDEFINED, p, p, TRUE, NULL); ++ vim_free(p); ++ if (ret && !aborting()) ++ p = find_command(&ea, NULL); ++ } ++ #endif ++ + #ifdef FEAT_USR_CMDS + if (p == NULL) + { +*** ../vim-7.4.413/src/fileio.c 2014-08-13 21:58:24.820885492 +0200 +--- src/fileio.c 2014-08-22 20:25:26.826955623 +0200 +*************** +*** 7641,7646 **** +--- 7641,7647 ---- + {"BufWriteCmd", EVENT_BUFWRITECMD}, + {"CmdwinEnter", EVENT_CMDWINENTER}, + {"CmdwinLeave", EVENT_CMDWINLEAVE}, ++ {"CmdUndefined", EVENT_CMDUNDEFINED}, + {"ColorScheme", EVENT_COLORSCHEME}, + {"CompleteDone", EVENT_COMPLETEDONE}, + {"CursorHold", EVENT_CURSORHOLD}, +*************** +*** 9159,9164 **** +--- 9160,9183 ---- + return (first_autopat[(int)EVENT_INSERTCHARPRE] != NULL); + } + ++ /* ++ * Return TRUE when there is an CmdUndefined autocommand defined. ++ */ ++ int ++ has_cmdundefined() ++ { ++ return (first_autopat[(int)EVENT_CMDUNDEFINED] != NULL); ++ } ++ ++ /* ++ * Return TRUE when there is an FuncUndefined autocommand defined. ++ */ ++ int ++ has_funcundefined() ++ { ++ return (first_autopat[(int)EVENT_FUNCUNDEFINED] != NULL); ++ } ++ + static int + apply_autocmds_group(event, fname, fname_io, force, group, buf, eap) + event_T event; +*** ../vim-7.4.413/src/proto/fileio.pro 2014-08-10 13:34:59.060785459 +0200 +--- src/proto/fileio.pro 2014-08-22 20:25:38.862955186 +0200 +*************** +*** 47,52 **** +--- 47,54 ---- + int has_textchanged __ARGS((void)); + int has_textchangedI __ARGS((void)); + int has_insertcharpre __ARGS((void)); ++ int has_cmdundefined __ARGS((void)); ++ int has_funcundefined __ARGS((void)); + void block_autocmds __ARGS((void)); + void unblock_autocmds __ARGS((void)); + int is_autocmd_blocked __ARGS((void)); +*** ../vim-7.4.413/src/version.c 2014-08-22 18:44:30.307175276 +0200 +--- src/version.c 2014-08-22 20:55:31.406890176 +0200 +*************** +*** 743,744 **** +--- 743,746 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 414, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +44. Your friends no longer send you e-mail...they just log on to your IRC + channel. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ an exciting new programming language -- http://www.Zimbu.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org ///