diff options
author | Eric Cook <llua@gmx.com> | 2015-11-01 22:21:14 -0500 |
---|---|---|
committer | Mikael Magnusson <mikachu@gmail.com> | 2015-11-16 02:50:24 +0100 |
commit | f01cf05e538dc4c8839253aefc09d3a58654ba6a (patch) | |
tree | 4d035dc3c910c8e6dbe8a7021a5948c9aa6228c7 /Completion/BSD/Command | |
parent | a24487d73aabca9979d8b5b71c40513fe6982898 (diff) | |
download | zsh-f01cf05e538dc4c8839253aefc09d3a58654ba6a.tar.gz zsh-f01cf05e538dc4c8839253aefc09d3a58654ba6a.tar.xz zsh-f01cf05e538dc4c8839253aefc09d3a58654ba6a.zip |
_sockstat: minor improvements
allow -p, -P and -f's argument to be completed in the same word. Complete -P's argument using /etc/protocols again, while allowing a comma delimited list of protocols.
Diffstat (limited to 'Completion/BSD/Command')
-rw-r--r-- | Completion/BSD/Command/_sockstat | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/Completion/BSD/Command/_sockstat b/Completion/BSD/Command/_sockstat index 1b11ba473..daad946fc 100644 --- a/Completion/BSD/Command/_sockstat +++ b/Completion/BSD/Command/_sockstat @@ -1,5 +1,6 @@ #compdef sockstat -local -a args +local -a args protocols +local proto case $OSTYPE in *bsd*) @@ -8,27 +9,37 @@ case $OSTYPE in '-6[show AF_INET6 (IPv6) sockets]' '-c[show connected sockets]' '-l[show listening sockets]' - '*-p[specify port number]:port numbers (comma delimited)' + '*-p+[specify port number]:port numbers (comma delimited)' '-u[show AF_LOCAL (UNIX) sockets]' ) ;| freebsd*) + for proto in ${${(M)${(f)"$(</etc/protocols)"}##[a-z0-9]*}}; do + case $proto in + *\#*) + protocols+=(${${${(j: :)${(q)=proto}}// *\# /\[}/%/\]}) + ;; + *) + protocols+=(${${(j: :)${=proto}}// */}) + esac + done + args+=( '*-j[show sockets belonging to JID]: : _jails -0 -o jid' '-L[exclude loopback]' - '*-P[specify protocol]: :_sequence -s , _ports' + '*-P+[specify protocol]: : _values -s , protocols $protocols' ) ;; netbsd*) args+=( - '*-f[only show specified address family]:address family:(inet inet6 local unix)' + '*-f+[only show specified address family]:address family:(inet inet6 local unix)' '-n[no symbolic names for addresses/ports]' ) ;; esac if (( $#args )); then - _arguments -s -w $args + _arguments -s -w : $args return fi |