diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ex_docmd.c | 20 | ||||
-rw-r--r-- | src/fileio.c | 19 | ||||
-rw-r--r-- | src/proto/fileio.pro | 2 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 43 insertions, 0 deletions
diff --git a/src/ex_docmd.c b/src/ex_docmd.c index fecb653b5..682695173 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -2143,6 +2143,26 @@ do_one_cmd(cmdlinep, sourcing, /* 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) { diff --git a/src/fileio.c b/src/fileio.c index 17490ac21..f2d204078 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -7641,6 +7641,7 @@ static struct event_name {"BufWriteCmd", EVENT_BUFWRITECMD}, {"CmdwinEnter", EVENT_CMDWINENTER}, {"CmdwinLeave", EVENT_CMDWINLEAVE}, + {"CmdUndefined", EVENT_CMDUNDEFINED}, {"ColorScheme", EVENT_COLORSCHEME}, {"CompleteDone", EVENT_COMPLETEDONE}, {"CursorHold", EVENT_CURSORHOLD}, @@ -9159,6 +9160,24 @@ has_insertcharpre() 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; diff --git a/src/proto/fileio.pro b/src/proto/fileio.pro index 0d532f4ce..5b71d0aad 100644 --- a/src/proto/fileio.pro +++ b/src/proto/fileio.pro @@ -47,6 +47,8 @@ int has_cursormovedI __ARGS((void)); 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)); diff --git a/src/version.c b/src/version.c index e742d187c..ae87bb5a0 100644 --- a/src/version.c +++ b/src/version.c @@ -742,6 +742,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 414, +/**/ 413, /**/ 412, |