]> git.tuebingen.mpg.de Git - gsu.git/blobdiff - funcs/gsu
gsu: Print the name of the invalid config variable on errors.
[gsu.git] / funcs / gsu
index 043676c4b303ae4dc8e49160bfa11bc066f8ac2b..b80fc919659c008420cc54d79890ea7d14ae4d7f 100644 (file)
--- a/funcs/gsu
+++ b/funcs/gsu
@@ -163,6 +163,7 @@ com_prefs()
                        printf " [$default_value]"
                fi
                echo
+               [[ -n "$help_text" ]] && sed -e '/^[    ]*$/d; s/^[     ]*/#    /g' <<< "$help_text"
                printf "$name=$val"
                [[ "$val" == "$default_value" ]] && printf " # default"
                echo
@@ -283,14 +284,20 @@ export -f com_help
 # for errors and parses the config file.
 _gsu_check_options()
 {
-       local i conf="${gsu_config_file:=$HOME/.$gsu_name.rc}"
+       local i conf="${gsu_config_file:=$HOME/.$gsu_name.rc}" val
+
+       for ((i=0; i < ${#gsu_options[@]}; i++)); do
+               eval "${gsu_options[$i]}"
+               eval val='"'\$$name'"'
+               eval orig_${gsu_config_var_prefix}_$name='"'${val}'"'
+       done
 
        [[ -r "$conf" ]] && source "$conf"
 
        for ((i=0; i < ${#gsu_options[@]}; i++)); do
                local name= option_type= default_value= required=
                local description= help_text=
-               local val
+               local val orig_val
 
                eval "${gsu_options[$i]}"
 
@@ -299,12 +306,17 @@ _gsu_check_options()
                # only.  Moreover it must not start with [a-zA-Z].
 
                ret=-$E_GSU_BAD_CONFIG_VAR
-               result="$name"
+               result="name: '$name'"
                # bash's =~ works only for 3.2 and newer, so use grep
                echo "$name" | grep '^[a-zA-Z][a-zA-Z_0123456789]*$' &> /dev/null;
                [[ $? -ne 0 ]] && return
 
-               eval val='"'\$$name'"'
+               eval orig_val='"'\$orig_${gsu_config_var_prefix}_$name'"'
+               if [[ -z "$orig_val" ]]; then
+                       eval val='"'\$$name'"'
+               else
+                       val="$orig_val"
+               fi
                case "$required" in
                true|yes)
                        ret=-$E_GSU_NEED_VALUE
@@ -319,8 +331,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
@@ -350,7 +361,7 @@ gsu()
        _gsu_init_errors
        _gsu_check_options
        if [[ "$ret" -lt 0 ]]; then
-               if [[ "$1" != "help" && "$1" != "man" && "$1" != "prefs" ]]; then
+               if [[ "$1" != "help" && "$1" != "man" ]]; then
                        gsu_err_msg
                        exit 1
                fi