about summary refs log tree commit diff
path: root/Completion
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2008-10-30 10:10:59 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2008-10-30 10:10:59 +0000
commit24dc4bec073250312b17d62571f165766a430690 (patch)
treed736241220c59d1358f6e2ce2fda48543cf42ef6 /Completion
parent5c0b3ddc4251965559cb606f3441c240e0ea7936 (diff)
downloadzsh-24dc4bec073250312b17d62571f165766a430690.tar.gz
zsh-24dc4bec073250312b17d62571f165766a430690.tar.xz
zsh-24dc4bec073250312b17d62571f165766a430690.zip
unposted: add _tcpsys
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