summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/doc/eval.txt6
-rw-r--r--src/filepath.c8
-rw-r--r--src/testdir/test_cd.vim19
-rw-r--r--src/version.c2
4 files changed, 29 insertions, 6 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index e29b56411..593dcb517 100644
--- 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: >
diff --git a/src/filepath.c b/src/filepath.c
index 74ee2ec15..f4bddf859 100644
--- a/src/filepath.c
+++ b/src/filepath.c
@@ -1102,13 +1102,15 @@ f_getcwd(typval_T *argvars, typval_T *rettv)
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
{
diff --git a/src/testdir/test_cd.vim b/src/testdir/test_cd.vim
index bcca2f8e7..81ed491ea 100644
--- 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
diff --git a/src/version.c b/src/version.c
index 69193a626..6125df90c 100644
--- a/src/version.c
+++ b/src/version.c
@@ -758,6 +758,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3618,
+/**/
3617,
/**/
3616,