]> git.tuebingen.mpg.de Git - gsu.git/blobdiff - misc/gsu/subcommand
gsu: Add missing declaration of a local variable.
[gsu.git] / misc / gsu / subcommand
index 84c0174ccbdaaf5b7ef8e22bb1a032b485b4c46e..43f7df77baf05e6fb3bcdad2a6907b20ee37ab02 100644 (file)
@@ -62,7 +62,7 @@ _gsu_print_available_commands()
 
 gsu_complete_options()
 {
-       local opts="$1" cword="$2" cur
+       local opts="$1" cword="$2" cur opt
        local -a words
 
        shift 2
@@ -115,7 +115,7 @@ _com_prefs()
                local name= option_type= default_value= required=
                local description= help_text=
                eval "${gsu_options[$i]}"
-               eval val='"$'${gsu_config_var_prefix}_$name'"'
+               eval val='"${'${gsu_config_var_prefix}_$name:-'}"'
                case "$required" in
                true|yes)
                        printf "# required"
@@ -186,13 +186,7 @@ _com_man()
 
 _gsu_banner_msg()
 {
-       local txt="### $_gsu_self --"
-       if test -z "$gsu_banner_txt"; then
-               txt="$txt set \$gsu_banner_txt to customize this message"
-       else
-               txt="$txt $gsu_banner_txt"
-       fi
-       gsu_short_msg "$txt ###"
+       gsu_short_msg "### $_gsu_self -- ###"
 }
 
 export gsu_help_txt="
@@ -469,6 +463,47 @@ gsu_cword_is_option_parameter()
        ret=0
 }
 
+# Get the word number on which the cursor is, not counting options.
+#
+# This is useful for completing commands whose possible completions depend
+# on the word number, for example mount.
+#
+# $1:   Getopt option string.
+# $2:   The current word number.
+# $3..: All words of the current command line.
+#
+# return: If the current word is an option, or a parameter to an option,
+# this function sets $result to -1. Otherwise, the number of the non-option
+# is returned in $result.
+#
+gsu_get_unnamed_arg_num()
+{
+       local opts="$1" cword="$2" prev cur
+       local -i i n=0
+       local -a words
+
+       shift 2
+       words=("$@")
+       cur="${words[$cword]}"
+       prev="${words[$(($cword - 1))]}"
+       result=-1
+       [[ "$cur" == -* ]] && return
+       [[ "$prev" == -* ]] && [[ "$opts" == *${prev#-}:* ]] && return
+
+       for ((i=1; i <= $cword; i++)); do
+               prev="${words[$(($i - 1))]}"
+               cur="${words[$i]}"
+               [[ "$cur" == -* ]] && continue
+               if [[ "$prev" == -* ]]; then
+                       opt=${prev#-}
+                       [[ "$opts" != *$opt:* ]] && let n++
+                       continue
+               fi
+               let n++
+       done
+       result="$(($n - 1))"
+}
+
 gsu()
 {
        local i