X-Git-Url: http://git.tuebingen.mpg.de/?p=gsu.git;a=blobdiff_plain;f=subcommand;h=c04f23feeb5ae018ce0e0ae1fea46efe20318b40;hp=fe6ec57d66ae852562c23a20f0bca9b4a2464a75;hb=4167cc8db6c44314335cffd9c1a80f6da7ae4a69;hpb=a67f16ae830226c7afef2f3fad72efe46f3b5ed9 diff --git a/subcommand b/subcommand index fe6ec57..c04f23f 100644 --- a/subcommand +++ b/subcommand @@ -4,7 +4,7 @@ if [[ "$(type -t _gsu_setup)" != "function" ]]; then gsu_dir=${gsu_dir:-${BASH_SOURCE[0]%/*}} - . $gsu_dir/common || exit 1 + . "$gsu_dir/common" || exit 1 _gsu_setup fi @@ -46,7 +46,7 @@ _gsu_available_commands() # otherwise delete it d - ' $0 + ' "$0" } | sort | tr '\n' ' ')" } @@ -209,7 +209,7 @@ gsu_complete_options() com_prefs_options='e' -export gsu_prefs_txt=" +_gsu_prefs_txt=" Print the current preferences. Usage: prefs [-e] @@ -255,40 +255,52 @@ com_prefs() printf "# optional" ;; esac - printf " $option_type: $description" + printf "%s: %s" "$option_type" "$description" if [[ "$required" != "yes" && "$required" != "true" ]]; then - printf " [$default_value]" + printf " [%s]" "$default_value" fi echo [[ -n "$help_text" ]] && sed -e '/^[ ]*$/d; s/^[ ]*/# /g' <<< "$help_text" - printf "$name=$val" + printf "%s=%s" "$name" "$val" [[ "$val" == "$default_value" ]] && printf " # default" echo done } +_gsu_isatty() +{( + exec 3<&1 + stty 0<&3 &> /dev/null +)} + complete_prefs() { gsu_complete_options "$com_prefs_options" "$@" } -export gsu_man_txt=" +_gsu_man_txt=' Print the manual. -Usage: man" +Usage: man +If stdout associated with a terminal device, output is piped to +$PAGER. If $PAGER is unset, less(1) is assumed. +' com_man() { local equal_signs="==================================================" local minus_signs="--------------------------------------------------" - local com num + local com num pager='cat' + _gsu_isatty && pager="${PAGER:-less}" + [[ "$pager" == 'less' ]] && export LESS=${LESS-RI} + { echo "$gsu_name (_${gsu_banner_txt}_) manual" echo "${equal_signs:0:${#gsu_name} + ${#gsu_banner_txt} + 16}" echo - sed -e '1,/^#\{70,\}/d' -e '/^#\{70,\}/,$d' $0 -e 's/^# *//' + sed -e '1,/^#\{70,\}/d' -e '/^#\{70,\}/,$d' "$0" -e 's/^# *//' echo "----" echo echo "$gsu_name usage" @@ -308,13 +320,14 @@ com_man() echo "${minus_signs:0:$num}" echo "$com" echo "${minus_signs:0:$num}" - $0 help $com + "$0" help "$com" echo done + } | $pager ret=$GSU_SUCCESS } -export gsu_help_txt=" +_gsu_help_txt=" Print online help. Usage: help [command] @@ -322,7 +335,7 @@ Usage: help [command] Without arguments, print the list of available commands. Otherwise, print the help text for the given command." -export gsu_complete_txt=" +_gsu_complete_txt=" Command line completion. Usage: complete [ ...] @@ -338,7 +351,7 @@ the subcommand. com_help() { - local a b ere tab=' ' + local ere tab=' ' _gsu_get_command_regex ere="$result" @@ -347,11 +360,11 @@ com_help() gsu_short_msg "### $gsu_name -- $gsu_banner_txt ###" _gsu_usage 2>&1 { - printf "com_help()\n$gsu_help_txt" | head -n 4; echo "--" - printf "com_man()\n$gsu_man_txt" | head -n 4; echo "--" - printf "com_prefs()\n$gsu_prefs_txt" | head -n 4; echo "--" - printf "com_complete()\n$gsu_complete_txt" | head -n 4; echo "--" - grep -EA 2 "$ere" $0 + 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 "--" + grep -EA 2 "$ere" "$0" } | grep -v -- '--' \ | sed -En "/$ere/"'!d # remove everything but the command name @@ -379,29 +392,29 @@ com_help() return fi if test "$1" = "help"; then - echo "$gsu_help_txt" + echo "$_gsu_help_txt" ret=$GSU_SUCCESS return fi if test "$1" = "man"; then - echo "$gsu_man_txt" + echo "$_gsu_man_txt" ret=$GSU_SUCCESS return fi if test "$1" = "prefs"; then - echo "$gsu_prefs_txt" + echo "$_gsu_prefs_txt" ret=$GSU_SUCCESS return fi if test "$1" = "complete"; then - echo "$gsu_complete_txt" + echo "$_gsu_complete_txt" ret=$GSU_SUCCESS return fi ret=$GSU_SUCCESS _gsu_get_command_regex "$1" ere="$result" - if ! grep -Eq "$ere" $0; then + if ! grep -Eq "$ere" "$0"; then _gsu_print_available_commands result="$1" ret=-$E_GSU_BAD_COMMAND @@ -424,7 +437,7 @@ com_help() :p p } - ' $0 + ' "$0" } complete_help() @@ -463,8 +476,8 @@ EOF words=("$@") cmd="${words[1]}" ret=$GSU_SUCCESS # It's not an error if no completer was defined - [[ "$(type -t complete_$cmd)" != "function" ]] && return - complete_$cmd "$cword" "${words[@]}" + [[ "$(type -t "complete_$cmd")" != "function" ]] && return + "complete_$cmd" "$cword" "${words[@]}" # ignore errors, they would only clutter the completion output ret=$GSU_SUCCESS } @@ -497,7 +510,7 @@ gsu_cword_is_option_parameter() opt="${opts:$i:1}" [[ "${opts:$(($i + 1)):1}" != ":" ]] && continue let i++ - [[ "$prev" != "-$opt" ]] && continue + [[ ! "$prev" =~ ^-.*$opt$ ]] && continue result="$opt" return done @@ -571,8 +584,8 @@ gsu() fi arg="$1" shift - if [[ "$(type -t com_$arg)" == 'function' ]]; then - com_$arg "$@" + if [[ "$(type -t "com_$arg")" == 'function' ]]; then + "com_$arg" "$@" if (("$ret" < 0)); then gsu_err_msg exit 1