2006-01-25 07:01:33 +08:00
#
# Completion for sudo
#
2018-06-14 00:55:00 +08:00
function __fish_sudo_print_remaining_args
set -l tokens ( commandline -opc ) ( commandline -ct )
set -e tokens [ 1 ]
# These are all the options mentioned in the man page for Todd Miller's "sudo.ws" sudo (in that order).
# If any other implementation has different options, this should be harmless, since they shouldn't be used anyway.
2019-02-21 05:28:55 +08:00
set -l opts A/askpass b/background C/close-from = E/preserve-env = '?'
2018-06-14 00:55:00 +08:00
# Note that "-h" is both "--host" (which takes an option) and "--help" (which doesn't).
# But `-h` as `--help` only counts when it's the only argument (`sudo -h`),
# so any argument completion after that should take it as "--host".
set -a opts e/edit g/group = H/set-home h/host = '1-help'
set -a opts i/login K/remove-timestamp k/reset-timestamp l/list n/non-interactive
set -a opts P/preserve-groups p/prompt = S/stdin s/shell U/other-user =
set -a opts u/user = T/command -timeout = V/version v/validate
argparse -s $opts -- $tokens 2 > /dev/null
# The remaining argv is the subcommand with all its options, which is what
# we want.
if test -n " $argv "
and not string match -qr '^-' $argv [ 1 ]
echo $argv
return 0
else
return 1
end
end
2007-01-28 11:26:52 +08:00
2018-06-14 00:55:00 +08:00
function __fish_sudo_no_subcommand
not __fish_sudo_print_remaining_args > /dev/null
end
2018-05-23 06:29:12 +08:00
2018-06-14 00:55:00 +08:00
function __fish_complete_sudo_subcommand
set -l args ( __fish_sudo_print_remaining_args )
complete -C " $args "
2018-05-18 09:19:31 +08:00
end
2018-06-14 00:55:00 +08:00
# All these options should be valid for GNU and OSX sudo
complete -c sudo -n "__fish_no_arguments" -s h -d "Display help and exit"
complete -c sudo -n "__fish_no_arguments" -s V -d "Display version information and exit"
complete -c sudo -n "__fish_sudo_no_subcommand" -s A -d "Ask for password via the askpass or \$SSH_ASKPASS program"
complete -c sudo -n "__fish_sudo_no_subcommand" -s C -d "Close all file descriptors greater or equal to the given number" -a "(seq 0 255)"
complete -c sudo -n "__fish_sudo_no_subcommand" -s E -d "Preserve environment"
complete -c sudo -n "__fish_sudo_no_subcommand" -s H -d "Set home"
complete -c sudo -n "__fish_sudo_no_subcommand" -s K -d "Remove the credential timestamp entirely"
complete -c sudo -n "__fish_sudo_no_subcommand" -s P -d "Preserve group vector"
complete -c sudo -n "__fish_sudo_no_subcommand" -s S -d "Read password from stdin"
complete -c sudo -n "__fish_sudo_no_subcommand" -s b -d "Run command in the background"
2019-05-31 01:14:33 +08:00
complete -c sudo -n "__fish_sudo_no_subcommand" -s e -rF -d "Edit"
2018-06-14 00:55:00 +08:00
complete -c sudo -n "__fish_sudo_no_subcommand" -s g -a "(__fish_complete_groups)" -x -d "Run command as group"
complete -c sudo -n "__fish_sudo_no_subcommand" -s i -d "Run a login shell"
complete -c sudo -n "__fish_sudo_no_subcommand" -s k -d "Reset or ignore the credential timestamp"
complete -c sudo -n "__fish_sudo_no_subcommand" -s l -d "List the allowed and forbidden commands for the given user, or the full path to the given command if it is allowed"
complete -c sudo -n "__fish_sudo_no_subcommand" -s n -d "Do not prompt for a password - if one is needed, fail"
complete -c sudo -n "__fish_sudo_no_subcommand" -s p -d "Specify a custom password prompt"
complete -c sudo -n "__fish_sudo_no_subcommand" -s s -d "Run the given command in a shell"
complete -c sudo -n "__fish_sudo_no_subcommand" -s u -a "(__fish_complete_users)" -x -d "Run command as user"
complete -c sudo -n "__fish_sudo_no_subcommand" -s v -n "__fish_no_arguments" -d "Validate the credentials, extending timeout"
# Complete the command we are executed under sudo
complete -c sudo -x -a "(__fish_complete_sudo_subcommand)"