summaryrefslogtreecommitdiffstats
path: root/Functions/Zftp
diff options
context:
space:
mode:
authorTanaka Akira <akr@users.sourceforge.net>1999-06-27 05:33:04 +0000
committerTanaka Akira <akr@users.sourceforge.net>1999-06-27 05:33:04 +0000
commit346825df86466cf151be61b9429ef2c1734e66ea (patch)
treebd3e1ccd947b47f974c62b4113c5276416de2c9f /Functions/Zftp
parentzsh-3.1.5-pws-22 (diff)
downloadzsh-346825df86466cf151be61b9429ef2c1734e66ea.tar
zsh-346825df86466cf151be61b9429ef2c1734e66ea.tar.gz
zsh-346825df86466cf151be61b9429ef2c1734e66ea.tar.bz2
zsh-346825df86466cf151be61b9429ef2c1734e66ea.tar.lz
zsh-346825df86466cf151be61b9429ef2c1734e66ea.tar.xz
zsh-346825df86466cf151be61b9429ef2c1734e66ea.tar.zst
zsh-346825df86466cf151be61b9429ef2c1734e66ea.zip
zsh-3.1.5-pws-24zsh-3.1.5-pws-24
Diffstat (limited to 'Functions/Zftp')
-rw-r--r--Functions/Zftp/zfgoto86
-rw-r--r--Functions/Zftp/zfmark49
2 files changed, 135 insertions, 0 deletions
diff --git a/Functions/Zftp/zfgoto b/Functions/Zftp/zfgoto
index e69de29bb..8d6f00a3a 100644
--- a/Functions/Zftp/zfgoto
+++ b/Functions/Zftp/zfgoto
@@ -0,0 +1,86 @@
+# zfgoto bname
+# Go to bookmark bname, a location on a remote FTP host. Unless
+# this was the last session or is for anonymous FTP, prompt for
+# the user's password.
+
+emulate -L zsh
+setopt extendedglob
+
+# Set ZFTP_BMFILE if not already set. This should agree with
+# the corresponding line in zfmark.
+: ${ZFTP_BMFILE:=${ZFDOTDIR:-$HOME}/.zfbkmarks}
+
+typeset -A bkmarks
+local line ncftp opt optlist
+
+while [[ $1 == -* ]]; do
+ if [[ $1 == - || $1 == -- ]]; then
+ shift;
+ break;
+ fi
+ optlist=${1#-}
+ for (( i = 1; i <= $#optlist; i++)); do
+ opt=$optlist[$i]
+ case $opt in
+ n) ncftp=1
+ ;;
+ *) print option $opt not recognised >&2
+ return 1
+ ;;
+ esac
+ done
+ shift
+done
+
+if (( $# != 1 )); then
+ print "Usage: zfgoto bookmark" >&2
+ return 1
+fi
+
+if [[ -n $ncftp && -f ~/.ncftp/bookmarks ]]; then
+ local oldifs=$IFS
+ IFS=,
+ while read -rA line; do
+ bkmarks[$line[1]]="${line[3]:-anonymous}@${line[2]}:${line[6]}"
+ done < ~/.ncftp/bookmarks
+ IFS=$oldifs
+elif [[ -f $ZFTP_BMFILE ]]; then
+ # read in file: could optimise this by recording last read time
+ # comparing with file
+ while read -r line; do
+ # ignore blank and comment lines
+ [[ $line = [[:blank:]]# || $line = [[:blank:]]#'#'* ]] && continue
+ bkmarks[${line%% *}]="${line#* }"
+ done <$ZFTP_BMFILE
+fi
+
+line=${bkmarks[$1]}
+
+if [[ -z $line ]]; then
+ print "Bookmark \`$1' not found" >&2
+ return 1
+fi
+
+local user host dir
+user=${line%%@*}
+line=${line#*@}
+host=${line%%:*}
+dir=${line#*:}
+
+if [[ $user = ftp || $user = anonymous ]]; then
+ # Anonymous ftp, so we don't need password etc.
+ zfanon $host && [[ -n $dir ]] && zfcd $dir
+elif [[ $zflastsession = ${host}:* && $user = $zflastuser ]]; then
+ # This was the last session, so assume it's still setup in the
+ # open parameters
+ zfopen && [[ -n $dir ]] && zfcd $dir
+else
+ # Last try: see if it's in the parameters.
+ local params
+ params=($(zftp params))
+ if [[ $host = $params[1] && $user = $params[2] ]]; then
+ zfopen && [[ -n $dir ]] && zfcd $dir
+ else
+ zfopen $host $user && [[ -n $dir ]] && zfcd $dir
+ fi
+fi
diff --git a/Functions/Zftp/zfmark b/Functions/Zftp/zfmark
index e69de29bb..8d35ce45a 100644
--- a/Functions/Zftp/zfmark
+++ b/Functions/Zftp/zfmark
@@ -0,0 +1,49 @@
+# zfmark [bname]
+# Set a bookmark for the current zftp connection, or use the
+# information about the last session if there isn't one.
+# A bookmark includes both the host *and* the directory on that host.
+#
+# Without bname, list the current bookmarks and their locations.
+
+emulate -L zsh
+setopt extendedglob
+
+# Set ZFTP_BMFILE if not already set. This should agree with
+# the corresponding line in zfgoto.
+: ${ZFTP_BMFILE:=${ZDOTDIR:-$HOME}/.zfbkmarks}
+
+typeset -A bkmarks
+local line
+
+if [[ -f $ZFTP_BMFILE ]]; then
+ # read in file: could optimise this by recording last read time
+ # comparing with file
+ while read -r line; do
+ # ignore blank and comment lines
+ [[ $line = [[:blank:]]# || $line = [[:blank:]]#'#'* ]] && continue
+ bkmarks[${line%% *}]="${line#* }"
+ done <$ZFTP_BMFILE
+fi
+
+if (( $# == 0 )); then
+ for line in ${(ko)bkmarks}; do
+ print -r- "$line ${bkmarks[$line]}"
+ done
+ return 0
+elif (( $# > 1 )); then
+ print "Usage: zfmark [bookmark]" >&2
+ return 1
+fi
+
+if [[ -n $ZFTP_HOST ]]; then
+ bkmarks[$1]="${ZFTP_USER}@${ZFTP_HOST}:${ZFTP_PWD}"
+elif [[ -n $zflastsession ]]; then
+ bkmarks[$1]="${zflastuser}@${zflastsession}"
+else
+ print "No current or recent ZFTP session to bookmark." >&2
+ return 1
+fi
+
+for line in ${(ko)bkmarks}; do
+ print -r- "$line ${bkmarks[$line]}"
+done >$ZFTP_BMFILE