From 5ddb1adac159113d9b7b20d1ace1999993bc7449 Mon Sep 17 00:00:00 2001 From: Fabian Homborg Date: Sun, 11 Apr 2021 11:52:30 +0200 Subject: [PATCH] Only use DATADIR in $fish_function_path if no-config is used This only uses the functions fish ships with, but still doesn't allow any *customization*, which is the point of no-config. This makes it a lot more usable, given that the actual normal prompt and things are there. This still doesn't set any colors, because we don't run __fish_config_interactive because we don't read config.fish (any config.fish), because that would run the snippets. --- src/env.cpp | 3 +++ src/fish.cpp | 2 +- tests/checks/no-config.fish | 16 ++++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 tests/checks/no-config.fish 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]: |{{.*}}|