about summary refs log tree commit diff
path: root/Completion
diff options
context:
space:
mode:
Diffstat (limited to 'Completion')
-rw-r--r--Completion/Zsh/Command/_tcpsys49
1 files changed, 49 insertions, 0 deletions
diff --git a/Completion/Zsh/Command/_tcpsys b/Completion/Zsh/Command/_tcpsys
new file mode 100644
index 000000000..dcc6f6cc8
--- /dev/null
+++ b/Completion/Zsh/Command/_tcpsys
@@ -0,0 +1,49 @@
+#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