mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:8.1.0602: DirChanged is also triggered when directory didn't change
Problem: DirChanged is also triggered when the directory didn't change.
(Daniel Hahler)
Solution: Compare the current with the new directory. (closes vim/vim#3697)
2caad3fbbd
This commit is contained in:
parent
eed89d5e0c
commit
e91dee5c21
@ -7811,10 +7811,11 @@ void ex_cd(exarg_T *eap)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vim_chdir(new_dir)) {
|
bool dir_differs = prev_dir == NULL || STRCMP(prev_dir, new_dir) != 0;
|
||||||
|
if (dir_differs && vim_chdir(new_dir)) {
|
||||||
EMSG(_(e_failed));
|
EMSG(_(e_failed));
|
||||||
} else {
|
} else {
|
||||||
post_chdir(scope, true);
|
post_chdir(scope, dir_differs);
|
||||||
// Echo the new current directory if the command was typed.
|
// Echo the new current directory if the command was typed.
|
||||||
if (KeyTyped || p_verbose >= 5) {
|
if (KeyTyped || p_verbose >= 5) {
|
||||||
ex_pwd(eap);
|
ex_pwd(eap);
|
||||||
|
@ -8,11 +8,19 @@ func Test_set_filename()
|
|||||||
let cwd = getcwd()
|
let cwd = getcwd()
|
||||||
call test_autochdir()
|
call test_autochdir()
|
||||||
set acd
|
set acd
|
||||||
|
|
||||||
|
let s:li = []
|
||||||
|
autocmd DirChanged auto call add(s:li, "autocd")
|
||||||
|
autocmd DirChanged auto call add(s:li, expand("<afile>"))
|
||||||
|
|
||||||
new
|
new
|
||||||
w samples/Xtest
|
w samples/Xtest
|
||||||
call assert_equal("Xtest", expand('%'))
|
call assert_equal("Xtest", expand('%'))
|
||||||
call assert_equal("samples", substitute(getcwd(), '.*/\(\k*\)', '\1', ''))
|
call assert_equal("samples", substitute(getcwd(), '.*/\(\k*\)', '\1', ''))
|
||||||
|
call assert_equal(["autocd", getcwd()], s:li)
|
||||||
|
|
||||||
bwipe!
|
bwipe!
|
||||||
|
au! DirChanged
|
||||||
set noacd
|
set noacd
|
||||||
exe 'cd ' . cwd
|
exe 'cd ' . cwd
|
||||||
call delete('samples/Xtest')
|
call delete('samples/Xtest')
|
||||||
|
@ -1334,13 +1334,16 @@ function s:Before_test_dirchanged()
|
|||||||
augroup END
|
augroup END
|
||||||
let s:li = []
|
let s:li = []
|
||||||
let s:dir_this = getcwd()
|
let s:dir_this = getcwd()
|
||||||
let s:dir_other = s:dir_this . '/foo'
|
let s:dir_foo = s:dir_this . '/foo'
|
||||||
call mkdir(s:dir_other)
|
call mkdir(s:dir_foo)
|
||||||
|
let s:dir_bar = s:dir_this . '/bar'
|
||||||
|
call mkdir(s:dir_bar)
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
function s:After_test_dirchanged()
|
function s:After_test_dirchanged()
|
||||||
exe 'cd' s:dir_this
|
exe 'cd' s:dir_this
|
||||||
call delete(s:dir_other, 'd')
|
call delete(s:dir_foo, 'd')
|
||||||
|
call delete(s:dir_bar, 'd')
|
||||||
augroup test_dirchanged
|
augroup test_dirchanged
|
||||||
autocmd!
|
autocmd!
|
||||||
augroup END
|
augroup END
|
||||||
@ -1350,10 +1353,12 @@ function Test_dirchanged_global()
|
|||||||
call s:Before_test_dirchanged()
|
call s:Before_test_dirchanged()
|
||||||
autocmd test_dirchanged DirChanged global call add(s:li, "cd:")
|
autocmd test_dirchanged DirChanged global call add(s:li, "cd:")
|
||||||
autocmd test_dirchanged DirChanged global call add(s:li, expand("<afile>"))
|
autocmd test_dirchanged DirChanged global call add(s:li, expand("<afile>"))
|
||||||
exe 'cd' s:dir_other
|
exe 'cd' s:dir_foo
|
||||||
call assert_equal(["cd:", s:dir_other], s:li)
|
call assert_equal(["cd:", s:dir_foo], s:li)
|
||||||
exe 'lcd' s:dir_other
|
exe 'cd' s:dir_foo
|
||||||
call assert_equal(["cd:", s:dir_other], s:li)
|
call assert_equal(["cd:", s:dir_foo], s:li)
|
||||||
|
exe 'lcd' s:dir_bar
|
||||||
|
call assert_equal(["cd:", s:dir_foo], s:li)
|
||||||
call s:After_test_dirchanged()
|
call s:After_test_dirchanged()
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
@ -1361,10 +1366,12 @@ function Test_dirchanged_local()
|
|||||||
call s:Before_test_dirchanged()
|
call s:Before_test_dirchanged()
|
||||||
autocmd test_dirchanged DirChanged window call add(s:li, "lcd:")
|
autocmd test_dirchanged DirChanged window call add(s:li, "lcd:")
|
||||||
autocmd test_dirchanged DirChanged window call add(s:li, expand("<afile>"))
|
autocmd test_dirchanged DirChanged window call add(s:li, expand("<afile>"))
|
||||||
exe 'cd' s:dir_other
|
exe 'cd' s:dir_foo
|
||||||
call assert_equal([], s:li)
|
call assert_equal([], s:li)
|
||||||
exe 'lcd' s:dir_other
|
exe 'lcd' s:dir_bar
|
||||||
call assert_equal(["lcd:", s:dir_other], s:li)
|
call assert_equal(["lcd:", s:dir_bar], s:li)
|
||||||
|
exe 'lcd' s:dir_bar
|
||||||
|
call assert_equal(["lcd:", s:dir_bar], s:li)
|
||||||
call s:After_test_dirchanged()
|
call s:After_test_dirchanged()
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
@ -1379,9 +1386,9 @@ function Test_dirchanged_auto()
|
|||||||
set acd
|
set acd
|
||||||
exe 'cd ..'
|
exe 'cd ..'
|
||||||
call assert_equal([], s:li)
|
call assert_equal([], s:li)
|
||||||
exe 'edit ' . s:dir_other . '/Xfile'
|
exe 'edit ' . s:dir_foo . '/Xfile'
|
||||||
call assert_equal(s:dir_other, getcwd())
|
call assert_equal(s:dir_foo, getcwd())
|
||||||
call assert_equal(["auto:", s:dir_other], s:li)
|
call assert_equal(["auto:", s:dir_foo], s:li)
|
||||||
set noacd
|
set noacd
|
||||||
bwipe!
|
bwipe!
|
||||||
call s:After_test_dirchanged()
|
call s:After_test_dirchanged()
|
||||||
|
@ -113,6 +113,42 @@ describe('autocmd DirChanged', function()
|
|||||||
eq(2, eval('g:cdcount'))
|
eq(2, eval('g:cdcount'))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('does not trigger if diretory has not changed', function()
|
||||||
|
command('lcd '..dirs[1])
|
||||||
|
eq({cwd=dirs[1], scope='window', changed_window=false}, eval('g:ev'))
|
||||||
|
eq(1, eval('g:cdcount'))
|
||||||
|
command('let g:ev = {}')
|
||||||
|
command('lcd '..dirs[1])
|
||||||
|
eq({}, eval('g:ev'))
|
||||||
|
eq(1, eval('g:cdcount'))
|
||||||
|
|
||||||
|
command('tcd '..dirs[2])
|
||||||
|
eq({cwd=dirs[2], scope='tab', changed_window=false}, eval('g:ev'))
|
||||||
|
eq(2, eval('g:cdcount'))
|
||||||
|
command('let g:ev = {}')
|
||||||
|
command('tcd '..dirs[2])
|
||||||
|
eq({}, eval('g:ev'))
|
||||||
|
eq(2, eval('g:cdcount'))
|
||||||
|
|
||||||
|
command('cd '..dirs[3])
|
||||||
|
eq({cwd=dirs[3], scope='global', changed_window=false}, eval('g:ev'))
|
||||||
|
eq(3, eval('g:cdcount'))
|
||||||
|
command('let g:ev = {}')
|
||||||
|
command('cd '..dirs[3])
|
||||||
|
eq({}, eval('g:ev'))
|
||||||
|
eq(3, eval('g:cdcount'))
|
||||||
|
|
||||||
|
command('set autochdir')
|
||||||
|
|
||||||
|
command('split '..dirs[1]..'/foo')
|
||||||
|
eq({cwd=dirs[1], scope='window', changed_window=false}, eval('g:ev'))
|
||||||
|
eq(4, eval('g:cdcount'))
|
||||||
|
command('let g:ev = {}')
|
||||||
|
command('split '..dirs[1]..'/bar')
|
||||||
|
eq({}, eval('g:ev'))
|
||||||
|
eq(4, eval('g:cdcount'))
|
||||||
|
end)
|
||||||
|
|
||||||
it("is triggered by switching to win/tab with different CWD #6054", function()
|
it("is triggered by switching to win/tab with different CWD #6054", function()
|
||||||
command('lcd '..dirs[3]) -- window 3
|
command('lcd '..dirs[3]) -- window 3
|
||||||
command('split '..dirs[2]..'/foo') -- window 2
|
command('split '..dirs[2]..'/foo') -- window 2
|
||||||
|
Loading…
Reference in New Issue
Block a user