#autoload # Usage: _urls [-f] # Options: # -f : complete files. # # Configuration keys used: # # urls_path # The path to a directory containing a URL database, 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 # % cat bookmark/zsh/home # http://sunsite.auc.dk/zsh/ # % cat bookmark/zsh/meta # http://www.zsh.org/ # # urls_localhttp # Specify a local web server in the form: # hostname:doc root:user area # where hostname is the name of the web server, doc root is the path to # the default web pages for the server and user area is the directory # name used by a user placing web pages within their home area. # e.g. compconf urls_localhttp=www:/usr/local/apache/htdocs:public_html local ipre scheme host user dirs files ret=1 if [[ "$1" = -f ]]; then shift _files "$@" && return fi if [[ -z "$compconfig[urls_path]" ]]; then compconfig[urls_path]=${ZDOTDIR:-$HOME}/.zsh/urls fi ipre="$IPREFIX" if [[ -prefix [-+.a-z0-9]#: ]]; then scheme="${PREFIX%%:*}" compset -P "[-+.a-z0-9]#:" else [ -d $compconfig[urls_path]/bookmark ] && compadd "$@" -S '' bookmark: && ret=0 compadd "$@" -S '' file: ftp:// gopher:// http:// && ret=0 return $ret fi case "$scheme" in http|ftp|gopher) compset -P // || { compadd "$@" -S '' //; return };; file) if ! compset -P //; then if [ -prefix / ]; then _files "$@" return elif [ ! "$PREFIX" ]; then compadd -S '/' - "${PWD%/}" return fi fi ;; bookmark) if [[ -f "$compconfig[urls_path]/$scheme/$PREFIX$SUFFIX" && -s "$compconfig[urls_path]/$scheme/$PREFIX$SUFFIX" ]]; then compadd "$@" -QU -- \ "$ipre$(<"$compconfig[urls_path]/$scheme/$PREFIX$SUFFIX")" else compadd "$@" -Q -S '/' - \ $compconfig[urls_path]/$scheme/$PREFIX*$SUFFIX(/:t) && ret=0 compadd "$@" -QS '' - \ $compconfig[urls_path]/$scheme/$PREFIX*$SUFFIX(.:t) || return $ret fi return ;; esac if [[ -prefix */* ]]; then # Complete part after hostname host=${PREFIX%%/*} compset -P "$host/" if [[ "$compconfig[urls_localhttp]" = ${host}:* ]]; then if [[ -prefix \~ ]]; then compset -P \~ if [[ -prefix */* ]]; then user=${PREFIX%%/*} compset -P $user/ _path_files -W ~$user/${${(s.:.)compconfig[urls_localhttp]}[3]}/ else _users -S/ fi else _path_files -W ${${(s.:.)compconfig[urls_localhttp]}[2]} fi else _path_files -W $compconfig[urls_path]/$scheme/$host/ fi else # Complete hosts dirs=($compconfig[urls_path]/$scheme/$PREFIX*$SUFFIX(/:t)) (( $#dirs )) || _hosts -S/ && ret=0 [ "$scheme" = "http" ] && dirs=($dirs ${${(s.:.)compconfig[urls_localhttp]}[1]}) compadd "$@" -Q -S '/' - $dirs || return $ret fi