diff --git a/completions/_adb b/completions/_adb index d1e3a8af5c6..f44c457fea1 100644 --- a/completions/_adb +++ b/completions/_adb @@ -5,9 +5,9 @@ _comp_cmd_adb__command_usage() { - COMPREPLY=($(compgen -W \ - '$("$1" help 2>&1 | command grep "^ *\(adb \)\? *$2 " \ - | command sed -e "s/[]|[]/\n/g" | _parse_help -)' -- "$cur")) + COMPREPLY=($(compgen -W '$("$1" help 2>&1 | \ + command sed -e "/^ *\(adb \)\{0,1\} *$2 /!d;s/[]|[]/\n/g" | \ + _parse_help -)' -- "$cur")) } _comp_cmd_adb() diff --git a/completions/_udevadm b/completions/_udevadm index 0b207c1f1bf..7559404e29e 100644 --- a/completions/_udevadm +++ b/completions/_udevadm @@ -8,7 +8,7 @@ _comp_cmd_udevadm() local cur prev words cword was_split comp_args _comp_initialize -s -- "$@" || return - local i udevcmd has_udevcmd="" + local i udevcmd="" has_udevcmd="" for ((i = 1; i < cword; i++)); do if [[ ${words[i]} != -* ]]; then udevcmd=${words[i]} @@ -69,7 +69,7 @@ _comp_cmd_udevadm() if [[ $cur == -* ]]; then COMPREPLY=($(compgen -W \ - '$("$1" ${udevcmd-} --help 2>/dev/null | _parse_help -)' -- "$cur")) + '$(_parse_help "$1" "${udevcmd-} --help")' -- "$cur")) [[ ${COMPREPLY-} == *= ]] && compopt -o nospace fi } && diff --git a/completions/badblocks b/completions/badblocks index 431723b1200..108b8915877 100644 --- a/completions/badblocks +++ b/completions/badblocks @@ -17,7 +17,7 @@ _comp_cmd_badblocks() if [[ $cur == -* ]]; then # Filter out -w (dangerous) and -X (internal use) - COMPREPLY=($(compgen -X -[wX] -W '$(_parse_usage "$1")' -- "$cur")) + COMPREPLY=($(compgen -X '-[wX]' -W '$(_parse_usage "$1")' -- "$cur")) return fi diff --git a/completions/complete b/completions/complete index 772aa0655c8..0e3f9d77162 100644 --- a/completions/complete +++ b/completions/complete @@ -40,7 +40,7 @@ _comp_cmd_complete() local -a opts=($(compgen -W '$(_parse_usage help "-s $1")' -- "$cur")) # -F, -C do not work the expected way with compgen [[ $1 != *compgen ]] || opts=("${opts[@]//-[FC]/}") - COMPREPLY=($(compgen -W '"${opts[@]}"' -- "$cur")) + COMPREPLY=($(compgen -W '"${opts[@]}"' -X '' -- "$cur")) else COMPREPLY=($(compgen -A command -- "$cur")) fi diff --git a/completions/gnokii b/completions/gnokii index c45f6b31e2f..785631c17c1 100644 --- a/completions/gnokii +++ b/completions/gnokii @@ -221,14 +221,18 @@ _comp_cmd_gnokii() esac fi - # safer to use LANG=C - local all_cmd="$(LANG=C _parse_help "$1" "--help all")" - # these 2 below are allowed in combination with others - local main_cmd=$(command grep -v -- '--config\|--phone' <<<"$all_cmd") + local all_cmd="$(_parse_help "$1" "--help all")" + # these 2 below are allowed in combination with others + local main_cmd + _comp_split -l main_cmd "$(command sed -e '/--config/d;/--phone/d' -e \ + 's/[][\(){}|^$*+?.]/\\&/g' <<<"$all_cmd")" # don't provide main command completions if one is # already on the command line - [[ $COMP_LINE =~ $(tr ' ' '\b|' <<<"$main_cmd") ]] && return + local IFS='|' + local regex_main_cmd="(${main_cmd[*]})($|[^_[:alnum:]])" + IFS=$' \t\n' + [[ $COMP_LINE =~ $regex_main_cmd ]] && return COMPREPLY=($(compgen -W "$all_cmd" -- "$cur")) } && diff --git a/completions/postfix b/completions/postfix index 7b445ff54c5..d5899742145 100644 --- a/completions/postfix +++ b/completions/postfix @@ -17,11 +17,8 @@ _comp_cmd_postfix() esac if [[ $cur == -* ]]; then - COMPREPLY=($( - compgen -W \ - '$(_bashcomp_try_faketty "$1" --help 2>&1 | _parse_usage -)' \ - -- "$cur" - )) + COMPREPLY=($(compgen -W \ + '$(_parse_usage _bashcomp_try_faketty "$1 --help")' -- "$cur")) return fi