From 7e528b4985e6cfb44683870f5e837833cf9c765a Mon Sep 17 00:00:00 2001 From: Bart Schaefer Date: Mon, 5 Sep 2011 22:01:11 +0000 Subject: users/16302: pattern matching for plain files was broken by 29444 --- Completion/Unix/Type/_path_files | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'Completion/Unix/Type') diff --git a/Completion/Unix/Type/_path_files b/Completion/Unix/Type/_path_files index a8d03efa9..a170983ba 100644 --- a/Completion/Unix/Type/_path_files +++ b/Completion/Unix/Type/_path_files @@ -438,8 +438,19 @@ for prepath in "$prepaths[@]"; do tmp2=( "$tmp1[@]" ) - if [[ "$tpre$tsuf" = (#b)*/(*) && -n "$fake${match[1]}" ]]; then - compfiles -P$cfopt tmp1 accex "$skipped" "$_matcher $matcher[2]" "$sdirs" fake + if [[ "$tpre$tsuf" = (#b)*/(*) ]]; then + + # We are going to be looping over the leading path segments. + # This means we should not apply special-dirs handling unless + # the path tail is a fake directory that needs to be simulated, + # and we should not apply pattern matching until we are looking + # for files rather than for intermediate directories. + + if [[ -n "$fake${match[1]}" ]]; then + compfiles -P$cfopt tmp1 accex "$skipped" "$_matcher $matcher[2]" "$sdirs" fake + else + compfiles -P$cfopt tmp1 accex "$skipped" "$_matcher $matcher[2]" '' fake + fi elif [[ "$sopt" = *[/f]* ]]; then compfiles -p$cfopt tmp1 accex "$skipped" "$_matcher $matcher[2]" "$sdirs" fake "$pats[@]" else -- cgit 1.4.1