mirror of
https://github.com/neovim/neovim.git
synced 2025-09-11 22:08:18 +00:00
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)
28e8f73ae2
This commit is contained in:
@@ -4645,20 +4645,29 @@ void fix_current_dir(void)
|
||||
globaldir = (char_u *)xstrdup(cwd);
|
||||
}
|
||||
}
|
||||
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);
|
||||
}
|
||||
last_chdir_reason = NULL;
|
||||
shorten_fnames(true);
|
||||
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 && dir_differs) {
|
||||
do_autocmd_dirchanged(new_dir, curwin->w_localdir ? kCdScopeWindow : kCdScopeTabpage,
|
||||
kCdCauseWindow, false);
|
||||
}
|
||||
}
|
||||
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);
|
||||
|
Reference in New Issue
Block a user