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:
parent
205f29c3e9
commit
29f3a45915
@ -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
|
||||
|
@ -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
|
||||
|
@ -260,6 +260,10 @@ call <SID>OptionG("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")
|
||||
|
@ -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,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user