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 198ce16..6011ee6 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