1
0
forked from aniani/vim

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)
This commit is contained in:
Bram Moolenaar
2018-12-16 15:38:02 +01:00
parent 4efe73b478
commit 2caad3fbbd
5 changed files with 61 additions and 27 deletions

View File

@@ -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)
vim_chdirfile(char_u *fname, char *trigger_autocmd)
{
char_u dir[MAXPATHL];
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