summaryrefslogtreecommitdiff
path: root/plugins/wd/_wd.sh
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/wd/_wd.sh')
-rw-r--r--plugins/wd/_wd.sh68
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