__fish_palette's c_cmd/c_flag/c_arg/c_dim now read fish's own highlighter variables (fish_color_command/option/param/autosuggestion) when set, and c_head reads the pager's fish_pager_color_prefix, so --help text matches whatever the user's actual theme renders at the prompt instead of a fixed guess at it. Each role keeps its previous static value as a fallback (e.g. a --no-config script, or the theme variable being unset or empty). Routes __fish_help_header's title/section colors and config-help's, gi's, and git-clean's own hand-rolled --help blocks through the palette instead of their hardcoded set_color calls, which fixes the --help-vs-actual-prompt color mismatch across most of the config's functions in one place (__fish_help_header backs the majority of user-facing --help output). Also fixes role mismatches found along the way: several already-palette functions (dockup, fish-deps, pkg, play-media, dng2avif) were coloring their <placeholder>/[bracket] argument text with c_dim instead of c_arg, and scrub's "Aggressive Targets:" heading was still a hardcoded set_color call sitting next to an otherwise-converted help block.
83 lines
3.3 KiB
Fish
83 lines
3.3 KiB
Fish
# Copyright (C) 2026 Rootiest
|
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
# SYNOPSIS
|
|
# __fish_palette
|
|
#
|
|
# DESCRIPTION
|
|
# Defines the shared terminal-output colour roles used by the
|
|
# user-facing functions in this configuration. Declared
|
|
# --no-scope-shadowing and using a bare `set`, so the variables are
|
|
# created in the CALLER's scope -- a consumer just calls it and then
|
|
# interpolates $c_head, $c_err and friends exactly as it did when the
|
|
# declarations were inline.
|
|
#
|
|
# Call it where the local declarations used to sit, once per contiguous
|
|
# block that needs the palette. set_color runs at call time, so the
|
|
# values track $TERM exactly as inline declarations did. (Measured:
|
|
# set_color output is identical across every TERM tested except
|
|
# TERM=dumb, which yields empty strings, and is unaffected by whether
|
|
# stdout is a tty or a pipe.)
|
|
#
|
|
# A role is a semantic slot, not a colour. c_flag and c_warn can both be
|
|
# yellow but stay separate, as do c_ok and c_accent -- merging either
|
|
# pair would foreclose ever restyling one without the other. c_accent is
|
|
# the command name in logs and smart_exit, which style it green where
|
|
# the rest of the config styles it bold.
|
|
#
|
|
# c_cmd, c_flag, c_arg, and c_dim are drawn from fish's own highlighter
|
|
# variables (fish_color_command/option/param/autosuggestion) when set,
|
|
# and c_head from the pager's fish_pager_color_prefix -- the same colour
|
|
# a real command, flag, argument, or pager heading gets at the prompt.
|
|
# Each falls back to its previous static default when the theme
|
|
# variable is unset or empty (e.g. a --no-config script).
|
|
#
|
|
# ARGUMENTS
|
|
# none
|
|
#
|
|
# EXIT STATUS
|
|
# 0 always
|
|
#
|
|
# EXAMPLE
|
|
# function mytool
|
|
# __fish_palette
|
|
# echo "$c_head""Usage:$c_reset $c_cmd""mytool$c_reset"
|
|
# end
|
|
#
|
|
# NOTES
|
|
# Calling this at top level (outside any function) creates GLOBAL
|
|
# variables. Every consumer calls it from inside a function, where the
|
|
# variables stay function-local and do not leak.
|
|
#
|
|
# functions/fish_prompt.fish deliberately does NOT use this palette. Its
|
|
# c_* values are Catppuccin hex strings passed as ARGUMENTS to set_color
|
|
# (`set_color --bold $c_green`), not captured escape sequences -- colour
|
|
# inputs rather than rendered output, a different concern.
|
|
|
|
function __fish_palette --no-scope-shadowing --description 'Define the shared output colour palette in the caller scope'
|
|
set c_reset (set_color normal)
|
|
set c_cmd (set_color brblue)
|
|
set c_flag (set_color brgreen)
|
|
set c_arg (set_color cyan)
|
|
set c_dim (set_color brblack)
|
|
set c_head (set_color --bold cyan)
|
|
set c_warn (set_color yellow)
|
|
set c_err (set_color red)
|
|
set c_ok (set_color green)
|
|
set c_accent (set_color green)
|
|
set c_sel (set_color --bold magenta)
|
|
set c_hi (set_color --bold white)
|
|
|
|
# Theme overrides: same roles fish's own highlighter/pager use, so
|
|
# --help text matches the prompt instead of a fixed guess at it.
|
|
set -l roles command option param autosuggestion
|
|
set -l vars c_cmd c_flag c_arg c_dim
|
|
for i in (seq (count $roles))
|
|
set -l themevar fish_color_$roles[$i]
|
|
set -q $themevar; and test (count $$themevar) -gt 0
|
|
and set $vars[$i] (set_color $$themevar)
|
|
end
|
|
set -q fish_pager_color_prefix; and test (count $fish_pager_color_prefix) -gt 0
|
|
and set c_head (set_color --bold $fish_pager_color_prefix)
|
|
end
|