about summary refs log tree commit diff
path: root/Functions/Zftp/zffcache
diff options
context:
space:
mode:
Diffstat (limited to 'Functions/Zftp/zffcache')
-rw-r--r--Functions/Zftp/zffcache24
1 files changed, 24 insertions, 0 deletions
diff --git a/Functions/Zftp/zffcache b/Functions/Zftp/zffcache
new file mode 100644
index 000000000..0d9686660
--- /dev/null
+++ b/Functions/Zftp/zffcache
@@ -0,0 +1,24 @@
+# Generate an array name for storing the cache for the current session,
+# storing it in fcache_name, then generate the cache for the current
+# directory, or with argument -d clear the cache.
+
+fcache_name=$zfconfig[fcache_$ZFTP_SESSION]
+if [[ -z $fcache_name ]]; then
+  local vals
+  vals=(${(v)zfconfig[(I)fcache_*]##zftp_fcache_})
+  integer i
+  while [[ -n ${vals[(r)zftp_fcache_$i]} ]]; do
+    (( i++ ))
+  done
+  fcache_name=zftp_fcache_$i
+  zfconfig[fcache_$ZFTP_SESSION]=$fcache_name
+fi
+
+if [[ $1 = -d ]]; then
+  unset $fcache_name
+elif (( ${(P)#fcache_name} == 0 )); then
+  local tmpf=${TMPPREFIX}zffcache$$
+  zftp ls >$tmpf
+  eval "$fcache_name=(\${(f)\"\$(<\$tmpf)\"})"
+  rm -f $tmpf
+fi