function toss () { mv -f $@ ~/.trashcan; }
 function xcopy () { tar cvf - -C $1 $1/* | tar xvf - -C $2; }
 function checkdns () { ping $( grep nameserver /etc/resolv.conf | awk '{print $2}' | head -1); }
+function has () { 
+    which $1 &> /dev/null
+    if [[ $? -eq 0 ]]; then
+        echo 'yes'
+        return 0
+    else
+        echo 'no'
+        return 1
+    fi
+}
 
-if [[ $(which pidof &> /dev/null; echo $?) -eq 1 ]]; then
+if [[ $( has pidof ) == 'no'  ]]; then
     function pidof () { ps -e -o pid,comm | grep "$1" | awk '{print $1}'; }
 fi
 
 
 
 compdef _switchto switchto
 
+if [[ $( has bbedit ) == 'yes' ]]; then
+    export GUI_EDITOR="bbedit -w"
+elif [[ $( has mate_wait ) == 'yes' ]]; then
+    export GUI_EDITOR="mate_wait"
+else
+    export GUI_EDITOR="vim"
+fi
+
+if [[ -z "$SSH_TTY" ]]; then
+    export EDITOR="$GUI_EDITOR"
+    export SVN_LOG_EDITOR="$GUI_EDITOR"
+    export GIT_SEQUENCE_EDITOR="$GUI_EDITOR"
+else
+    export EDITOR=vim
+    export SVN_LOG_EDITOR=vim
+    export GIT_SEQUENCE_EDITOR=vim
+fi
+
 switchto git