Commit b764fad2 authored by Robby Russell's avatar Robby Russell
Browse files

Merge pull request #2262 from mfaerevaag/master

Fixed and improved wd plugin
parents cd219f70 b4ffe5cf
## wd
**Maintainer:** [mfaerevaag](https://github.com/mfaerevaag)
`wd` (warp directory) lets you jump to custom directories in zsh, without using cd. Why? Because cd seems ineffecient when the folder is frequently visited or has a long path. [Source](https://github.com/mfaerevaag/wd)
### Usage
* Add warp point to current working directory:
wd add test
If a warp point with the same name exists, use `add!` to overwrite it.
* From an other directory, warp to test with:
wd test
* You can warp back to previous directory, and so on, with the puncticulation syntax:
wd ..
wd ...
This is a wrapper for the zsh `dirs` function.
* Remove warp point test point:
wd rm test
* List warp points to current directory (stored in `~/.warprc`):
wd show
* List all warp points (stored in `~/.warprc`):
wd ls
* Print usage with no opts or the `help` argument.
#compdef wd.sh
zstyle ":completion:*:descriptions" format "%B%d%b"
CONFIG=$HOME/.warprc
local -a main_commands
main_commands=(
add:'Adds the current working directory to your warp points'
#add'\!':'Overwrites existing warp point' # TODO: Fix
rm:'Removes the given warp point'
ls:'Outputs all stored warp points'
show:'Outputs warp points to current directory'
)
local -a points
while read line
do
points+=$(awk "{ gsub(/\/Users\/$USER|\/home\/$USER/,\"~\"); print }" <<< $line)
done < $CONFIG
_wd()
{
# init variables
local curcontext="$curcontext" state line
typeset -A opt_args
# init state
_arguments \
'1: :->command' \
'2: :->argument'
case $state in
command)
compadd "$@" add rm ls show
_describe -t warp-points 'Warp points:' points && ret=0
;;
argument)
case $words[2] in
rm|add!)
_describe -t warp-points 'warp points' points && ret=0
;;
*)
esac
esac
}
_wd "$@"
...@@ -6,4 +6,4 @@ ...@@ -6,4 +6,4 @@
# #
# @github.com/mfaerevaag/wd # @github.com/mfaerevaag/wd
alias wd='. ~/.oh-my-zsh/plugins/wd/wd.sh' alias wd='. $ZSH/plugins/wd/wd.sh'
...@@ -19,6 +19,13 @@ RED="\033[91m" ...@@ -19,6 +19,13 @@ RED="\033[91m"
NOC="\033[m" NOC="\033[m"
# check if config file exists
if [[ ! -a $CONFIG ]]
then
# if not: create config file
touch $CONFIG
fi
## load warp points ## load warp points
typeset -A points typeset -A points
while read line while read line
...@@ -120,11 +127,12 @@ wd_print_msg() ...@@ -120,11 +127,12 @@ wd_print_msg()
wd_print_usage() wd_print_usage()
{ {
print "Usage: wd [add|-a|--add] [rm|-r|--remove] [ls|-l|--list] <point>" print "Usage: wd [add|-a|--add] [rm|-r|--remove] [ls|-l|--list] <point>"
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 remove Removes the given warp point"
print "\t show \t Outputs warp points to current directory"
print "\t list \t Outputs all stored warp points" print "\t list \t Outputs all stored warp points"
print "\t help \t Show this extremely helpful text" print "\t help \t Show this extremely helpful text"
} }
...@@ -135,13 +143,20 @@ wd_print_usage() ...@@ -135,13 +143,20 @@ wd_print_usage()
# get opts # get opts
args=`getopt -o a:r:lhs -l add:,remove:,list,help,show -- $*` args=`getopt -o a:r:lhs -l add:,remove:,list,help,show -- $*`
# check if no arguments were given
if [[ $? -ne 0 || $#* -eq 0 ]] if [[ $? -ne 0 || $#* -eq 0 ]]
then then
wd_print_usage wd_print_usage
else
# can't exit, as this would exit the excecuting shell
# e.i. your terminal
# check if config file is writeable
elif [[ ! -w $CONFIG ]]
then
wd_print_msg $RED "\'$CONFIG\' is not writeable."
# do nothing => exit
# can't run `exit`, as this would exit the executing shell
# i.e. your terminal
else
#set -- $args # WTF #set -- $args # WTF
for i for i
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment