# HG changeset patch # User Bram Moolenaar # Date 1638656103 -3600 # Node ID 7606d9b13068ed6ac3ee52771d73d83619232834 # Parent f54838eb6663be6802f00350ada3011d01d08293 patch 8.2.3739: in wrong directory when using win_execute() with 'acd' set Commit: https://github.com/vim/vim/commit/dea4a616376c6500894c16e26057ce16d7ef9f0e Author: Bram Moolenaar Date: Sat Dec 4 22:03:34 2021 +0000 patch 8.2.3739: in wrong directory when using win_execute() with 'acd' set Problem: In wrong directory when using win_execute() with 'acd' set. Solution: Restore the directory when returning to the window. (closes https://github.com/vim/vim/issues/9276) diff --git a/src/testdir/test_autochdir.vim b/src/testdir/test_autochdir.vim --- a/src/testdir/test_autochdir.vim +++ b/src/testdir/test_autochdir.vim @@ -25,6 +25,33 @@ func Test_set_filename() call delete('samples/Xtest') endfunc +func Test_set_filename_other_window() + call ch_logfile('logfile', 'w') + let cwd = getcwd() + call test_autochdir() + call mkdir('Xa') + call mkdir('Xb') + call mkdir('Xc') + try + args Xa/aaa.txt Xb/bbb.txt + set acd + let winid = win_getid() + snext + call assert_equal('Xb', substitute(getcwd(), '.*/\([^/]*\)$', '\1', '')) + call win_execute(winid, 'file ' .. cwd .. '/Xc/ccc.txt') + call assert_equal('Xb', substitute(getcwd(), '.*/\([^/]*\)$', '\1', '')) + finally + set noacd + call chdir(cwd) + call delete('Xa', 'rf') + call delete('Xb', 'rf') + call delete('Xc', 'rf') + bwipe! aaa.txt + bwipe! bbb.txt + bwipe! ccc.txt + endtry +endfunc + func Test_verbose_pwd() let cwd = getcwd() call test_autochdir() @@ -53,6 +80,8 @@ func Test_verbose_pwd() set noacd call assert_match('\[autochdir\].*testdir[/\\]Xautodir', execute('verbose pwd')) wincmd w + call assert_match('\[autochdir\].*testdir[/\\]Xautodir', execute('verbose pwd')) + execute 'cd' cwd call assert_match('\[global\].*testdir', execute('verbose pwd')) wincmd w call assert_match('\[window\].*testdir[/\\]Xautodir', execute('verbose pwd')) diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -754,6 +754,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 3739, +/**/ 3738, /**/ 3737, diff --git a/src/window.c b/src/window.c --- a/src/window.c +++ b/src/window.c @@ -4858,6 +4858,11 @@ win_enter_ext(win_T *wp, int flags) void fix_current_dir(void) { +#ifdef FEAT_AUTOCHDIR + if (p_acd) + do_autochdir(); + else +#endif if (curwin->w_localdir != NULL || curtab->tp_localdir != NULL) { char_u *dirname;