# Copyright (C) 2026 Rootiest # SPDX-License-Identifier: AGPL-3.0-or-later # SYNOPSIS # __config_settings_draw_subcat # # DESCRIPTION # Renders the sub-category drill-down page for one C1-C6 category: # the category's own toggle at the top (still meaningful as the cascade # default for its sub-categories), then one row per sub-category from # __config_settings_subcats, sized dynamically instead of the fixed # 6-row layout __config_settings_draw uses for the category list. # Follows the same width-tier and center-padding conventions as # __config_settings_draw so the panel doesn't visibly jump between the # two pages. # # Label and description fields are defensively truncated to their field # width before padding (string pad only ever grows a string, never # shrinks it) -- sub-category labels/descriptions are static data from # __config_settings_subcats, not authored per width-tier the way # __config_settings_draw's own category descriptions are, so a couple of # them are longer than the narrower tiers' fields (e.g. "Notifications" # is 13 chars against a 12-char label field; several descriptions run # well past the 17-char field at the narrowest tier). Truncating keeps # the box perfectly rectangular in every case instead of only in the # cases the static text happens to fit. # # ARGUMENTS # cur_row 0-based highlighted row (0 = the category's own toggle; # 1..N = sub-category rows) # cur_scope "universal" or "session" # category_var One of the six __fish_config_op_ names # # EXIT STATUS # 0 Always # # EXAMPLE # __config_settings_draw_subcat 1 universal __fish_config_op_aliases function __config_settings_draw_subcat set -l cur_row $argv[1] set -l cur_scope $argv[2] set -l category_var $argv[3] 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) set -l rows (__config_settings_subcats $category_var) set -l n (count $rows) # ── Width tier: matches __config_settings_draw's 6-col-per-side steps ── 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)") ' ') # Label field is 13 wide (one wider than __config_settings_draw's 12) -- # the longest real sub-category label ("Notifications") is 13 chars. # Description field absorbs the difference so every row still totals # iw+2, matching the surrounding box lines exactly. set -l label_w 13 set -l desc_w (math $iw - 34) set -l cat_label (string replace -r '^__fish_config_op_' '' -- $category_var) # Scope indicator: toggling a row on this page writes -U (Universal, # persistent) or -g (Session, this-shell-only) -- the title must say # which, since it isn't otherwise visible anywhere on the page. set -l scope_label Universal test "$cur_scope" = session; and set scope_label Session # Title layout is "┌─ Sub-categories: