aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/window.c
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-02-11 12:44:47 +0800
committerzeertzjq <zeertzjq@outlook.com>2022-02-11 12:55:58 +0800
commit059d36e326e31fc9bc6055d7c999f86d94fa9bd5 (patch)
tree53577f4456663a3315e0d485914c3a4d6c4e2f42 /src/nvim/window.c
parent851252f79ddaaca5456b287342cd36130c76ff38 (diff)
downloadrneovim-059d36e326e31fc9bc6055d7c999f86d94fa9bd5.tar.gz
rneovim-059d36e326e31fc9bc6055d7c999f86d94fa9bd5.tar.bz2
rneovim-059d36e326e31fc9bc6055d7c999f86d94fa9bd5.zip
feat(events): add DirChangedPre
In Nvim, like DirChanged, this also triggers when switching windows. This marks Vim patch 8.2.4335 as ported. vim-patch:8.2.4335: no autocommand event triggered before changing directory Problem: No autocommand event triggered before changing directory. (Ronnie Magatti) Solution: Add DirChangedPre. (closes vim/vim#9721) https://github.com/vim/vim/commit/28e8f73ae2d90009fd62cd60f97c2643ba44de68
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 6996a93928..83495801e8 100644
--- a/src/nvim/window.c
+++ b/src/nvim/window.c
@@ -4645,20 +4645,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);