diff options
Diffstat (limited to 'Functions/Zftp/zfsession')
-rw-r--r-- | Functions/Zftp/zfsession | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/Functions/Zftp/zfsession b/Functions/Zftp/zfsession new file mode 100644 index 000000000..9cd0d918f --- /dev/null +++ b/Functions/Zftp/zfsession @@ -0,0 +1,71 @@ +# function zfsession { +# Change or list the sessions for the current zftp connection. + +emulate -L zsh + +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 +# } |