Mercurial > vim
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