fix(options): make 'cdhome' take effect on any platform

Platform specific options are cringe and should either be fixed or
deleted.

In this case, the platform difference can trivially be implemented
using a conditional default value. If the user overrides the value,
then it is because the user wants that value, regardless of the
corporation who manufactured the OS that the user is running.

Possible alternative: delete the option by making it always on.
This commit is contained in:
bfredl
2025-08-01 13:00:27 +02:00
parent 78f4994627
commit 9910445125
4 changed files with 8 additions and 12 deletions

View File

@@ -1244,12 +1244,11 @@ A jump table for the options with a short description can be found at |Q_op|.
This probably only matters for Turkish.
*'cdhome'* *'cdh'* *'nocdhome'* *'nocdh'*
'cdhome' 'cdh' boolean (default off)
'cdhome' 'cdh' boolean (default on on Unix, off on Windows)
global
When on, |:cd|, |:tcd| and |:lcd| without an argument changes the
current working directory to the |$HOME| directory like in Unix.
When off, those commands just print the current directory name.
On Unix this option has no effect.
This option cannot be set from a |modeline| or in the |sandbox|, for
security reasons.

View File

@@ -700,12 +700,11 @@ vim.go.cmp = vim.go.casemap
--- When on, `:cd`, `:tcd` and `:lcd` without an argument changes the
--- current working directory to the `$HOME` directory like in Unix.
--- When off, those commands just print the current directory name.
--- On Unix this option has no effect.
--- This option cannot be set from a `modeline` or in the `sandbox`, for
--- security reasons.
---
--- @type boolean
vim.o.cdhome = false
vim.o.cdhome = true
vim.o.cdh = vim.o.cdhome
vim.go.cdhome = vim.o.cdhome
vim.go.cdh = vim.go.cdhome

View File

@@ -6105,11 +6105,7 @@ bool changedir_func(char *new_dir, CdScope scope)
// For UNIX ":cd" means: go to home directory.
// On other systems too if 'cdhome' is set.
#if defined(UNIX)
if (*new_dir == NUL) {
#else
if (*new_dir == NUL && p_cdh) {
#endif
// Use NameBuff for home directory name.
expand_env("$HOME", NameBuff, MAXPATHL);
new_dir = NameBuff;
@@ -6148,13 +6144,11 @@ bool changedir_func(char *new_dir, CdScope scope)
void ex_cd(exarg_T *eap)
{
char *new_dir = eap->arg;
#if !defined(UNIX)
// for non-UNIX ":cd" means: print current directory unless 'cdhome' is set
if (*new_dir == NUL && !p_cdh) {
ex_pwd(NULL);
return;
}
#endif
CdScope scope = kCdScopeGlobal;
switch (eap->cmdidx) {

View File

@@ -1005,12 +1005,16 @@ local options = {
},
{
abbreviation = 'cdh',
defaults = false,
defaults = {
condition = 'MSWIN',
if_false = true,
if_true = false,
doc = [[on on Unix, off on Windows]],
},
desc = [=[
When on, |:cd|, |:tcd| and |:lcd| without an argument changes the
current working directory to the |$HOME| directory like in Unix.
When off, those commands just print the current directory name.
On Unix this option has no effect.
This option cannot be set from a |modeline| or in the |sandbox|, for
security reasons.
]=],