Mercurial > vim
changeset 26173:460790b520dd v8.2.3618
patch 8.2.3618: getcwd() is unclear about how 'autochdir' is used
Commit: https://github.com/vim/vim/commit/851c7a699ae00bdc14a4db874cf722b7b7393b53
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Nov 18 20:47:31 2021 +0000
patch 8.2.3618: getcwd() is unclear about how 'autochdir' is used
Problem: getcwd() is unclear about how 'autochdir' is used.
Solution: Update the help for getcwd(). Without any arguments always return
the actual current directory. (closes #9142)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 18 Nov 2021 22:00:06 +0100 |
parents | b35f5fdc951b |
children | 00e8f1ac9c6d |
files | runtime/doc/eval.txt src/filepath.c src/testdir/test_cd.vim src/version.c |
diffstat | 4 files changed, 29 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -5757,7 +5757,7 @@ getcursorcharpos([{winid}]) < *getcwd()* getcwd([{winnr} [, {tabnr}]]) The result is a String, which is the name of the current - working directory. + working directory. 'autochdir' is ignored. With {winnr} return the local current directory of this window in the current tab page. {winnr} can be the window number or @@ -5770,8 +5770,8 @@ getcwd([{winnr} [, {tabnr}]]) the working directory of the tabpage. If {winnr} is zero use the current window, if {tabnr} is zero use the current tabpage. - Without any arguments, return the working directory of the - current window. + Without any arguments, return the actual working directory of + the current window. Return an empty string if the arguments are invalid. Examples: >
--- a/src/filepath.c +++ b/src/filepath.c @@ -1102,13 +1102,15 @@ f_getcwd(typval_T *argvars, typval_T *re else wp = find_tabwin(&argvars[0], &argvars[1], &tp); - if (wp != NULL && wp->w_localdir != NULL) + if (wp != NULL && wp->w_localdir != NULL + && argvars[0].v_type != VAR_UNKNOWN) rettv->vval.v_string = vim_strsave(wp->w_localdir); - else if (tp != NULL && tp->tp_localdir != NULL) + else if (tp != NULL && tp->tp_localdir != NULL + && argvars[0].v_type != VAR_UNKNOWN) rettv->vval.v_string = vim_strsave(tp->tp_localdir); else if (wp != NULL || tp != NULL || global) { - if (globaldir != NULL) + if (globaldir != NULL && argvars[0].v_type != VAR_UNKNOWN) rettv->vval.v_string = vim_strsave(globaldir); else {
--- a/src/testdir/test_cd.vim +++ b/src/testdir/test_cd.vim @@ -225,4 +225,23 @@ func Test_cd_unknown_dir() call delete('Xa', 'rf') endfunc +func Test_getcwd_actual_dir() + let startdir = getcwd() + call mkdir('Xactual') + call test_autochdir() + set autochdir + edit Xactual/file.txt + call assert_match('testdir.Xactual$', getcwd()) + lcd .. + call assert_match('testdir$', getcwd()) + edit + call assert_match('testdir.Xactual$', getcwd()) + call assert_match('testdir$', getcwd(win_getid())) + + set noautochdir + bwipe! + call chdir(startdir) + call delete('Xactual', 'rf') +endfunc + " vim: shiftwidth=2 sts=2 expandtab