diff options
Diffstat (limited to 'plugins/wd/_wd.sh')
-rw-r--r-- | plugins/wd/_wd.sh | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/plugins/wd/_wd.sh b/plugins/wd/_wd.sh new file mode 100644 index 000000000..29df63520 --- /dev/null +++ b/plugins/wd/_wd.sh @@ -0,0 +1,68 @@ +#compdef wd + +zstyle ':completion:*: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 + +# Call `_wd()` when when trying to complete the command `wd` + +zmodload zsh/mapfile +function _wd() { + local ret=1 + local CONFIG=$HOME/.warprc + + # Stolen from + # http://stackoverflow.com/questions/9000698/completion-when-program-has-sub-commands + + # local curcontext="$curcontext" state line + # typeset -A opt_args + + local -a commands + local -a warp_points + warp_points=( "${(f)mapfile[$CONFIG]}" ) + # LIST="${mapfile[$FNAME]}" # Not required unless stuff uses it + + commands=( + 'add:Adds the current working directory to your warp points' + 'add!:Overwrites existing warp point' + 'rm:Removes the given warp point' + 'ls:Outputs all stored warp points' + 'show:Outputs all warp points that point to the current directory' + 'help:Show this extremely helpful text' + '..:Go back to last directory' + ) + + _arguments -C \ + '1: :->first_arg' \ + '2: :->second_arg' && ret=0 + + 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 $words[2] in + add\!|rm) + _describe -t points "Warp points" warp_points && ret=0 + ;; + add) + _message 'Write the name of your warp point' && ret=0 + ;; + 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 |