If a gsu application is run without specifying a subcommand we print
the available subcommands in tabular form. Currently, this output
always consists of four columns and we also assume that the length
of a subcommand name is shorter than 16 characters. If longer names
exist, the help output is formatted incorrectly. This commit should
fix that. We now compute the maximal command length and the width of
the terminal upfront, and derive the number of columns for the output
from this information.
_gsu_print_available_commands()
{
local cmd cmds
- local -i count=0
+ local -i maxlen=0 cols width=80 count=0
+ result=$(stty size 2>/dev/null)
+ if (($? == 0)); then
+ gsu_is_a_number "${result#* }"
+ ((ret >= 0)) && ((result > 0)) && width=$result
+ fi
_gsu_available_commands
- cmds="$result"
- printf 'Available commands:\n'
+ cmds=$result
+ for cmd in $cmds; do
+ ((${#cmd} > maxlen)) && maxlen=${#cmd}
+ done
+ let maxlen++
+ ((width < maxlen)) && cols=1 || cols=$((width / maxlen))
+ printf 'Available commands:'
for cmd in $cmds; do
- printf '%s' "$cmd"
+ ((count % cols == 0)) && printf '\n'
+ printf '%-*s' $maxlen $cmd
let ++count
- if ((count % 4)); then
- printf '\t'
- ((${#cmd} < 8)) && printf '\t'
- else
- printf '\n'
- fi
done
printf '\n'
}