diff --git a/functions/__config_settings_draw_value.fish b/functions/__config_settings_draw_value.fish new file mode 100644 index 0000000..9957655 --- /dev/null +++ b/functions/__config_settings_draw_value.fish @@ -0,0 +1,153 @@ +# Copyright (C) 2026 Rootiest +# SPDX-License-Identifier: AGPL-3.0-or-later + +# SYNOPSIS +# __config_settings_draw_value +# +# DESCRIPTION +# Renders a config-settings value page (Sponge or Paths) as exactly 16 +# lines, matching the box geometry of the opinionated toggle page so the +# caller's wrap-aware erase (panel_h=16) is unchanged. Each row shows a +# label, a badge, and the variable's current value (or its default hint). +# Toggle-type rows (the two sponge booleans) reuse the ON/OFF/DEFAULT badge; +# value rows (path/int/list/string) show a type badge and the live value. +# +# Page width follows the same $COLUMNS tiers as the toggle page for a +# consistent look; exact width is not required for the erase (the erase +# over-clears to end of screen using the 78-col worst case). +# +# ARGUMENTS +# cur_row 0-based highlighted row within the page +# page "sponge" or "paths" +# +# RETURNS +# 0 Always +# +# EXAMPLE +# __config_settings_draw_value 0 sponge +function __config_settings_draw_value + set -l cur_row $argv[1] + set -l page $argv[2] + + set -l c_ok (set_color green) + set -l c_err (set_color red) + set -l c_dim (set_color brblack) + set -l c_sel (set_color --bold magenta) + set -l c_head (set_color --bold cyan) + set -l c_reset (set_color normal) + + # ── Page row metadata (parallel lists) ──────────────────────────────── + set -l title + set -l vars + set -l labels + set -l types + set -l hints # default hint shown when unset + set -l active_idx + if test $page = sponge + set title "Sponge Settings" + set active_idx 2 + set vars sponge_delay sponge_purge_only_on_exit sponge_allow_previously_successful sponge_successful_exit_codes __fish_sponge_extra_sensitive + set labels Delay "Purge@exit" "Allow prev" "OK codes" "Extra secret" + set types int toggle toggle list list + set hints 2 false true 0 "(none)" + else + set title "Path Settings" + set active_idx 3 + set vars __fish_scrollback_history_dir __fish_scrollback_history_max_files __fish_user_dots_path + set labels "Log dir" "Log max" "Dots path" + set types path int path + set hints "~/.terminal_history" 100 "(default)" + end + set -l nrows (count $vars) + + # ── Width tier (same thresholds as the toggle page) ─────────────────── + set -l iw 50 + if test "$COLUMNS" -ge 90 + set iw 76 + else if test "$COLUMNS" -ge 86 + set iw 72 + else if test "$COLUMNS" -ge 82 + set iw 68 + end + set -l HBR (string repeat -n $iw '─') + set -l p (string repeat -n (math --scale=0 "max(0, ($COLUMNS - ($iw + 2)) / 2)") ' ') + + # ── Line 1: top border with title ───────────────────────────────────── + set -l title_dashes (math $iw - (string length -- $title) - 3) + printf '%s┌─%s %s %s┐\n' \ + $p $c_head "$title$c_reset" (string repeat -n $title_dashes '─') + + # ── Line 2: page-tab header ─────────────────────────────────────────── + printf '%s│%s│\n' $p (__config_settings_pagetab $active_idx $iw) + + # ── Line 3: divider ─────────────────────────────────────────────────── + printf '%s│%s│\n' $p $HBR + + # ── Value rows ──────────────────────────────────────────────────────── + for i in (seq 0 (math $nrows - 1)) + set -l idx (math $i + 1) + set -l var $vars[$idx] + set -l label $labels[$idx] + set -l type $types[$idx] + set -l hint $hints[$idx] + + # Badge (7 visible cols) + value field + set -l badge + set -l field + if test $type = toggle + set -l val (__config_settings_get_val $var universal) + switch $val + case on + set badge "$c_ok"" ON$c_reset" + case off + set badge "$c_err""OFF $c_reset" + case '*' + set badge "$c_dim""DEFAULT$c_reset" + end + set field "default: $hint" + else + set -l raw (__config_settings_get_raw $var) + if test "$raw" = DEFAULT + set badge "$c_dim""DEFAULT$c_reset" + set field "$hint" + else + switch $type + case path + set badge "$c_ok"" PATH $c_reset" + case int + set badge "$c_ok"" INT $c_reset" + case list + set badge "$c_ok"" LIST $c_reset" + case '*' + set badge "$c_ok"" STR $c_reset" + end + set field "$raw" + end + end + + set -l curs " " + if test $i -eq $cur_row + set curs "$c_sel▶$c_reset " + end + + set -l lpad (string pad -r -w 12 -- $label) + set -l fpad (string pad -r -w (math $iw - 33) -- (string shorten -m (math $iw - 33) -- "$field")) + printf '%s│ %s%s [ %s ] %s │\n' $p $curs $lpad $badge $fpad + end + + # ── Pad blank rows so chrome(6) + nrows + blanks = 16 ───────────────── + set -l blanks (math 10 - $nrows) + for i in (seq 1 $blanks) + printf '%s│%s│\n' $p (string repeat -n $iw ' ') + end + + # ── Bottom divider ──────────────────────────────────────────────────── + printf '%s│%s│\n' $p $HBR + + # ── Hint line ───────────────────────────────────────────────────────── + set -l hint_line " ↑↓/kj move Enter edit ←/h clear Tab page q quit" + printf '%s│%s%s%s│\n' $p $c_dim (string pad -r -w $iw -- $hint_line) $c_reset + + # ── Bottom border ───────────────────────────────────────────────────── + printf '%s└%s┘\n' $p $HBR +end