From 76091a6995f7a567651232e2d164f6ea91462b05 Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Tue, 21 Aug 2012 18:45:31 +0000 Subject: users/17211: new recursive-files style --- Completion/Unix/Type/_files | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'Completion') diff --git a/Completion/Unix/Type/_files b/Completion/Unix/Type/_files index f21d7bc3b..0a2715814 100644 --- a/Completion/Unix/Type/_files +++ b/Completion/Unix/Type/_files @@ -1,7 +1,7 @@ #compdef -redirect-,-default-,-default- local opts tmp glob pat pats expl tag i def descr end ign ret=1 match tried -local type sdef ignvars ignvar +local type sdef ignvars ignvar prepath oprefix rfiles rfile zparseopts -a opts \ '/=tmp' 'f=tmp' 'g+:-=tmp' q n 1 2 P: S: r: R: W: X+: M+: F: J+: V+: @@ -118,7 +118,21 @@ for def in "$pats[@]"; do while _next_label "$tag" expl "$descr"; do _comp_ignore=( $_comp_ignore $ign ) if [[ -n "$end" ]]; then - _path_files -g "$pat" "$opts[@]" "$expl[@]" && ret=0 + if _path_files -g "$pat" "$opts[@]" "$expl[@]"; then + ret=0 + elif [[ $PREFIX$SUFFIX != */* ]] && zstyle -a ":completion:${curcontext}:$tag" recursive-files rfiles; then + for rfile in $rfiles; do + if [[ $PWD/ = ${~rfile} ]]; then + for prepath in **/*(/); do + oprefix=$PREFIX + PREFIX=$prepath/$PREFIX + _path_files -g "$pat" "$opts[@]" "$expl[@]" && ret=0 + PREFIX=$oprefix + done + break + fi + done + fi else _path_files "$expl[@]" -g "$pat" "$opts[@]" && ret=0 fi -- cgit 1.4.1