X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=misc%2Fgsu%2Fsubcommand;h=6b5df0a37c2a676c7c86d74c5a07371fddd2e1bf;hb=1098785778a242838668df8c45f4a07d1690b06c;hp=ddb351a01e9a0b1fe11a0c280bf004f004121fd1;hpb=8371d55b8db239718f3697bbfa2c561e1307d5df;p=gsu.git diff --git a/misc/gsu/subcommand b/misc/gsu/subcommand index ddb351a..6b5df0a 100644 --- a/misc/gsu/subcommand +++ b/misc/gsu/subcommand @@ -2,7 +2,7 @@ # (C) 2006-2011 Andre Noll if [[ $(type -t gsu_is_a_number) != "function" ]]; then - GSU_DIR=${GSU_DIR:=$HOME/.gsu} + GSU_DIR=${GSU_DIR:=${HOME-}/.gsu} . $GSU_DIR/common || exit 1 fi @@ -11,8 +11,16 @@ _gsu_usage() gsu_short_msg "# Usage: $_gsu_self command [options]" } -# Each line matching this is recognized as a subcommand. The name of the may be -# given as $1. In any case the subcommand is the first subexpression. +# Return an extended regular expression to match against $0. +# +# When called without argument, the expression matches all lines which define a +# subcommand. +# +# If an argument is given, the returned expression matches only the subcommand +# passed as $1. This is useful to tell if a string is a valid subcommand. +# +# Regardless of whether an argument is given, the returned expression contains +# exactly one parenthesized subexpression for matching the command name. _gsu_get_command_regex() { local cmd="${1:-[-a-zA-Z_0-9]+}" @@ -62,7 +70,7 @@ _gsu_print_available_commands() gsu_complete_options() { - local opts="$1" cword="$2" cur + local opts="$1" cword="$2" cur opt local -a words shift 2 @@ -90,7 +98,7 @@ options, the command prints out a list of all cmt config variables, together with their current value and the default value." _com_prefs() { - local i conf="${gsu_config_file:=$HOME/.$gsu_name.rc}" + local i conf="${gsu_config_file:=${HOME:-}/.$gsu_name.rc}" gsu_getopts "e" eval "$result" @@ -202,11 +210,13 @@ Command line completion. Usage: complete [ ...] -In the first form, the command prints all possible completions to stdout. -This can be used from the completion function of the shell. +When executed without argument the command writes bash code to +stdout. This code is suitable to be evaled from .bashrc to enable +completion. -Completion code suitable to be evaled is written to stdout if no argument -was given. +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() @@ -306,21 +316,20 @@ complete_help() echo "$result" } -# Wrapper for bash's getopts. +# Wrapper for the bash getopts builtin. # # 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 an argument or the emtpy string/the -# given argument, depending on whether this option was contained in the "$@" -# array. +# o_x contains true/false for options without argument and either the emtpy +# string or the given argument for options that take an argument. # # Example: # gsu_getopts abc:x:y # eval "$result" -# [[ $ret -lt 0 ]] && return +# (($ret < 0)) && return # -# [[ "$o_a" = "true ]] && echo "The -a flag was given" +# [[ "$o_a" = 'true' ]] && echo 'The -a flag was given' # [[ -n "$o_c" ]] && echo "The -c option was given with arg $o_c" gsu_getopts() { @@ -504,6 +513,21 @@ gsu_get_unnamed_arg_num() result="$(($n - 1))" } +# Entry point for all gsu-based scripts. +# +# The startup part of the application script should source this file to load +# the functions defined here, and then call gsu(). Functions starting with com_ +# are automatically recognized as subcommands. +# +# Minimal example: +# +# com_hello() +# { +# echo 'hello world' +# } +# gsu_dir=${gsu_dir:-/system/location/where/gsu/is/installed} +# . $gsu_dir/subcommand || exit 1 +# gsu "$@" gsu() { local i