You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
2.3 KiB
93 lines
2.3 KiB
#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 |
|
|
|
zmodload zsh/mapfile |
|
|
|
function _wd() { |
|
local CONFIG=$HOME/.warprc |
|
local ret=1 |
|
|
|
local -a commands |
|
local -a warp_points |
|
|
|
warp_points=( "${(f)mapfile[$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 < $CONFIG |
|
|
|
commands=( |
|
'add:Adds the current working directory to your warp points' |
|
'add!:Overwrites existing warp point' |
|
'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 |
|
;; |
|
*) |
|
# complete sub directories from the warp point |
|
_path_files -W "(${points[$target]})" -/ && 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
|
|
|