Files
fish-shell/tests/checks/__fish_migrate.fish
Johannes Altmanninger e2b18fc5b6 config.fish: don't load default theme in noninteractive shells
We define colors in noninteractive shells for historical reasons
(because colors used to be universal variables).

The other potential reason is to get regular syntax highlighting for
commands like:

	fish -c 'read --shell'

but if anyone actually uses that they can probably load a theme
explicitly.

Stop defining colors in noninteractive shells.  It's usually not
a good idea to make them behave differently from interactive ones,
but color seems only relevant for interactive shells?

Let's see if anyone complains.. we may end up reverting this if people
want to use noninteractive fish to query colors..  but I'm not sure
why that would be necessary.

Closes #12673
2026-04-29 01:48:47 +08:00

113 lines
3.9 KiB
Fish

# RUN: fish=%fish %fish %s
function provoke-migration
set -U __fish_initialized 3800
rm -f \
$__fish_config_dir/conf.d/fish_frozen_theme.fish \
$__fish_config_dir/conf.d/fish_frozen_key_bindings.fish
end
function fake-old-uvars
for varname in (__fish_theme_variables --universal)
set $varname (string match -rv -- '--theme=.*' $$varname)
end
end
set -U
echo no default universal variables
# CHECK: no default universal variables
# Existing universal variables are migrated as-is.
{
echo yes | fish_config theme save default-rgb --color-theme=light
fake-old-uvars
set -U fish_key_bindings fish_vi_key_bindings
set -U | head -2
# CHECK: fish_color_autosuggestion 7f7f7f
# CHECK: fish_color_cancel 'ffffff' '--background=000000'
not path is $__fish_config_dir/conf.d/fish_frozen_theme.fish
and echo ok
# CHECK: ok
provoke-migration
$fish -c __fish_migrate
# CHECK: {{\x1b\[1m}}fish:{{\x1b\[m}} {{upgraded.*}}
# CHECK: {{.*Color.*no.longer.*universal.*}}
# CHECK: Migrated {{.*}} {{\S*}}/xdg_config_home/fish/conf.d/fish_frozen_theme.fish{{\x1b\[m}}
# CHECK: {{.*restart.*}}
# CHECK: {{.*fish_key_bindings.*no.longer.*universal.*}}
# CHECK: Migrated {{.*}} {{\S*}}/xdg_config_home/fish/conf.d/fish_frozen_key_bindings.fish{{\x1b\[m}}
# CHECK: {{.*help relnotes.*}}
grep -v '^#' $__fish_config_dir/conf.d/fish_frozen_theme.fish | grep . | head -3
# CHECK: set --global fish_color_autosuggestion 7f7f7f
# CHECK: set --global fish_color_cancel ffffff --background=000000
# CHECK: set --global fish_color_command 0000ee
grep -v '^#' $__fish_config_dir/conf.d/fish_frozen_key_bindings.fish
# CHECK: set --global fish_key_bindings fish_vi_key_bindings
# CHECK: set --erase --universal fish_key_bindings
# But the migration is only done once, in case the user really wants these as universals.
set -U fish_color_autosuggestion 8e8e8e
$fish -c '
__fish_migrate
set -eg fish_color_autosuggestion
echo $fish_color_autosuggestion
# CHECK: 8e8e8e
'
set -Ue fish_color_autosuggestion
}
# If existing universal colors match old defaults exactly (common case), don't migrate but
# delete them.
{
echo yes | fish_config theme save default
fake-old-uvars
provoke-migration
$fish -c __fish_migrate
# CHECK: {{\x1b\[1m}}fish:{{\x1b\[m}} {{upgraded.*}}
# CHECK: {{.*Color.*no.longer.*universal.*}}
# CHECK: {{.*restart.*}}
# CHECK: {{.*help relnotes.*}}
not path is $__fish_config_dir/conf.d/fish_frozen_theme.fish
and echo ok
# CHECK: ok
set -U
# CHECK: __fish_initialized 4300
}
# Labeled color variables may be updated by fish.
{
$fish -c '
fish_config theme choose default
set -g fish_color_autosuggestion red
set -g fish_color_command green --theme=default
__fish_migrate
for cmd in "" "__fish_color_theme=unknown __fish_apply_theme"
eval $cmd
echo fish_color_autosuggestion $fish_color_autosuggestion
echo fish_color_command $fish_color_command
end
# CHECK: fish_color_autosuggestion red
# CHECK: fish_color_command green --theme=default
# CHECK: fish_color_autosuggestion red
# CHECK: fish_color_command --reset --theme=default
'
}
# If existing universal key bindings match old defaults exactly (common case), don't migrate
# but delete them).
{
set -U fish_key_bindings fish_vi_key_bindings
provoke-migration
$fish -c __fish_migrate
# CHECK: {{\x1b\[1m}}fish:{{\x1b\[m}} {{upgraded.*}}
# CHECK: {{.*fish_key_bindings.*no.longer.*universal.*}}
# CHECK: Migrated {{.*}} {{\S*}}/xdg_config_home/fish/conf.d/fish_frozen_key_bindings.fish{{\x1b\[m}}
# CHECK: {{.*help relnotes.*}}
path is $__fish_config_dir/conf.d/fish_frozen_key_bindings.fish
and echo ok
# CHECK: ok
set -U
# CHECK: __fish_initialized 4300
}