1
0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-11-19 21:44:11 +01:00
zsh/Completion/Unix/Command/_getent

51 lines
1.5 KiB
Plaintext
Raw Normal View History

#compdef getent
local curcontext="$curcontext" state line expl ret=1
local services databases keys
local -a args
typeset -A opt_args
if _pick_variant -r is_gnu gnu=GNU unix --version; then
args+=(
'(- 1 *)'{-\?,--help}'[display help information]'
'(- 1 *)--usage[display a short usage message]'
'(- 1 *)'{-V,--version}'[display version information]'
{-s,--service=}'[specify service configuration to use]:service:->services'
)
fi
_arguments -C "$args[@]" \
'1:database:->databases' \
'*:key:->keys' && ret=0
case $state in
services)
services=( /lib/libnss*(-.:fr:t:s/libnss_//) )
_wanted services expl service compadd ${services%-*} && ret=0
;;
databases)
if [[ $is_gnu = gnu ]]; then
databases=( ${=${${(f)"$(_call_program databases $words[1] --help \
2>/dev/null)"}[(r)Supported*,-1]}[2,-1]} )
else
databases=( passwd group hosts ipnodes services protocols ethers networks netmasks )
fi
_wanted databases expl database compadd -a databases && ret=0
;;
keys)
keys=( ${(f)"$(_call_program keys $words[1] ${(kv)opt_args[(i)-s|--service]} $line[1] 2>/dev/null)"} )
case $line[1] in
*hosts) _wanted keys expl key compadd ${=keys#* } && ret=0 ;;
networks|rpc|protocols|services)
_wanted keys expl key compadd ${=keys%% *} && ret=0
;;
aliases|passwd|shadow|group)
_wanted keys expl key compadd ${keys%%:*} && ret=0
;;
*) _message -e keys key;;
esac
;;
esac
return ret