diff options
author | Han Pingtian <hanpt@linux.vnet.ibm.com> | 2015-05-29 18:11:19 +0800 |
---|---|---|
committer | Peter Stephenson <p.w.stephenson@ntlworld.com> | 2015-05-30 20:11:19 +0100 |
commit | fea56dc32b8cf00715e1c55fbfccdadfc5c48e06 (patch) | |
tree | 412540d617f38439e4e2b1571db995bd6bcfe32b /Functions/Zftp/zfget_match | |
parent | 63dfc82bd2e5440ed12209c22159e349ede5ecd4 (diff) | |
download | zsh-fea56dc32b8cf00715e1c55fbfccdadfc5c48e06.tar.gz zsh-fea56dc32b8cf00715e1c55fbfccdadfc5c48e06.tar.xz zsh-fea56dc32b8cf00715e1c55fbfccdadfc5c48e06.zip |
35234: better zfget completion with paths
Diffstat (limited to 'Functions/Zftp/zfget_match')
-rw-r--r-- | Functions/Zftp/zfget_match | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/Functions/Zftp/zfget_match b/Functions/Zftp/zfget_match index 3a33c9886..a440cace1 100644 --- a/Functions/Zftp/zfget_match +++ b/Functions/Zftp/zfget_match @@ -9,17 +9,31 @@ if [[ $1 == $HOME || $1 == $HOME/* ]]; then fi if [[ $ZFTP_SYSTEM == UNIX* && $1 == */* ]]; then - setopt localoptions clobber + setopt localoptions clobber extendedglob local tmpf=${TMPPREFIX}zfgm$$ zf_ln -fn =(<<<'') $tmpf || return 1 if [[ -n $WIDGET ]]; then - local dir=${1:h} + local dir=${1%/*} [[ $dir = */ ]] || dir="$dir/" zftp ls -LF $dir >$tmpf - local reply - reply=(${${${(f)"$(<$tmpf)"}##$dir}%\*}) - _wanted files expl 'remote file' compadd -P $dir - $reply + local reply1 reply2 + + # dirs in reply1, files in reply2 + reply1=(${${(M)${${(f)"$(<$tmpf)"}##$dir}:#*/}%/}) + reply2=(${${${${(f)"$(<$tmpf)"}##$dir}%\*}:#*/}) + + # try dir if ls -F doesn't work + if ! (($#reply1)); then + zftp dir $dir >$tmpf + reply1=(${(M)${(f)"$(<$tmpf)"}:#d([^[:space:]]##[[:space:]]##)(#c8)?##}) + reply1=(${reply1/(#b)d([^[:space:]]##[[:space:]]##)(#c8)([^\/]##)\/#/$match[2]}) + + reply2=(${${(f)"$(<$tmpf)"}:#d([^[:space:]]##[[:space:]]##)(#c8)?##}) + reply2=(${reply2/(#b)([^[:space:]]##[[:space:]]##)(#c8)(?##)/$match[2]}) + fi + _wanted directories expl 'remote directory' compadd -S/ -q -P $dir - $reply1 + _wanted files expl 'remote file' compadd -P $dir - $reply2 else # On the first argument to ls, we usually get away with a glob. zftp ls "$1*$2" >$tmpf |