123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- #compdef scd
- #description smart change directory
- local curcontext="$curcontext" state line expl ret=1
- typeset -A opt_args
- local -a indexopts myargs
- indexopts=( --add -a --unindex )
- myargs=(
- # common options
- "(--help -h)"{--help,-h}"[print help and exit]"
- # options for manipulating directory index
- - index
- "(--recursive -r)"{--recursive,-r}"[use recursive --add or --unindex]"
- "($indexopts)"{--add,-a}"[add specified directories to the index]"
- "($indexopts)--unindex[remove specified directories from the index]"
- "*:directory:{ (( ${words[(I)-a|--add|--unindex]} )) && _path_files -/ }"
- # define new directory alias
- - alias
- "--alias=[create alias for this or given directory]:directory-alias:()"
- '1:directory:{ (( words[(I)--alias*] )) && _path_files -/ }'
- # remove definition of directory alias
- - unalias
- "--unalias[remove definition of directory alias]"
- "*::directory alias:->scd-alias-target"
- # act on the directory change
- - scd
- "(--all -A)"{--all,-A}"[include less likely and ignored paths]"
- "--list[print matching directories and exit]"
- "(--verbose -v)"{--verbose,-v}"[show directory ranking and full paths]"
- "(--push -p)"{--push,-p}"[change directory with 'pushd']"
- "1::directory alias:->scd-alias-target"
- "*:patterns:()"
- )
- _arguments -S -C $myargs && ret=0
- if [[ "$state" == scd-alias-target && -s ~/.scdalias.zsh ]]; then
- local -a scdaliases
- scdaliases=( )
- eval "$(setopt extendedglob
- phome="(#b)(#s)${HOME}(/*)#(#e)"
- builtin hash -dr
- source ~/.scdalias.zsh &&
- for k v in ${(kv)nameddirs}; do
- scdaliases+=( $k:${v/${~phome}/"~"${match[1]}} )
- done
- complete_unalias=${+opt_args[unalias---unalias]}
- if (( complete_unalias && ! ${+nameddirs[OLD]} )); then
- scdaliases+=( 'OLD:all aliases to non-existent paths' )
- fi
- typeset -p scdaliases )"
- _describe -t scdaliases scdalias scdaliases
- fi
|