|
@@ -0,0 +1,201 @@
|
|
|
+#!/bin/zsh
|
|
|
+
|
|
|
+# WARP
|
|
|
+# ====
|
|
|
+# Jump to custom directories in terminal
|
|
|
+# because `cd` takes too long...
|
|
|
+#
|
|
|
+# @github.com/mfaerevaag/wd
|
|
|
+
|
|
|
+
|
|
|
+## variables
|
|
|
+CONFIG=$HOME/.warprc
|
|
|
+
|
|
|
+## colors
|
|
|
+BLUE="\033[96m"
|
|
|
+GREEN="\033[92m"
|
|
|
+YELLOW="\033[93m"
|
|
|
+RED="\033[91m"
|
|
|
+NOC="\033[m"
|
|
|
+
|
|
|
+
|
|
|
+## load warp points
|
|
|
+typeset -A points
|
|
|
+while read line
|
|
|
+do
|
|
|
+ arr=(${(s,:,)line})
|
|
|
+ key=${arr[1]}
|
|
|
+ val=${arr[2]}
|
|
|
+
|
|
|
+ points[$key]=$val
|
|
|
+done < $CONFIG
|
|
|
+
|
|
|
+
|
|
|
+## functions
|
|
|
+# prepended wd_ to not conflict with your environment (no sub shell)
|
|
|
+
|
|
|
+wd_warp()
|
|
|
+{
|
|
|
+ if [[ $1 =~ "^\.+$" ]]
|
|
|
+ then
|
|
|
+ if [[ $#1 < 2 ]]
|
|
|
+ then
|
|
|
+ wd_print_msg $YELLOW "Warping to current directory?"
|
|
|
+ else
|
|
|
+ (( n = $#1 - 1 ))
|
|
|
+ wd_print_msg $BLUE "Warping..."
|
|
|
+ cd -$n > /dev/null
|
|
|
+ fi
|
|
|
+ elif [[ ${points[$1]} != "" ]]
|
|
|
+ then
|
|
|
+ wd_print_msg $BLUE "Warping..."
|
|
|
+ cd ${points[$1]}
|
|
|
+ else
|
|
|
+ wd_print_msg $RED "Unkown warp point '$1'"
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+wd_add()
|
|
|
+{
|
|
|
+ if [[ $1 =~ "^\.+$" ]]
|
|
|
+ then
|
|
|
+ wd_print_msg $RED "Illeagal warp point (see README)."
|
|
|
+ elif [[ ${points[$1]} == "" ]] || $2
|
|
|
+ then
|
|
|
+ wd_remove $1 > /dev/null
|
|
|
+ print "$1:$PWD" >> $CONFIG
|
|
|
+ wd_print_msg $GREEN "Warp point added"
|
|
|
+ else
|
|
|
+ wd_print_msg $YELLOW "Warp point '$1' alredy exists. Use 'add!' to overwrite."
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+wd_remove()
|
|
|
+{
|
|
|
+ if [[ ${points[$1]} != "" ]]
|
|
|
+ then
|
|
|
+ if wd_tmp=`sed "/^$1:/d" $CONFIG`
|
|
|
+ then
|
|
|
+ echo $wd_tmp > $CONFIG
|
|
|
+ wd_print_msg $GREEN "Warp point removed"
|
|
|
+ else
|
|
|
+ wd_print_msg $RED "Warp point unsuccessfully removed. Sorry!"
|
|
|
+ fi
|
|
|
+ else
|
|
|
+ wd_print_msg $RED "Warp point was not found"
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+wd_show()
|
|
|
+{
|
|
|
+ wd_print_msg $BLUE "Warp points to current directory:"
|
|
|
+ wd_list_all | grep $PWD$
|
|
|
+}
|
|
|
+
|
|
|
+wd_list_all()
|
|
|
+{
|
|
|
+ wd_print_msg $BLUE "All warp points:"
|
|
|
+ while read line
|
|
|
+ do
|
|
|
+ if [[ $line != "" ]]
|
|
|
+ then
|
|
|
+ arr=(${(s,:,)line})
|
|
|
+ key=${arr[1]}
|
|
|
+ val=${arr[2]}
|
|
|
+
|
|
|
+ print "\t" $key "\t -> \t" $val
|
|
|
+ fi
|
|
|
+ done < $CONFIG
|
|
|
+}
|
|
|
+
|
|
|
+wd_print_msg()
|
|
|
+{
|
|
|
+ if [[ $1 == "" || $2 == "" ]]
|
|
|
+ then
|
|
|
+ print " $RED*$NOC Could not print message. Sorry!"
|
|
|
+ else
|
|
|
+ print " $1*$NOC $2"
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+wd_print_usage()
|
|
|
+{
|
|
|
+ print "Usage: wd [add|-a|--add] [rm|-r|--remove] [ls|-l|--list] <point>"
|
|
|
+ print "\nCommands:"
|
|
|
+ print "\t add \t Adds the current working directory to your warp points"
|
|
|
+ print "\t add! \t Overwrites existing warp point"
|
|
|
+ print "\t remove Removes the given warp point"
|
|
|
+ print "\t list \t Outputs all stored warp points"
|
|
|
+ print "\t help \t Show this extremely helpful text"
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+## run
|
|
|
+
|
|
|
+# get opts
|
|
|
+args=`getopt -o a:r:lhs -l add:,remove:,list,help,show -- $*`
|
|
|
+
|
|
|
+if [[ $? -ne 0 || $#* -eq 0 ]]
|
|
|
+then
|
|
|
+ wd_print_usage
|
|
|
+else
|
|
|
+ # can't exit, as this would exit the excecuting shell
|
|
|
+ # e.i. your terminal
|
|
|
+
|
|
|
+ #set -- $args # WTF
|
|
|
+
|
|
|
+ for i
|
|
|
+ do
|
|
|
+ case "$i"
|
|
|
+ in
|
|
|
+ -a|--add|add)
|
|
|
+ wd_add $2 false
|
|
|
+ shift
|
|
|
+ shift
|
|
|
+ break
|
|
|
+ ;;
|
|
|
+ -a!|--add!|add!)
|
|
|
+ wd_add $2 true
|
|
|
+ shift
|
|
|
+ shift
|
|
|
+ break
|
|
|
+ ;;
|
|
|
+ -r|--remove|rm)
|
|
|
+ wd_remove $2
|
|
|
+ shift
|
|
|
+ shift
|
|
|
+ break
|
|
|
+ ;;
|
|
|
+ -l|--list|ls)
|
|
|
+ wd_list_all
|
|
|
+ shift
|
|
|
+ break
|
|
|
+ ;;
|
|
|
+ -h|--help|help)
|
|
|
+ wd_print_usage
|
|
|
+ shift
|
|
|
+ break
|
|
|
+ ;;
|
|
|
+ -s|--show|show)
|
|
|
+ wd_show
|
|
|
+ shift
|
|
|
+ break
|
|
|
+ ;;
|
|
|
+ *)
|
|
|
+ wd_warp $i
|
|
|
+ shift
|
|
|
+ break
|
|
|
+ ;;
|
|
|
+ --)
|
|
|
+ shift; break;;
|
|
|
+ esac
|
|
|
+ done
|
|
|
+fi
|
|
|
+
|
|
|
+
|
|
|
+## garbage collection
|
|
|
+# if not, next time warp will pick up variables from this run
|
|
|
+# remember, there's no sub shell
|
|
|
+points=""
|
|
|
+args=""
|
|
|
+unhash -d val &> /dev/null # fixes issue #1
|