about summary refs log tree commit diff
path: root/Functions/Zftp/zfsession
diff options
context:
space:
mode:
Diffstat (limited to 'Functions/Zftp/zfsession')
-rw-r--r--Functions/Zftp/zfsession71
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
+# }