#!/bin/sh # Display and validate the curated command catalogue. commands() { awk -F '\t' ' NF == 0 { next } NF != 3 || ($1 != "yes" && $1 != "no") || $2 == "" || $3 == "" { printf "Invalid command reminder on line %d.\n", NR > "/dev/stderr" invalid = 1 next } seen[$2]++ { printf "Duplicate command reminder for %s on line %d.\n", $2, NR > "/dev/stderr" invalid = 1 next } { count++ reminder[count] = $1 command[count] = $2 description[count] = $3 if (length($2) > command_width) command_width = length($2) if (length($3) > description_width) description_width = length($3) } END { if (invalid) exit 1 if (length("COMMAND") > command_width) command_width = length("COMMAND") if (length("DESCRIPTION") > description_width) description_width = length("DESCRIPTION") printf "%-*s %-*s %s\n", command_width, "COMMAND", description_width, "DESCRIPTION", "REMINDER" for (row = 1; row <= count; row++) { printf "%-*s %-*s %s\n", command_width, command[row], description_width, description[row], reminder[row] } } ' "${XDG_CONFIG_HOME:-$HOME/.config}/profile/commands.tsv" } _command_reminder() { awk -F '\t' -v width="${COLUMNS:-80}" ' NF == 0 { next } NF != 3 || ($1 != "yes" && $1 != "no") || $2 == "" || $3 == "" { printf "Invalid command reminder on line %d.\n", NR > "/dev/stderr" invalid = 1 next } seen[$2]++ { printf "Duplicate command reminder for %s on line %d.\n", $2, NR > "/dev/stderr" invalid = 1 next } $1 == "yes" { command[++count] = $2 } END { if (invalid) exit 1 if (width < 40) width = 80 line = " " for (row = 1; row <= count; row++) { separator = (line == " " ? "" : " ") if (length(line) + length(separator) + length(command[row]) > width) { print line line = " " command[row] } else { line = line separator command[row] } } if (line != " ") print line } ' "${XDG_CONFIG_HOME:-$HOME/.config}/profile/commands.tsv" }