mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-06-16 08:48:06 +02:00
66 lines
2.2 KiB
Text
66 lines
2.2 KiB
Text
#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='(Free Soft|GNU|GLIBC|Gentoo)' unix --version; then
|
|
args+=(
|
|
'(- 1 *)'{-\?,--help}'[display help information]'
|
|
'(-A --no-addrconfig)'{-A,--no-addrconfig}"[don't filter out unsupported IPv4/IPv6 addresses (with ahosts*)]"
|
|
'(- 1 *)--usage[display a short usage message]'
|
|
'(- 1 *)'{-V,--version}'[display version information]'
|
|
'*'{-s+,--service=}'[specify service configuration to use]: :->services'
|
|
'(-i --no-idn)'{-i,--no-idn}'[disable IDN encoding]'
|
|
)
|
|
fi
|
|
|
|
_arguments -s -S -C "$args[@]" \
|
|
'1:database:->databases' \
|
|
'*:key:->keys' && ret=0
|
|
|
|
case $state in
|
|
services)
|
|
# @todo GNU getent supports both `-s svc` and `-s db:svc`; we only complete
|
|
# the former here
|
|
services=( {,/usr}/lib{,64}/{,*-linux-gnu/}libnss_*(N-.:fr:t:s/libnss_//) )
|
|
_wanted services expl 'service or database:service' \
|
|
compadd ${(u)services%-*} \
|
|
&& ret=0
|
|
;;
|
|
databases)
|
|
if [[ $is_gnu = gnu ]]; then
|
|
databases=( "${(@)${(@f)$(_call_program databases $words[1] --help \
|
|
2>/dev/null)}[(r)Supported*,-1]}" )
|
|
databases=( "${=${(@)databases[2,${(@)databases[(i)]}-1]}}" )
|
|
elif [[ $OSTYPE = freebsd* ]]; then
|
|
databases=( ${=${(f)"$(_call_program databases $words[1] 2>&1)"}[-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
|
|
;;
|
|
utmpx)
|
|
if (( CURRENT > 3 )); then
|
|
_files && ret=0
|
|
else
|
|
_wanted keys expl key compadd active lastlogin log && ret=0
|
|
fi
|
|
;;
|
|
*) _message -e keys key;;
|
|
esac
|
|
;;
|
|
esac
|
|
|
|
return ret
|