# HG changeset patch # User Bram Moolenaar # Date 1591021803 -7200 # Node ID b60bb094af527c73dccc66a7498b2c8adff3d48d # Parent ca42fc075a80c50325f8adf797e68143003facc7 patch 8.2.0876: :pwd does not give a hint about the scope of the directory Commit: https://github.com/vim/vim/commit/950587242cad52d067a15f0f0c83528a28f75731 Author: Bram Moolenaar Date: Mon Jun 1 16:26:19 2020 +0200 patch 8.2.0876: :pwd does not give a hint about the scope of the directory Problem: :pwd does not give a hint about the scope of the directory Solution: Make ":verbose pwd" show the scope. (Takuya Fujiwara, closes https://github.com/vim/vim/issues/5469) diff --git a/runtime/doc/editing.txt b/runtime/doc/editing.txt --- a/runtime/doc/editing.txt +++ b/runtime/doc/editing.txt @@ -1338,6 +1338,21 @@ present in 'cpoptions' and "!" is not us *: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 --- 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 --- 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 --- a/src/version.c +++ b/src/version.c @@ -747,6 +747,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 876, +/**/ 875, /**/ 874,