Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
PATCH: _whois
- X-seq: zsh-workers 8296
- From: Tanaka Akira <akr@xxxxxxxxxxx>
- To: zsh-workers@xxxxxxxxxxxxxx
- Subject: PATCH: _whois
- Date: 16 Oct 1999 14:12:17 +0900
- Mailing-list: contact zsh-workers-help@xxxxxxxxxxxxxx; run by ezmlm
I wrote a completion function for whois.
Since whois has many variant (than telnet), it may not support some
variant. I saw FreeBSD, BSD/OS, SunOS, Slackware and Debian for
reference. At least it doesn't support ripe-whois enough yet.
--- /dev/null Sat Oct 16 12:11:10 1999
+++ Completion/User/_whois Sat Oct 16 14:05:29 1999
@@ -0,0 +1,211 @@
+#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 </dev/null 2>&1)"
+ local tmp opt opts
+
+ if [[ $help = *"user[@<whois.server>]"* ]]; 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 "$@"
--
Tanaka Akira
Messages sorted by:
Reverse Date,
Date,
Thread,
Author