57 lines
1.4 KiB
Bash
57 lines
1.4 KiB
Bash
# bash completion for doas(8) -*- shell-script -*-
|
|
|
|
_doas()
|
|
{
|
|
local cur prev words cword split
|
|
_init_completion -s || return
|
|
|
|
local i mode=normal
|
|
|
|
[[ $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 _doas doas
|
|
|
|
# ex: filetype=sh
|
|
|