about summary refs log tree commit diff
path: root/Completion
diff options
context:
space:
mode:
Diffstat (limited to 'Completion')
-rw-r--r--Completion/Linux/_rpm12
-rw-r--r--Completion/User/_urls15
2 files changed, 16 insertions, 11 deletions
diff --git a/Completion/Linux/_rpm b/Completion/Linux/_rpm
index 344f5269b..e17fa9c5c 100644
--- a/Completion/Linux/_rpm
+++ b/Completion/Linux/_rpm
@@ -211,12 +211,14 @@ while [[ -n "$state" ]]; do
         _files -g \*.spec && ret=0
     ;;
   package_file)
-    if compset -P '(f|ht)tp://'; then
-      _hosts -S/ && ret=0
+    _wanted files expl 'RPM package file' \
+        _files -g '*.(#i)rpm' && ret=0
+    if [[ -prefix 1 (f|ht)tp:// ]]; then
+      _wanted urls expl 'URL of RPM package file' \
+          _urls -f -g '*.(#i)rpm' "${expl[@]}" && ret=0
     else
-      _alternative \
-          'files:RPM package file:_files -g \*.\(\#i\)rpm' \
-          'prefixes:URL prefix:compadd ftp:// http://' && ret=0
+      _wanted urls expl 'URL of RPM package file' \
+          compadd -S '' "${expl[@]}" ftp:// http:// && ret=0
     fi
     ;;
   package_src)
diff --git a/Completion/User/_urls b/Completion/User/_urls
index 0d1845754..b9cb3dad8 100644
--- a/Completion/User/_urls
+++ b/Completion/User/_urls
@@ -38,7 +38,7 @@
 #    E.g.:
 #      zstyle ':completion:*:urls' local www /usr/local/apache/htdocs public_html
 
-local ipre scheme host user uhosts ret=1 expl match
+local ipre scheme host user uhosts ret=1 expl match glob
 local urls_path localhttp
 zstyle -s ":completion:${curcontext}:urls" path urls_path ||
     urls_path="${ZDOTDIR:-$HOME}/.zsh/urls"
@@ -52,6 +52,9 @@ if [[ "$1" = -f ]]; then
   _wanted -C -f files expl file _files "$@" && return 0
 fi
 
+zparseopts -D -E 'g:=glob'
+(( $#glob )) || glob=( -g '*(^/)' )
+
 ipre="$IPREFIX"
 
 if ! compset -P '(#b)([-+.a-z0-9]#):'; then
@@ -82,7 +85,7 @@ case "$scheme" in
       while _tags; do
         while _next_label files expl 'local file'; do
           if [[ -prefix / ]]; then
-	    _path_files "$expl[@]" -S '' -g '*(^/)' && ret=0
+	    _path_files "$expl[@]" -S '' "${glob[@]}" && ret=0
 	    _path_files "$expl[@]" -S/ -r '/' -/ && ret=0
           elif [[ -z "$PREFIX" ]]; then
 	    compadd -S '/' -r '/' "$expl[@]" "$@" - "${PWD%/}" && ret=0
@@ -103,7 +106,7 @@ case "$scheme" in
       _tags -C bookmark files
       while _tags; do
         while _next_label files expl 'bookmark'; do
-          _path_files -W "$urls_path/$scheme" "$expl[@]" -S '' -g '*(^/)' && 
+          _path_files -W "$urls_path/$scheme" "$expl[@]" -S '' "${glob[@]}" && 
               ret=0
           _path_files -W "$urls_path/$scheme" -S/ -r '/' "$expl[@]" -/ && ret=0
         done
@@ -145,7 +148,7 @@ if [[ "$localhttp_servername" = "$host" ]]; then
     user="$match[1]"
     while _tags; do
       while _next_label files expl 'local file'; do
-        _path_files "$expl[@]" "$@" -W ~$user/$localhttp_userdir -g '*(^/)' && ret=0
+        _path_files "$expl[@]" "$@" -W ~$user/$localhttp_userdir "${glob[@]}" && ret=0
         _path_files -S/ -r '/'  "$expl[@]" -W ~$user/$localhttp_userdir-/ && ret=0
       done
       (( ret )) || return 0
@@ -153,7 +156,7 @@ if [[ "$localhttp_servername" = "$host" ]]; then
   else
     while _tags; do
       while _next_label files expl 'local file'; do
-        _path_files "$expl[@]" "$@" -W $localhttp_documentroot -g '*(^/)' && ret=0
+        _path_files "$expl[@]" "$@" -W $localhttp_documentroot "${glob[@]}" && ret=0
         _path_files -S/ -r '/' "$expl[@]" -W $localhttp_documentroot -/ && ret=0
       done
       (( ret )) || return 0
@@ -162,7 +165,7 @@ if [[ "$localhttp_servername" = "$host" ]]; then
 else
   while _tags; do
     while _next_label files expl 'local file'; do
-      _path_files "$expl[@]" "$@" -W $urls_path/$scheme/$host -g '*(^/)' && ret=0
+      _path_files "$expl[@]" "$@" -W $urls_path/$scheme/$host "${glob[@]}" && ret=0
       _path_files -S/ -r '/' "$expl[@]" -W $urls_path/$scheme/$host -/ && ret=0
     done
     (( ret )) || return 0