]> src.twobees.de Git - dotfiles.git/blob - stow/oh-my-zsh/.oh-my-zsh/plugins/scd/_scd
initial
[dotfiles.git] / stow / oh-my-zsh / .oh-my-zsh / plugins / scd / _scd
1 #compdef scd
2 #description smart change directory
3
4 local curcontext="$curcontext" state line expl ret=1
5 typeset -A opt_args
6
7 local -a indexopts myargs
8 indexopts=( --add -a --unindex )
9
10 myargs=(
11     # common options
12     "(--help -h)"{--help,-h}"[print help and exit]"
13
14     # options for manipulating directory index
15     - index
16     "(--recursive -r)"{--recursive,-r}"[use recursive --add or --unindex]"
17     "($indexopts)"{--add,-a}"[add specified directories to the index]"
18     "($indexopts)--unindex[remove specified directories from the index]"
19     "*:directory:{ (( ${words[(I)-a|--add|--unindex]} )) && _path_files -/ }"
20
21     # define new directory alias
22     - alias
23     "--alias=[create alias for this or given directory]:directory-alias:()"
24     '1:directory:{ (( words[(I)--alias*] )) && _path_files -/ }'
25
26     # remove definition of directory alias
27     - unalias
28     "--unalias[remove definition of directory alias]"
29     "*::directory alias:->scd-alias-target"
30
31     # act on the directory change
32     - scd
33     "(--all -A)"{--all,-A}"[include less likely and ignored paths]"
34     "--list[print matching directories and exit]"
35     "(--verbose -v)"{--verbose,-v}"[show directory ranking and full paths]"
36     "(--push -p)"{--push,-p}"[change directory with 'pushd']"
37     "1::directory alias:->scd-alias-target"
38     "*:patterns:()"
39 )
40
41 _arguments -S -C $myargs && ret=0
42
43
44 if [[ "$state" == scd-alias-target && -s ~/.scdalias.zsh ]]; then
45     local -a scdaliases
46     scdaliases=( )
47     eval "$(setopt extendedglob
48             phome="(#b)(#s)${HOME}(/*)#(#e)"
49             builtin hash -dr
50             source ~/.scdalias.zsh &&
51             for k v in ${(kv)nameddirs}; do
52                 scdaliases+=( $k:${v/${~phome}/"~"${match[1]}} )
53             done
54             complete_unalias=${+opt_args[unalias---unalias]}
55             if (( complete_unalias && ! ${+nameddirs[OLD]} )); then
56                 scdaliases+=( 'OLD:all aliases to non-existent paths' )
57             fi
58             typeset -p scdaliases )"
59     _describe -t scdaliases scdalias scdaliases
60 fi