about summary refs log tree commit diff
path: root/Completion/Core/_files
diff options
context:
space:
mode:
authorTanaka Akira <akr@users.sourceforge.net>2000-01-07 14:40:09 +0000
committerTanaka Akira <akr@users.sourceforge.net>2000-01-07 14:40:09 +0000
commit5a774bf3cb4fa2d7a3eaa0df6013fc1150bdf944 (patch)
tree2501b42faf45399c5e04c1d14e27db0025329924 /Completion/Core/_files
parentc5b7a61b52e49b11eac612841fc9cd7d9ed22af9 (diff)
downloadzsh-5a774bf3cb4fa2d7a3eaa0df6013fc1150bdf944.tar.gz
zsh-5a774bf3cb4fa2d7a3eaa0df6013fc1150bdf944.tar.xz
zsh-5a774bf3cb4fa2d7a3eaa0df6013fc1150bdf944.zip
zsh-workers/9263
Diffstat (limited to 'Completion/Core/_files')
-rw-r--r--Completion/Core/_files27
1 files changed, 16 insertions, 11 deletions
diff --git a/Completion/Core/_files b/Completion/Core/_files
index a92771f80..f3eb0e5fc 100644
--- a/Completion/Core/_files
+++ b/Completion/Core/_files
@@ -1,16 +1,16 @@
 #autoload
 
-local opts opt type=file group
+local opts opt type=file glob group
 
 opts=()
 group=()
 while getopts "P:S:qr:R:W:F:J:V:X:f/g:M:12n" opt; do
   case "$opt" in
-  /)      [[ "$type" = file       ]] && type=dir       ;;
-  g)      [[ "$type" = (file|dir) ]] && type="$OPTARG" ;;
-  [qn12]) opts=("$opts[@]" "-$opt"          )          ;;
-  [JV])   group=(          "-$opt" "$OPTARG")          ;;
-  [^f])   opts=("$opts[@]" "-$opt" "$OPTARG")          ;;
+  /)      type="${type}dir"                   ;;
+  g)      type="${type}glob"; glob="$OPTARG"  ;;
+  [qn12]) opts=("$opts[@]" "-$opt"          ) ;;
+  [JV])   group=(          "-$opt" "$OPTARG") ;;
+  [^f])   opts=("$opts[@]" "-$opt" "$OPTARG") ;;
   esac
 done
 
@@ -20,9 +20,10 @@ if [[ "$group[2]" = files ]]; then
 fi
 
 case "$type" in
-file) _tags all-files                           ;;
-dir)  _tags directories all-files               ;;
-*)    _tags globbed-files directories all-files ;;
+*dir*glob*|*glob*dir) _tags globbed-files all-files             ;;
+*glob*)               _tags globbed-files directories all-files ;;
+*dir*)                _tags directories all-files               ;;
+*)                    _tags all-files                           ;;
 esac
 
 while _tags; do
@@ -39,7 +40,7 @@ while _tags; do
         group[2]=globbed-files
 	_setup globbed-files
       fi
-      _path_files "$opts[@]" -/g "$type" && return 0
+      _path_files "$opts[@]" -/g "$glob" && return 0
     else
       if (( $#group )); then
         group[2]=directories
@@ -52,7 +53,11 @@ while _tags; do
       group[2]=globbed-files
       _setup globbed-files
     fi
-    _path_files "$opts[@]" -g "$type" && return 0
+    if [[ "$type" = (*dir*glob*|*glob*dir*) ]]; then
+      _path_files "$opts[@]" -/g "$glob" && return 0
+    else
+      _path_files "$opts[@]" -g "$glob" && return 0
+    fi
   fi
 done