X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=subcommand;h=9ebb7eef06d585138d05ecd6d20c8e64e3a5c0fb;hb=77fd8c08604bb7a1c641c4f36bdf4f839d114656;hp=bab8ded4ea1d9f0b99562eca7dc8d257244062a0;hpb=8d89aa241a5199b0a25edcf0e56da08c64aa4014;p=gsu.git diff --git a/subcommand b/subcommand index bab8ded..9ebb7ee 100644 --- a/subcommand +++ b/subcommand @@ -1,5 +1,6 @@ #!/bin/bash -# (C) 2006-2011 Andre Noll +# Copyright (C) 2006 Andre Noll +# Licensed under the LGPL, version 3. See COPYING and COPYING.LESSER. if [[ "$(type -t _gsu_setup)" != "function" ]]; then gsu_dir=${gsu_dir:-${BASH_SOURCE[0]%/*}} @@ -9,7 +10,7 @@ fi _gsu_usage() { - gsu_short_msg "# Usage: $_gsu_self command [options]" + gsu_short_msg "# Usage: $gsu_name command [options]" } # Return an extended regular expression to match against $0. @@ -50,25 +51,26 @@ _gsu_available_commands() } _gsu_print_available_commands() -{( - local i count=0 - gsu_short_msg "Available commands:" - for i in $gsu_cmds; do - printf "$i" - count=$(($count + 1)) - if test $(($count % 4)) -eq 0; then - echo +{ + local cmd + local -i count=0 + + printf 'Available commands:\n' + for cmd in $gsu_cmds; do + printf '%s' "$cmd" + let count++ + if (($count % 4)); then + printf '\t' + ((${#cmd} < 8)) && printf '\t' else - printf "\t" - if test ${#i} -lt 8; then - printf "\t" - fi + printf '\n' fi done - echo -) 2>&1 + printf '\n' } +# Print all options of the given optstring to stdout if the word in the current +# command line begins with a hyphen character. gsu_complete_options() { local opts="$1" cword="$2" cur opt @@ -111,11 +113,11 @@ _com_prefs() ret=-$E_GSU_MKDIR result="${conf%/*}" mkdir -p "$result" - [[ $? -ne 0 ]] && return + (($? != 0)) && return ret=-$E_GSU_EDITOR result="${EDITOR:-vi}" "$result" "$conf" - [[ $? -ne 0 ]] && return + (($? != 0)) && return ret=$GSU_SUCCESS return fi @@ -161,15 +163,15 @@ _com_man() local minus_signs="--------------------------------------------------" local com num - echo "$_gsu_self (_${gsu_banner_txt}_) manual" - echo "${equal_signs:0:${#_gsu_self} + ${#gsu_banner_txt} + 16}" + 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/^# *//' echo "----" echo - echo "$_gsu_self usage" - echo "${minus_signs:0:${#_gsu_self} + 6}" + echo "$gsu_name usage" + echo "${minus_signs:0:${#gsu_name} + 6}" printf "\t" _gsu_usage 2>&1 echo "Each command has its own set of options as described below." @@ -181,9 +183,7 @@ _com_man() _gsu_available_commands for com in $result; do num=${#com} - if test $num -lt 4; then - num=4 - fi + (($num < 4)) && num=4 echo "${minus_signs:0:$num}" echo "$com" echo "${minus_signs:0:$num}" @@ -193,11 +193,6 @@ _com_man() ret=$GSU_SUCCESS } -_gsu_banner_msg() -{ - gsu_short_msg "### $_gsu_self -- ###" -} - export gsu_help_txt=" Print online help. @@ -228,7 +223,7 @@ _com_help() ere="$result" if (($# == 0)); then - _gsu_banner_msg 2>&1 + gsu_short_msg "### $gsu_name -- $gsu_banner_txt ###" _gsu_usage 2>&1 { printf "com_help()\n$gsu_help_txt" | head -n 4; echo "--" @@ -258,7 +253,7 @@ _com_help() # and print the sucker p' echo - echo "# Try $_gsu_self help for info on ." + echo "# Try $gsu_name help for info on ." ret=$GSU_SUCCESS return fi @@ -322,7 +317,7 @@ complete_help() # Aborts on programming errors such as missing or invalid option string. On # success $result contains shell code that can be eval'ed. For each defined # option x, the local variable o_x will be created when calling eval "$result". -# o_x contains true/false for options without argument and either the emtpy +# o_x contains true/false for options without argument and either the empty # string or the given argument for options that take an argument. # # Example: @@ -338,7 +333,7 @@ gsu_getopts() ' gsu_check_arg_count $# 1 1 - if [[ $ret -lt 0 ]]; then + if (($ret < 0)); then gsu_err_msg exit 1 fi @@ -534,7 +529,7 @@ gsu() local i _gsu_available_commands gsu_cmds="$result" - if test $# -eq 0; then + if (($# == 0)); then _gsu_usage _gsu_print_available_commands exit 1 @@ -544,7 +539,7 @@ gsu() # check internal commands if [[ "$arg" = "help" || "$arg" = "man" || "$arg" = "prefs" || "$arg" = "complete" ]]; then _com_$arg "$@" - if [[ "$ret" -lt 0 ]]; then + if (("$ret" < 0)); then gsu_err_msg exit 1 fi @@ -555,7 +550,7 @@ gsu() for i in $gsu_cmds; do if test "$arg" = "$i"; then com_$arg "$@" - if [[ "$ret" -lt 0 ]]; then + if (("$ret" < 0)); then gsu_err_msg exit 1 fi @@ -581,21 +576,20 @@ gsu() # 0 0 no argument allowed # 1 1 exactly one argument required # 0 2 at most two arguments admissible -# 2 at least two arguments reqired -# +# 2 at least two arguments required gsu_check_arg_count() { ret=-$E_GSU_BAD_ARG_COUNT - if [[ $# -eq 2 ]]; then # only num1 is given + if (($# == 2)); then # only num1 is given result="at least $2 args required, $1 given" - [[ $1 -lt $2 ]] && return + (($1 < $2)) && return ret=$GSU_SUCCESS return fi # num1 and num2 given result="need at least $2 args, $1 given" - [[ $1 -lt $2 ]] && return + (($1 < $2)) && return result="need at most $3 args, $1 given" - [[ $1 -gt $3 ]] && return + (($1 > $3)) && return ret=$GSU_SUCCESS }