X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=misc%2Fgsu%2Fsubcommand;h=84c0174ccbdaaf5b7ef8e22bb1a032b485b4c46e;hb=0f548f1367bfdba2e270242bb0fccad1da5f8adf;hp=7e706d84b18411436d4fe728f348d3fbba77123d;hpb=f4d2c03b5e733444d1ed925f7bef3d981de27103;p=gsu.git diff --git a/misc/gsu/subcommand b/misc/gsu/subcommand index 7e706d8..84c0174 100644 --- a/misc/gsu/subcommand +++ b/misc/gsu/subcommand @@ -92,7 +92,13 @@ _com_prefs() { local i conf="${gsu_config_file:=$HOME/.$gsu_name.rc}" - if [[ "$1" = "-e" ]]; then + gsu_getopts "e" + eval "$result" + (($ret < 0)) && return + gsu_check_arg_count $# 0 0 + (($ret < 0)) && return + + if [[ "$o_e" == "true" ]]; then ret=-$E_GSU_MKDIR result="${conf%/*}" mkdir -p "$result" @@ -394,7 +400,7 @@ gsu_getopts() _com_complete() { - local cmd n cword="$1" + local cmd n cword local -a words if (($# == 0)); then @@ -405,9 +411,13 @@ _com_complete() candidates=(\$($0 complete "\$COMP_CWORD" "\${COMP_WORDS[@]}")); COMPREPLY=(\$(compgen -W "\${candidates[*]}" -- "\$cur")); EOF + ret=$GSU_SUCCESS + return fi - [[ -z "$cword" ]] && return + cword="$1" + gsu_is_a_number "$cword" + (($ret < 0)) && return if (($cword <= 1)); then _gsu_available_commands echo "${result}" @@ -424,6 +434,15 @@ EOF ret=$GSU_SUCCESS } +# Find out if the current word is a parameter for an option. +# +# $1: usual getopts option string. +# $2: The current word number. +# $3..: All words of the current command line. +# +# return: If yes, $result contains the letter of the option for which the +# current word is a parameter. Otherwise, $result is empty. +# gsu_cword_is_option_parameter() { local opts="$1" cword="$2" prev i n @@ -439,7 +458,7 @@ gsu_cword_is_option_parameter() [[ ! "$prev" == -* ]] && return n=$((${#opts} - 1)) - for ((i=0; i < $n; i++)); do + for ((i=0; i <= $n; i++)); do opt="${opts:$i:1}" [[ "${opts:$(($i + 1)):1}" != ":" ]] && continue let i++