diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2017-03-12 12:12:26 +0100 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2017-03-12 15:45:50 +0100 |
commit | c5e61b41a53c4fac93f1101ece1a23168eccb3a3 (patch) | |
tree | 08dfec88cb61bed3a4bf0ae2b36d7910de3801cf /src | |
parent | d9fcbc2cfb5f20f63a2870624ce48a58cf918ea8 (diff) | |
download | rneovim-c5e61b41a53c4fac93f1101ece1a23168eccb3a3.tar.gz rneovim-c5e61b41a53c4fac93f1101ece1a23168eccb3a3.tar.bz2 rneovim-c5e61b41a53c4fac93f1101ece1a23168eccb3a3.zip |
DirChanged: avoid redundant events on 'autochdir'
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/ex_docmd.c | 10 | ||||
-rw-r--r-- | src/nvim/file_search.c | 19 |
2 files changed, 20 insertions, 9 deletions
diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index 745419a98f..774380b2f0 100644 --- a/src/nvim/ex_docmd.c +++ b/src/nvim/ex_docmd.c @@ -6960,8 +6960,8 @@ void post_chdir(CdScope scope) } } - char curdir[MAXPATHL]; - if (os_dirname((char_u *)curdir, MAXPATHL) != OK) { + char cwd[MAXPATHL]; + if (os_dirname((char_u *)cwd, MAXPATHL) != OK) { return; } switch (scope) { @@ -6971,17 +6971,17 @@ void post_chdir(CdScope scope) globaldir = NULL; break; case kCdScopeTab: - curtab->tp_localdir = (char_u *)xstrdup(curdir); + curtab->tp_localdir = (char_u *)xstrdup(cwd); break; case kCdScopeWindow: - curwin->w_localdir = (char_u *)xstrdup(curdir); + curwin->w_localdir = (char_u *)xstrdup(cwd); break; case kCdScopeInvalid: assert(false); } shorten_fnames(true); - do_autocmd_dirchanged(curdir, scope); + do_autocmd_dirchanged(cwd, scope); } /// `:cd`, `:tcd`, `:lcd`, `:chdir`, `:tchdir` and `:lchdir`. diff --git a/src/nvim/file_search.c b/src/nvim/file_search.c index c840c0a2d1..b73d9944ce 100644 --- a/src/nvim/file_search.c +++ b/src/nvim/file_search.c @@ -1566,14 +1566,25 @@ void do_autocmd_dirchanged(char *new_dir, CdScope scope) /// @return OK or FAIL int vim_chdirfile(char_u *fname) { - char_u dir[MAXPATHL]; + char dir[MAXPATHL]; STRLCPY(dir, fname, MAXPATHL); - *path_tail_with_sep(dir) = NUL; - if (os_chdir((char *)dir) != 0) { + *path_tail_with_sep((char_u *)dir) = NUL; + + if (os_dirname(NameBuff, sizeof(NameBuff)) != OK) { + NameBuff[0] = NUL; + } + + if (os_chdir(dir) != 0) { return FAIL; } - do_autocmd_dirchanged((char *)dir, kCdScopeWindow); + +#ifdef BACKSLASH_IN_FILENAME + slash_adjust(dir); +#endif + if (!strequal(dir, (char *)NameBuff)) { + do_autocmd_dirchanged(dir, kCdScopeWindow); + } return OK; } |