]> git.tuebingen.mpg.de Git - gsu.git/blobdiff - subcommand
Simplify arithmetic evaluation.
[gsu.git] / subcommand
index a07f4145c69adb6fa319dbdaa9c97e3b0a2d5cde..5e55580013dad9ec224e8c11a8e191b18c00428e 100644 (file)
@@ -100,7 +100,7 @@ gsu_getopts()
 '
 
        gsu_check_arg_count $# 1 1
-       if (($ret < 0)); then
+       if ((ret < 0)); then
                gsu_err_msg
                exit 1
        fi
@@ -126,7 +126,7 @@ gsu_getopts()
        result="local _gsu_getopts_opt"
        for ((i=0; i < ${#1}; i++)); do
                c1=${1:$i:1}
-               c2=${1:$(($i + 1)):1}
+               c2=${1:$((i + 1)):1}
                result+=" o_$c1="
                if [[ "$c2" = ":" ]]; then
                        let i++
@@ -141,7 +141,7 @@ gsu_getopts()
 "
        for ((i=0; i < ${#1}; i++)); do
                c1=${1:$i:1}
-               c2=${1:$(($i + 1)):1}
+               c2=${1:$((i + 1)):1}
                result+="$tab$tab$c1) o_$c1="
                if [[ "$c2" = ":" ]]; then
                        result+="\"\$OPTARG\""
@@ -175,7 +175,7 @@ _gsu_print_available_commands()
        for cmd in $cmds; do
                printf '%s' "$cmd"
                let ++count
-               if (($count % 4)); then
+               if ((count % 4)); then
                        printf '\t'
                        ((${#cmd} < 8)) && printf '\t'
                else
@@ -187,6 +187,8 @@ _gsu_print_available_commands()
 
 # Print all options of the given optstring to stdout if the word in the current
 # command line begins with a hyphen character.
+#
+# Returns 0 if the current word does not start with a hyphen, one otherwise.
 gsu_complete_options()
 {
        local opts="$1" cword="$2" cur opt
@@ -198,13 +200,12 @@ gsu_complete_options()
        ret=0
        [[ ! "$cur" == -* ]] && return
 
-       ret=0
        for ((i=0; i < ${#opts}; i++)); do
                opt="${opts:$i:1}"
                [[ "$opt" == ":" ]] && continue
                printf "%s" "-$opt "
-               let ret++
        done
+       ret=1
 }
 
 com_prefs_options='e'
@@ -225,9 +226,9 @@ com_prefs()
 
        gsu_getopts "$com_prefs_options"
        eval "$result"
-       (($ret < 0)) && return
+       ((ret < 0)) && return
        gsu_check_arg_count $# 0 0
-       (($ret < 0)) && return
+       ((ret < 0)) && return
 
        if [[ "$o_e" == "true" ]]; then
                ret=-$E_GSU_MKDIR
@@ -255,7 +256,7 @@ com_prefs()
                        printf "# optional"
                        ;;
                esac
-               printf "%s: %s" "$option_type" "$description"
+               printf " %s: %s" "$option_type" "$description"
                if [[ "$required" != "yes" && "$required" != "true" ]]; then
                        printf " [%s]" "$default_value"
                fi
@@ -293,7 +294,7 @@ Print the manual.
 
 Usage: man [-m <mode>] [-b <browser>]
 
--m: Set output format (text, roff or html). Default: text.
+-m: Set output format (text, roff or html). Default: roff.
 -b: Use the specified browser. Implies html mode.
 
 If stdout is not associated with a terminal device, the command
@@ -309,9 +310,6 @@ file is displayed as a page in the web browser. If -b is not given,
 the command stored in the $BROWSER environment variable is executed
 with the path to the temporary file as an argument. If $BROWSER is
 unset, elinks(1) is assumed.
-
-It is recommended to specify the output format with -m as the default
-mode might change in future versions of gsu.
 '
 
 _gsu_read_line()
@@ -522,7 +520,7 @@ com_man()
                o_m='html'
                browser="$o_b"
        elif [[ -z "$o_m" ]]; then
-               o_m='text'
+               o_m='roff'
        fi
 
        _gsu_isatty && isatty='true' || isatty='false'
@@ -597,7 +595,7 @@ com_man()
        _gsu_available_commands
        for com in $result; do
                num=${#com}
-               (($num < 4)) && num=4
+               ((num < 4)) && num=4
                echo "${minus_signs:0:$num}"
                echo "$com"
                echo "${minus_signs:0:$num}"
@@ -738,7 +736,12 @@ com_complete()
                local -a candidates;
 
                candidates=(\$($0 complete "\$COMP_CWORD" "\${COMP_WORDS[@]}"));
-               COMPREPLY=(\$(compgen -W "\${candidates[*]}" -- "\$cur"));
+               if ((\$? == 0)); then
+                       COMPREPLY=(\$(compgen -W "\${candidates[*]}" -- "\$cur"));
+               else
+                       compopt -o filenames;
+                       COMPREPLY=(\$(compgen -fd -- "\$cur"));
+               fi
 EOF
                ret=$GSU_SUCCESS
                return
@@ -746,8 +749,8 @@ EOF
 
        cword="$1"
        gsu_is_a_number "$cword"
-       (($ret < 0)) && return
-       if (($cword <= 1)); then
+       ((ret < 0)) && return
+       if ((cword <= 1)); then
                _gsu_available_commands
                echo "${result}"
                ret=$GSU_SUCCESS
@@ -756,8 +759,9 @@ EOF
        shift
        words=("$@")
        cmd="${words[1]}"
-       ret=$GSU_SUCCESS # It's not an error if no completer was defined
-       [[ "$(type -t "complete_$cmd")" != "function" ]] && return
+       # if no completer is defined for this subcommand we exit unsuccessfully
+       # to let the generic completer above fall back to file name completion.
+       [[ "$(type -t "complete_$cmd")" != "function" ]] && exit 1
        "complete_$cmd" "$cword" "${words[@]}"
        # ignore errors, they would only clutter the completion output
        ret=$GSU_SUCCESS
@@ -779,18 +783,18 @@ gsu_cword_is_option_parameter()
        local -a words
 
        result=
-       (($cword == 0)) && return
+       ((cword == 0)) && return
        ((${#opts} < 2)) && return
 
        shift 2
        words=("$@")
-       prev="${words[$(($cword - 1))]}"
+       prev="${words[$((cword - 1))]}"
        [[ ! "$prev" == -* ]] && return
 
        n=$((${#opts} - 1))
        for ((i=0; i <= $n; i++)); do
                opt="${opts:$i:1}"
-               [[ "${opts:$(($i + 1)):1}" != ":" ]] && continue
+               [[ "${opts:$((i + 1)):1}" != ":" ]] && continue
                let i++
                [[ ! "$prev" =~ ^-.*$opt$ ]] && continue
                result="$opt"
@@ -821,13 +825,13 @@ gsu_get_unnamed_arg_num()
        shift 2
        words=("$@")
        cur="${words[$cword]}"
-       prev="${words[$(($cword - 1))]}"
+       prev="${words[$((cword - 1))]}"
        result=-1
        [[ "$cur" == -* ]] && return
        [[ "$prev" == -* ]] && [[ "$opts" == *${prev#-}:* ]] && return
 
        for ((i=1; i <= $cword; i++)); do
-               prev="${words[$(($i - 1))]}"
+               prev="${words[$((i - 1))]}"
                cur="${words[$i]}"
                [[ "$cur" == -* ]] && continue
                if [[ "$prev" == -* ]]; then
@@ -837,7 +841,7 @@ gsu_get_unnamed_arg_num()
                fi
                let n++
        done
-       result="$(($n - 1))"
+       result="$((n - 1))"
 }
 
 # Entry point for all gsu-based scripts.
@@ -868,7 +872,7 @@ gsu()
        shift
        if [[ "$(type -t "com_$arg")" == 'function' ]]; then
                "com_$arg" "$@"
-               if (("$ret" < 0)); then
+               if ((ret < 0)); then
                        gsu_err_msg
                        exit 1
                fi