dotfiles/fish/functions/_tide_sub_configure.fish
2023-11-20 11:21:08 -06:00

156 lines
4.7 KiB
Fish

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