summaryrefslogtreecommitdiff
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