diff --git a/runtime/doc/editing.txt b/runtime/doc/editing.txt index f6e3810d88..f33ffb9954 100644 --- a/runtime/doc/editing.txt +++ b/runtime/doc/editing.txt @@ -1338,6 +1338,21 @@ present in 'cpoptions' and "!" is not used in the command. *:pw* *:pwd* *E187* :pw[d] Print the current directory name. Also see |getcwd()|. + *:pwd-verbose* + When 'verbose' is non-zero, |:pwd| will also display + what scope the current directory was set. Example: > + + " Set by :cd + :verbose pwd + [global] /path/to/current + + " Set by :lcd + :verbose pwd + [window] /path/to/current + + " Set by :tcd + :verbose pwd + [tabpage] /path/to/current So long as no |:lcd| or |:tcd| command has been used, all windows share the same current directory. Using a command to jump to another window doesn't diff --git a/src/ex_docmd.c b/src/ex_docmd.c index 7b53e6c6a6..ea2763e442 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -6619,9 +6619,10 @@ post_chdir(cdscope_T scope) /* * Change directory function used by :cd/:tcd/:lcd Ex commands and the - * chdir() function. If 'winlocaldir' is TRUE, then changes the window-local - * directory. If 'tablocaldir' is TRUE, then changes the tab-local directory. - * Otherwise changes the global directory. + * chdir() function. + * scope == CDSCOPE_WINDOW: changes the window-local directory + * scope == CDSCOPE_TABPAGE: changes the tab-local directory + * Otherwise: changes the global directory * Returns TRUE if the directory is successfully changed. */ int @@ -6751,7 +6752,18 @@ ex_pwd(exarg_T *eap UNUSED) #ifdef BACKSLASH_IN_FILENAME slash_adjust(NameBuff); #endif - msg((char *)NameBuff); + if (p_verbose > 0) + { + char *context = "global"; + + if (curwin->w_localdir != NULL) + context = "window"; + else if (curtab->tp_localdir != NULL) + context = "tabpage"; + smsg("[%s] %s", context, (char *)NameBuff); + } + else + msg((char *)NameBuff); } else emsg(_("E187: Unknown")); diff --git a/src/testdir/test_cd.vim b/src/testdir/test_cd.vim index da9ef0830f..ad25f3a32e 100644 --- a/src/testdir/test_cd.vim +++ b/src/testdir/test_cd.vim @@ -97,16 +97,19 @@ func Test_chdir_func() lcd z tabfirst + call assert_match('^\[global\] .*/Xdir$', trim(execute('verbose pwd'))) call chdir('..') call assert_equal('y', fnamemodify(getcwd(1, 2), ':t')) call assert_equal('z', fnamemodify(3->getcwd(2), ':t')) tabnext | wincmd t + call assert_match('^\[tabpage\] .*/y$', trim(execute('verbose pwd'))) eval '..'->chdir() call assert_equal('Xdir', fnamemodify(getcwd(1, 2), ':t')) call assert_equal('Xdir', fnamemodify(getcwd(2, 2), ':t')) call assert_equal('z', fnamemodify(getcwd(3, 2), ':t')) call assert_equal('testdir', fnamemodify(getcwd(1, 1), ':t')) 3wincmd w + call assert_match('^\[window\] .*/z$', trim(execute('verbose pwd'))) call chdir('..') call assert_equal('Xdir', fnamemodify(getcwd(1, 2), ':t')) call assert_equal('Xdir', fnamemodify(getcwd(2, 2), ':t')) diff --git a/src/version.c b/src/version.c index 8772e75e6a..ce0e5452b1 100644 --- a/src/version.c +++ b/src/version.c @@ -746,6 +746,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 876, /**/ 875, /**/