uvar migration: tell users to restart running sessions

Users who run the default theme are silently migrated to global
variables. Universal color variables are deleted, leaving existing
sessions uncolored. Tell the user to restart them, and make some
other improvements; now it looks like:

	fish: upgraded to version 4.3:
	* Color variables are no longer set in universal scope.
	  To restore syntax highlighting in other fish sessions, please restart them.
	* The fish_key_bindings variable is no longer set in universal scope by default.
	  Migrated it to a global variable set in  ~/.config/fish/conf.d/fish_frozen_key_bindings.fish

Same for users who do not use the default theme (who already got a
message before this change). For them, the first bullet point looks
like this:

	[...]
	* Color variables are no longer set in universal scope by default.
	  Migrated them to global variables set in ~/.config/fish/conf.d/fish_frozen_theme.fish
	  To restore syntax highlighting in other fish sessions, please restart them.
	[...]

Closes #12161
This commit is contained in:
Johannes Altmanninger
2025-12-25 08:38:13 +01:00
parent b2f4befc7e
commit 74af4f10de
3 changed files with 39 additions and 20 deletions

View File

@@ -11,16 +11,18 @@ function __fish_theme_freeze
printf >$__fish_config_dir/$relative_path %s\n \
$(test $data_source = __fish_theme_migrate &&
echo '# This file was created by fish to migrate the default universal variables.') \
echo "\
# This file was created by fish when upgrading to version 4.3, to migrate
# theme variables from universal to global scope.") \
"\
# Don't edit this, as it will be written by the web-config tool (`fish_config`).
# Don't edit this file, as it will be written by the web-config tool (`fish_config`).
# To customize your theme, delete this file and see
# help $help_section
# or
# man fish-interactive | less +/^SYNTAX.HIGHLIGHTING
# for appropriate commands to add to ~/.config/fish/config.fish instead." \
$(test $data_source = __fish_theme_migrate &&
echo '# See also the release notes for fish 4.3.0 (`help relnotes`).') \
echo '# See also the release notes for fish 4.3.0 (run `help relnotes`).') \
"" \
'set --global '$theme_data
end

View File

@@ -8,9 +8,11 @@ function __fish_theme_migrate
end
set -l removing_uvars false
set -l msg
# Copy legacy uvars to globals.
if set -l theme_uvars (__fish_theme_variables --universal)
set removing_uvars true
set -l msg_suffix .
if not __fish_config_theme_uvars_subset_of_historical_default $theme_uvars
for varname in $theme_uvars
set -g $varname $$varname
@@ -20,11 +22,12 @@ function __fish_theme_migrate
set -a theme_data "$(string escape -- $varname $$varname | string join " ")"
end
__fish_theme_freeze __fish_theme_migrate $theme_data
echo -s (set_color --bold) 'fish:' (set_color normal)' color variables are no longer set in universal scope by default.'
echo "Migrated them to global variables set in $(set_color --underline)$(
set msg_suffix " by default."\n" Migrated them to global variables set in $(set_color --underline)$(
__fish_unexpand_tilde $__fish_config_dir/conf.d/fish_frozen_theme.fish
)$(set_color normal)"
end
set -a msg "* Color variables are no longer set in universal scope$msg_suffix"
set -a msg ' To restore syntax highlighting in other fish sessions, please restart them.'
end
if set -Uq fish_key_bindings
set removing_uvars true
@@ -32,10 +35,10 @@ function __fish_theme_migrate
set -l filename $__fish_config_dir/$relative_filename
__fish_backup_config_files $relative_filename
echo >$filename "\
# This file was created by fish to migrate the 'fish_key_bindings' variable
# from its old default scope (universal) to its new default scope (global).
# It is recommended you delete this file and configure key bindings however
# you prefer.
# This file was created by fish when upgrading to version 4.3, to migrate
# the 'fish_key_bindings' variable from its old default scope (universal)
# to its new default scope (global). We recommend you delete this file
# and configure key bindings in ~/.config/fish/config.fish if needed.
$(
# No need to freeze the default value.
@@ -50,16 +53,19 @@ $(
# whenever the fish_key_bindings variable is erased.
# This means that as long as any fish < 4.3 is still running on this system,
# we cannot complete the migration.
# As a workaround, we erase the universal variable at every shell startup.
# As a workaround, erase the universal variable at every shell startup.
set --erase --universal fish_key_bindings"
echo -s (set_color --bold) 'fish:' (set_color normal) ' the fish_key_bindings variable is no longer set in universal scope by default.'
echo -s "Migrated it to a global variable set in " \
set -a msg '* The fish_key_bindings variable is no longer set in universal scope by default.'
set -a msg (echo -s " Migrated it to a global variable set in " \
"$(set_color --underline)$(__fish_unexpand_tilde $filename)" \
(set_color normal)
(set_color normal))
source $__fish_config_dir/$relative_filename
end
set -U __fish_initialized 4300
if $removing_uvars
echo -s (set_color --bold) 'fish:' (set_color normal) " upgraded to version 4.3:"
string join \n -- $msg
echo 'See also the release notes (type `help relnotes`).'
set -Ue fish_key_bindings $theme_uvars
set -l sh (__fish_posix_shell)
eval "$sh -c 'sleep 7 # Please read above notice about universal variables' &"

View File

@@ -31,10 +31,13 @@ echo no default universal variables
provoke-migration
$fish -c __fish_theme_migrate
# CHECK: {{\x1b\[1m}}fish:{{\x1b\[m}} {{.*}}
# 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: {{\x1b\[1m}}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
@@ -54,13 +57,17 @@ echo no default universal variables
set -Ue fish_color_autosuggestion
}
# If existing universal variables match old defaults exactly (common case), pretend they don't
# exist at all (silently delete them).
# If existing universal colors match old defaults exactly (common case), don't migrate but
# delete them.
{
echo yes | fish_config theme save default --color-theme=unknown
fake-old-uvars
provoke-migration
$fish -c __fish_theme_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
@@ -86,14 +93,18 @@ echo no default universal variables
'
}
# If existing universal variables match old defaults exactly (common case),
# don't migrate them and silently delete them).
# 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_theme_migrate
# CHECK: {{\x1b\[1m}}fish:{{\x1b\[m}} {{.*}}.
# CHECK: {{\x1b\[1m}}fish:{{\x1b\[m}} {{upgraded.*}}
# CHECK: {{.*Color.*no.longer.*universal.*}}
# 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.*}}
path is $__fish_config_dir/conf.d/fish_frozen_key_bindings.fish
and echo ok
# CHECK: ok