| name | interactive-menu-builder-3-table-display |
| description | Sub-skill of interactive-menu-builder: 3. Table Display (+1). |
| version | 1.0.0 |
| category | _core |
| type | reference |
| scripts_exempt | true |
3. Table Display (+1)
3. Table Display
Display data in formatted tables:
#!/bin/bash
print_table_header() {
local -a headers=("$@")
local format=""
for header in "${headers[@]}"; do
format+="%-20s "
done
echo ""
printf "${CYAN}${format}${NC}\n" "${headers[@]}"
printf "${CYAN}%s${NC}\n" "$(printf '─%.0s' {1..80})"
}
print_table_row() {
local format=""
local -a values=("$@")
for _ in "${values[@]}"; do
format+="%-20s "
done
printf "${format}\n" "${values[@]}"
}
show_repo_table() {
print_table_header "Repository" "Category" "Status" "Branch"
for repo in "${REPOS[@]}"; do
local category=$(get_category "$repo")
local status=$(get_status "$repo")
local branch=$(get_branch "$repo")
case "$status" in
"Clean") status="${GREEN}Clean${NC}" ;;
"Modified") status="${YELLOW}Modified${NC}" ;;
"Untracked") status="${RED}Untracked${NC}" ;;
esac
print_table_row "$repo" "$category" "$status" "$branch"
done
}
4. Selection Lists
Let users select from a list:
#!/bin/bash
select_single() {
local prompt="$1"
shift
local -a options=("$@")
echo ""
for i in "${!options[@]}"; do
echo " $((i+1))) ${options[$i]}"
done
echo ""
echo " 0) Cancel"
echo ""
read -p "$prompt: " choice
if [[ "$choice" == "0" ]]; then
return 1
elif [[ "$choice" -ge 1 && "$choice" -le ${#options[@]} ]]; then
SELECTED="${options[$((choice-1))]}"
return 0
else
echo -e "${RED}Invalid selection"
1
}
() {
prompt=
-a options=()
-a selected=()
i ;
-p input
[[ == ]];
SELECTED=()
0
num ;
[[ -ge 1 && -le ]];
selected+=()
SELECTED=()
[[ -gt 0 ]]
}
repos=( )
select_single ;
select_multiple ;