vim-patch:9.1.0272: autocmd may change cwd after :tcd and :lcd (#28223)

Problem:  Autocommand may change currect directory after :tcd and :lcd.
Solution: Also clear tp_localdir and w_localdir when using aucmd_win.
          (zeertzjq)

closes: vim/vim#14435

9d956ee8ea
This commit is contained in:
zeertzjq
2024-04-08 06:25:22 +08:00
committed by GitHub
parent d32cbef595
commit d188b929d4
4 changed files with 57 additions and 4 deletions

View File

@@ -1325,9 +1325,11 @@ void aucmd_prepbuf(aco_save_T *aco, buf_T *buf)
buf->b_nwindows++;
win_init_empty(auc_win); // set cursor and topline to safe values
// Make sure w_localdir and globaldir are NULL to avoid a chdir() in
// win_enter_ext().
// Make sure w_localdir, tp_localdir and globaldir are NULL to avoid a
// chdir() in win_enter_ext().
XFREE_CLEAR(auc_win->w_localdir);
aco->tp_localdir = curtab->tp_localdir;
curtab->tp_localdir = NULL;
aco->globaldir = globaldir;
globaldir = NULL;
@@ -1427,6 +1429,13 @@ win_found:
vars_clear(&awp->w_vars->dv_hashtab); // free all w: variables
hash_init(&awp->w_vars->dv_hashtab); // re-use the hashtab
// If :lcd has been used in the autocommand window, correct current
// directory before restoring tp_localdir and globaldir.
if (awp->w_localdir != NULL) {
win_fix_current_dir();
}
xfree(curtab->tp_localdir);
curtab->tp_localdir = aco->tp_localdir;
xfree(globaldir);
globaldir = aco->globaldir;