mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-11-19 13:33:52 +01:00
73 lines
1.6 KiB
Plaintext
73 lines
1.6 KiB
Plaintext
# function zfsession {
|
|
# Change or list the sessions for the current zftp connection.
|
|
|
|
emulate -L zsh
|
|
|
|
[[ $curcontext = :zf* ]] || local curcontext=:zfsession
|
|
local opt opt_l opt_v opt_o opt_d hadopts
|
|
|
|
while getopts ":lovd" opt; do
|
|
[[ $opt = "?" ]] && print "zfsession: bad option: -$OPTARG" >&2 && return 1
|
|
eval "opt_$opt=1"
|
|
hadopts=1
|
|
done
|
|
(( OPTIND > 1 )) && shift $(( OPTIND - 1 ))
|
|
|
|
if [[ $# -gt 1 || (( -n $hadopts && -z $opt_d ) && $# -gt 0 ) ]]
|
|
then
|
|
print "Usage: zfsession ( [ -lvod ] | session )" 1>&2
|
|
return 1
|
|
fi
|
|
|
|
if [[ -n $opt_v ]]; then
|
|
local sess
|
|
for sess in $(zftp session); do
|
|
print -n "${(r.15.. ..:.)sess}\t${zfconfig[lastloc_$sess]:-not connected}"
|
|
if [[ $sess = $ZFTP_SESSION ]]; then
|
|
print " *"
|
|
else
|
|
print
|
|
fi
|
|
done
|
|
elif [[ -n $opt_l ]]; then
|
|
zftp session
|
|
fi
|
|
|
|
if [[ -n $opt_o ]]; then
|
|
if [[ $zfconfig[lastsession] != $ZFTP_SESSION ]]; then
|
|
local cursession=$ZFTP_SESSION
|
|
zftp session $zfconfig[lastsession]
|
|
zfconfig[lastsession]=$cursession
|
|
print $ZFTP_SESSION
|
|
else
|
|
print "zfsession: no previous session." >&2
|
|
return 1
|
|
fi
|
|
fi
|
|
|
|
if [[ -n $opt_d ]]; then
|
|
local del=${1:-$ZFTP_SESSION} key
|
|
key=${zfconfig[fcache_$del]}
|
|
[[ -n $key ]] && unset $key
|
|
for key in fcache lastloc lastdir curdir otherdir otherargs lastuser; do
|
|
unset "zfconfig[${key}_${del}]"
|
|
done
|
|
zftp rmsession $del
|
|
return
|
|
fi
|
|
|
|
[[ -n $hadopts ]] && return $stat
|
|
|
|
if [[ $# = 0 ]]; then
|
|
print $ZFTP_SESSION
|
|
return
|
|
fi
|
|
|
|
local oldsession=${ZFTP_SESSION:-default}
|
|
zftp session $1
|
|
if [[ $ZFTP_SESSION != $oldsession ]]; then
|
|
zfconfig[lastsession]=$oldsession
|
|
zftp_chpwd
|
|
fi
|
|
# }
|