1#compdef tcp_open
2
3local curcontext="$curcontext" state line expl
4local -A opt_args
5local -a argargs sesslist
6
7case $service in
8  (tcp_open)
9  argargs=(
10    '(-a -f -l)-s[open session(s)]'
11    '(-a -f -s)-l[open list of sessions]'
12    '(-f -s -l)-a[open session for accept on fd]:fd'
13    '(-a -s -l)-f[open session for accept on fd]:fd'
14    '-q[quiet mode]'
15    '-z[no zle handler]'
16  )
17  if [[ -n $words[(R)-(a|f)*] ]]; then
18    argargs+=(':session:->session')
19  elif [[ -n $words[(R)-(l|s)*] ]]; then
20    argargs+=('*:session:->session')
21  else
22    argargs+=(':host:_hosts' ':port:_ports' '*:session:->session')
23  fi
24  _arguments -C $argargs
25  ;;
26esac
27
28while (( $#state )); do
29  case "$state[1]" in
30    (sessionlist)
31    compset -P '*,'
32    ;&
33
34    (session)
35    sesslist=(${${${(f)"$(<~/.ztcp_sessions)"}:#[[:space:]]#\#*}/ /:})
36    _describe -t sessions 'TCP session' sesslist && return
37    ;;
38
39  esac
40  shift state
41done
42