From dea4a616376c6500894c16e26057ce16d7ef9f0e Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sat, 4 Dec 2021 22:03:34 +0000 Subject: [PATCH] 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 #9276) --- src/testdir/test_autochdir.vim | 29 +++++++++++++++++++++++++++++ src/version.c | 2 ++ src/window.c | 5 +++++ 3 files changed, 36 insertions(+) diff --git a/src/testdir/test_autochdir.vim b/src/testdir/test_autochdir.vim index f6cc14832..c85cc1932 100644 --- 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 index 66a0e92c8..338b8a4ad 100644 --- a/src/version.c +++ b/src/version.c @@ -753,6 +753,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 3739, /**/ 3738, /**/ diff --git a/src/window.c b/src/window.c index c14abe489..4050ed04d 100644 --- 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; -- 2.40.0