Add the established c_head/c_cmd/c_flag/c_dim/c_arg color scheme to --help (or usage-on-error) output in play-media and 13 other functions that lacked it or used an ad hoc scheme: bkg, detach, replay, p, y, spark, wake-lock, open-url, repo-open, dng2avif, dockup, fish-deps (__fish_deps_help), and scrub. Also tweak the standard itself: - c_cmd now uses plain `set_color --bold` instead of `--bold white`, so the command name adapts to the terminal's foreground instead of forcing white text that washes out on light-background themes. Applied across all functions already using the pattern. - jobrunner's reset variable renamed from c_rst to c_reset to match the naming used everywhere else.
78 lines
3.0 KiB
Fish
78 lines
3.0 KiB
Fish
# Copyright (C) 2026 Rootiest
|
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
# CATEGORY
|
|
# 14-miscellaneous
|
|
#
|
|
# SYNOPSIS
|
|
# replay <commands>
|
|
#
|
|
# DESCRIPTION
|
|
# Runs the given commands in Bash and replays any resulting environment
|
|
# variable, alias, and directory changes back into the current Fish
|
|
# session. Useful for sourcing Bash-only scripts.
|
|
#
|
|
# ARGUMENTS
|
|
# commands Bash command string to execute and replay
|
|
#
|
|
# EXIT STATUS
|
|
# 0 Commands ran successfully and changes were replayed
|
|
# 1 Bash command exited with a non-zero status
|
|
#
|
|
# EXAMPLE
|
|
# replay "source ~/.bashrc"
|
|
# replay "export FOO=bar"
|
|
function replay --description 'Run Bash commands replaying changes in Fish'
|
|
switch "$argv"
|
|
case -v --version
|
|
echo "replay, version 1.2.1"
|
|
case "" -h --help
|
|
set -l c_head (set_color --bold cyan)
|
|
set -l c_cmd (set_color --bold)
|
|
set -l c_flag (set_color yellow)
|
|
set -l c_arg (set_color cyan)
|
|
set -l c_reset (set_color normal)
|
|
echo "$c_head""Usage:$c_reset $c_cmd""replay$c_reset $c_arg""<commands>$c_reset Run Bash commands replaying changes in Fish"
|
|
echo "$c_head""Options:$c_reset"
|
|
echo " $c_flag-v$c_reset or $c_flag--version$c_reset Print version"
|
|
echo " $c_flag-h$c_reset or $c_flag--help$c_reset Print this help message"
|
|
case \*
|
|
set --local env
|
|
set --local sep @$fish_pid(random)(command date +%s)
|
|
set --local argv $argv[1] (string escape -- $argv[2..-1])
|
|
set --local out (command bash -c "
|
|
$argv
|
|
status=\$?
|
|
[ \$status -gt 0 ] && exit \$status
|
|
|
|
command compgen -e | command awk -v sep=$sep '{
|
|
gsub(/\n/, \"\\\n\", ENVIRON[\$0])
|
|
print \$0 sep ENVIRON[\$0]
|
|
}' && alias
|
|
") || return
|
|
|
|
string replace --all -- \\n \n (
|
|
for line in $out
|
|
if string split -- $sep $line | read --local --line name value
|
|
set --append env $name
|
|
|
|
contains -- $name SHLVL PS1 BASH_FUNC || test "$$name" = "$value" && continue
|
|
|
|
if test "$name" = PATH
|
|
echo set PATH (string split -- : $value | string replace --regex --all -- '(^.*$)' '"$1"')
|
|
else if test "$name" = PWD
|
|
echo builtin cd "\"$value\""
|
|
else
|
|
echo "set --global --export $name "(string escape -- $value)
|
|
end
|
|
else
|
|
set --query env[1] && string match --entire --regex -- "^alias" $line || echo "echo \"$line\""
|
|
end
|
|
end | string replace --all -- \$ \\\$
|
|
for name in (set --export --names)
|
|
contains -- $name $env || echo "set --erase $name"
|
|
end
|
|
) | source
|
|
end
|
|
end
|