0
0
mirror of https://github.com/vim/vim.git synced 2025-08-26 20:03:41 -04:00

patch 8.2.3780: ":cd" works differently on MS-Windows

Problem:    ":cd" works differently on MS-Windows.
Solution:   Add the 'cdhome' option. (closes #9324)
This commit is contained in:
Bakudankun 2021-12-11 12:28:08 +00:00 committed by Bram Moolenaar
parent 205f29c3e9
commit 29f3a45915
9 changed files with 49 additions and 12 deletions

View File

@ -1298,11 +1298,12 @@ Changing directory fails when the current buffer is modified, the '.' flag is
present in 'cpoptions' and "!" is not used in the command.
*:cd* *E747* *E472*
:cd[!] On non-Unix systems: Print the current directory
name. On Unix systems: Change the current directory
to the home directory. Use |:pwd| to print the
current directory on all systems.
On Unix systems: clear any window-local directory.
:cd[!] On non-Unix systems when 'cdhome' is off: Print the
current directory name.
Otherwise: Change the current directory to the home
directory. Clear any window-local directory.
Use |:pwd| to print the current directory on all
systems.
:cd[!] {path} Change the current directory to {path}.
If {path} is relative, it is searched for in the

View File

@ -635,6 +635,7 @@ Short explanation of each option: *option-list*
'buflisted' 'bl' whether the buffer shows up in the buffer list
'buftype' 'bt' special type of buffer
'casemap' 'cmp' specifies how case of letters is changed
'cdhome' 'cdh' change directory to the home directory by ":cd"
'cdpath' 'cd' list of directories searched with ":cd"
'cedit' key used to open the command-line window
'charconvert' 'ccv' expression for character encoding conversion

View File

@ -260,6 +260,10 @@ call <SID>OptionG("sect", &sect)
call <SID>AddOption("path", gettext("list of directory names used for file searching"))
call append("$", "\t" .. s:global_or_local)
call <SID>OptionG("pa", &pa)
if exists("+cdhome")
call <SID>AddOption("cdhome", gettext("change directory to the home directory by :cd"))
call <SID>BinOptionG("cdh", &cdh)
endif
call <SID>AddOption("cdpath", gettext("list of directory names used for :cd"))
call <SID>OptionG("cd", &cd)
if exists("+autochdir")

View File

@ -7402,9 +7402,13 @@ changedir_func(
else
prev_dir = pdir;
// For UNIX ":cd" means: go to home directory.
// On other systems too if 'cdhome' is set.
#if defined(UNIX) || defined(VMS)
// for UNIX ":cd" means: go to home directory
if (*new_dir == NUL)
#else
if (*new_dir == NUL && p_cdh)
#endif
{
// use NameBuff for home directory name
# ifdef VMS
@ -7420,7 +7424,6 @@ changedir_func(
# endif
new_dir = NameBuff;
}
#endif
dir_differs = new_dir == NULL || pdir == NULL
|| pathcmp((char *)pdir, (char *)new_dir, -1) != 0;
if (new_dir == NULL || (dir_differs && vim_chdir(new_dir)))
@ -7459,8 +7462,8 @@ ex_cd(exarg_T *eap)
new_dir = eap->arg;
#if !defined(UNIX) && !defined(VMS)
// for non-UNIX ":cd" means: print current directory
if (*new_dir == NUL)
// for non-UNIX ":cd" means: print current directory unless 'cdhome' is set
if (*new_dir == NUL && !p_cdh)
ex_pwd(NULL);
else
#endif

View File

@ -1094,6 +1094,7 @@ EXTERN int p_write; // 'write'
EXTERN int p_wa; // 'writeany'
EXTERN int p_wb; // 'writebackup'
EXTERN long p_wd; // 'writedelay'
EXTERN int p_cdh; // 'cdhome'
/*
* "indir" values for buffer-local options.

View File

@ -549,6 +549,10 @@ static struct vimoption options[] =
(char_u *)&p_cmp, PV_NONE,
{(char_u *)"internal,keepascii", (char_u *)0L}
SCTX_INIT},
{"cdhome", "cdh", P_BOOL|P_VI_DEF|P_VIM|P_SECURE,
(char_u *)&p_cdh, PV_NONE,
{(char_u *)FALSE, (char_u *)0L}
SCTX_INIT},
{"cdpath", "cd", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE|P_COMMA|P_NODUP,
#ifdef FEAT_SEARCHPATH
(char_u *)&p_cdpath, PV_NONE,

View File

@ -77,6 +77,9 @@ if has('reltime')
let s:start_time = reltime()
endif
" Always use forward slashes.
set shellslash
" Common with all tests on all systems.
source setup.vim
@ -128,9 +131,6 @@ if has('gui_running') && exists('did_install_default_menus')
source $VIMRUNTIME/menu.vim
endif
" Always use forward slashes.
set shellslash
let s:srcdir = expand('%:p:h:h')
if has('win32')

View File

@ -1199,4 +1199,25 @@ func Test_opt_scrolljump()
bw
endfunc
" Test for the 'cdhome' option
func Test_opt_cdhome()
if has('unix') || has('vms')
throw 'Skipped: only works on non-Unix'
endif
set cdhome&
call assert_equal(0, &cdhome)
set cdhome
" This paragraph is copied from Test_cd_no_arg().
let path = getcwd()
cd
call assert_equal($HOME, getcwd())
call assert_notequal(path, getcwd())
exe 'cd ' .. fnameescape(path)
call assert_equal(path, getcwd())
set cdhome&
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

@ -753,6 +753,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
3780,
/**/
3779,
/**/