#compdef telnet # Parameter used: # # telnet_hosts_ports_users # The array that contains 3-tuples `host:port:user'. local curcontext="$curcontext" state line expl typeset -A opt_args if (( ! $+_telnet_short )); then local k help="$(telnet -\? < /dev/null 2>&1)" local -A optionmap optionmap=( "[-8]" '-8[allow 8-Bit data]' \ "[-E]" '-E[disable an escape character]' \ "[-K]" '-K[no automatic login]' \ "[-L]" '-L[allow 8-Bit data on output]' \ "[-N]" '-N[supress reverse lookup]' \ "[-S tos]" '-S+:IP type-of-service:' \ "[-X atype]" '-X+:authentication type to disable:' \ "[-a]" '-a[attempt automatic login]' \ "[-c]" '-c[disable .telnetrc]' \ "[-d]" '-d[debug mode]' \ "[-e char]" '-e+[specify escape character]:escape character:' \ "[-f/" '-f' \ "/-F]" '-F' \ "[-k realm]" '-k+:realm:' \ "[-l user]" '-l+[specify user]:user:->users' \ "[-n tracefile]" '-n+[specify tracefile]:tracefile:_files' \ "[-r]" '-r[rlogin like user interface]' \ "[-s src_addr]" '-s+[set source IP address]:src_addr:' \ "[-x]" '-x' \ "[-t transcom]" '-t+:transcom:' ) _telnet_short=() for k in ${(k)optionmap} do [[ "$help" = *"$k"* ]] && _telnet_short=( "$_telnet_short[@]" "$optionmap[$k]" ) done # _arguments cannot handle following three options. optionmap=( "[-noasynch]" '-noasynch' \ "[-noasyncnet]" '-noasyncnet' \ "[-noasynctty]" '-noasynctty' ) _telnet_long=() for k in ${(k)optionmap} do [[ "$help" = *"$k"* ]] && _telnet_long=( "$_telnet_long[@]" "$optionmap[$k]" ) done fi (( $#_telnet_long )) && _wanted options expl option && { ! _style options prefix-needed || [[ "$PREFIX" = [-+]* ]] } && _describe -o option _telnet_long "$expl[@]" _arguments -C -s \ "$_telnet_short[@]" \ ':host:->hosts' \ ':port:->ports' case "$state" in hosts) _wanted hosts expl host && _combination '' hosts-ports-users \ ${opt_args[-l]:+users=${opt_args[-l]:q}} \ hosts "$expl[@]" ;; ports) _wanted ports expl port && _combination '' hosts-ports-users \ ${opt_args[-l]:+users=${opt_args[-l]:q}} \ hosts="${line[1]:q}" \ ports "$expl[@]" ;; users) _wanted users expl user && _combination '' hosts-ports-users \ ${line[2]:+hosts="${line[2]:q}"} \ ${line[3]:+ports="${line[3]:q}"} \ users "$expl[@]" ;; esac