提交 d41ac7fe 编写于 作者: M Markus Faerevaag

Updated wd plugin to v0.3.0

上级 6b3c9537
#compdef wd.sh #compdef wd
zstyle ":completion:*:descriptions" format "%B%d%b" zstyle ':completion:*:descriptions' format '%B%d%b'
zstyle ':completion::complete:wd:*:commands' group-name commands
CONFIG=$HOME/.warprc zstyle ':completion::complete:wd:*:warp_points' group-name warp_points
zstyle ':completion::complete:wd::' list-grouped
local -a main_commands
main_commands=( # Call `_wd()` when when trying to complete the command `wd`
add:'Adds the current working directory to your warp points'
#add'\!':'Overwrites existing warp point' # TODO: Fix zmodload zsh/mapfile
rm:'Removes the given warp point' function _wd() {
ls:'Outputs all stored warp points' local ret=1
show:'Outputs warp points to current directory' local CONFIG=$HOME/.warprc
)
# Stolen from
local -a points # http://stackoverflow.com/questions/9000698/completion-when-program-has-sub-commands
while read line
do # local curcontext="$curcontext" state line
points+=$(awk "{ gsub(/\/Users\/$USER|\/home\/$USER/,\"~\"); print }" <<< $line) # typeset -A opt_args
done < $CONFIG
local -a commands
_wd() local -a warp_points
{ warp_points=( "${(f)mapfile[$CONFIG]}" )
# init variables # LIST="${mapfile[$FNAME]}" # Not required unless stuff uses it
local curcontext="$curcontext" state line
typeset -A opt_args commands=(
'add:Adds the current working directory to your warp points'
# init state 'add!:Overwrites existing warp point'
_arguments \ 'rm:Removes the given warp point'
'1: :->command' \ 'ls:Outputs all stored warp points'
'2: :->argument' 'show:Outputs all warp points that point to the current directory'
'help:Show this extremely helpful text'
case $state in '..:Go back to last directory'
command) )
compadd "$@" add rm ls show
_describe -t warp-points 'Warp points:' points && ret=0 _arguments -C \
;; '1: :->first_arg' \
argument) '2: :->second_arg' && ret=0
case $words[2] in
rm|add!) case $state in
_describe -t warp-points 'warp points' points && ret=0 first_arg)
;; _describe -t warp_points "Warp points" warp_points && ret=0
*) _describe -t commands "Commands" commands && ret=0
esac ;;
esac 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 "$@" _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
...@@ -6,4 +6,6 @@ ...@@ -6,4 +6,6 @@
# #
# @github.com/mfaerevaag/wd # @github.com/mfaerevaag/wd
alias wd='. $ZSH/plugins/wd/wd.sh' wd() {
. $ZSH/plugins/wd/wd.sh
}
...@@ -50,12 +50,12 @@ wd_warp() ...@@ -50,12 +50,12 @@ wd_warp()
wd_print_msg $YELLOW "Warping to current directory?" wd_print_msg $YELLOW "Warping to current directory?"
else else
(( n = $#1 - 1 )) (( n = $#1 - 1 ))
wd_print_msg $BLUE "Warping..." #wd_print_msg $BLUE "Warping..."
cd -$n > /dev/null cd -$n > /dev/null
fi fi
elif [[ ${points[$1]} != "" ]] elif [[ ${points[$1]} != "" ]]
then then
wd_print_msg $BLUE "Warping..." #wd_print_msg $BLUE "Warping..."
cd ${points[$1]} cd ${points[$1]}
else else
wd_print_msg $RED "Unkown warp point '$1'" wd_print_msg $RED "Unkown warp point '$1'"
...@@ -64,16 +64,16 @@ wd_warp() ...@@ -64,16 +64,16 @@ wd_warp()
wd_add() wd_add()
{ {
if [[ $1 =~ "^\.+$" ]] if [[ $2 =~ "^\.+$" || $2 =~ "^\s*$" ]]
then then
wd_print_msg $RED "Illeagal warp point (see README)." wd_print_msg $RED "Illegal warp point (see README)."
elif [[ ${points[$1]} == "" ]] || $2 elif [[ ${points[$2]} == "" ]] || $1
then then
wd_remove $1 > /dev/null wd_remove $2 > /dev/null
print "$1:$PWD" >> $CONFIG print "$2:$PWD" >> $CONFIG
wd_print_msg $GREEN "Warp point added" wd_print_msg $GREEN "Warp point added"
else else
wd_print_msg $YELLOW "Warp point '$1' alredy exists. Use 'add!' to overwrite." wd_print_msg $YELLOW "Warp point '$2' already exists. Use 'add!' to overwrite."
fi fi
} }
...@@ -83,7 +83,9 @@ wd_remove() ...@@ -83,7 +83,9 @@ wd_remove()
then then
if wd_tmp=`sed "/^$1:/d" $CONFIG` if wd_tmp=`sed "/^$1:/d" $CONFIG`
then then
echo $wd_tmp > $CONFIG # `>!` forces overwrite
# we need this if people use `setopt NO_CLOBBER`
echo $wd_tmp >! $CONFIG
wd_print_msg $GREEN "Warp point removed" wd_print_msg $GREEN "Warp point removed"
else else
wd_print_msg $RED "Warp point unsuccessfully removed. Sorry!" wd_print_msg $RED "Warp point unsuccessfully removed. Sorry!"
...@@ -131,9 +133,9 @@ wd_print_usage() ...@@ -131,9 +133,9 @@ wd_print_usage()
print "\nCommands:" print "\nCommands:"
print "\t add \t Adds the current working directory to your warp points" print "\t add \t Adds the current working directory to your warp points"
print "\t add! \t Overwrites existing warp point" print "\t add! \t Overwrites existing warp point"
print "\t remove Removes the given warp point" print "\t rm \t Removes the given warp point"
print "\t show \t Outputs warp points to current directory" print "\t show \t Outputs warp points to current directory"
print "\t list \t Outputs all stored warp points" print "\t ls \t Outputs all stored warp points"
print "\t help \t Show this extremely helpful text" print "\t help \t Show this extremely helpful text"
} }
...@@ -141,7 +143,7 @@ wd_print_usage() ...@@ -141,7 +143,7 @@ wd_print_usage()
## run ## run
# get opts # get opts
args=`getopt -o a:r:lhs -l add:,remove:,list,help,show -- $*` args=`getopt -o a:r:lhs -l add:,rm:,ls,help,show -- $*`
# check if no arguments were given # check if no arguments were given
if [[ $? -ne 0 || $#* -eq 0 ]] if [[ $? -ne 0 || $#* -eq 0 ]]
...@@ -161,49 +163,40 @@ else ...@@ -161,49 +163,40 @@ else
for i for i
do do
case "$i" case "$i"
in in
-a|--add|add) -a|--add|add)
wd_add $2 false wd_add false $2
shift
shift
break break
;; ;;
-a!|--add!|add!) -a!|--add!|add!)
wd_add $2 true wd_add true $2
shift
shift
break break
;; ;;
-r|--remove|rm) -r|--remove|rm)
wd_remove $2 wd_remove $2
shift
shift
break break
;; ;;
-l|--list|ls) -l|--list|ls)
wd_list_all wd_list_all
shift
break break
;; ;;
-h|--help|help) -h|--help|help)
wd_print_usage wd_print_usage
shift
break break
;; ;;
-s|--show|show) -s|--show|show)
wd_show wd_show
shift
break break
;; ;;
*) *)
wd_warp $i wd_warp $i
shift
break break
;; ;;
--) --)
shift; break;; break
esac ;;
esac
done done
fi fi
...@@ -211,6 +204,6 @@ fi ...@@ -211,6 +204,6 @@ fi
## garbage collection ## garbage collection
# if not, next time warp will pick up variables from this run # if not, next time warp will pick up variables from this run
# remember, there's no sub shell # remember, there's no sub shell
points="" unset points
args="" unset args
unhash -d val &> /dev/null # fixes issue #1 unset val &> /dev/null # fixes issue #1
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册