diff --git a/src/env.cpp b/src/env.cpp index e53316c32..b368b534d 100644 --- a/src/env.cpp +++ b/src/env.cpp @@ -282,6 +282,9 @@ void env_init(const struct config_paths_t *paths, bool do_uvars) { vars.set_one(FISH_SYSCONFDIR_VAR, ENV_GLOBAL, paths->sysconf); vars.set_one(FISH_HELPDIR_VAR, ENV_GLOBAL, paths->doc); vars.set_one(FISH_BIN_DIR, ENV_GLOBAL, paths->bin); + wcstring scstr = paths->data; + scstr.append(L"/functions"); + vars.set_one(L"fish_function_path", ENV_GLOBAL, scstr); } // Some `su`s keep $USER when changing to root. diff --git a/src/fish.cpp b/src/fish.cpp index 52d843225..a28ef1a9d 100644 --- a/src/fish.cpp +++ b/src/fish.cpp @@ -474,7 +474,7 @@ int main(int argc, char **argv) { struct config_paths_t paths; // If we're not executing, there's no need to find the config. - if (!opts.no_exec && !opts.no_config) { + if (!opts.no_exec) { paths = determine_config_directory_paths(argv[0]); } if (!opts.no_exec) { diff --git a/tests/checks/no-config.fish b/tests/checks/no-config.fish new file mode 100644 index 000000000..622617d6c --- /dev/null +++ b/tests/checks/no-config.fish @@ -0,0 +1,16 @@ +#RUN: %fish --no-config %s + +functions | string match help +# CHECK: help + +# Universal variables are disabled, we fall back to setting them as global +set -U +# CHECK: +set -U foo bar +set -S foo +# CHECK: $foo: set in global scope, unexported, with 1 elements +# CHECK: $foo[1]: |bar| + +set -S fish_function_path fish_complete_path +# CHECK: $fish_function_path: set in global scope, unexported, with 1 elements +# CHECK: $fish_function_path[1]: |{{.*}}|