From 206237c8ec4b7619d9e70a75004cd1ae1066b0a0 Mon Sep 17 00:00:00 2001 From: Tanaka Akira Date: Sun, 25 Apr 1999 15:43:41 +0000 Subject: zsh-3.1.5-pws-16 --- Functions/Zftp/zfcd | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 Functions/Zftp/zfcd (limited to 'Functions/Zftp/zfcd') diff --git a/Functions/Zftp/zfcd b/Functions/Zftp/zfcd new file mode 100644 index 000000000..b726d9f55 --- /dev/null +++ b/Functions/Zftp/zfcd @@ -0,0 +1,52 @@ +# function zfcd { +# zfcd: change directory on the remote server. +# +# Currently has the following features: +# --- an initial string matching $HOME in the directory is turned back into ~ +# to be re-interpreted by the remote server. +# --- zfcd with no arguments changes directory to '~' +# --- `zfcd old new' and `zfcd -' work analagously to cd +# --- if the connection is not currently open, it will try to +# re-open it with the stored parameters as set by zfopen. +# If the connection timed out, however, it won't know until +# too late. In that case, just try the same zfcd command again +# (but now `zfcd -' and `zfcd old new' won't work). + +# hack: if directory begins with $HOME, turn it back into ~ +# there are two reasons for this: +# first, a ~ on the command line gets expanded even with noglob. +# (I suppose this is correct, but I wouldn't like to swear to it.) +# second, we can no do 'zfcd $PWD' and the like, and that will +# work just as long as the directory structures under the home match. + +emulate -L zsh + +if [[ $1 = /* ]]; then + zfautocheck -dn +else + zfautocheck -d +fi + +if [[ $1 = $HOME || $1 = $HOME/* ]]; then + 1="~${1#$HOME}" +fi + +if (( $# == 0 )); then + # Emulate `cd' behaviour + set -- '~' +elif [[ $# -eq 1 && $1 = - ]]; then + # Emulate `cd -' behaviour. + set -- $zflastdir +elif [[ $# -eq 2 ]]; then + # Emulate `cd old new' behaviour. + # We have to find a character not in $1 or $2; ! is a good bet. + eval set -- "\${ZFTP_PWD:s!$1!$2!}" +fi + +# We have to remember the current directory before changing it +# if we want to keep it. +local lastdir=$ZFTP_PWD + +zftp cd "$@" && zflastdir=$lastdir +print $zflastsession +# } -- cgit 1.4.1