diff options
Diffstat (limited to '')
-rw-r--r-- | completions/sudo | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/completions/sudo b/completions/sudo new file mode 100644 index 0000000..c9a806b --- /dev/null +++ b/completions/sudo @@ -0,0 +1,56 @@ +# bash completion for sudo(8) -*- shell-script -*- + +_sudo() +{ + local cur prev words cword split + _init_completion -s || return + + local i mode=normal + [[ $1 == *sudoedit ]] && mode=edit + + [[ $mode == normal ]] && + for ((i = 1; i <= cword; i++)); do + if [[ ${words[i]} != -* ]]; then + local PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin + local root_command=${words[i]} + _command_offset $i + return + fi + if [[ ${words[i]} == -@(!(-*)e*|-edit) ]]; then + mode=edit + break + fi + [[ ${words[i]} == \ + -@(user|other-user|group|close-from|prompt|!(-*)[uUgCp]) ]] && + ((i++)) + done + + case "$prev" in + --user | --other-user | -!(-*)[uU]) + COMPREPLY=($(compgen -u -- "$cur")) + return + ;; + --group | -!(-*)g) + COMPREPLY=($(compgen -g -- "$cur")) + return + ;; + --close-from | --prompt | -!(-*)[Cp]) + return + ;; + esac + + $split && return + + if [[ $cur == -* ]]; then + local opts=$(_parse_help "$1") + COMPREPLY=($(compgen -W '${opts:-$(_parse_usage "$1")}' -- "$cur")) + [[ ${COMPREPLY-} == *= ]] && compopt -o nospace + return + fi + if [[ $mode == edit ]]; then + _filedir + fi +} && + complete -F _sudo sudo sudoedit + +# ex: filetype=sh |