# 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] __fish_palette 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 (__config_settings_frame width) 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. The # description field absorbs the difference inside the frame # (field_w = iw - 21 - label_w = iw - 34), so every row still totals iw+2. 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: