mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-10-02 17:01:19 +02:00
40 lines
1.0 KiB
Plaintext
40 lines
1.0 KiB
Plaintext
|
# try to disguise parameters from the eval'd command in case it's a function.
|
||
|
integer __myfd=1
|
||
|
|
||
|
if [[ -n $1 ]]; then
|
||
|
if [[ -z $tcp_by_name[$1] ]]; then
|
||
|
print no such session: $1
|
||
|
__myfd=2
|
||
|
elif [[ -n $2 ]]; then
|
||
|
local TCP_SESS=$1
|
||
|
shift
|
||
|
# A bit tricky: make sure the first argument gets re-evaluated,
|
||
|
# so as to get aliases etc. to work, but make sure the remainder
|
||
|
# don't, so as not to bugger up quoting. This ought to work the
|
||
|
# vast majority of the time, anyway.
|
||
|
local __cmd=$1
|
||
|
shift
|
||
|
eval $__cmd \$\*
|
||
|
return
|
||
|
else
|
||
|
TCP_SESS=$1
|
||
|
return 0;
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
# Print out the list of sessions, first the number, than the corresponding
|
||
|
# file descriptor. The current session, if any, is marked with an asterisk.
|
||
|
local cur name fd
|
||
|
for name in ${(ko)tcp_by_name}; do
|
||
|
fd=${tcp_by_name[$name]}
|
||
|
# mark current session with an asterisk
|
||
|
if [[ ${TCP_SESS} = $name ]]; then
|
||
|
cur=" *"
|
||
|
else
|
||
|
cur=
|
||
|
fi
|
||
|
print "sess:$name; fd:$fd$cur" >&$__myfd
|
||
|
done
|
||
|
|
||
|
return $(( __myfd - 1 ))
|