mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2024-11-19 21:41:07 +01:00
Updated wd plugin to v0.3.0
This commit is contained in:
parent
6b3c953775
commit
d41ac7fe3e
3 changed files with 95 additions and 80 deletions
|
@ -1,48 +1,68 @@
|
||||||
#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
|
||||||
|
zstyle ':completion::complete:wd:*:warp_points' group-name warp_points
|
||||||
|
zstyle ':completion::complete:wd::' list-grouped
|
||||||
|
|
||||||
CONFIG=$HOME/.warprc
|
# Call `_wd()` when when trying to complete the command `wd`
|
||||||
|
|
||||||
local -a main_commands
|
zmodload zsh/mapfile
|
||||||
main_commands=(
|
function _wd() {
|
||||||
add:'Adds the current working directory to your warp points'
|
local ret=1
|
||||||
#add'\!':'Overwrites existing warp point' # TODO: Fix
|
local CONFIG=$HOME/.warprc
|
||||||
rm:'Removes the given warp point'
|
|
||||||
ls:'Outputs all stored warp points'
|
|
||||||
show:'Outputs warp points to current directory'
|
|
||||||
)
|
|
||||||
|
|
||||||
local -a points
|
# Stolen from
|
||||||
while read line
|
# http://stackoverflow.com/questions/9000698/completion-when-program-has-sub-commands
|
||||||
do
|
|
||||||
points+=$(awk "{ gsub(/\/Users\/$USER|\/home\/$USER/,\"~\"); print }" <<< $line)
|
|
||||||
done < $CONFIG
|
|
||||||
|
|
||||||
_wd()
|
# local curcontext="$curcontext" state line
|
||||||
{
|
# typeset -A opt_args
|
||||||
# init variables
|
|
||||||
local curcontext="$curcontext" state line
|
|
||||||
typeset -A opt_args
|
|
||||||
|
|
||||||
# init state
|
local -a commands
|
||||||
_arguments \
|
local -a warp_points
|
||||||
'1: :->command' \
|
warp_points=( "${(f)mapfile[$CONFIG]}" )
|
||||||
'2: :->argument'
|
# LIST="${mapfile[$FNAME]}" # Not required unless stuff uses it
|
||||||
|
|
||||||
case $state in
|
commands=(
|
||||||
command)
|
'add:Adds the current working directory to your warp points'
|
||||||
compadd "$@" add rm ls show
|
'add!:Overwrites existing warp point'
|
||||||
_describe -t warp-points 'Warp points:' points && ret=0
|
'rm:Removes the given warp point'
|
||||||
;;
|
'ls:Outputs all stored warp points'
|
||||||
argument)
|
'show:Outputs all warp points that point to the current directory'
|
||||||
case $words[2] in
|
'help:Show this extremely helpful text'
|
||||||
rm|add!)
|
'..:Go back to last directory'
|
||||||
_describe -t warp-points 'warp points' points && ret=0
|
)
|
||||||
;;
|
|
||||||
*)
|
_arguments -C \
|
||||||
esac
|
'1: :->first_arg' \
|
||||||
esac
|
'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 "$@"
|
_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 @@
|
||||||
#
|
#
|
||||||
# @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()
|
||||||
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()
|
||||||
|
|
||||||
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()
|
||||||
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()
|
||||||
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()
|
||||||
## 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
|
||||||
|
|
||||||
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
|
||||||
## 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
|
||||||
|
|
Loading…
Reference in a new issue