68 lines
2 KiB
Bash
68 lines
2 KiB
Bash
#!/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"
|
|
}
|