#compdef whois _whois () { setopt localoptions extendedglob _whois_setup $_whois_comp } builtin functions _whois_setup >&- || _whois_setup () { (( $+_whois_defaultserver )) || _whois_defaultserver='whois.internic.net' (( $+_whois_servers )) || { typeset -gUa _whois_servers _whois_servers=( $_whois_defaultserver domain-registry.nl is.nic.pw whois.apnic.net:p whois.arin.net:a whois.aunic.net whois.berkeley.edu whois.cdnnet.ca whois.dns.pt whois.funet.fi whois.gb.com whois.gb.net whois.internic.net whois.jpl.nasa.gov whois.nic-se.se whois.nic.ad.jp whois.nic.af whois.nic.as whois.nic.br whois.nic.bt whois.nic.ch whois.nic.cx whois.nic.fr whois.nic.gov:g whois.nic.hm whois.nic.it whois.nic.li whois.nic.lk whois.nic.mil:d whois.nic.mx whois.nic.nu whois.nic.or.kr whois.nic.sh whois.nic.tj whois.nic.tm whois.nic.uk whois.ripe.net:r whois.ripn.net:R whois.sics.se whois.stanford.edu whois.uk.com www.nic.at $(functions -m '_whois:*' | awk '/^undefined _whois:/ {print substr($2,8,length($2)-7)} /^_whois:/ {print substr($1,8,length($1)-7)}') ) } (( $+_whois_arguments )) || { local help="$(whois &1)" local tmp opt opts if [[ $help = *"user[@]"* ]]; then _whois_comp=_whois_fwhois elif [[ $help = *(name\ ...|OBJECT...)* ]]; then _whois_comp=_whois_multi else _whois_comp=_whois_single fi _whois_arguments=() if [[ $help = *"-p PORT"* ]]; then _whois_arguments=("$_whois_arguments[@]" '-p[port]:port:_whois_ports' ) fi tmp="${(j::)${(@)${(@M)_whois_servers:#*:?}##*:}}" if [[ $help = (#b)*\[-([$tmp]##)\]* ]]; then tmp=(${(s::)match[1]}) else tmp=() fi if [[ $help = *"-h host"* ]]; then tmp=($tmp h) fi for opt in $tmp; do opts=(-${^tmp:#$opt}) if (( $#opts )); then opts="($opts)"; else opts=; fi _whois_arguments=("$_whois_arguments[@]" "${opts}-${opt}[${${${(@M)_whois_servers:#*:$opt}%:?}:-specify host}]${(M)${(M)opt:#h}/h/:host:_whois_hosts}" ) done } } _whois_single () { local state line expl typeset -A opt_args local tmp host _arguments \ "$_whois_arguments[@]" \ ':identifier:->identifier' case "$state" in identifier) if [[ -z "$QIPREFIX" ]]; then compadd -QS '' \' return fi compset -q host="${opt_args[-h]:-$_whois_defaultserver}" for tmp in $_whois_servers; do if [[ $tmp = *:? && $+opt_args[-${tmp##*:}] -ne 0 ]]; then host="${tmp%:?}" break fi done if builtin functions "_whois:$host" >&-; then "_whois:$host" "$expl[@]" else _message "identifier" fi ;; esac } _whois_multi () { local state line expl typeset -A opt_args local tmp host _arguments \ "$_whois_arguments[@]" \ '*::identifier:->identifier' case "$state" in identifier) host="${opt_args[-h]:-$_whois_defaultserver}" for tmp in $_whois_servers; do if [[ $tmp = *:? && $+opt_args[-${tmp##*:}] -ne 0 ]]; then host="${tmp%:?}" break fi done if builtin functions "_whois:$host" >&-; then "_whois:$host" "$expl[@]" else _message "identifier" fi ;; esac } _whois_fwhois () { if compset -P '*@'; then _whois_hosts "$@" else if [[ -z "$QIPREFIX" ]]; then compadd -QS '' \' return fi compset -q host="$_whois_defaultserver" if builtin functions "_whois:$host" >&-; then "_whois:$host" "$@" else _message "identifier" fi fi } _whois_hosts () { compadd "$@" \ -M 'm:{a-zA-Z}={A-Za-z} r:|.=* r:|=*' \ - ${_whois_servers%:?} || _hosts "$@" } _whois_ports () { compadd "$@" - whois || _ports "$@" } builtin functions _whois:whois.internic.net >&- || _whois:whois.internic.net () { if (( CURRENT == 1 )); then compadd HELP DOMAIN HOST else _message 'string' fi } builtin functions _whois:whois.nic.ad.jp >&- || _whois:whois.nic.ad.jp () { if (( CURRENT == 1 )); then compadd HELP DOM NET HOST PERSON CONN COM else _message 'string' fi } _whois "$@"