mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-11-19 21:44:11 +01:00
225 lines
4.6 KiB
Plaintext
225 lines
4.6 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 "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 "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 "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 '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 'string'
|
|
fi
|
|
}
|
|
|
|
_whois "$@"
|