diff options
Diffstat (limited to 'oh-my-zsh/plugins/wd/_wd.sh')
-rw-r--r-- | oh-my-zsh/plugins/wd/_wd.sh | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/oh-my-zsh/plugins/wd/_wd.sh b/oh-my-zsh/plugins/wd/_wd.sh new file mode 100644 index 0000000..8d5cf15 --- /dev/null +++ b/oh-my-zsh/plugins/wd/_wd.sh @@ -0,0 +1,98 @@ +#compdef wd + +zstyle ':completion::complete:wd:*:descriptions' format '%B%d%b' +zstyle ':completion::complete:wd:*:commands' group-name commands +zstyle ':completion::complete:wd:*:warp_points' group-name warp_points +zstyle ':completion::complete:wd::' list-grouped + +zmodload zsh/mapfile + +function _wd() { + local WD_CONFIG=${WD_CONFIG:-$HOME/.warprc} + local ret=1 + + local -a commands + local -a warp_points + + warp_points=( "${(f)mapfile[$WD_CONFIG]//$HOME/~}" ) + + typeset -A points + while read -r line + do + arr=(${(s,:,)line}) + name=${arr[1]} + target_path=${arr[2]} + + # replace ~ from path to fix completion (#17) + target_path=${target_path/#\~/$HOME} + + points[$name]=$target_path + done < $WD_CONFIG + + commands=( + 'add:Adds the current working directory to your warp points' + 'add!:Overwrites existing warp point' + 'export:Export warp points as static named directories' + 'rm:Removes the given warp point' + 'list:Outputs all stored warp points' + 'ls:Show files from given warp point' + 'path:Show path to given warp point' + 'show:Outputs all warp points that point to the current directory or shows a specific target directory for a point' + 'help:Show this extremely helpful text' + 'clean:Remove points warping to nonexistent directories' + 'clean!:Remove nonexistent directories without confirmation' + '..:Go back to last directory' + ) + + _arguments -C \ + '1: :->first_arg' \ + '2: :->second_arg' && ret=0 + + local target=$words[2] + + case $state in + first_arg) + _describe -t warp_points "Warp points" warp_points && ret=0 + _describe -t commands "Commands" commands && ret=0 + ;; + second_arg) + case $target in + add\!|rm) + _describe -t points "Warp points" warp_points && ret=0 + ;; + add) + _message 'Write the name of your warp point' && ret=0 + ;; + show) + _describe -t points "Warp points" warp_points && ret=0 + ;; + ls) + _describe -t points "Warp points" warp_points && ret=0 + ;; + path) + _describe -t points "Warp points" warp_points && ret=0 + ;; + *) + if [[ -v points[$target] ]]; then + # complete sub directories from the warp point + _path_files -W "(${points[$target]})" -/ && ret=0 + fi + + # don't complete anything if warp point is not valid + ;; + esac + ;; + esac + + return $ret +} + +_wd "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et |