1
0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-11-19 13:33:52 +01:00
zsh/Completion/Unix/Command/_whois
2002-04-16 07:48:43 +00:00

225 lines
4.7 KiB
Plaintext

#compdef whois fwhois
_whois () {
_whois_setup
case "$0" in
fwhois) _whois_fwhois;;
*) $_whois_comp;;
esac
}
(( $+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 </dev/null 2>&1)"
local tmp opt opts
local hostopt=-h+
if [[ $help = *"user[@<whois.server>]"* ]]; then
_whois_comp=_whois_fwhois
elif [[ $help = *(name\ ...|OBJECT...)* ]]; then
_whois_comp=_whois_multi
else
_whois_comp=_whois_single
hostopt=-h
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
if [[ $opt = h ]]; then
_whois_arguments=("$_whois_arguments[@]"
"${opts}${hostopt}:host:_whois_hosts")
else
_whois_arguments=("$_whois_arguments[@]"
"${opts}-${opt}[${${(@M)_whois_servers:#*:$opt}%:?}]")
fi
done
}
}
_whois_single () {
local curcontext="$curcontext" state line expl
typeset -A opt_args
local tmp host
_arguments -C \
"$_whois_arguments[@]" \
':identifier:->identifier' && return 0
case "$state" in
identifier)
if [[ -z "$QIPREFIX" && -z "$PREFIX" ]]; 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 (( $+functions[_whois:$host] )); then
"_whois:$host" "$expl[@]"
else
_message -e identifiers "identifier"
fi
;;
esac
}
_whois_multi () {
local curcontext="$curcontext" state line expl
typeset -A opt_args
local tmp host
_arguments -C \
"$_whois_arguments[@]" \
'*::identifier:->identifier' && return 0
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 (( $+functions[_whois:$host] )); then
"_whois:$host" "$expl[@]"
else
_message -e identifiers "identifier"
fi
;;
esac
}
_whois_fwhois () {
if compset -P '*@'; then
_whois_hosts "$@"
else
if [[ -z "$QIPREFIX" && -z "$PREFIX" ]]; then
compadd -QS '' \'
return
fi
compset -q
host="$_whois_defaultserver"
if (( $+functions[_whois:$host] )); then
"_whois:$host" "$@"
else
_message -e identifiers "identifier"
fi
fi
}
_whois_hosts () {
_tags hosts &&
compadd "$@" \
-M 'm:{a-zA-Z}={A-Za-z} r:|.=* r:|=*' \
- ${_whois_servers%:?} || _hosts "$@"
}
_whois_ports () {
_tags ports && compadd "$@" - whois || _ports "$@"
}
(( $+functions[_whois:whois.internic.net] )) ||
_whois:whois.internic.net () {
if (( CURRENT == 1 )); then
local expl
_wanted strings expl string compadd HELP DOMAIN HOST
else
_message -e strings 'string'
fi
}
(( $+functions[_whois:whois.nic.ad.jp] )) ||
_whois:whois.nic.ad.jp () {
if (( CURRENT == 1 )); then
local expl
_wanted strings expl string compadd HELP DOM NET HOST PERSON CONN COM
else
_message -e strings 'string'
fi
}
_whois "$@"