diff options
author | Bram Moolenaar <Bram@vim.org> | 2021-12-04 22:03:34 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-12-04 22:03:34 +0000 |
commit | dea4a616376c6500894c16e26057ce16d7ef9f0e (patch) | |
tree | 49e9b87316316013e5bbd1ff396729d2b614c265 | |
parent | 23bdef2571b589414cd9744059abd507b043996b (diff) |
patch 8.2.3739: in wrong directory when using win_execute() with 'acd' setv8.2.3739
Problem: In wrong directory when using win_execute() with 'acd' set.
Solution: Restore the directory when returning to the window. (closes #9276)
-rw-r--r-- | src/testdir/test_autochdir.vim | 29 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/window.c | 5 |
3 files changed, 36 insertions, 0 deletions
diff --git a/src/testdir/test_autochdir.vim b/src/testdir/test_autochdir.vim index f6cc148326..c85cc1932b 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 66a0e92c80..338b8a4ad4 100644 --- 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 index c14abe4897..4050ed04dd 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; |