forked from aniani/vim
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:
committed by
Bram Moolenaar
parent
205f29c3e9
commit
29f3a45915
@@ -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
|
||||
|
@@ -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.
|
||||
|
@@ -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,
|
||||
|
@@ -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')
|
||||
|
@@ -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
|
||||
|
@@ -753,6 +753,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
3780,
|
||||
/**/
|
||||
3779,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user