# HG changeset patch # User Bram Moolenaar # Date 1644411605 -3600 # Node ID 269f89efb06a18fc9371cd692fdedca6c10f704f # Parent 431c6a7a1f8bf9a1dc662186e66852fe83805d4d patch 8.2.4335: no autocommand event triggered before changing directory Commit: https://github.com/vim/vim/commit/28e8f73ae2d90009fd62cd60f97c2643ba44de68 Author: Bram Moolenaar Date: Wed Feb 9 12:58:20 2022 +0000 patch 8.2.4335: no autocommand event triggered before changing directory Problem: No autocommand event triggered before changing directory. (Ronnie Magatti) Solution: Add DirChangedPre. (closes #9721) diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt --- a/runtime/doc/autocmd.txt +++ b/runtime/doc/autocmd.txt @@ -326,6 +326,7 @@ Name triggered by ~ |FileChangedRO| before making the first change to a read-only file |DiffUpdated| after diffs have been updated +|DirChangedPre| before the working directory will change |DirChanged| after the working directory has changed |ShellCmdPost| after executing a shell command @@ -738,6 +739,11 @@ DiffUpdated After diffs have been upda what kind of diff is being used (internal or external) this can be triggered on every change or when doing |:diffupdate|. + *DirChangedPre* +DirChangedPre The working directory is going to be changed, + as with ||DirChanged|. The pattern is like + with |DirChanged|. The new directory can be + found in v:event.directory. *DirChanged* DirChanged The working directory has changed in response to the |:cd| or |:tcd| or |:lcd| commands, or diff --git a/src/autocmd.c b/src/autocmd.c --- a/src/autocmd.c +++ b/src/autocmd.c @@ -119,6 +119,7 @@ static struct event_name {"CursorMovedI", EVENT_CURSORMOVEDI}, {"DiffUpdated", EVENT_DIFFUPDATED}, {"DirChanged", EVENT_DIRCHANGED}, + {"DirChangedPre", EVENT_DIRCHANGEDPRE}, {"EncodingChanged", EVENT_ENCODINGCHANGED}, {"ExitPre", EVENT_EXITPRE}, {"FileEncoding", EVENT_ENCODINGCHANGED}, diff --git a/src/ex_docmd.c b/src/ex_docmd.c --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -7343,6 +7343,26 @@ post_chdir(cdscope_T scope) } /* + * Trigger DirChangedPre for "acmd_fname" with directory "new_dir". + */ + void +trigger_DirChangedPre(char_u *acmd_fname, char_u *new_dir) +{ +#ifdef FEAT_EVAL + dict_T *v_event; + save_v_event_T save_v_event; + + v_event = get_v_event(&save_v_event); + (void)dict_add_string(v_event, "directory", new_dir); + dict_set_items_ro(v_event); +#endif + apply_autocmds(EVENT_DIRCHANGEDPRE, acmd_fname, new_dir, FALSE, curbuf); +#ifdef FEAT_EVAL + restore_v_event(v_event, &save_v_event); +#endif +} + +/* * Change directory function used by :cd/:tcd/:lcd Ex commands and the * chdir() function. * scope == CDSCOPE_WINDOW: changes the window-local directory @@ -7358,7 +7378,7 @@ changedir_func( { char_u *pdir = NULL; int dir_differs; - char_u *acmd_fname; + char_u *acmd_fname = NULL; char_u **pp; if (new_dir == NULL || allbuf_locked()) @@ -7411,12 +7431,23 @@ changedir_func( new_dir = NameBuff; } dir_differs = pdir == NULL - || pathcmp((char *)pdir, (char *)new_dir, -1) != 0; - if (dir_differs && vim_chdir(new_dir)) - { - emsg(_(e_command_failed)); - vim_free(pdir); - return FALSE; + || pathcmp((char *)pdir, (char *)new_dir, -1) != 0; + if (dir_differs) + { + if (scope == CDSCOPE_WINDOW) + acmd_fname = (char_u *)"window"; + else if (scope == CDSCOPE_TABPAGE) + acmd_fname = (char_u *)"tabpage"; + else + acmd_fname = (char_u *)"global"; + trigger_DirChangedPre(acmd_fname, new_dir); + + if (vim_chdir(new_dir)) + { + emsg(_(e_command_failed)); + vim_free(pdir); + return FALSE; + } } if (scope == CDSCOPE_WINDOW) @@ -7431,16 +7462,7 @@ changedir_func( post_chdir(scope); if (dir_differs) - { - if (scope == CDSCOPE_WINDOW) - acmd_fname = (char_u *)"window"; - else if (scope == CDSCOPE_TABPAGE) - acmd_fname = (char_u *)"tabpage"; - else - acmd_fname = (char_u *)"global"; - apply_autocmds(EVENT_DIRCHANGED, acmd_fname, new_dir, FALSE, - curbuf); - } + apply_autocmds(EVENT_DIRCHANGED, acmd_fname, new_dir, FALSE, curbuf); return TRUE; } diff --git a/src/misc2.c b/src/misc2.c --- a/src/misc2.c +++ b/src/misc2.c @@ -1914,6 +1914,9 @@ vim_chdirfile(char_u *fname, char *trigg // nothing to do return OK; + if (trigger_autocmd != NULL) + trigger_DirChangedPre((char_u *)trigger_autocmd, new_dir); + if (mch_chdir((char *)new_dir) != 0) return FAIL; diff --git a/src/proto/ex_docmd.pro b/src/proto/ex_docmd.pro --- a/src/proto/ex_docmd.pro +++ b/src/proto/ex_docmd.pro @@ -48,6 +48,7 @@ void tabpage_new(void); void do_exedit(exarg_T *eap, win_T *old_curwin); void free_cd_dir(void); void post_chdir(cdscope_T scope); +void trigger_DirChangedPre(char_u *acmd_fname, char_u *new_dir); int changedir_func(char_u *new_dir, int forceit, cdscope_T scope); void ex_cd(exarg_T *eap); void do_sleep(long msec, int hide_cursor); diff --git a/src/testdir/test_autocmd.vim b/src/testdir/test_autocmd.vim index 1ecb8830797a2586710f361f7bffb7f69dba8a02..3ff4c3cf5bfd678b46ccb00a46f16932ad19a9f1 GIT binary patch literal 87905 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