Mercurial > vim
changeset 20645:b60bb094af52 v8.2.0876
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 <Bram@vim.org>
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)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 01 Jun 2020 16:30:03 +0200 |
parents | ca42fc075a80 |
children | ad14bd3f8c4f |
files | runtime/doc/editing.txt src/ex_docmd.c src/testdir/test_cd.vim src/version.c |
diffstat | 4 files changed, 36 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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"));
--- 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'))