]> granicus.if.org Git - vim/commitdiff
patch 8.2.3739: in wrong directory when using win_execute() with 'acd' set v8.2.3739
authorBram Moolenaar <Bram@vim.org>
Sat, 4 Dec 2021 22:03:34 +0000 (22:03 +0000)
committerBram Moolenaar <Bram@vim.org>
Sat, 4 Dec 2021 22:03:34 +0000 (22:03 +0000)
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
src/version.c
src/window.c

index f6cc1483262e033304b2bab491c7a8d866e13a4b..c85cc1932b06c8736b1b41cfaf8aac0471ccfd83 100644 (file)
@@ -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'))
index 66a0e92c80e6c1f63b9d797306b0a84ad080a9c2..338b8a4ad4046549cba341796d007784a07d85db 100644 (file)
@@ -753,6 +753,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    3739,
 /**/
     3738,
 /**/
index c14abe4897307139095ab45550f09b4ceb1525d6..4050ed04dda2b0c61147867b5d3a15b888ac99dc 100644 (file)
@@ -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;