summary refs log tree commit diff
path: root/Completion
diff options
context:
space:
mode:
Diffstat (limited to 'Completion')
-rw-r--r--Completion/User/_urls37
1 files changed, 24 insertions, 13 deletions
diff --git a/Completion/User/_urls b/Completion/User/_urls
index 78a72f890..7567f362c 100644
--- a/Completion/User/_urls
+++ b/Completion/User/_urls
@@ -6,7 +6,7 @@
 #
 # Configuration styles used:
 #
-#  path
+#  urls
 #    The path to a directory containing a URL database, such as:
 #
 #      % cd ~/.zsh/urls
@@ -29,6 +29,9 @@
 #      % cat bookmark/zsh/meta
 #      http://www.zsh.org/
 #
+#    Alternatively it may contain the path to a normal file and the URLs will
+#    be taken from that.  Or the style may contain the URLs as its values.
+#
 #  local
 #    Specify a local web server as an array with three elements:
 #      <hostname> <doc root> <user area>
@@ -39,9 +42,7 @@
 #      zstyle ':completion:*:urls' local www /usr/local/apache/htdocs public_html
 
 local ipre scheme host user uhosts ret=1 expl match glob suf
-local urls_path localhttp
-zstyle -s ":completion:${curcontext}:urls" path urls_path ||
-    urls_path="${ZDOTDIR:-$HOME}/.zsh/urls"
+local localhttp
 zstyle -a ":completion:${curcontext}:urls" local localhttp
 local localhttp_servername="$localhttp[1]"
 local localhttp_documentroot="$localhttp[2]"
@@ -52,6 +53,16 @@ if [[ "$1" = -f ]]; then
   _wanted -C -f files expl file _files "$@" && return 0
 fi
 
+zstyle -a ":completion:${curcontext}:urls" urls urls
+
+if [[ $#urls -gt 1 || ( $#urls -eq 1 && ! -d $urls[1] ) ]]; then
+  [[ $#urls -eq 1 && -f $urls[1] ]] && urls=( $(< $urls[1]) )
+  _wanted urls expl 'urls' compadd -a urls && return 0
+  urls=()
+fi
+
+urls="$urls[1]"
+
 glob=(-g '*(^/)')
 zparseopts -D -K -E 'g:=glob'
 
@@ -62,7 +73,7 @@ if ! compset -P '(#b)([-+.a-z0-9]#):'; then
   while _tags; do
     while _next_label prefixes expl 'URL prefix' -S '' "$@"; do
       compset -S '[^:/]*' && compstate[to_end]=''
-      [[ -d $urls_path/bookmark ]] &&
+      [[ -d $urls/bookmark ]] &&
         compadd "$expl[@]" bookmark: && ret=0
       compadd "$expl[@]" file: ftp:// gopher:// http:// && ret=0
     done
@@ -97,18 +108,18 @@ case "$scheme" in
     fi
   ;;
   bookmark)
-    if [[ -f "$urls_path/$scheme/${(Q)PREFIX}${(Q)SUFFIX}" &&
-	  -s "$urls_path/$scheme/${(Q)PREFIX}${(Q)SUFFIX}" ]]; then
+    if [[ -f "$urls/$scheme/${(Q)PREFIX}${(Q)SUFFIX}" &&
+	  -s "$urls/$scheme/${(Q)PREFIX}${(Q)SUFFIX}" ]]; then
       _wanted -C bookmark bookmarks expl bookmarks \
           compadd "$@" -U - \
-              "$ipre$(<"$urls_path/$scheme/${(Q)PREFIX}${(Q)SUFFIX}")" && ret=0
+              "$ipre$(<"$urls/$scheme/${(Q)PREFIX}${(Q)SUFFIX}")" && ret=0
     else
       _tags -C bookmark files
       while _tags; do
         while _next_label files expl 'bookmark'; do
-          _path_files -W "$urls_path/$scheme" "$expl[@]" -S '' "${glob[@]}" && 
+          _path_files -W "$urls/$scheme" "$expl[@]" -S '' "${glob[@]}" && 
               ret=0
-          _path_files -W "$urls_path/$scheme" -S/ -r '/' "$expl[@]" -/ && ret=0
+          _path_files -W "$urls/$scheme" -S/ -r '/' "$expl[@]" -/ && ret=0
         done
 	(( ret )) || return 0
       done
@@ -119,7 +130,7 @@ esac
 
 # Complete hosts
 if ! compset -P '(#b)([^:/]#)([:/])'; then
-  uhosts=($urls_path/$scheme/$PREFIX*$SUFFIX(/:t))
+  uhosts=($urls/$scheme/$PREFIX*$SUFFIX(/:t))
 
   _tags hosts
   while _tags; do
@@ -167,8 +178,8 @@ 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 "${glob[@]}" && ret=0
-      _path_files -S/ -r '/' "$expl[@]" -W $urls_path/$scheme/$host -/ && ret=0
+      _path_files "$expl[@]" "$@" -W $urls/$scheme/$host "${glob[@]}" && ret=0
+      _path_files -S/ -r '/' "$expl[@]" -W $urls/$scheme/$host -/ && ret=0
     done
     (( ret )) || return 0
   done