summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSven Wischnowsky <wischnow@users.sourceforge.net>2001-04-02 12:06:01 +0000
committerSven Wischnowsky <wischnow@users.sourceforge.net>2001-04-02 12:06:01 +0000
commit6b32e16f194d026470e37a4d1462e869cdf05bdb (patch)
treeb1a0f2023f727c8f76248c90181ae913af72e8e9
parent9ff6f73325852dd7264bc7c063608611a9e9ad40 (diff)
downloadzsh-6b32e16f194d026470e37a4d1462e869cdf05bdb.tar.gz
zsh-6b32e16f194d026470e37a4d1462e869cdf05bdb.zip
moved from Completion/User/_whois
-rw-r--r--Completion/Unix/Command/_whois224
1 files changed, 224 insertions, 0 deletions
diff --git a/Completion/Unix/Command/_whois b/Completion/Unix/Command/_whois
new file mode 100644
index 000000000..76d5a5b4a
--- /dev/null
+++ b/Completion/Unix/Command/_whois
@@ -0,0 +1,224 @@
+#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 "$@"