diff options
Diffstat (limited to 'Completion/Zsh')
-rw-r--r-- | Completion/Zsh/Command/_tcpsys | 49 |
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 |