vim-patch:8.2.4513: window-local directory is not applied if 'acd' fails

Problem:    Window-local directory is not applied if 'acd' fails.
Solution:   Don't call do_autochdir(). (closes vim/vim#9891)
b29ae15977
This commit is contained in:
zeertzjq 2022-03-06 09:11:23 +08:00
parent 8e06377bc6
commit eb70540ff0
3 changed files with 20 additions and 14 deletions

View File

@ -90,22 +90,27 @@ func Test_verbose_pwd()
set acd
wincmd w
call assert_match('\[autochdir\].*testdir$', execute('verbose pwd'))
execute 'lcd' cwd
call assert_match('\[window\].*testdir$', execute('verbose pwd'))
execute 'tcd' cwd
call assert_match('\[tabpage\].*testdir$', execute('verbose pwd'))
execute 'cd' cwd
call assert_match('\[global\].*testdir$', execute('verbose pwd'))
execute 'lcd' cwd
call assert_match('\[window\].*testdir$', execute('verbose pwd'))
edit
call assert_match('\[autochdir\].*testdir$', execute('verbose pwd'))
enew
wincmd w
call assert_match('\[autochdir\].*testdir[/\\]Xautodir', execute('verbose pwd'))
wincmd w
call assert_match('\[window\].*testdir$', execute('verbose pwd'))
wincmd w
call assert_match('\[autochdir\].*testdir[/\\]Xautodir', execute('verbose pwd'))
set noacd
call assert_match('\[autochdir\].*testdir[/\\]Xautodir', execute('verbose pwd'))
wincmd w
call assert_match('\[autochdir\].*testdir[/\\]Xautodir', execute('verbose pwd'))
call assert_match('\[window\].*testdir$', execute('verbose pwd'))
execute 'cd' cwd
call assert_match('\[global\].*testdir', execute('verbose pwd'))
call assert_match('\[global\].*testdir$', execute('verbose pwd'))
wincmd w
call assert_match('\[window\].*testdir[/\\]Xautodir', execute('verbose pwd'))

View File

@ -4680,10 +4680,6 @@ static void win_enter_ext(win_T *const wp, const int flags)
/// Used after making another window the current one: change directory if needed.
void fix_current_dir(void)
{
if (p_acd) {
do_autochdir();
return;
}
// New directory is either the local directory of the window, tab or NULL.
char *new_dir = (char *)(curwin->w_localdir
? curwin->w_localdir : curtab->tp_localdir);

View File

@ -64,7 +64,7 @@ describe('autochdir behavior', function()
it('win_execute() does not change directory', function()
local subdir = 'Xfile'
command('cd '..dir)
command('set autochdir')
command('set acd')
call('mkdir', subdir)
local winid = eval('win_getid()')
command('new '..subdir..'/file')
@ -85,23 +85,28 @@ describe('autochdir behavior', function()
command('split '..subdir..'/local.txt')
command('lcd '..subdir)
matches('%[window%].*'..dir..'[/\\]'..subdir, exec_capture('verbose pwd'))
command('set autochdir')
command('set acd')
command('wincmd w')
matches('%[autochdir%].*'..dir, exec_capture('verbose pwd'))
command('lcd '..cwd)
matches('%[window%].*'..dir, exec_capture('verbose pwd'))
command('tcd '..cwd)
matches('%[tabpage%].*'..dir, exec_capture('verbose pwd'))
command('cd '..cwd)
matches('%[global%].*'..dir, exec_capture('verbose pwd'))
command('lcd '..cwd)
matches('%[window%].*'..dir, exec_capture('verbose pwd'))
command('edit')
matches('%[autochdir%].*'..dir, exec_capture('verbose pwd'))
command('enew')
command('wincmd w')
matches('%[autochdir%].*'..dir..'[/\\]'..subdir, exec_capture('verbose pwd'))
command('set noautochdir')
matches('%[autochdir%].*'..dir..'[/\\]'..subdir, exec_capture('verbose pwd'))
command('wincmd w')
matches('%[window%].*'..dir, exec_capture('verbose pwd'))
command('wincmd w')
matches('%[autochdir%].*'..dir..'[/\\]'..subdir, exec_capture('verbose pwd'))
command('set noacd')
matches('%[autochdir%].*'..dir..'[/\\]'..subdir, exec_capture('verbose pwd'))
command('wincmd w')
matches('%[window%].*'..dir, exec_capture('verbose pwd'))
command('cd '..cwd)
matches('%[global%].*'..dir, exec_capture('verbose pwd'))
command('wincmd w')