69 lines
1.7 KiB
Bash
69 lines
1.7 KiB
Bash
#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
|