]> git.tuebingen.mpg.de Git - gsu.git/blobdiff - funcs/gsu
Allow hyphens in command names.
[gsu.git] / funcs / gsu
index 673605e43bbca8e66940722b7c587b72ba84964b..1a35fca523b5084455e2a25c24e87fcbe0e08d97 100644 (file)
--- a/funcs/gsu
+++ b/funcs/gsu
@@ -1,6 +1,6 @@
 #!/bin/bash
 # gsu -- the global subcommand utility
-# (C) 2006-2010 Andre Noll
+# (C) 2006-2011 Andre Noll
 
 _gsu_init_errors()
 {
@@ -137,13 +137,16 @@ _gsu_usage()
 }
 export -f _gsu_usage
 
+# Each line matching this is recognized as a subcommand. The name
+# of the subcommand is the first subexpression.
+export gsu_command_regex='^com_\([-a-zA-Z_0-9]\+\)()'
+
 _gsu_available_commands()
 {
-       result="$( (printf "help\nman\nprefs\n"; grep "^com_[a-z_]\+()" $0) \
-               | sed -e 's/^com_//' -e 's/()//' \
-               | sort \
-               | tr '\n' ' ')"
-       ret=$GSU_SUCCESS
+       result="$({
+               printf "help\nman\nprefs\n"
+               sed -ne "s/$gsu_command_regex/\1/g;T;p" $0
+               } | sort | tr '\n' ' ')"
 }
 export -f _gsu_available_commands
 
@@ -281,13 +284,13 @@ _com_help()
                        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 "--"
-                       grep -A 2 "^com_\([a-zA-Z_0-9]\+\)()" $0
+                       grep -A 2 "$gsu_command_regex" $0
                } | grep -v -- '--' \
-                       | sed -e '/^com_\([a-zA-Z_0-9]\+\)()/bs' \
+                       | sed -e "/$gsu_command_regex/bs" \
                                -e 'H;$!d;x;s/\n//g;b' \
                                -e :s \
                                -e 'x;s/\n//g;${p;x;}' \
-                       | sed -e 's/^com_\([a-zA-Z_0-9]\+\)()#*/\1\t/' \
+                       | sed -e "s/${gsu_command_regex}#*/\1\t/" \
                        | sort \
                        | while read a b; do
                                printf "$a\t"
@@ -378,7 +381,7 @@ _gsu_check_options()
                        return
                esac
 
-               eval ${gsu_config_var_prefix}_$name='"'${val:=$default_value}'"'
+               eval ${gsu_config_var_prefix}_$name='"'\${val:=$default_value}'"'
                # Check option type. ATM, only num and string are supported
                # Other types may be added without breaking compatibility
                case "$option_type" in
@@ -427,7 +430,7 @@ gsu_getopts()
 
        ret=-$E_GSU_GETOPTS
        result="invalid optstring $1"
-       if [[ -z "$1" || "$1" =~ "::" ]]; then
+       if [[ -z "$1" ]] || grep -q '::' <<< "$1" ; then
                gsu_err_msg
                exit 1
        fi