ret=1
}
+declare -A _gsu_help_text=() # indexed by autocmd
com_prefs_options='e'
-_gsu_prefs_txt="
+_gsu_help_text['prefs']='
Print the current preferences.
Usage: prefs [-e]
If -e is given, the config file is opened with the default editor.
Without options, the command prints out a list of all config variables,
together with their current value and the default value.
-"
+'
com_prefs()
{
[[ "$result" == 'm' ]] && printf 'roff\ntext\nhtml\n'
}
-_gsu_man_txt='
+_gsu_help_text['man']='
Print the manual.
Usage: man [-m <mode>] [-b <browser>]
done
}
-_gsu_roffify_autocmd()
+_gsu_roffify_autocmds()
{
- local cmd="$1" help_txt="$2"
+ local cmd help_txt
- {
- printf 'com_%s()\n' "$cmd"
- sed -e 's/^/## /g' <<< "$help_txt"
- } | _gsu_roffify_cmds
+ for cmd in "${!_gsu_help_text[@]}"; do
+ help_txt="${_gsu_help_text["$cmd"]}"
+ {
+ printf 'com_%s()\n' "$cmd"
+ sed -e 's/^/## /g' <<< "$help_txt"
+ } | _gsu_roffify_cmds
+ done
}
_gsu_roff_man()
printf '\n.SH "GENERIC SUBCOMMANDS"\n'
printf 'The following commands are automatically created by gsu\n'
- _gsu_roffify_autocmd "help" "$_gsu_help_txt"
- _gsu_roffify_autocmd "man" "$_gsu_man_txt"
- _gsu_roffify_autocmd "prefs" "$_gsu_prefs_txt"
- _gsu_roffify_autocmd "complete" "$_gsu_complete_txt"
+ _gsu_roffify_autocmds
printf '\n.SH "LIST OF SUBCOMMANDS"\n'
printf 'Each command has its own set of options as described below.\n'
ret=$GSU_SUCCESS
}
-_gsu_help_txt="
+_gsu_help_text['help']='
Print online help.
-Usage: help [command]
+Usage: help [-a] [command]
Without arguments, print the list of available commands. Otherwise,
-print the help text for the given command."
+print the help text for the given command.
+
+-a: Also show the help of automatic commands. Ignored if a command
+is given.'
-_gsu_complete_txt="
+_gsu_help_text['complete']='
Command line completion.
Usage: complete [<cword> <word>...]
If at least one argument is given, all possible completions are
written to stdout. This can be used from the completion function of
the subcommand.
-"
+'
+com_help_options='a'
com_help()
{
- local ere tab=' '
+ local ere tab=' ' txt
+
+ gsu_getopts "$com_help_options"
+ eval "$result"
+ ((ret < 0)) && return
_gsu_get_command_regex
ere="$result"
gsu_short_msg "### $gsu_name -- $gsu_banner_txt ###"
_gsu_usage 2>&1
{
- printf "com_help()\n%s" "$_gsu_help_txt" | head -n 4; echo "--"
- printf "com_man()\n%s" "$_gsu_man_txt" | head -n 4; echo "--"
- printf "com_prefs()\n%s" "$_gsu_prefs_txt" | head -n 4; echo "--"
- printf "com_complete()\n%s" "$_gsu_complete_txt" | head -n 4; echo "--"
+ if [[ "$o_a" == 'true' ]]; then
+ _gsu_mfcb() { printf '%s\n' "$2"; }
+ for cmd in "${!_gsu_help_text[@]}"; do
+ printf "com_%s()" "$cmd"
+ txt="${_gsu_help_text["$cmd"]}"
+ mapfile -n 3 -c 1 -C _gsu_mfcb <<< "$txt"
+ printf -- '--\n'
+ done
+ fi
grep -EA 2 "$ere" "$0"
} | grep -v -- '--' \
| sed -En "/$ere/"'!d
# and print the sucker
p'
- echo
- echo "# Try $gsu_name help <command> for info on <command>."
+ printf "\n# Try %s help <command> for info on <command>, or %s help -a to see\n" \
+ "$gsu_name" "$gsu_name"
+ printf '# also the subcommands which are automatically generated by gsu.\n'
ret=$GSU_SUCCESS
return
fi
- if test "$1" = "help"; then
- echo "$_gsu_help_txt"
+ for cmd in "${!_gsu_help_text[@]}"; do
+ [[ "$1" != "$cmd" ]] && continue
+ printf '%s\n' "${_gsu_help_text["$cmd"]}"
ret=$GSU_SUCCESS
return
- fi
- if test "$1" = "man"; then
- echo "$_gsu_man_txt"
- ret=$GSU_SUCCESS
- return
- fi
- if test "$1" = "prefs"; then
- echo "$_gsu_prefs_txt"
- ret=$GSU_SUCCESS
- return
- fi
- if test "$1" = "complete"; then
- echo "$_gsu_complete_txt"
- ret=$GSU_SUCCESS
- return
- fi
- ret=$GSU_SUCCESS
+ done
_gsu_get_command_regex "$1"
ere="$result"
if ! grep -Eq "$ere" "$0"; then
p
}
' "$0"
+ ret=$GSU_SUCCESS
}
complete_help()