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.
 "
 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}"
 
 {
        local i conf="${gsu_config_file:=${HOME:-}/.$gsu_name.rc}"
 
@@ -158,7 +159,8 @@ Print the manual.
 
 Usage: man"
 
 
 Usage: man"
 
-_com_man()
+
+com_man()
 {
        local equal_signs="=================================================="
        local minus_signs="--------------------------------------------------"
 {
        local equal_signs="=================================================="
        local minus_signs="--------------------------------------------------"
@@ -216,7 +218,7 @@ written to stdout. This can be used from the completion function of
 the subcommand.
 "
 
 the subcommand.
 "
 
-_com_help()
+com_help()
 {
        local a b ere tab='     '
 
 {
        local a b ere tab='     '
 
@@ -398,7 +400,7 @@ gsu_getopts()
        ret=$GSU_SUCCESS
 }
 
        ret=$GSU_SUCCESS
 }
 
-_com_complete()
+com_complete()
 {
        local cmd n cword
        local -a words
 {
        local cmd n cword
        local -a words
@@ -537,29 +539,14 @@ gsu()
        fi
        arg="$1"
        shift
        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
                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
        ret=-$E_GSU_BAD_COMMAND
        result="$arg"
        gsu_err_msg