changeset 27617:269f89efb06a v8.2.4335

patch 8.2.4335: no autocommand event triggered before changing directory Commit: https://github.com/vim/vim/commit/28e8f73ae2d90009fd62cd60f97c2643ba44de68 Author: Bram Moolenaar <Bram@vim.org> 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)
author Bram Moolenaar <Bram@vim.org>
date Wed, 09 Feb 2022 14:00:05 +0100
parents 431c6a7a1f8b
children 5415a1cbfe09
files runtime/doc/autocmd.txt src/autocmd.c src/ex_docmd.c src/misc2.c src/proto/ex_docmd.pro src/testdir/test_autocmd.vim src/version.c src/vim.h
diffstat 8 files changed, 53 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- 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
--- 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},
--- 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;
 }
 
--- 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;
 
--- 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);
index 1ecb8830797a2586710f361f7bffb7f69dba8a02..3ff4c3cf5bfd678b46ccb00a46f16932ad19a9f1
GIT binary patch
literal 87905
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
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4335,
+/**/
     4334,
 /**/
     4333,
--- a/src/vim.h
+++ b/src/vim.h
@@ -1304,6 +1304,7 @@ enum auto_event
     EVENT_CURSORMOVEDI,		// cursor was moved in Insert mode
     EVENT_DIFFUPDATED,		// after diffs were updated
     EVENT_DIRCHANGED,		// after user changed directory
+    EVENT_DIRCHANGEDPRE,	// before directory changes
     EVENT_ENCODINGCHANGED,	// after changing the 'encoding' option
     EVENT_EXITPRE,		// before exiting
     EVENT_FILEAPPENDCMD,	// append to a file using command