Files
fish-shell/share/functions/__fish_migrate.fish
Johannes Altmanninger 7640e95bd7 Create user config file/directories only on first startup again
Not being able to delete these for good (if unused) seems to be
a nuisance.  Let's go back to storing universal __fish_initialized
also on fresh installations, which I guess is a small price to to
avoid recreating these files.

Closes #12230
2025-12-29 16:19:47 +01:00

158 lines
6.6 KiB
Fish

# localization: skip(private)
function __fish_migrate
functions -e __fish_migrate
set -l migration_version 4300
# Maybe migrate.
if set -q __fish_initialized && test $__fish_initialized -ge $migration_version
return
end
# Create empty configuration directores if they do not already exist
test -e $__fish_config_dir/completions/ -a -e $__fish_config_dir/conf.d/ -a -e $__fish_config_dir/functions/ ||
mkdir -p $__fish_config_dir/{completions, conf.d, functions}
# Create config.fish with some boilerplate if it does not exist
test -e $__fish_config_dir/config.fish || echo "\
if status is-interactive
# Commands to run in interactive sessions can go here
end" >$__fish_config_dir/config.fish
set -l mark_migration_done set -U __fish_initialized $migration_version
if not set -q __fish_initialized
$mark_migration_done
return
end
set -l removing_uvars false
set -l msg
# Copy legacy uvars to globals.
set -l theme_uvars (__fish_theme_variables --universal)
if set -q theme_uvars[1]
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
end
set -l theme_data
for varname in $theme_uvars
set -a theme_data "$(string escape -- $varname $$varname | string join " ")"
end
__fish_theme_freeze __fish_migrate $theme_data
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
set -l relative_filename conf.d/fish_frozen_key_bindings.fish
set -l filename $__fish_config_dir/$relative_filename
__fish_backup_config_files $relative_filename
mkdir -p -- (path dirname -- $filename)
echo >$filename "\
# 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.
test "$fish_key_bindings" = fish_default_key_bindings
# Nor if the user has shadowed our previous uvar.
or set -qg fish_key_bindings
and echo "# "
)set --global fish_key_bindings $fish_key_bindings
# Prior to version 4.3, fish shipped an event handler that runs
# `set --universal fish_key_bindings fish_default_key_bindings`
# 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, erase the universal variable at every shell startup.
set --erase --universal fish_key_bindings"
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))
source $__fish_config_dir/$relative_filename
end
$mark_migration_done
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' &"
end
end
function __fish_config_theme_matches --no-scope-shadowing
set -l varname $argv[1]
set -l possible_values $argv[2..]
if not set -q possible_values[1]
set possible_values normal ""
end
set -a checked_varnames $varname
not set -q $varname
or contains -- "$$varname" $possible_values
end
function __fish_config_theme_uvars_subset_of_historical_default
set -l checked_varnames
set -l matches __fish_config_theme_matches
$matches fish_color_keyword "$fish_color_command"
and $matches fish_color_option "$fish_color_param"
and $matches fish_color_autosuggestion brblack
and $matches fish_color_cancel -r
and $matches fish_color_command normal blue
and $matches fish_color_comment red
and $matches fish_color_cwd green
and $matches fish_color_cwd_root red
and $matches fish_color_end green
and $matches fish_color_error brred
and $matches fish_color_escape brcyan
and $matches fish_color_history_current --bold
and $matches fish_color_host
and $matches fish_color_host_remote yellow
and $matches fish_color_normal
and $matches fish_color_operator brcyan
and $matches fish_color_param cyan
and $matches fish_color_quote yellow
and $matches fish_color_redirection "cyan --bold"
and $matches fish_color_search_match \
"bryellow --background=brblack" \
"bryellow --background=brblack --bold" \
"white --background=brblack" \
"white --background=brblack --bold"
and $matches fish_color_selection "white --background=brblack --bold"
and $matches fish_color_status red
and $matches fish_color_user brgreen
and $matches fish_color_valid_path --underline
and $matches fish_color_background
and $matches fish_pager_color_background
and $matches fish_pager_color_completion
and $matches fish_pager_color_description "yellow -i" "yellow --italics"
and $matches fish_pager_color_prefix "normal --bold --underline"
and $matches fish_pager_color_progress \
"brwhite --background=cyan" \
"brwhite --background=cyan --bold"
and $matches fish_pager_color_secondary_background
and $matches fish_pager_color_secondary_completion
and $matches fish_pager_color_secondary_description
and $matches fish_pager_color_secondary_prefix
and $matches fish_pager_color_selected_background -r
and $matches fish_pager_color_selected_completion
and $matches fish_pager_color_selected_description
and $matches fish_pager_color_selected_prefix
and for uvar in $argv
contains $uvar $checked_varnames
or test -z "$$uvar"
or return
end
end