#compdef ypcat ypmatch yppasswd ypwhich ypset ypserv ypbind yppush yppoll ypxfr domainname local line state ret=1 typeset -A options if (( ! $+_yp_cache_maps )); then _yp_cache_maps=( "${(@)${(@f)$(ypwhich -m)}%% *}" ) _yp_cache_nicks=( "${(@)${(@)${(@f)$(ypwhich -x)}#*\"}%%\"*}" ) _yp_args=( '(-x)-d[specify domain]:domain name:' \ '(-x)-k[display keys]' \ '(-x)-t[inhibit nicknames]' \ '(: -d -k -t)-x[display nicknames]' \ ) fi case "$words[1]" in ypcat) _arguments -s "$_yp_args[@]" ':map name:->map' && ret=0 ;; ypmatch) _arguments -s "$_yp_args[@]" '*::key map:->keymap' && ret=0 ;; yppasswd) _users return ;; ypwhich) _arguments \ '(-x)-d[specify domain]:domain name:' \ '(-x -V2 -m -t)-V1[identify version 1 servers]' \ '(-x -V1 -m -t)-V2[identify version 2 servers]' \ '(: -x -V1 -V2 -m)-t[specify map name]:map name:->maponly' \ '(: -x -V1 -V2 -t)-m[specify map or nick name]:map or nick name:->map' \ '(: -d -m -t -V1 -V2)-x[display nicknames]' \ ':host:_hosts' && ret=0 ;; ypset) _arguments \ '(-V2)-V1[bind version 1 servers]' \ '(-V1)-V2[bind version 2 servers]' \ '-d[specify domain]:domain name:' \ '-h[specify host]:set binding on host:_hosts' \ ':server:_hosts' && ret=0 ;; ypserv) _arguments \ '-a[specify database routines]:database routines:((b\:btree d\:dbm/ndbm h\:hash))' && ret=0 ;; ypbind) _arguments \ '-s[allow secure mode for ypbind]' \ '-S[set domain and servers]:domain:->servers' \ '(-ypsetme)-ypset[accept all ypset requests]' \ '(-ypset)-ypsetme[accept only local ypset requests]' && ret=0 ;; yppush) _arguments \ '-d[specify domain]:domain name:' \ '-v[print messages]' \ ':map name:->map' && ret=0 ;; yppoll) _arguments \ '-d[specify domain]:domain name:' \ '-h[specify host]:ask server on host:_hosts' \ ':map name:->map' && ret=0 ;; ypxfr) _arguments \ '-a[specify database routines]:database routines:((b\:btree d\:dbm/ndbm h\:hash))' \ '-f[force transfer]' \ '-c[don'"'"'t clear current map]' \ '-d[specify domain]:domain name:' \ '-h[specify host]:get map from host:_hosts' \ '-C[call back]:transaction ID: :program number: :IP address: :port number:' \ ':map name:->map' && ret=0 ;; domainname) _message 'new domain name' return 1 ;; esac [[ "$state" = keymap ]] && _message 'key' if [[ "$state" = map* ]]; then local expl _description expl 'map name' compadd "$expl[@]" - "$_yp_cache_maps[@]" && ret=0 if [[ $+options[-t] -eq 0 && "$state" != maponly ]]; then _description expl 'nicknames' compadd "$expl[@]" - "$_yp_cache_nicks[@]" && ret=0 fi elif [[ "$state" = servers ]]; then if compset -P '*,'; then _description expl 'server' _hosts -qS, && ret=0 else _message 'domain name' fi fi return ret