]> git.tue.mpg.de Git - gsu.git/commitdiff
subcommand: Simplify gsu().
authorAndre Noll <maan@tuebingen.mpg.de>
Sun, 5 Mar 2017 21:13:53 +0000 (22:13 +0100)
committerAndre Noll <maan@tuebingen.mpg.de>
Sat, 15 Apr 2017 15:45:21 +0000 (17:45 +0200)
There is no need to special-case the four autocommands in the main
entry function gsu(). Dropping the undercore in the name of the
four command handlers allows to treat them in the same way as the
subcommands which are provided by the application.

subcommand

index 198ce164f5595ec3fd607b394b28d7ec99a9f349..6011ee68aad6b88103455167ea129008da1ec792 100644 (file)
@@ -100,7 +100,8 @@ If -e is given, the config file is opened with the default editor.
 Without options, the command prints out a list of all config variables,
 together with their current value and the default value.
 "
-_com_prefs()
+
+com_prefs()
 {
        local i conf="${gsu_config_file:=${HOME:-}/.$gsu_name.rc}"
 
@@ -158,7 +159,8 @@ Print the manual.
 
 Usage: man"
 
-_com_man()
+
+com_man()
 {
        local equal_signs="=================================================="
        local minus_signs="--------------------------------------------------"
@@ -216,7 +218,7 @@ written to stdout. This can be used from the completion function of
 the subcommand.
 "
 
-_com_help()
+com_help()
 {
        local a b ere tab='     '
 
@@ -398,7 +400,7 @@ gsu_getopts()
        ret=$GSU_SUCCESS
 }
 
-_com_complete()
+com_complete()
 {
        local cmd n cword
        local -a words
@@ -537,29 +539,14 @@ gsu()
        fi
        arg="$1"
        shift
-       # check internal commands
-       if [[ "$arg" = "help" || "$arg" = "man" || "$arg" = "prefs" || "$arg" = "complete" ]]; then
-               _com_$arg "$@"
+       if [[ "$(type -t com_$arg)" == 'function' ]]; then
+               com_$arg "$@"
                if (("$ret" < 0)); then
                        gsu_err_msg
                        exit 1
                fi
                exit 0
        fi
-
-       # external commands
-       for i in $gsu_cmds; do
-               if test "$arg" = "$i"; then
-                       ret=$GSU_SUCCESS
-                       com_$arg "$@"
-                       if (("$ret" < 0)); then
-                               gsu_err_msg
-                               exit 1
-                       fi
-                       exit 0
-               fi
-       done
-
        ret=-$E_GSU_BAD_COMMAND
        result="$arg"
        gsu_err_msg