webconfig themes: shell-friendly filenames

For historical reasons (namely the webconfig origin), our theme
names contain spaces and uppercase letters which can be inconvenient
when using the "fish_config theme choose" shell command.  Use more
conventional file names.

Web config still uses the pretty names, using the ubiquitous "# name:"
property.
This commit is contained in:
Johannes Altmanninger
2025-11-25 12:52:39 +01:00
parent 51e551fe5f
commit ae22cc93db
30 changed files with 53 additions and 37 deletions

View File

@@ -76,7 +76,7 @@ Fish also provides pre-made color themes you can pick with :doc:`fish_config <cm
For example, to disable nearly all coloring::
fish_config theme choose None
fish_config theme choose none
Or, to see all themes, right in your terminal::

View File

@@ -113,7 +113,7 @@ These colors, and many more, can be changed by running ``fish_config``, or by mo
For example, if you want to disable (almost) all coloring::
fish_config theme choose None
fish_config theme choose none
This picks the "none" theme. To see all themes::

View File

@@ -25,7 +25,7 @@ end" >$__fish_config_dir/config.fish
# If we are starting up for the first time, set various defaults.
if test $__fish_initialized -lt 3400
echo yes | fish_config theme save "fish default"
echo yes | fish_config theme save fish-default
set -Ue fish_color_keyword fish_color_option
end
if test $__fish_initialized -lt 3800 && test "$fish_color_search_match[1]" = bryellow

View File

@@ -248,15 +248,11 @@ function fish_config --description "Launch fish's web based configuration"
# If we are choosing a theme or saving from a named theme, load the theme now.
# Otherwise, we'll persist the currently loaded/themed variables (in case of `theme save`).
set -l theme_path (__fish_config_list_themes $argv[1])[1]
if not set -q theme_path[1]
echo >&2 "No such theme: $argv[1]"
echo >&2 Searched (__fish_config_theme_dir) "and `status list-files tools/web_config/themes`"
return 1
end
set -l defined_colors
__fish_data_with_file $theme_path cat | while read -lat toks
begin
__fish_config_cat_theme $argv[1]
or return
end | while read -lat toks
# The whitelist allows only color variables.
# Not the specific list, but something named *like* a color variable.
# This also takes care of empty lines and comment lines.
@@ -306,6 +302,26 @@ function __fish_config_list_prompts
string join \n -- $prompt_paths
end
function __fish_config_cat_theme -a theme_name
switch $theme_name
case 'fish default'
set theme_name fish-default
case 'ayu Dark' 'ayu Light' 'ayu Mirage' 'Base16 Default Dark' \
'Base16 Default Light' 'Base16 Eighties' 'Bay Cruise' Dracula \
Fairground 'Just a Touch' Lava 'Mono Lace' 'Mono Smoke' None Nord \
'Old School' Seaweed 'Snow Day' 'Solarized Dark' 'Solarized Light' \
'Tomorrow Night Bright' 'Tomorrow Night' Tomorrow
set theme_name (string lower (string replace -a " " "-" $theme_name))
end
set -l theme_path (__fish_config_list_themes $theme_name)[1]
if not set -q theme_path[1]
echo >&2 "No such theme: $argv[1]"
echo >&2 Searched (__fish_config_theme_dir) "and `status list-files tools/web_config/themes`"
return 1
end
__fish_data_with_file $theme_path cat
end
function __fish_config_list_themes
set -lx dir (__fish_config_theme_dir)
__fish_config_matching tools/web_config/themes .theme $argv

View File

@@ -1123,8 +1123,8 @@ class FishConfigHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
output = []
output += [self.do_get_colors() | {"theme": "Current"}]
output += [
self.do_get_colors("themes/fish default.theme")
| {"theme": "fish default"}
self.do_get_colors("themes/fish-default.theme")
| {"theme": "fish-default"}
]
confighome = (

View File

@@ -121,46 +121,46 @@ diff \
(fish_config theme | psub -s config-theme)
fish_config theme list | string match -r \
'^(?:ayu Dark|Base16 Default Light|coolbeans|fish default|None|'\
'Tomorrow Night Bright|Tomorrow Night|Tomorrow)$'
# CHECK: ayu Dark
# CHECK: Base16 Default Light
'^(?:ayu-dark|base16-default-light|coolbeans|fish-default|none|'\
'tomorrow-night-bright|tomorrow-night|tomorrow)$'
# CHECK: ayu-dark
# CHECK: base16-default-light
# CHECK: coolbeans
# CHECK: fish default
# CHECK: None
# CHECK: Tomorrow Night Bright
# CHECK: Tomorrow Night
# CHECK: Tomorrow
# CHECK: fish-default
# CHECK: none
# CHECK: tomorrow-night-bright
# CHECK: tomorrow-night
# CHECK: tomorrow
fish_config theme show "fish default"
fish_config theme show "fish-default"
# CHECK: {{\x1b\[m}}{{\x1b\[4m}}Current{{\x1b\[m}}
# CHECK: /bright/vixens{{\x1b\[m}} jump{{\x1b\[m}} |{{\x1b\[m}} "fowl"{{\x1b\[m}} > quack{{\x1b\[m}} &{{\x1b\[m}} # This is a comment
# CHECK: {{\x1b\[m}}echo{{\x1b\[m}} 'Errors are the portal to discovery
# CHECK: {{\x1b\[m}}Th{{\x1b\[m}}is an autosuggestion
# CHECK: {{\x1b\[m}}{{\x1b\[4m}}fish default{{\x1b\[m}}
# CHECK: {{\x1b\[m}}{{\x1b\[4m}}fish-default{{\x1b\[m}}
# CHECK: {{\x1b\[m}}/bright/vixens{{\x1b\[m}} {{\x1b\[36m}}jump{{\x1b\[m}} {{\x1b\[36m}}{{\x1b\[1m}}|{{\x1b\[m}} {{\x1b\[33m}}"fowl"{{\x1b\[m}} {{\x1b\[36m}}{{\x1b\[1m}}> quack{{\x1b\[m}} {{\x1b\[32m}}&{{\x1b\[m}}{{\x1b\[31m}} # This is a comment
# CHECK: {{\x1b\[m}}{{\x1b\[m}}echo{{\x1b\[m}} {{\x1b\[91m}}'{{\x1b\[33m}}Errors are the portal to discovery
# CHECK: {{\x1b\[m}}{{\x1b\[m}}Th{{\x1b\[m}}{{\x1b\[90m}}is an autosuggestion
fish_config theme show ayu\ Dark ayu\ Light | string match -r '^.*ayu.*'
# CHECK: {{\x1b\[m}}{{\x1b\[4m}}ayu Dark{{\x1b\[m}}
# CHECK: {{\x1b\[m}}{{\x1b\[4m}}ayu Light{{\x1b\[m}}
fish_config theme show ayu-dark ayu-light | string match -r '^.*ayu.*'
# CHECK: {{\x1b\[m}}{{\x1b\[4m}}ayu-dark{{\x1b\[m}}
# CHECK: {{\x1b\[m}}{{\x1b\[4m}}ayu-light{{\x1b\[m}}
mkdir $__fish_config_dir/themes
touch $__fish_config_dir/themes/custom-from-userconf.theme
fish_config theme show | grep -E 'fish default|Default Dark|custom-from-userconf'
fish_config theme show | grep -E 'fish-default|default-dark|custom-from-userconf'
# CHECK: {{.*}}custom-from-userconf{{\x1b\[m}}
# CHECK: {{.*}}Base16 Default Dark{{\x1b\[m}}
# CHECK: {{.*}}fish default{{\x1b\[m}}
# CHECK: {{.*}}base16-default-dark{{\x1b\[m}}
# CHECK: {{.*}}fish-default{{\x1b\[m}}
# Override a default theme with different colors.
__fish_data_with_file tools/web_config/themes/None.theme \
cat >$__fish_config_dir/themes/"fish default.theme"
fish_config theme show | grep -E 'fish default|Base16 Default Dark' -A1
# CHECK: {{\x1b\[m}}{{\x1b\[4m}}fish default{{\x1b\[m}}
__fish_data_with_file tools/web_config/themes/none.theme \
cat >$__fish_config_dir/themes/fish-default.theme
fish_config theme show | grep -E 'fish-default|base16-default-dark' -A1
# CHECK: {{\x1b\[m}}{{\x1b\[4m}}fish-default{{\x1b\[m}}
# CHECK: {{\x1b\[m}}/bright/vixens{{\x1b\[m}} {{\x1b\[m}}jump{{\x1b\[m}}{{.*}}
# CHECK: --
# CHECK: {{\x1b\[m}}{{\x1b\[4m}}Base16 Default Dark{{\x1b\[m}}
# CHECK: {{\x1b\[m}}{{\x1b\[4m}}base16-default-dark{{\x1b\[m}}
# CHECK: {{.*}}/bright/vixens{{.*}}
function print-sample-colors
@@ -189,7 +189,7 @@ echo >$__fish_config_dir/themes/custom-from-userconf.theme \
# CHECK: $fish_color_normal: set in universal scope, unexported, with 1 elements
# CHECK: $fish_color_normal[1]: |yellow|
fish_config theme choose 'fish default'
fish_config theme choose 'fish-default'
print-sample-colors
# CHECK: normal=normal
# CHECK: autosuggestion=brblack
@@ -200,7 +200,7 @@ echo >$__fish_config_dir/themes/custom-from-userconf.theme \
# CHECK: $fish_color_normal: set in universal scope, unexported, with 1 elements
# CHECK: $fish_color_normal[1]: |yellow|
echo yes | fish_config theme save 'fish default'
echo yes | fish_config theme save 'fish-default'
set -S fish_color_normal
# CHECK: $fish_color_normal: set in universal scope, unexported, with 1 elements
# CHECK: $fish_color_normal[1]: |normal|