about summary refs log tree commit diff
path: root/Completion/User/_urls
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/User/_urls')
-rw-r--r--Completion/User/_urls65
1 files changed, 65 insertions, 0 deletions
diff --git a/Completion/User/_urls b/Completion/User/_urls
new file mode 100644
index 000000000..19f7eea3a
--- /dev/null
+++ b/Completion/User/_urls
@@ -0,0 +1,65 @@
+#autoload
+
+# Usage: _urls [-f]
+# Options:
+#  -f : complete files.
+
+# To complete URLs, you must make a URL database locally such as:
+#
+# % cd ~/.zsh/urls
+# % find . -ls
+# ... drwxr-xr-x ... 512 Sep  3 02:46 .
+# ... drwxr-xr-x ... 512 Sep  3 02:48 ./http
+# ... drwxr-xr-x ... 512 Sep  3 02:52 ./http/www.zsh.org
+# ... drwxr-xr-x ... 512 Sep  3 03:01 ./http/www.zsh.org/mla
+# ... drwxr-xr-x ... 512 Sep  3 03:01 ./http/www.zsh.org/mla/workers
+# ... drwxr-xr-x ... 512 Sep  3 03:01 ./http/www.zsh.org/mla/workers/1999
+# ... -rw-r--r-- ...   0 Sep  3 03:01 ./http/www.zsh.org/mla/workers/1999/index.html
+# ... drwxr-xr-x ... 512 Sep  3 02:48 ./http/sunsite.auc.dk
+# ... drwxr-xr-x ... 512 Sep  3 02:48 ./http/sunsite.auc.dk/zsh
+# ... drwxr-xr-x ... 512 Sep  3 02:47 ./bookmark
+# ... drwxr-xr-x ... 512 Sep  3 02:48 ./bookmark/zsh
+# ... -rw-r--r-- ...  27 Sep  3 02:47 ./bookmark/zsh/home
+# ... -rw-r--r-- ...  20 Sep  3 02:48 ./bookmark/zsh/meta
+
+local ipre scheme dirs files
+
+if [[ "$1" = -f ]]; then
+  shift
+  _files "$@" && return
+fi
+
+if [[ -z "$compconfig[_urls_dir]" ]]; then
+  compconfig[_urls_dir]=${ZDOTDIR:-$HOME}/.zsh/urls
+fi
+
+ipre="$IPREFIX"
+
+if [[ -prefix [-+.a-z0-9]#: ]]; then
+  scheme="${PREFIX%%:*}"
+  compset -P "[-+.a-z0-9]#:"
+else
+  compadd -S '' http:// ftp:// bookmark:
+  return
+fi
+
+case "$scheme" in
+  http) compset -P // || { compadd "$@" -S '' //; return };;
+  ftp) compset -P // || { compadd "$@" -S '' //; return };;
+esac
+
+if [[ "$scheme" = bookmark &&
+      -f "$compconfig[_urls_dir]/$scheme/$PREFIX$SUFFIX" &&
+      -s "$compconfig[_urls_dir]/$scheme/$PREFIX$SUFFIX" ]]; then
+  compadd "$@" -QU -- "$ipre$(<"$compconfig[_urls_dir]/$scheme/$PREFIX$SUFFIX")"
+else
+  dirs=($compconfig[_urls_dir]/$scheme/$PREFIX*$SUFFIX(/:t))
+  files=($compconfig[_urls_dir]/$scheme/$PREFIX*$SUFFIX(.:t))
+  compset -P '*/'
+  compadd "$@" -Q -S '/' - $dirs
+  if [[ "$scheme" = bookmark ]]; then
+    compadd "$@" -QS '' - $files
+  else
+    compadd "$@" -Q - $files
+  fi
+fi