# (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
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]+}"
gsu_complete_options()
{
- local opts="$1" cword="$2" cur
+ local opts="$1" cword="$2" cur opt
local -a words
shift 2
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"
Usage: complete [<cword> <word>...]
-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()
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()
{
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