#compdef tcp_open local context line expl nm=$compstate[nmatches] local -a state argargs sesslist local -A opt_args case $service in (tcp_open) argargs=( '(-a -f -l)-s[open session(s)]' '(-a -f -s)-l[open list of sessions]' '(-f -s -l)-a[open session for accept on fd]:fd:->fd' '(-a -s -l)-f[open session for accept on fd]:fd:->fd' '-q[quiet mode]' '-z[no zle handler]' ) if [[ -n $words[(R)-(a|f)*] ]]; then argargs+=(':session:->session') elif [[ -n $words[(R)-(l|s)*] ]]; then argargs+=('*:session:->session') else argargs+=(':host:->host' ':port:->port' '*:session:->session') fi _arguments -C $argargs ;; esac while (( $#state )); do case "$state[1]" in (host) _hosts ;; (port) _ports ;; (sessionlist) compset -P '*,' ;& (session) sesslist=(${${${(f)"$(<~/.ztcp_sessions)"}:#[[:space:]]#\#*}/ /:}) _describe -t sessions 'TCP session' sesslist && return ;; esac shift state done