aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/window.c
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-02-17 06:07:19 +0800
committerGitHub <noreply@github.com>2022-02-17 06:07:19 +0800
commit4646ea1079de484c4217006f94c565ea508f2f40 (patch)
treee084eb9b32e6b986269194a6e4d450eccc16738b /src/nvim/window.c
parent8ab5ec4aaaeed27b1d8086d395171a52568378c2 (diff)
parent059d36e326e31fc9bc6055d7c999f86d94fa9bd5 (diff)
downloadrneovim-4646ea1079de484c4217006f94c565ea508f2f40.tar.gz
rneovim-4646ea1079de484c4217006f94c565ea508f2f40.tar.bz2
rneovim-4646ea1079de484c4217006f94c565ea508f2f40.zip
Merge pull request #17363 from zeertzjq/dirchangedpre
feat(events): add DirChangedPre
Diffstat (limited to 'src/nvim/window.c')
-rw-r--r--src/nvim/window.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/src/nvim/window.c b/src/nvim/window.c
index 1e737d2083..43667377c5 100644
--- a/src/nvim/window.c
+++ b/src/nvim/window.c
@@ -4688,20 +4688,29 @@ void fix_current_dir(void)
globaldir = (char_u *)xstrdup(cwd);
}
}
+ bool dir_differs = pathcmp(new_dir, cwd, -1) != 0;
+ if (!p_acd && dir_differs) {
+ do_autocmd_dirchanged(new_dir, curwin->w_localdir ? kCdScopeWindow : kCdScopeTabpage,
+ kCdCauseWindow, true);
+ }
if (os_chdir(new_dir) == 0) {
- if (!p_acd && pathcmp(new_dir, cwd, -1) != 0) {
- do_autocmd_dirchanged(new_dir, curwin->w_localdir
- ? kCdScopeWindow : kCdScopeTabpage, kCdCauseWindow);
+ if (!p_acd && dir_differs) {
+ do_autocmd_dirchanged(new_dir, curwin->w_localdir ? kCdScopeWindow : kCdScopeTabpage,
+ kCdCauseWindow, false);
}
- last_chdir_reason = NULL;
- shorten_fnames(true);
}
+ last_chdir_reason = NULL;
+ shorten_fnames(true);
} else if (globaldir != NULL) {
// Window doesn't have a local directory and we are not in the global
// directory: Change to the global directory.
+ bool dir_differs = pathcmp((char *)globaldir, cwd, -1) != 0;
+ if (!p_acd && dir_differs) {
+ do_autocmd_dirchanged((char *)globaldir, kCdScopeGlobal, kCdCauseWindow, true);
+ }
if (os_chdir((char *)globaldir) == 0) {
- if (!p_acd && pathcmp((char *)globaldir, cwd, -1) != 0) {
- do_autocmd_dirchanged((char *)globaldir, kCdScopeGlobal, kCdCauseWindow);
+ if (!p_acd && dir_differs) {
+ do_autocmd_dirchanged((char *)globaldir, kCdScopeGlobal, kCdCauseWindow, false);
}
}
XFREE_CLEAR(globaldir);