mirror of
https://github.com/neovim/neovim.git
synced 2025-10-01 15:38:33 +00:00
vim-patch:8.2.3468: problem with :cd when editing file in non-existent directory
Problem: Problem with :cd when editing file in non-existent directory. (Yee
Cheng Chin)
Solution: Prepend the current directory to get the full path. (closes vim/vim#8903)
c6376c7984
This commit is contained in:
@@ -2245,11 +2245,17 @@ int path_full_dir_name(char *directory, char *buffer, size_t len)
|
||||
}
|
||||
|
||||
if (os_chdir(directory) != SUCCESS) {
|
||||
// Do not return immediately since we may be in the wrong directory.
|
||||
retval = FAIL;
|
||||
}
|
||||
|
||||
if (retval == FAIL || os_dirname((char_u *)buffer, len) == FAIL) {
|
||||
// Path does not exist (yet). For a full path fail,
|
||||
// will use the path as-is. For a relative path use
|
||||
// the current directory and append the file name.
|
||||
if (path_is_absolute((const char_u *)directory)) {
|
||||
// Do not return immediately since we may be in the wrong directory.
|
||||
retval = FAIL;
|
||||
} else {
|
||||
xstrlcpy(buffer, old_dir, len);
|
||||
append_path(buffer, directory, len);
|
||||
}
|
||||
} else if (os_dirname((char_u *)buffer, len) == FAIL) {
|
||||
// Do not return immediately since we are in the wrong directory.
|
||||
retval = FAIL;
|
||||
}
|
||||
|
@@ -215,3 +215,22 @@ func Test_cd_from_non_existing_dir()
|
||||
cd -
|
||||
call assert_equal(saveddir, getcwd())
|
||||
endfunc
|
||||
|
||||
func Test_cd_unknown_dir()
|
||||
call mkdir('Xa')
|
||||
cd Xa
|
||||
call writefile(['text'], 'Xb.txt')
|
||||
edit Xa/Xb.txt
|
||||
let first_buf = bufnr()
|
||||
cd ..
|
||||
edit
|
||||
call assert_equal(first_buf, bufnr())
|
||||
edit Xa/Xb.txt
|
||||
call assert_notequal(first_buf, bufnr())
|
||||
|
||||
bwipe!
|
||||
exe "bwipe! " .. first_buf
|
||||
call delete('Xa', 'rf')
|
||||
endfunc
|
||||
|
||||
" vim: shiftwidth=2 sts=2 expandtab
|
||||
|
Reference in New Issue
Block a user