diff src/misc2.c @ 15184:90ab2d3ce11d v8.1.0602

patch 8.1.0602: DirChanged is also triggered when directory didn't change commit https://github.com/vim/vim/commit/2caad3fbbdbf1486a176c9f6bfbc3d9be90e09f7 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Dec 16 15:38:02 2018 +0100 patch 8.1.0602: DirChanged is also triggered when directory didn't change Problem: DirChanged is also triggered when the directory didn't change. (Daniel Hahler) Solution: Compare the current with the new directory. (closes #3697)
author Bram Moolenaar <Bram@vim.org>
date Sun, 16 Dec 2018 15:45:06 +0100
parents ec67c6b8ef12
children 2d8c31ae1e24
line wrap: on
line diff
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -3390,17 +3390,29 @@ same_directory(char_u *f1, char_u *f2)
  * Return OK or FAIL.
  */
     int
-vim_chdirfile(char_u *fname, char *trigger_autocmd UNUSED)
-{
-    char_u	dir[MAXPATHL];
+vim_chdirfile(char_u *fname, char *trigger_autocmd)
+{
+    char_u	old_dir[MAXPATHL];
+    char_u	new_dir[MAXPATHL];
     int		res;
 
-    vim_strncpy(dir, fname, MAXPATHL - 1);
-    *gettail_sep(dir) = NUL;
-    res = mch_chdir((char *)dir) == 0 ? OK : FAIL;
-    if (res == OK && trigger_autocmd != NULL)
-	apply_autocmds(EVENT_DIRCHANGED, (char_u *)trigger_autocmd,
-							   dir, FALSE, curbuf);
+    if (mch_dirname(old_dir, MAXPATHL) != OK)
+	*old_dir = NUL;
+
+    vim_strncpy(new_dir, fname, MAXPATHL - 1);
+    *gettail_sep(new_dir) = NUL;
+
+    if (STRCMP(old_dir, new_dir) == 0)
+	// nothing to do
+	res = OK;
+    else
+    {
+	res = mch_chdir((char *)new_dir) == 0 ? OK : FAIL;
+
+	if (res == OK && trigger_autocmd != NULL)
+	    apply_autocmds(EVENT_DIRCHANGED, (char_u *)trigger_autocmd,
+						       new_dir, FALSE, curbuf);
+    }
     return res;
 }
 #endif