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.
|
present in 'cpoptions' and "!" is not used in the command.
|
||||||
|
|
||||||
*:cd* *E747* *E472*
|
*:cd* *E747* *E472*
|
||||||
:cd[!] On non-Unix systems: Print the current directory
|
:cd[!] On non-Unix systems when 'cdhome' is off: Print the
|
||||||
name. On Unix systems: Change the current directory
|
current directory name.
|
||||||
to the home directory. Use |:pwd| to print the
|
Otherwise: Change the current directory to the home
|
||||||
current directory on all systems.
|
directory. Clear any window-local directory.
|
||||||
On Unix systems: clear any window-local directory.
|
Use |:pwd| to print the current directory on all
|
||||||
|
systems.
|
||||||
|
|
||||||
:cd[!] {path} Change the current directory to {path}.
|
:cd[!] {path} Change the current directory to {path}.
|
||||||
If {path} is relative, it is searched for in the
|
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
|
'buflisted' 'bl' whether the buffer shows up in the buffer list
|
||||||
'buftype' 'bt' special type of buffer
|
'buftype' 'bt' special type of buffer
|
||||||
'casemap' 'cmp' specifies how case of letters is changed
|
'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"
|
'cdpath' 'cd' list of directories searched with ":cd"
|
||||||
'cedit' key used to open the command-line window
|
'cedit' key used to open the command-line window
|
||||||
'charconvert' 'ccv' expression for character encoding conversion
|
'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 <SID>AddOption("path", gettext("list of directory names used for file searching"))
|
||||||
call append("$", "\t" .. s:global_or_local)
|
call append("$", "\t" .. s:global_or_local)
|
||||||
call <SID>OptionG("pa", &pa)
|
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>AddOption("cdpath", gettext("list of directory names used for :cd"))
|
||||||
call <SID>OptionG("cd", &cd)
|
call <SID>OptionG("cd", &cd)
|
||||||
if exists("+autochdir")
|
if exists("+autochdir")
|
||||||
|
@ -7402,9 +7402,13 @@ changedir_func(
|
|||||||
else
|
else
|
||||||
prev_dir = pdir;
|
prev_dir = pdir;
|
||||||
|
|
||||||
|
// For UNIX ":cd" means: go to home directory.
|
||||||
|
// On other systems too if 'cdhome' is set.
|
||||||
#if defined(UNIX) || defined(VMS)
|
#if defined(UNIX) || defined(VMS)
|
||||||
// for UNIX ":cd" means: go to home directory
|
|
||||||
if (*new_dir == NUL)
|
if (*new_dir == NUL)
|
||||||
|
#else
|
||||||
|
if (*new_dir == NUL && p_cdh)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
// use NameBuff for home directory name
|
// use NameBuff for home directory name
|
||||||
# ifdef VMS
|
# ifdef VMS
|
||||||
@ -7420,7 +7424,6 @@ changedir_func(
|
|||||||
# endif
|
# endif
|
||||||
new_dir = NameBuff;
|
new_dir = NameBuff;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
dir_differs = new_dir == NULL || pdir == NULL
|
dir_differs = new_dir == NULL || pdir == NULL
|
||||||
|| pathcmp((char *)pdir, (char *)new_dir, -1) != 0;
|
|| pathcmp((char *)pdir, (char *)new_dir, -1) != 0;
|
||||||
if (new_dir == NULL || (dir_differs && vim_chdir(new_dir)))
|
if (new_dir == NULL || (dir_differs && vim_chdir(new_dir)))
|
||||||
@ -7459,8 +7462,8 @@ ex_cd(exarg_T *eap)
|
|||||||
|
|
||||||
new_dir = eap->arg;
|
new_dir = eap->arg;
|
||||||
#if !defined(UNIX) && !defined(VMS)
|
#if !defined(UNIX) && !defined(VMS)
|
||||||
// for non-UNIX ":cd" means: print current directory
|
// for non-UNIX ":cd" means: print current directory unless 'cdhome' is set
|
||||||
if (*new_dir == NUL)
|
if (*new_dir == NUL && !p_cdh)
|
||||||
ex_pwd(NULL);
|
ex_pwd(NULL);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
@ -1094,6 +1094,7 @@ EXTERN int p_write; // 'write'
|
|||||||
EXTERN int p_wa; // 'writeany'
|
EXTERN int p_wa; // 'writeany'
|
||||||
EXTERN int p_wb; // 'writebackup'
|
EXTERN int p_wb; // 'writebackup'
|
||||||
EXTERN long p_wd; // 'writedelay'
|
EXTERN long p_wd; // 'writedelay'
|
||||||
|
EXTERN int p_cdh; // 'cdhome'
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* "indir" values for buffer-local options.
|
* "indir" values for buffer-local options.
|
||||||
|
@ -549,6 +549,10 @@ static struct vimoption options[] =
|
|||||||
(char_u *)&p_cmp, PV_NONE,
|
(char_u *)&p_cmp, PV_NONE,
|
||||||
{(char_u *)"internal,keepascii", (char_u *)0L}
|
{(char_u *)"internal,keepascii", (char_u *)0L}
|
||||||
SCTX_INIT},
|
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,
|
{"cdpath", "cd", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE|P_COMMA|P_NODUP,
|
||||||
#ifdef FEAT_SEARCHPATH
|
#ifdef FEAT_SEARCHPATH
|
||||||
(char_u *)&p_cdpath, PV_NONE,
|
(char_u *)&p_cdpath, PV_NONE,
|
||||||
|
@ -77,6 +77,9 @@ if has('reltime')
|
|||||||
let s:start_time = reltime()
|
let s:start_time = reltime()
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" Always use forward slashes.
|
||||||
|
set shellslash
|
||||||
|
|
||||||
" Common with all tests on all systems.
|
" Common with all tests on all systems.
|
||||||
source setup.vim
|
source setup.vim
|
||||||
|
|
||||||
@ -128,9 +131,6 @@ if has('gui_running') && exists('did_install_default_menus')
|
|||||||
source $VIMRUNTIME/menu.vim
|
source $VIMRUNTIME/menu.vim
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Always use forward slashes.
|
|
||||||
set shellslash
|
|
||||||
|
|
||||||
let s:srcdir = expand('%:p:h:h')
|
let s:srcdir = expand('%:p:h:h')
|
||||||
|
|
||||||
if has('win32')
|
if has('win32')
|
||||||
|
@ -1199,4 +1199,25 @@ func Test_opt_scrolljump()
|
|||||||
bw
|
bw
|
||||||
endfunc
|
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
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@ -753,6 +753,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
3780,
|
||||||
/**/
|
/**/
|
||||||
3779,
|
3779,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user