Browse Source

Merge pull request #2257 from mfaerevaag/master

Added wd plugin
Robby Russell 11 years ago
parent
commit
72aa4ddb10
2 changed files with 210 additions and 0 deletions
  1. 9 0
      plugins/wd2/wd2/wd.plugin.zsh
  2. 201 0
      plugins/wd2/wd2/wd.sh

+ 9 - 0
plugins/wd2/wd2/wd.plugin.zsh

@@ -0,0 +1,9 @@
+#!/bin/zsh
+
+# WARP
+# ====
+# oh-my-zsh plugin
+#
+# @github.com/mfaerevaag/wd
+
+alias wd='. ~/.oh-my-zsh/plugins/wd/wd.sh'

+ 201 - 0
plugins/wd2/wd2/wd.sh

@@ -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