summaryrefslogtreecommitdiffstats
path: root/completions/sudo
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--completions/sudo56
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