From b88d77fb2d0d5028a6f5670695dee6bec129501f Mon Sep 17 00:00:00 2001 From: Ryan Schanzenbacher Date: Fri, 5 Apr 2024 11:57:45 -0400 Subject: ahhh sloppy fish, still needs fixing, esp with the vars --- .../fish/functions/_tide_sub_configure.fish | 156 +++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 home-config/fish/functions/_tide_sub_configure.fish (limited to 'home-config/fish/functions/_tide_sub_configure.fish') diff --git a/home-config/fish/functions/_tide_sub_configure.fish b/home-config/fish/functions/_tide_sub_configure.fish new file mode 100644 index 0000000..22faf3a --- /dev/null +++ b/home-config/fish/functions/_tide_sub_configure.fish @@ -0,0 +1,156 @@ +set -g _tide_color_dark_blue 0087AF +set -g _tide_color_dark_green 5FAF00 +set -g _tide_color_gold D7AF00 +set -g _tide_color_green 5FD700 +set -g _tide_color_light_blue 00AFFF + +# Create an empty fake function for each item +for func in _fake(functions --all | string match --entire _tide_item) + function $func + end +end + +for file in (status dirname)/tide/configure/{choices, functions}/**.fish + source $file +end + +function _tide_sub_configure + set -l choices (path basename (status dirname)/tide/configure/choices/**.fish | path change-extension '') + argparse auto $choices= -- $argv + + for var in (set -l --names | string match -e _flag) + set -x $var $$var + end + + if set -q _flag_auto + set -fx _flag_finish 'Overwrite your current tide config' + else if test $COLUMNS -lt 55 -o $LINES -lt 21 + echo 'Terminal size too small; must be at least 55 x 21' + return 1 + end + + _tide_detect_os | read -g --line os_branding_icon os_branding_color os_branding_bg_color + + set -g fake_columns $COLUMNS + test $fake_columns -gt 90 && set fake_columns 90 + set -g fake_lines $LINES + + set -g _tide_selected_option + _next_choice all/style +end + +function _next_choice -a nextChoice + set -q _tide_selected_option || return 0 + set -l cmd (string split '/' $nextChoice)[2] + $cmd +end + +function _tide_title -a text + set -q _flag_auto && return + + command -q clear && clear + set_color -o + string pad --width (math --scale=0 "$fake_columns/2" + (string length $text)/2) $text + set_color normal + + set -g _tide_configure_first_option_after_title +end + +function _tide_option -a symbol text + set -ga _tide_symbol_list $symbol + set -ga _tide_option_list $text + + if not set -q _flag_auto + set -g _tide_configure_first_prompt_after_option + + set_color -o + set -e _tide_configure_first_option_after_title || echo + echo "($symbol) $text" + set_color normal + end +end + +function _tide_menu -a func + if set -q _flag_auto + set -l flag_var_name _flag_$func + set -g _tide_selected_option $$flag_var_name + + if test -z "$_tide_selected_option" + echo "Missing input for choice '$func'" + _tide_exit_configure + else if not contains $_tide_selected_option $_tide_option_list + echo "Invalid input '$_tide_selected_option' for choice '$func'" + _tide_exit_configure + else + set -e _tide_symbol_list + set -e _tide_option_list + end + return + end + + argparse no-restart -- $argv # Add no-restart option for first menu + + echo + if not set -q _flag_no_restart + set -f r r + echo '(r) Restart from the beginning' + end + echo '(q) Quit and do nothing'\n + + while read --nchars 1 --prompt-str \ + "$(set_color -o)Choice [$(string join '/' $_tide_symbol_list $r q)] $(set_color normal)" input + switch $input + case r + set -q _flag_no_restart && continue + set -e _tide_symbol_list + set -e _tide_option_list + _next_choice all/style + break + case q + _tide_exit_configure + set -e _tide_symbol_list + set -e _tide_option_list + command -q clear && clear + break + case $_tide_symbol_list + set -g _tide_selected_option $_tide_option_list[(contains -i $input $_tide_symbol_list)] + test "$func" != finish && + set -a _tide_configure_current_options --$func=(string escape $_tide_selected_option) + set -e _tide_symbol_list + set -e _tide_option_list + break + end + end +end + +function _tide_display_prompt + set -q _flag_auto && return + + _fake_tide_cache_variables + set -l prompt (_fake_tide_prompt) + + set -l bottom_left_prompt_string_length (string length --visible $prompt[-1]) + set -l right_prompt_string (string pad --width (math $fake_columns-$bottom_left_prompt_string_length) $prompt[1]) + set -l prompt[-1] "$prompt[-1]$right_prompt_string" + + if set -q _configure_transient + if contains newline $fake_tide_left_prompt_items + string unescape $prompt[3..] + else + _fake_tide_item_character + echo + end + else + if not set -q _tide_configure_first_prompt_after_option + test "$fake_tide_prompt_add_newline_before" = true && echo + end + string unescape $prompt[2..] + end + + set -e _tide_configure_first_prompt_after_option + set_color normal +end + +function _tide_exit_configure + set -e _tide_selected_option # Skip through all switch and _next_choice +end -- cgit v1.2.3