浏览代码

Merge remote branch 'upstream/master'

Conflicts:
	lib/completion.zsh
Sébastien M-B 13 年之前
父节点
当前提交
741388be00
共有 50 个文件被更改,包括 658 次插入180 次删除
  1. 9 1
      README.textile
  2. 3 1
      lib/completion.zsh
  3. 2 2
      lib/functions.zsh
  4. 33 1
      lib/git.zsh
  5. 15 4
      oh-my-zsh.sh
  6. 1 0
      plugins/archlinux/archlinux.plugin.zsh
  7. 8 4
      plugins/autojump/autojump.plugin.zsh
  8. 20 0
      plugins/battery/battery.plugin.zsh
  9. 3 7
      plugins/bundler/bundler.plugin.zsh
  10. 37 5
      plugins/debian/debian.plugin.zsh
  11. 1 0
      plugins/django/django.plugin.zsh
  12. 0 5
      plugins/extract/extract.plugin.zsh
  13. 5 2
      plugins/git/git.plugin.zsh
  14. 11 1
      plugins/github/github.plugin.zsh
  15. 14 0
      plugins/jake-node/jake-node.plugin.zsh
  16. 14 7
      plugins/knife/_knife
  17. 5 5
      plugins/mercurial/mercurial.plugin.zsh
  18. 63 7
      plugins/pow/pow.plugin.zsh
  19. 1 0
      plugins/rails/rails.plugin.zsh
  20. 1 0
      plugins/rails3/rails3.plugin.zsh
  21. 6 0
      plugins/rake/rake.plugin.zsh
  22. 44 0
      plugins/rbenv/rbenv.plugin.zsh
  23. 1 1
      plugins/ruby/ruby.plugin.zsh
  24. 1 1
      plugins/rvm/rvm.plugin.zsh
  25. 64 0
      plugins/sprunge/sprunge.plugin.zsh
  26. 13 0
      plugins/symfony2/symfony2.plugin.zsh
  27. 65 97
      plugins/taskwarrior/_task
  28. 11 0
      plugins/terminalapp/terminalapp.plugin.zsh
  29. 5 0
      templates/zshrc.zsh-template
  30. 8 2
      themes/alanpeabody.zsh-theme
  31. 8 1
      themes/bira.zsh-theme
  32. 7 1
      themes/crunch.zsh-theme
  33. 7 1
      themes/dallas.zsh-theme
  34. 4 0
      themes/eastwood.zsh-theme
  35. 8 1
      themes/fino.zsh-theme
  36. 5 1
      themes/gallois.zsh-theme
  37. 2 2
      themes/jonathan.zsh-theme
  38. 2 2
      themes/josh.zsh-theme
  39. 8 1
      themes/macovsky-ruby.zsh-theme
  40. 7 1
      themes/macovsky.zsh-theme
  41. 24 0
      themes/mh.zsh-theme
  42. 58 0
      themes/mortalscumbag.zsh-theme
  43. 1 1
      themes/murilasso.zsh-theme
  44. 4 0
      themes/nebirhos.zsh-theme
  45. 6 0
      themes/sammy.zsh-theme
  46. 7 1
      themes/superjarin.zsh-theme
  47. 8 1
      themes/suvash.zsh-theme
  48. 1 1
      themes/wuffers.zsh-theme
  49. 9 1
      themes/zhann.zsh-theme
  50. 18 11
      tools/upgrade.sh

+ 9 - 1
README.textile

@@ -8,6 +8,14 @@ h2. Setup
 
 h3. The automatic installer... (do you trust me?)
 
+You can install this via the command line with either `curl` or `wget`.
+
+h4. via `curl`
+
+@curl -L https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh | sh@
+
+h4. via `wget`
+
 @wget --no-check-certificate https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh@
 
 h3. The manual way
@@ -48,7 +56,7 @@ the "refcard":http://www.bash2zsh.com/zsh_refcard/refcard.pdf is pretty tasty fo
 h3. Customization
 
 If you want to override any of the default behavior, just add a new file (ending in @.zsh@) into the @custom/@ directory.
-If you have many functions which go good together you can put them as a *.plugin.zsh file in the @custom/plugins/@ directory and then enable this plugin.
+If you have many functions which go well together you can put them as a *.plugin.zsh file in the @custom/plugins/@ directory and then enable this plugin.
 If you would like to override the functionality of a plugin distributed with oh-my-zsh, create a plugin of the same name in the @custom/plugins/@ directory and it will be loaded instead of the one in @plugins/@.
 
 

+ 3 - 1
lib/completion.zsh

@@ -32,14 +32,16 @@ zstyle ':completion:*:cd:*' tag-order local-directories directory-stack path-dir
 cdpath=(.)
 
 # use /etc/hosts and known_hosts for hostname completion
+[ -r /etc/ssh/ssh_known_hosts ] && _global_ssh_hosts=(${${${${(f)"$(</etc/ssh/ssh_known_hosts)"}:#[\|]*}%%\ *}%%,*}) || _ssh_hosts=()
 [ -r ~/.ssh/known_hosts ] && _ssh_hosts=(${${${${(f)"$(<$HOME/.ssh/known_hosts)"}:#[\|]*}%%\ *}%%,*}) || _ssh_hosts=()
 [ -r ~/.ssh/config ] && _ssh_config=($(cat ~/.ssh/config | sed -ne 's/Host[=\t ]//p')) || _ssh_config=()
 [ -r /etc/hosts ] && : ${(A)_etc_hosts:=${(s: :)${(ps:\t:)${${(f)~~"$(</etc/hosts)"}%%\#*}##[:blank:]#[^[:blank:]]#}}} || _etc_hosts=()
 hosts=(
   "$_ssh_config[@]"
+  "$_global_ssh_hosts[@]"
   "$_ssh_hosts[@]"
   "$_etc_hosts[@]"
-  `hostname`
+  "$HOST"
   localhost
 )
 zstyle ':completion:*:hosts' hosts $hosts

+ 2 - 2
lib/functions.zsh

@@ -3,11 +3,11 @@ function zsh_stats() {
 }
 
 function uninstall_oh_my_zsh() {
-  /bin/sh $ZSH/tools/uninstall.sh
+  /usr/bin/env ZSH=$ZSH /bin/sh $ZSH/tools/uninstall.sh
 }
 
 function upgrade_oh_my_zsh() {
-  /bin/sh $ZSH/tools/upgrade.sh
+  /usr/bin/env ZSH=$ZSH /bin/sh $ZSH/tools/upgrade.sh
 }
 
 function take() {

+ 33 - 1
lib/git.zsh

@@ -4,15 +4,21 @@ function git_prompt_info() {
   echo "$ZSH_THEME_GIT_PROMPT_PREFIX${ref#refs/heads/}$(parse_git_dirty)$ZSH_THEME_GIT_PROMPT_SUFFIX"
 }
 
+
 # Checks if working tree is dirty
 parse_git_dirty() {
-  if [[ -n $(git status -s 2> /dev/null) ]]; then
+  local SUBMODULE_SYNTAX=''
+  if [[ $POST_1_7_2_GIT -gt 0 ]]; then
+        SUBMODULE_SYNTAX="--ignore-submodules=dirty"
+  fi
+  if [[ -n $(git status -s ${SUBMODULE_SYNTAX}  2> /dev/null) ]]; then
     echo "$ZSH_THEME_GIT_PROMPT_DIRTY"
   else
     echo "$ZSH_THEME_GIT_PROMPT_CLEAN"
   fi
 }
 
+
 # Checks if there are commits ahead from remote
 function git_prompt_ahead() {
   if $(echo "$(git log origin/$(current_branch)..HEAD 2> /dev/null)" | grep '^commit' &> /dev/null); then
@@ -62,3 +68,29 @@ git_prompt_status() {
   fi
   echo $STATUS
 }
+
+#compare the provided version of git to the version installed and on path
+#prints 1 if input version <= installed version
+#prints -1 otherwise 
+function git_compare_version() {
+  local INPUT_GIT_VERSION=$1;
+  local INSTALLED_GIT_VERSION
+  INPUT_GIT_VERSION=(${(s/./)INPUT_GIT_VERSION});
+  INSTALLED_GIT_VERSION=($(git --version));
+  INSTALLED_GIT_VERSION=(${(s/./)INSTALLED_GIT_VERSION[3]});
+
+  for i in {1..3}; do
+    if [[ $INSTALLED_GIT_VERSION[$i] -lt $INPUT_GIT_VERSION[$i] ]]; then
+      echo -1
+      return 0
+    fi
+  done
+  echo 1
+}
+
+#this is unlikely to change so make it all statically assigned
+POST_1_7_2_GIT=$(git_compare_version "1.7.2")
+#clean up the namespace slightly by removing the checker function
+unset -f git_compare_version
+
+

+ 15 - 4
oh-my-zsh.sh

@@ -19,13 +19,19 @@ if [[ -z "$ZSH_CUSTOM" ]]; then
     ZSH_CUSTOM="$ZSH/custom"
 fi
 
+
+is_plugin() {
+  local base_dir=$1
+  local name=$2
+  test -f $base_dir/plugins/$name/$name.plugin.zsh \
+    || test -f $base_dir/plugins/$name/_$name
+}
 # Add all defined plugins to fpath. This must be done
 # before running compinit.
-plugin=${plugin:=()}
 for plugin ($plugins); do
-  if [ -f $ZSH_CUSTOM/plugins/$plugin/$plugin.plugin.zsh ]; then
+  if is_plugin $ZSH_CUSTOM $plugin; then
     fpath=($ZSH_CUSTOM/plugins/$plugin $fpath)
-  elif [ -f $ZSH/plugins/$plugin/$plugin.plugin.zsh ]; then
+  elif is_plugin $ZSH $plugin; then
     fpath=($ZSH/plugins/$plugin $fpath)
   fi
 done
@@ -59,7 +65,12 @@ then
 else
   if [ ! "$ZSH_THEME" = ""  ]
   then
-    source "$ZSH/themes/$ZSH_THEME.zsh-theme"
+    if [ -f "$ZSH/custom/$ZSH_THEME.zsh-theme" ]
+    then
+      source "$ZSH/custom/$ZSH_THEME.zsh-theme"
+    else
+      source "$ZSH/themes/$ZSH_THEME.zsh-theme"
+    fi
   fi
 fi
 

+ 1 - 0
plugins/archlinux/archlinux.plugin.zsh

@@ -9,6 +9,7 @@ if [[ -x `which yaourt` ]]; then
   alias yaconf='yaourt -C'        # Fix all configuration files with vimdiff
   # Pacman - https://wiki.archlinux.org/index.php/Pacman_Tips
   alias yaupg='yaourt -Syu'        # Synchronize with repositories before upgrading packages that are out of date on the local system.
+  alias yasu='yaourt --sucre'      # Same as yaupg, but without confirmation
   alias yain='yaourt -S'           # Install specific package(s) from the repositories
   alias yains='yaourt -U'          # Install specific package not from the repositories but from a file 
   alias yare='yaourt -R'           # Remove the specified package(s), retaining its configuration(s) and required dependencies

+ 8 - 4
plugins/autojump/autojump.plugin.zsh

@@ -1,5 +1,9 @@
-if [ -f /opt/local/etc/profile.d/autojump.sh ]; then
-  . /opt/local/etc/profile.d/autojump.sh
-elif [ -f `brew --prefix`/etc/autojump ]; then
-  . `brew --prefix`/etc/autojump
+if [ $commands[autojump] ]; then # check if autojump is installed
+  if [ -f /usr/share/autojump/autojump.zsh ]; then # debian and ubuntu package
+    . /usr/share/autojump/autojump.zsh
+  elif [ -f /etc/profile.d/autojump.zsh ]; then # manual installation
+    . /etc/profile.d/autojump.zsh
+  elif [ $commands[brew] -a -f `brew --prefix`/etc/autojump ]; then # mac os x with brew
+    . `brew --prefix`/etc/autojump
+  fi
 fi

+ 20 - 0
plugins/battery/battery.plugin.zsh

@@ -0,0 +1,20 @@
+if [[ $(acpi 2&>/dev/null | grep -c '^Battery.*Discharging') -gt 0 ]] ; then
+  function battery_pct_remaining() { echo "$(acpi | cut -f2 -d ',' | tr -cd '[:digit:]')" }
+  function battery_time_remaining() { echo $(acpi | cut -f3 -d ',') }
+  function battery_pct_prompt() {
+    b=$(battery_pct_remaining)
+    if [ $b -gt 50 ] ; then
+      color='green'
+    elif [ $b -gt 20 ] ; then
+      color='yellow'
+    else
+      color='red'
+    fi
+    echo "%{$fg[$color]%}[$(battery_pct_remaining)%%]%{$reset_color%}"
+  }
+else
+  error_msg='no battery'
+  function battery_pct_remaining() { echo $error_msg }
+  function battery_time_remaining() { echo $error_msg }
+  function battery_pct_prompt() { echo '' }
+fi

+ 3 - 7
plugins/bundler/bundler.plugin.zsh

@@ -1,7 +1,3 @@
-fpath=($ZSH/plugins/bundler $fpath)
-autoload -U compinit
-compinit -i
-
 alias be="bundle exec"
 alias bi="bundle install"
 alias bl="bundle list"
@@ -10,7 +6,7 @@ alias bu="bundle update"
 
 # The following is based on https://github.com/gma/bundler-exec
 
-bundled_commands=(cap capify cucumber foreman guard heroku nanoc rackup rails rainbows rake rspec ruby shotgun spec spork thin unicorn unicorn_rails)
+bundled_commands=(annotate cap capify cucumber ey foreman guard heroku middleman nanoc rackup rainbows rails rake rspec ruby shotgun spec spork thin thor unicorn unicorn_rails)
 
 ## Functions
 
@@ -20,7 +16,7 @@ _bundler-installed() {
 
 _within-bundled-project() {
   local check_dir=$PWD
-  while [ "$(dirname $check_dir)" != "/" ]; do
+  while [ $check_dir != "/" ]; do
     [ -f "$check_dir/Gemfile" ] && return
     check_dir="$(dirname $check_dir)"
   done
@@ -41,6 +37,6 @@ for cmd in $bundled_commands; do
   alias $cmd=bundled_$cmd
 
   if which _$cmd > /dev/null 2>&1; then
-        compdef _$cmd bundled_$cmd
+        compdef _$cmd bundled_$cmd=$cmd
   fi
 done

+ 37 - 5
plugins/debian/debian.plugin.zsh

@@ -54,7 +54,7 @@ if [[ $use_sudo -eq 1 ]]; then
 
     # apt-get only
     alias ads="sudo $apt_pref dselect-upgrade"
-    
+
     # Install all .deb files in the current directory.
     # Warning: you will need to put the glob in single quotes if you use:
     # glob_subst
@@ -113,9 +113,6 @@ alias allpkgs='aptitude search -F "%p" --disable-columns ~i'
 alias mydeb='time dpkg-buildpackage -rfakeroot -us -uc'
 
 
-
-
-
 # Functions #################################################################
 # create a simple script that can be used to 'duplicate' a system
 apt-copy() {
@@ -132,11 +129,46 @@ apt-copy() {
     chmod +x apt-copy.sh
 }
 
+# Prints apt history
+# Usage:
+#   apt-history install
+#   apt-history upgrade
+#   apt-history remove
+#   apt-history rollback
+#   apt-history list
+# Based On: http://linuxcommando.blogspot.com/2008/08/how-to-show-apt-log-history.html
+apt-history () {
+  case "$1" in
+    install)
+      zgrep --no-filename 'install ' $(ls -rt /var/log/dpkg*)
+      ;;
+    upgrade|remove)
+      zgrep --no-filename $1 $(ls -rt /var/log/dpkg*)
+      ;;
+    rollback)
+      zgrep --no-filename upgrade $(ls -rt /var/log/dpkg*) | \
+        grep "$2" -A10000000 | \
+        grep "$3" -B10000000 | \
+        awk '{print $4"="$5}'
+      ;;
+    list)
+      zcat $(ls -rt /var/log/dpkg*)
+      ;;
+    *)
+      echo "Parameters:"
+      echo " install - Lists all packages that have been installed."
+      echo " upgrade - Lists all packages that have been upgraded."
+      echo " remove - Lists all packages that have been removed."
+      echo " rollback - Lists rollback information."
+      echo " list - Lists all contains of dpkg logs."
+      ;;
+  esac
+}
 
 # Kernel-package building shortcut
 kerndeb () {
     # temporarily unset MAKEFLAGS ( '-j3' will fail )
-    MAKEFLAGS=$( print - $MAKEFLAGS | perl -pe 's/-j\s*[\d]+//g' )		
+    MAKEFLAGS=$( print - $MAKEFLAGS | perl -pe 's/-j\s*[\d]+//g' )
     print '$MAKEFLAGS set to '"'$MAKEFLAGS'"
 	appendage='-custom' # this shows up in $ (uname -r )
     revision=$(date +"%Y%m%d") # this shows up in the .deb file name

+ 1 - 0
plugins/django/django.plugin.zsh

@@ -220,3 +220,4 @@ _managepy() {
 
 compdef _managepy manage.py
 compdef _managepy django
+compdef _managepy django-manage

+ 0 - 5
plugins/extract/extract.plugin.zsh

@@ -78,8 +78,3 @@ function extract() {
 
 alias x=extract
 
-# add extract completion function to path
-fpath=($ZSH/plugins/extract $fpath)
-autoload -U compinit
-compinit -i
-

+ 5 - 2
plugins/git/git.plugin.zsh

@@ -9,7 +9,7 @@ alias gup='git fetch && git rebase'
 compdef _git gup=git-fetch
 alias gp='git push'
 compdef _git gp=git-push
-gdv() { git-diff -w "$@" | view - }
+gdv() { git diff -w "$@" | view - }
 compdef _git gdv=git-diff
 alias gc='git commit -v'
 compdef _git gc=git-commit
@@ -17,6 +17,7 @@ alias gca='git commit -v -a'
 compdef _git gca=git-commit
 alias gco='git checkout'
 compdef _git gco=git-checkout
+alias gcm='git checkout master'
 alias gb='git branch'
 compdef _git gb=git-branch
 alias gba='git branch -a'
@@ -35,6 +36,8 @@ alias ga='git add'
 compdef _git ga=git-add
 alias gm='git merge'
 compdef _git gm=git-merge
+alias grh='git reset HEAD'
+alias grhh='git reset HEAD --hard'
 
 # Git and svn mix
 alias git-svn-dcommit-push='git svn dcommit && git push github master:svntrunk'
@@ -57,4 +60,4 @@ compdef ggpull=git
 alias ggpush='git push origin $(current_branch)'
 compdef ggpush=git
 alias ggpnp='git pull origin $(current_branch) && git push origin $(current_branch)'
-compdef ggpnp=git
+compdef ggpnp=git

+ 11 - 1
plugins/github/github.plugin.zsh

@@ -1,7 +1,17 @@
 # Setup hub function for git, if it is available; http://github.com/defunkt/hub
 if [ "$commands[(I)hub]" ] && [ "$commands[(I)ruby]" ]; then
     # eval `hub alias -s zsh`
-    function git(){hub "$@"}
+    function git(){
+        if ! (( $+_has_working_hub  )); then
+            hub --version &> /dev/null
+            _has_working_hub=$(($? == 0))
+        fi
+        if (( $_has_working_hub )) ; then
+            hub "$@"
+        else
+            command git "$@"
+        fi
+    }
 fi
 
 # Functions #################################################################

+ 14 - 0
plugins/jake-node/jake-node.plugin.zsh

@@ -0,0 +1,14 @@
+#---oh-my-zsh plugin : task Autocomplete for Jake tool---
+# Jake : https://github.com/mde/jake
+# Warning : Jakefile should have the right case : Jakefile or jakefile
+# Tested on : MacOSX 10.7 (Lion), Ubuntu 11.10
+# Author : Alexandre Lacheze (@al3xstrat)
+# Inspiration : http://weblog.rubyonrails.org/2006/3/9/fast-rake-task-completion-for-zsh 
+
+function _jake () {
+  if [ -f Jakefile ]||[ -f jakefile ]; then
+    compadd `jake -T | cut -d " " -f 2 | sed -E "s/.\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"`
+  fi
+}
+
+compdef _jake jake

+ 14 - 7
plugins/knife/_knife

@@ -26,7 +26,7 @@ _knife() {
   
   case $state in
   knifecmd)
-    compadd -Q "$@" bootstrap client configure cookbook "cookbook site" "data bag" exec index node recipe role search ssh status windows $cloudproviders
+    compadd -Q "$@" bootstrap client configure cookbook "cookbook site" "data bag" exec environment index node recipe role search ssh status windows $cloudproviders
   ;;
   knifesubcmd)
     case $words[2] in
@@ -42,6 +42,9 @@ _knife() {
     cookbook)
       compadd -Q "$@" test list create download delete "metadata from" show "bulk delete" metadata upload
     ;;
+  environment)
+      compadd -Q "$@" list create delete edit show "from file"
+      ;;
     node)
      compadd -Q "$@" "from file" create show edit delete list run_list "bulk delete"
     ;;
@@ -138,27 +141,31 @@ _knife_options3() {
 
 # The chef_x_remote functions use knife to get a list of objects of type x on the server
 _chef_roles_remote() {
- (knife role list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
+ (knife role list --format json | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
 }
 
 _chef_clients_remote() {
- (knife client list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
+ (knife client list --format json | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
 }
 
 _chef_nodes_remote() {
- (knife node list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
+ (knife node list --format json | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
 }
 
 _chef_cookbooks_remote() {
- (knife cookbook list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
+ (knife cookbook list --format json | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
 }
 
 _chef_sitecookbooks_remote() {
- (knife cookbook site list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
+ (knife cookbook site list --format json | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
 }
 
 _chef_data_bags_remote() {
- (knife data bag list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
+ (knife data bag list --format json | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
+}
+
+_chef_environments_remote() {
+  (knife environment list | awk '{print $1}')
 }
 
 # The chef_x_local functions use the knife config to find the paths of relevant objects x to be uploaded to the server

+ 5 - 5
plugins/mercurial/mercurial.plugin.zsh

@@ -1,14 +1,14 @@
 
 # Mercurial
-alias hgc='hg commit -v'
-alias hgb='hg branch -v'
+alias hgc='hg commit'
+alias hgb='hg branch'
 alias hgba='hg branches'
 alias hgco='hg checkout'
 alias hgd='hg diff'
 alias hged='hg diffmerge'
 # pull and update
-alias hgl='hg pull -u -v'
-alias hgp='hg push -v'
-alias hgs='hg status -v'
+alias hgl='hg pull -u'
+alias hgp='hg push'
+alias hgs='hg status'
 # this is the 'git commit --amend' equivalent
 alias hgca='hg qimport -r tip ; hg qrefresh -e ; hg qfinish tip'

+ 63 - 7
plugins/pow/pow.plugin.zsh

@@ -1,10 +1,66 @@
-# Thanks to Christopher Sexton
-# https://gist.github.com/965032
-function kapow {
-	touch ~/.pow/$1/tmp/restart.txt
-	if [ $? -eq 0 ]; then
-		echo "$fg[yellow]Pow restarting $1...$reset_color"
-	fi
+# Restart a rack app running under pow
+# http://pow.cx/
+#
+# Adds a kapow command that will restart an app
+#
+#   $ kapow myapp
+#
+# Supports command completion.
+#
+# If you are not already using completion you might need to enable it with
+# 
+#    autoload -U compinit compinit
+#
+# Changes:
+#
+# Defaults to the current application, and will walk up the tree to find 
+# a config.ru file and restart the corresponding app
+#
+# Will Detect if a app does not exist in pow and print a (slightly) helpful 
+# error message
+
+rack_root_detect(){
+  setopt chaselinks
+  local orgdir=$(pwd)
+  local basedir=$(pwd)
+
+  while [[ $basedir != '/' ]]; do
+    test -e "$basedir/config.ru" && break
+    builtin cd ".." 2>/dev/null
+    basedir="$(pwd)"
+  done
+
+  builtin cd $orgdir 2>/dev/null
+  [[ ${basedir} == "/" ]] && return 1
+  echo `basename $basedir | sed -E "s/.(com|net|org)//"`
 }
 
+kapow(){
+  local vhost=$1
+  [ ! -n "$vhost" ] && vhost=$(rack_root_detect)
+  if [ ! -h ~/.pow/$vhost ]
+  then
+    echo "pow: This domain isn’t set up yet. Symlink your application to ${vhost} first."
+    return 1
+  fi
+
+  [ ! -d ~/.pow/${vhost}/tmp ] && mkdir -p ~/.pow/$vhost/tmp
+  touch ~/.pow/$vhost/tmp/restart.txt;
+  [ $? -eq 0 ] &&  echo "pow: restarting $vhost.dev"
+}
 compctl -W ~/.pow -/ kapow
+
+powit(){
+	local basedir=$(pwd)
+  local vhost=$1
+  [ ! -n "$vhost" ] && vhost=$(rack_root_detect)
+  if [ ! -h ~/.pow/$vhost ]
+	then
+		echo "pow: Symlinking your app with pow. ${vhost}"
+	  [ ! -d ~/.pow/${vhost} ] && ln -s $basedir ~/.pow/$vhost
+    return 1
+  fi
+}
+
+# View the standard out (puts) from any pow app
+alias kaput="tail -f ~/Library/Logs/Pow/apps/*"

+ 1 - 0
plugins/rails/rails.plugin.zsh

@@ -2,6 +2,7 @@ alias ss='thin --stats "/thin/stats" start'
 alias sg='ruby script/generate'
 alias sd='ruby script/destroy'
 alias sp='ruby script/plugin'
+alias sr='ruby script/runner'
 alias ssp='ruby script/spec'
 alias rdbm='rake db:migrate'
 alias sc='ruby script/console'

+ 1 - 0
plugins/rails3/rails3.plugin.zsh

@@ -14,6 +14,7 @@ alias rdb='_rails_command dbconsole'
 alias rdbm='rake db:migrate db:test:clone'
 alias rg='_rails_command generate'
 alias rp='_rails_command plugin'
+alias ru='_rails_command runner'
 alias rs='_rails_command server'
 alias rsd='_rails_command server --debugger'
 alias devlog='tail -f log/development.log'

+ 6 - 0
plugins/rake/rake.plugin.zsh

@@ -0,0 +1,6 @@
+alias rake="noglob rake" # allows square brackts for rake task invocation
+alias brake='noglob bundle exec rake' # execute the bundled rake gem
+alias srake='noglob sudo rake' # noglob must come before sudo
+alias sbrake='noglob sudo bundle exec rake' # altogether now ... 
+
+

+ 44 - 0
plugins/rbenv/rbenv.plugin.zsh

@@ -0,0 +1,44 @@
+FOUND_RBENV=0
+for rbenvdir in "$HOME/.rbenv" "/usr/local/rbenv" "/opt/rbenv" ; do
+  if [ -d $rbenvdir/bin -a $FOUND_RBENV -eq 0 ] ; then
+    FOUND_RBENV=1
+    export RBENV_ROOT=$rbenvdir
+    export PATH=${rbenvdir}/bin:$PATH
+    eval "$(rbenv init -)"
+
+    alias rubies="rbenv versions"
+    alias gemsets="rbenv gemset list"
+
+    function current_ruby() {
+      echo "$(rbenv version-name)"
+    }
+
+    function current_gemset() {
+      echo "$(rbenv gemset active 2&>/dev/null | sed -e ":a" -e '$ s/\n/+/gp;N;b a' | head -n1)"
+    }
+
+    function gems {
+      local rbenv_path=$(rbenv prefix)
+      gem list $@ | sed \
+        -Ee "s/\([0-9\.]+( .+)?\)/$fg[blue]&$reset_color/g" \
+        -Ee "s|$(echo $rbenv_path)|$fg[magenta]\$rbenv_path$reset_color|g" \
+        -Ee "s/$current_ruby@global/$fg[yellow]&$reset_color/g" \
+        -Ee "s/$current_ruby$current_gemset$/$fg[green]&$reset_color/g"
+    }
+
+    function rbenv_prompt_info() {
+      if [[ -n $(current_gemset) ]] ; then
+        echo "$(current_ruby)@$(current_gemset)"
+      else
+        echo "$(current_ruby)"
+      fi
+    }
+  fi
+done
+unset rbenvdir
+
+if [ $FOUND_RBENV -eq 0 ] ; then
+  alias rubies='ruby -v'
+  function gemsets() { echo 'not supported' }
+  function rbenv_prompt_info() { echo "system: $(ruby -v | cut -f-2 -d ' ')" }
+fi

+ 1 - 1
plugins/ruby/ruby.plugin.zsh

@@ -3,4 +3,4 @@
 alias sgem='sudo gem'
 
 # Find ruby file
-alias rfind='find . -name *.rb | xargs grep -n'
+alias rfind='find . -name "*.rb" | xargs grep -n'

+ 1 - 1
plugins/rvm/rvm.plugin.zsh

@@ -37,7 +37,7 @@ function gems {
 	local current_gemset=`rvm-prompt g`
 
 	gem list $@ | sed \
-		-Ee "s/\([0-9\.]+( .+)?\)/$fg[blue]&$reset_color/g" \
+		-Ee "s/\([0-9, \.]+( .+)?\)/$fg[blue]&$reset_color/g" \
 		-Ee "s|$(echo $rvm_path)|$fg[magenta]\$rvm_path$reset_color|g" \
 		-Ee "s/$current_ruby@global/$fg[yellow]&$reset_color/g" \
 		-Ee "s/$current_ruby$current_gemset$/$fg[green]&$reset_color/g"

+ 64 - 0
plugins/sprunge/sprunge.plugin.zsh

@@ -0,0 +1,64 @@
+# Contributed and SLIGHTLY modded by Matt Parnell/ilikenwf <parwok -at- gmail>
+# Created by the blogger at the URL below...I don't know where to find his/her name
+# Original found at http://www.shellperson.net/sprunge-pastebin-script/
+ 
+usage() {
+description | fmt -s >&2
+}
+ 
+description() {
+cat << HERE
+ 
+DESCRIPTION
+  Upload data and fetch URL from the pastebin http://sprunge.us
+ 
+USAGE
+  $0 filename.txt
+  $0 text string
+  $0 < filename.txt
+  piped_data | $0
+ 
+NOTES
+--------------------------------------------------------------------------
+* INPUT METHODS *
+$0 can accept piped data, STDIN redirection [<filename.txt], text strings following the command as arguments, or filenames as arguments.  Only one of these methods can be used at a time, so please see the note on precedence.  Also, note that using a pipe or STDIN redirection will treat tabs as spaces, or disregard them entirely (if they appear at the beginning of a line).  So I suggest using a filename as an argument if tabs are important either to the function or readability of the code.
+ 
+* PRECEDENCE *
+STDIN redirection has precedence, then piped input, then a filename as an argument, and finally text strings as an arguments.
+ 
+  EXAMPLE:
+  echo piped | "$0" arguments.txt < stdin_redirection.txt
+ 
+In this example, the contents of file_as_stdin_redirection.txt would be uploaded. Both the piped_text and the file_as_argument.txt are ignored. If there is piped input and arguments, the arguments will be ignored, and the piped input uploaded.
+ 
+* FILENAMES *
+If a filename is misspelled or doesn't have the necessary path description, it will NOT generate an error, but will instead treat it as a text string and upload it.
+--------------------------------------------------------------------------
+ 
+HERE
+exit
+}
+
+sprunge() {
+	if [ -t 0 ]; then
+	  echo Running interactively, checking for arguments... >&2
+	  if [ "$*" ]; then
+		echo Arguments present... >&2
+		if [ -f "$*" ]; then
+		  echo Uploading the contents of "$*"... >&2
+		  cat "$*"
+		else
+		  echo Uploading the text: \""$*"\"... >&2
+		  echo "$*"
+		fi | curl -F 'sprunge=<-' http://sprunge.us
+	  else
+		echo No arguments found, printing USAGE and exiting. >&2
+		usage
+	  fi
+	else
+	  echo Using input from a pipe or STDIN redirection... >&2
+	  while read -r line ; do
+		echo $line
+	  done | curl -F 'sprunge=<-' http://sprunge.us
+	fi
+}

+ 13 - 0
plugins/symfony2/symfony2.plugin.zsh

@@ -0,0 +1,13 @@
+# Symfony2 basic command completion
+
+_symfony2_get_command_list () {
+	app/console --no-ansi | sed "1,/Available commands/d" | awk '/^  [a-z]+/ { print $1 }'
+}
+
+_symfony2 () {
+  if [ -f app/console ]; then
+    compadd `_symfony2_get_command_list`
+  fi
+}
+
+compdef _symfony2 app/console

+ 65 - 97
plugins/taskwarrior/_task

@@ -1,37 +1,37 @@
 #compdef task
-#
 # zsh completion for taskwarrior
 #
+# taskwarrior - a command line task list manager.
+#
 # Copyright 2010 - 2011 Johannes Schlatow
 # Copyright 2009 P.C. Shyamshankar
-# All rights reserved.
-#
-# This script is part of the taskwarrior project.
 #
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free Software
-# Foundation; either version 2 of the License, or (at your option) any later
-# version.
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
 #
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
-# details.
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
 #
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
 #
-#     Free Software Foundation, Inc.,
-#     51 Franklin Street, Fifth Floor,
-#     Boston, MA
-#     02110-1301
-#     USA
+# http://www.opensource.org/licenses/mit-license.php
 #
 typeset -g _task_cmds _task_projects _task_tags _task_config _task_modifiers
 _task_projects=($(task _projects))
 _task_tags=($(task _tags))
 _task_ids=($(task _ids))
 _task_config=($(task _config))
+_task_columns=($(task _columns))
 _task_modifiers=(
 	'before' \
 	'after' \
@@ -46,39 +46,19 @@ _task_modifiers=(
 	'word' \
 	'noword'
 )
+_task_conjunctions=(
+   'and' \
+   'or' \
+	'xor' \
+	'\)'
+	'\('
+)
 _task_cmds=($(task _commands))
 _task_zshcmds=( ${(f)"$(task _zshcommands)"} )
 
-
-_task_idCmds=(
-	'append' \
-	'prepend' \
-	'annotate' \
-	'denotate' \
-	'edit' \
-	'duplicate' \
-	'info' \
-	'start' \
-	'stop' \
-	'done'
-)
-
-_task_idCmdsDesc=(
-	'append:Appends more description to an existing task.' \
-	'prepend:Prepends more description to an existing task.' \
-	'annotate:Adds an annotation to an existing task.' \
-	'denotate:Deletes an annotation of an existing task.' \
-	'edit:Launches an editor to let you modify a task directly.' \
-	'duplicate:Duplicates the specified task, and allows modifications.' \
-	'info:Shows all data, metadata for specified task.' \
-	'start:Marks specified task as started.' \
-	'stop:Removes the start time from a task.' \
-	'done:Marks the specified task as completed.'
-)
-
 _task() {
     _arguments -s -S \
-        "*::task command:_task_commands"
+        "*::task default:_task_default"
     return 0
 }
 
@@ -148,6 +128,7 @@ _regex_words values 'task frequencies' \
 	'weekly:Every week' \
 	'biweekly:Every two weeks' \
 	'fortnight:Every two weeks' \
++ 'monthly:Every month' \
 	'quarterly:Every three months' \
 	'semiannual:Every six months' \
 	'annual:Every year' \
@@ -196,22 +177,13 @@ _regex_arguments _task_attributes "${args[@]}"
 
 ## task commands
 
-# default completion
-(( $+functions[_task_default] )) ||
-_task_default() {
+# filter completion
+(( $+functions[_task_filter] )) ||
+_task_filter() {
 	_task_attributes "$@"
-}
 
-# commands expecting an ID
-(( $+functions[_task_id] )) ||
-_task_id() {
-	if (( CURRENT < 3 )); then
-		# update IDs
-		_task_zshids=( ${(f)"$(task _zshids)"} )
-		_describe -t values 'task IDs' _task_zshids
-	else
-		_task_attributes "$@"
-	fi
+	# TODO complete conjunctions only if the previous word is a filter expression, i.e. attribute, ID, any non-command
+	_describe -t default 'task conjunctions' _task_conjunctions
 }
 
 # merge completion
@@ -235,46 +207,42 @@ _task_pull() {
 	_files
 }
 
+# execute completion
+(( $+functions[_task_execute] )) ||
+_task_execute() {
+	_files
+}
 
-# modify (task [0-9]* ...) completion
-(( $+functions[_task_modify] )) ||
-_task_modify() {
-	_describe -t commands 'task command' _task_idCmdsDesc
-	_task_attributes "$@"
+# id-only completion
+(( $+functions[_task_id] )) ||
+_task_id() {
+	_describe -t values 'task IDs' _task_zshids
 }
 
 ## first level completion => task sub-command completion
-(( $+functions[_task_commands] )) ||
-_task_commands() {
+(( $+functions[_task_default] )) ||
+_task_default() {
     local cmd ret=1
-	if (( CURRENT == 1 )); then
-		# update IDs
-		_task_zshids=( ${(f)"$(task _zshids)"} )
-
-		_describe -t commands 'task command' _task_zshcmds
-		_describe -t values 'task IDs' _task_zshids
-		# TODO match more than one ID
-	elif [[ $words[1] =~ ^[0-9]*$ ]] then
-		 _call_function ret _task_modify
-		 return ret
-	else
-#        local curcontext="${curcontext}"
-#        cmd="${_task_cmds[(r)$words[1]:*]%%:*}"
-		  cmd="${_task_cmds[(r)$words[1]]}"
-		  idCmd="${(M)_task_idCmds[@]:#$words[1]}"
-        if (( $#cmd )); then
-#            curcontext="${curcontext%:*:*}:task-${cmd}"
 
-				if (( $#idCmd )); then
-					_call_function ret _task_id
-				else
-					_call_function ret _task_${cmd} ||
-						_call_function ret _task_default ||
-							_message "No command remaining."
-				fi
-        else
-            _message "Unknown subcommand ${cmd}"
-        fi
-        return ret
-    fi
+	integer i=1
+	while (( i < $#words ))
+	do
+		cmd="${_task_cmds[(r)$words[$i]]}"
+		if (( $#cmd )); then
+			_call_function ret _task_${cmd} ||
+				_call_function ret _task_filter ||
+					_message "No command remaining."
+			return ret
+		fi
+		(( i++ ))
+	done
+
+	# update IDs
+	_task_zshids=( ${(f)"$(task _zshids)"} )
+
+	_describe -t commands 'task command' _task_zshcmds
+	_describe -t values 'task IDs' _task_zshids
+	_call_function ret _task_filter
+
+	return ret
 }

+ 11 - 0
plugins/terminalapp/terminalapp.plugin.zsh

@@ -0,0 +1,11 @@
+# Set Apple Terminal.app resume directory
+# based on this answer: http://superuser.com/a/315029
+
+function chpwd {
+  local SEARCH=' '
+  local REPLACE='%20'
+  local PWD_URL="file://$HOSTNAME${PWD//$SEARCH/$REPLACE}"
+  printf '\e]7;%s\a' "$PWD_URL"
+}
+
+chpwd

+ 5 - 0
templates/zshrc.zsh-template

@@ -7,6 +7,10 @@ ZSH=$HOME/.oh-my-zsh
 # time that oh-my-zsh is loaded.
 ZSH_THEME="robbyrussell"
 
+# Example aliases
+# alias zshconfig="mate ~/.zshrc"
+# alias ohmyzsh="mate ~/.oh-my-zsh"
+
 # Set to this to use case-sensitive completion
 # CASE_SENSITIVE="true"
 
@@ -23,6 +27,7 @@ ZSH_THEME="robbyrussell"
 # COMPLETION_WAITING_DOTS="true"
 
 # Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*)
+# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
 # Example format: plugins=(rails git textmate ruby lighthouse)
 plugins=(git)
 

+ 8 - 2
themes/alanpeabody.zsh-theme

@@ -1,7 +1,14 @@
 
 local user='%{$fg[magenta]%}%n@%{$fg[magenta]%}%m%{$reset_color%}'
 local pwd='%{$fg[blue]%}%~%{$reset_color%}'
-local rvm='%{$fg[green]%}‹$(rvm-prompt i v g)›%{$reset_color%}'
+local rvm=''
+if which rvm-prompt &> /dev/null; then
+  rvm='%{$fg[green]%}‹$(rvm-prompt i v g)›%{$reset_color%}'
+else
+  if which rbenv &> /dev/null; then
+    rvm='%{$fg[green]%}‹$(rbenv version | sed -e "s/ (set.*$//")›%{$reset_color%}'
+  fi
+fi
 local return_code='%(?..%{$fg[red]%}%? ↵%{$reset_color%})'
 local git_branch='$(git_prompt_status)%{$reset_color%}$(git_prompt_info)%{$reset_color%}'
 
@@ -19,4 +26,3 @@ ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[cyan]%} ✭"
 
 PROMPT="${user} ${pwd}$ "
 RPROMPT="${return_code} ${git_branch} ${rvm}"
-

+ 8 - 1
themes/bira.zsh-theme

@@ -3,7 +3,14 @@ local return_code="%(?..%{$fg[red]%}%? ↵%{$reset_color%})"
 
 local user_host='%{$terminfo[bold]$fg[green]%}%n@%m%{$reset_color%}'
 local current_dir='%{$terminfo[bold]$fg[blue]%} %~%{$reset_color%}'
-local rvm_ruby='%{$fg[red]%}‹$(rvm-prompt i v g)›%{$reset_color%}'
+local rvm_ruby=''
+if which rvm-prompt &> /dev/null; then
+  rvm_ruby='%{$fg[red]%}‹$(rvm-prompt i v g)›%{$reset_color%}'
+else
+  if which rbenv &> /dev/null; then
+    rvm_ruby='%{$fg[red]%}‹$(rbenv version | sed -e "s/ (set.*$//")›%{$reset_color%}'
+  fi
+fi
 local git_branch='$(git_prompt_info)%{$reset_color%}'
 
 PROMPT="╭─${user_host} ${current_dir} ${rvm_ruby} ${git_branch}

+ 7 - 1
themes/crunch.zsh-theme

@@ -29,7 +29,13 @@ ZSH_THEME_GIT_PROMPT_DIRTY=" $CRUNCH_GIT_DIRTY_COLOR✗"
 
 # Our elements:
 CRUNCH_TIME_="$CRUNCH_BRACKET_COLOR{$CRUNCH_TIME_COLOR%T$CRUNCH_BRACKET_COLOR}%{$reset_color%}"
-CRUNCH_RVM_="$CRUNCH_BRACKET_COLOR"["$CRUNCH_RVM_COLOR\${\$(~/.rvm/bin/rvm-prompt i v g)#ruby-}$CRUNCH_BRACKET_COLOR"]"%{$reset_color%}"
+if which rvm-prompt &> /dev/null; then
+  CRUNCH_RVM_="$CRUNCH_BRACKET_COLOR"["$CRUNCH_RVM_COLOR\${\$(~/.rvm/bin/rvm-prompt i v g)#ruby-}$CRUNCH_BRACKET_COLOR"]"%{$reset_color%}"
+else
+  if which rbenv &> /dev/null; then
+    CRUNCH_RVM_="$CRUNCH_BRACKET_COLOR"["$CRUNCH_RVM_COLOR\${\$(rbenv version | sed -e 's/ (set.*$//' -e 's/^ruby-//')}$CRUNCH_BRACKET_COLOR"]"%{$reset_color%}"
+  fi
+fi
 CRUNCH_DIR_="$CRUNCH_DIR_COLOR%~\$(git_prompt_info) "
 CRUNCH_PROMPT="$CRUNCH_BRACKET_COLOR➭ "
 

+ 7 - 1
themes/dallas.zsh-theme

@@ -3,7 +3,13 @@
 # Grab the current date (%D) and time (%T) wrapped in {}: {%D %T}
 DALLAS_CURRENT_TIME_="%{$fg[white]%}{%{$fg[yellow]%}%D %T%{$fg[white]%}}%{$reset_color%}"
 # Grab the current version of ruby in use (via RVM): [ruby-1.8.7]
-DALLAS_CURRENT_RUBY_="%{$fg[white]%}[%{$fg[magenta]%}\$(~/.rvm/bin/rvm-prompt i v)%{$fg[white]%}]%{$reset_color%}"
+if which rvm-prompt &> /dev/null; then
+  DALLAS_CURRENT_RUBY_="%{$fg[white]%}[%{$fg[magenta]%}\$(~/.rvm/bin/rvm-prompt i v)%{$fg[white]%}]%{$reset_color%}"
+else
+  if which rbenv &> /dev/null; then
+    DALLAS_CURRENT_RUBY_="%{$fg[white]%}[%{$fg[magenta]%}\$(rbenv version | sed -e 's/ (set.*$//')%{$fg[white]%}]%{$reset_color%}"
+  fi
+fi
 # Grab the current machine name: muscato
 DALLAS_CURRENT_MACH_="%{$fg[green]%}%m%{$fg[white]%}:%{$reset_color%}"
 # Grab the current filepath, use shortcuts: ~/Desktop

+ 4 - 0
themes/eastwood.zsh-theme

@@ -1,6 +1,10 @@
 #RVM settings
 if [[ -s ~/.rvm/scripts/rvm ]] ; then 
   RPS1="%{$fg[yellow]%}rvm:%{$reset_color%}%{$fg[red]%}\$(~/.rvm/bin/rvm-prompt)%{$reset_color%} $EPS1"
+else
+  if which rbenv &> /dev/null; then
+    RPS1="%{$fg[yellow]%}rbenv:%{$reset_color%}%{$fg[red]%}\$(rbenv version | sed -e 's/ (set.*$//')%{$reset_color%} $EPS1"
+  fi
 fi
 
 ZSH_THEME_GIT_PROMPT_PREFIX="%{$reset_color%}%{$fg[green]%}["

+ 8 - 1
themes/fino.zsh-theme

@@ -25,7 +25,14 @@ function box_name {
 }
 
 
-local rvm_ruby='‹$(rvm-prompt i v g)›%{$reset_color%}'
+local rvm_ruby=''
+if which rvm-prompt &> /dev/null; then
+  rvm_ruby='‹$(rvm-prompt i v g)›%{$reset_color%}'
+else
+  if which rbenv &> /dev/null; then
+    rvm_ruby='‹$(rbenv version | sed -e "s/ (set.*$//")›%{$reset_color%}'
+  fi
+fi
 local current_dir='${PWD/#$HOME/~}'
 local git_info='$(git_prompt_info)'
 

+ 5 - 1
themes/gallois.zsh-theme

@@ -15,7 +15,11 @@ git_custom_status() {
 if [[ -s ~/.rvm/scripts/rvm ]] ; then 
   RPS1='$(git_custom_status)%{$fg[red]%}[`~/.rvm/bin/rvm-prompt`]%{$reset_color%} $EPS1'
 else
-  RPS1='$(git_custom_status) $EPS1'
+  if which rbenv &> /dev/null; then
+    RPS1='$(git_custom_status)%{$fg[red]%}[`rbenv version | sed -e "s/ (set.*$//"`]%{$reset_color%} $EPS1'
+  else
+    RPS1='$(git_custom_status) $EPS1'
+  fi
 fi
 
 PROMPT='%{$fg[cyan]%}[%~% ]%(?.%{$fg[green]%}.%{$fg[red]%})%B$%b '

+ 2 - 2
themes/jonathan.zsh-theme

@@ -10,7 +10,7 @@ function theme_precmd {
     PR_PWDLEN=""
 
     local promptsize=${#${(%):---(%n@%m:%l)---()--}}
-    local rubyprompt=`rvm_prompt_info`
+    local rubyprompt=`rvm_prompt_info || rbenv_prompt_info`
     local rubypromptsize=${#${rubyprompt}}
     local pwdsize=${#${(%):-%~}}
 
@@ -113,7 +113,7 @@ setprompt () {
     PROMPT='$PR_SET_CHARSET$PR_STITLE${(e)PR_TITLEBAR}\
 $PR_CYAN$PR_SHIFT_IN$PR_ULCORNER$PR_HBAR$PR_SHIFT_OUT$PR_GREY(\
 $PR_GREEN%$PR_PWDLEN<...<%~%<<\
-$PR_GREY)`rvm_prompt_info`$PR_CYAN$PR_SHIFT_IN$PR_HBAR$PR_HBAR${(e)PR_FILLBAR}$PR_HBAR$PR_SHIFT_OUT$PR_GREY(\
+$PR_GREY)`rvm_prompt_info || rbenv_prompt_info`$PR_CYAN$PR_SHIFT_IN$PR_HBAR$PR_HBAR${(e)PR_FILLBAR}$PR_HBAR$PR_SHIFT_OUT$PR_GREY(\
 $PR_CYAN%(!.%SROOT%s.%n)$PR_GREY@$PR_GREEN%m:%l\
 $PR_GREY)$PR_CYAN$PR_SHIFT_IN$PR_HBAR$PR_URCORNER$PR_SHIFT_OUT\
 

+ 2 - 2
themes/josh.zsh-theme

@@ -10,7 +10,7 @@ function josh_prompt {
   prompt=" "
 
   branch=$(current_branch)
-  ruby_version=$(rvm_prompt_info)
+  ruby_version=$(rvm_prompt_info || rbenv_prompt_info)
   path_size=${#PWD}
   branch_size=${#branch}
   ruby_size=${#ruby_version}
@@ -31,7 +31,7 @@ function josh_prompt {
     prompt=" $prompt"
   done
   
-  prompt="%{%F{green}%}$PWD$prompt%{%F{red}%}$(rvm_prompt_info)%{$reset_color%} $(git_prompt_info)"
+  prompt="%{%F{green}%}$PWD$prompt%{%F{red}%}$(rvm_prompt_info || rbenv_prompt_info)%{$reset_color%} $(git_prompt_info)"
   
   echo $prompt
 }

+ 8 - 1
themes/macovsky-ruby.zsh-theme

@@ -1,7 +1,14 @@
 # ZSH Theme - Preview: http://gyazo.com/8becc8a7ed5ab54a0262a470555c3eed.png
 local return_code="%(?..%{$fg[red]%}%? ↵%{$reset_color%})"
 
-PROMPT='%{$fg[green]%}%~%{$reset_color%} %{$fg[red]%}‹$(~/.rvm/bin/rvm-prompt i v)› %{$reset_color%} $(git_prompt_info)%{$reset_color%}%B$%b '
+if which rvm-prompt &> /dev/null; then
+  PROMPT='%{$fg[green]%}%~%{$reset_color%} %{$fg[red]%}‹$(~/.rvm/bin/rvm-prompt i v)› %{$reset_color%} $(git_prompt_info)%{$reset_color%}%B$%b '
+else
+  if which rbenv &> /dev/null; then
+    PROMPT='%{$fg[green]%}%~%{$reset_color%} %{$fg[red]%}‹$(rbenv version | sed -e "s/ (set.*$//")› %{$reset_color%} $(git_prompt_info)%{$reset_color%}%B$%b '
+  fi
+fi
+
 RPS1="${return_code}"
 
 ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[yellow]%}‹"

+ 7 - 1
themes/macovsky.zsh-theme

@@ -1,7 +1,13 @@
 # ZSH Theme - Preview: http://gyazo.com/8becc8a7ed5ab54a0262a470555c3eed.png
 local return_code="%(?..%{$fg[red]%}%? ↵%{$reset_color%})"
 
-PROMPT='%{$fg[green]%}%~%{$reset_color%} %{$fg[red]%}‹$(~/.rvm/bin/rvm-prompt i v)› %{$reset_color%} $(git_prompt_info)%{$reset_color%}%B$%b '
+if which rvm-prompt &> /dev/null; then
+  PROMPT='%{$fg[green]%}%~%{$reset_color%} %{$fg[red]%}‹$(~/.rvm/bin/rvm-prompt i v)› %{$reset_color%} $(git_prompt_info)%{$reset_color%}%B$%b '
+else
+  if which rbenv &> /dev/null; then
+    PROMPT='%{$fg[green]%}%~%{$reset_color%} %{$fg[red]%}‹$(rbenv version | sed -e "s/ (set.*$//")› %{$reset_color%} $(git_prompt_info)%{$reset_color%}%B$%b '
+  fi
+fi
 RPS1="${return_code}"
 
 ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[yellow]%}‹"

文件差异内容过多而无法显示
+ 24 - 0
themes/mh.zsh-theme


+ 58 - 0
themes/mortalscumbag.zsh-theme

@@ -0,0 +1,58 @@
+function my_git_prompt() {
+  tester=$(git rev-parse --git-dir 2> /dev/null) || return
+  
+  INDEX=$(git status --porcelain 2> /dev/null)
+  STATUS=""
+
+  # is branch ahead?
+  if $(echo "$(git log origin/$(current_branch)..HEAD 2> /dev/null)" | grep '^commit' &> /dev/null); then
+    STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_AHEAD"
+  fi
+
+  # is anything staged?
+  if $(echo "$INDEX" | grep -E -e '^(D[ M]|[MARC][ MD]) ' &> /dev/null); then
+    STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_STAGED"
+  fi
+
+  # is anything unstaged?
+  if $(echo "$INDEX" | grep -E -e '^[ MARC][MD] ' &> /dev/null); then
+    STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_UNSTAGED"
+  fi
+
+  # is anything untracked?
+  if $(echo "$INDEX" | grep '^?? ' &> /dev/null); then
+    STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_UNTRACKED"
+  fi
+
+  # is anything unmerged?
+  if $(echo "$INDEX" | grep -E -e '^(A[AU]|D[DU]|U[ADU]) ' &> /dev/null); then
+    STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_UNMERGED"
+  fi
+
+  if [[ -n $STATUS ]]; then
+    STATUS=" $STATUS"
+  fi
+
+  echo "$ZSH_THEME_GIT_PROMPT_PREFIX$(my_current_branch)$STATUS$ZSH_THEME_GIT_PROMPT_SUFFIX"
+}
+
+function my_current_branch() {
+  echo $(current_branch || echo "(no branch)")
+}
+
+function ssh_connection() {
+  if [[ -n $SSH_CONNECTION ]]; then
+    echo "%{$fg_bold[red]%}(ssh) "
+  fi
+}
+
+PROMPT=$'\n$(ssh_connection)%{$fg_bold[green]%}%n@%m%{$reset_color%}$(my_git_prompt) : %~\n%# '
+
+ZSH_THEME_PROMPT_RETURNCODE_PREFIX="%{$fg_bold[red]%}"
+ZSH_THEME_GIT_PROMPT_PREFIX=" $fg[white]‹ %{$fg_bold[yellow]%}"
+ZSH_THEME_GIT_PROMPT_AHEAD="%{$fg_bold[magenta]%}↑"
+ZSH_THEME_GIT_PROMPT_STAGED="%{$fg_bold[green]%}●"
+ZSH_THEME_GIT_PROMPT_UNSTAGED="%{$fg_bold[red]%}●"
+ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg_bold[white]%}●"
+ZSH_THEME_GIT_PROMPT_UNMERGED="%{$fg_bold[red]%}✕"
+ZSH_THEME_GIT_PROMPT_SUFFIX=" $fg_bold[white]›%{$reset_color%}"

+ 1 - 1
themes/murilasso.zsh-theme

@@ -1,7 +1,7 @@
 local return_code="%(?..%{$fg[red]%}%? ↵%{$reset_color%})"
 local user_host='%{$terminfo[bold]$fg[green]%}%n@%m%{$reset_color%}'
 local current_dir='%{$terminfo[bold]$fg[blue]%}%~%{$reset_color%}'
-local rvm_ruby='%{$fg[red]%}$(rvm_prompt_info)%{$reset_color%}'
+local rvm_ruby='%{$fg[red]%}$(rvm_prompt_info || rbenv_prompt_info)%{$reset_color%}'
 local git_branch='%{$fg[blue]%}$(git_prompt_info)%{$reset_color%}'
 
 PROMPT="${user_host}:${current_dir} ${rvm_ruby}

+ 4 - 0
themes/nebirhos.zsh-theme

@@ -4,6 +4,10 @@
 # Get the current ruby version in use with RVM:
 if [ -e ~/.rvm/bin/rvm-prompt ]; then
     RUBY_PROMPT_="%{$fg_bold[blue]%}rvm:(%{$fg[green]%}\$(~/.rvm/bin/rvm-prompt s i v g)%{$fg_bold[blue]%})%{$reset_color%} "
+else
+  if which rbenv &> /dev/null; then
+    RUBY_PROMPT_="%{$fg_bold[blue]%}rvm:(%{$fg[green]%}\$(rbenv version | sed -e 's/ (set.*$//')%{$fg_bold[blue]%})%{$reset_color%} "
+  fi
 fi
 
 # Get the host name (first 4 chars)

+ 6 - 0
themes/sammy.zsh-theme

@@ -0,0 +1,6 @@
+PROMPT='%{$fg[white]%}%c$(git_prompt_info)$ % %{$reset_color%}'
+
+ZSH_THEME_GIT_PROMPT_PREFIX="("
+ZSH_THEME_GIT_PROMPT_SUFFIX=""
+ZSH_THEME_GIT_PROMPT_DIRTY="*)"
+ZSH_THEME_GIT_PROMPT_CLEAN=")"

+ 7 - 1
themes/superjarin.zsh-theme

@@ -1,5 +1,11 @@
 # Grab the current version of ruby in use (via RVM): [ruby-1.8.7]
-JARIN_CURRENT_RUBY_="%{$fg[white]%}[%{$fg[red]%}\$(~/.rvm/bin/rvm-prompt i v)%{$fg[white]%}]%{$reset_color%}"
+if which rvm-prompt &> /dev/null; then
+  JARIN_CURRENT_RUBY_="%{$fg[white]%}[%{$fg[red]%}\$(~/.rvm/bin/rvm-prompt i v)%{$fg[white]%}]%{$reset_color%}"
+else
+  if which rbenv &> /dev/null; then
+    JARIN_CURRENT_RUBY_="%{$fg[white]%}[%{$fg[red]%}\$(rbenv version | sed -e 's/ (set.*$//')%{$fg[white]%}]%{$reset_color%}"
+  fi
+fi
 
 # Grab the current filepath, use shortcuts: ~/Desktop
 # Append the current git branch, if in a git repository

+ 8 - 1
themes/suvash.zsh-theme

@@ -12,8 +12,15 @@ function collapse_pwd {
     echo $(pwd | sed -e "s,^$HOME,~,")
 }
 
-PROMPT='%{$fg[magenta]%}%n%{$reset_color%} at %{$fg[yellow]%}%m%{$reset_color%} in %{$fg_bold[green]%}${PWD/#$HOME/~}%{$reset_color%}$(git_prompt_info) using %{$reset_color%}%{$fg[red]%}$(~/.rvm/bin/rvm-prompt)%{$reset_color%} 
+if which rvm-prompt &> /dev/null; then
+  PROMPT='%{$fg[magenta]%}%n%{$reset_color%} at %{$fg[yellow]%}%m%{$reset_color%} in %{$fg_bold[green]%}${PWD/#$HOME/~}%{$reset_color%}$(git_prompt_info) using %{$reset_color%}%{$fg[red]%}$(~/.rvm/bin/rvm-prompt)%{$reset_color%} 
 $(virtualenv_info)$(prompt_char) '
+else
+  if which rbenv &> /dev/null; then
+    PROMPT='%{$fg[magenta]%}%n%{$reset_color%} at %{$fg[yellow]%}%m%{$reset_color%} in %{$fg_bold[green]%}${PWD/#$HOME/~}%{$reset_color%}$(git_prompt_info) using %{$reset_color%}%{$fg[red]%}$(rbenv version | sed -e "s/ (set.*$//")%{$reset_color%} 
+$(virtualenv_info)$(prompt_char) '
+  fi
+fi
 
 
 ZSH_THEME_GIT_PROMPT_PREFIX=" on %{$fg[magenta]%}"

+ 1 - 1
themes/wuffers.zsh-theme

@@ -2,4 +2,4 @@ ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg_bold[blue]%}["
 ZSH_THEME_GIT_PROMPT_SUFFIX="]%{$reset_color%} "
 ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg_bold[red]%} x%{$fg_bold[blue]%}"
 
-PROMPT='%{$(git_prompt_info)%}%{$fg_bold[green]%}{%{$(rvm current)%}}%{$reset_color%} %{$fg[cyan]%}%c%{$reset_color%} '
+PROMPT='%{$(git_prompt_info)%}%{$fg_bold[green]%}{%{$(rvm current 2>/dev/null || rbenv version-name 2>/dev/null)%}}%{$reset_color%} %{$fg[cyan]%}%c%{$reset_color%} '

+ 9 - 1
themes/zhann.zsh-theme

@@ -1,5 +1,13 @@
 PROMPT='%{$fg_bold[green]%}%p %{$fg[cyan]%}%c%{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%} % %{$reset_color%}'
-RPROMPT='%{$reset_color%} %{$fg[red]%}$(~/.rvm/bin/rvm-prompt i v) %{$reset_color%}'
+
+if which rvm-prompt &> /dev/null; then
+  RPROMPT='%{$reset_color%} %{$fg[red]%}$(~/.rvm/bin/rvm-prompt i v g) %{$reset_color%}'
+else
+  if which rbenv &> /dev/null; then
+    RPROMPT='%{$reset_color%} %{$fg[red]%}$(rbenv version | sed -e "s/ (set.*$//") %{$reset_color%}'
+  fi
+fi
+
 
 ZSH_THEME_GIT_PROMPT_PREFIX=" (%{$fg[red]%}"
 ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"

+ 18 - 11
tools/upgrade.sh

@@ -1,12 +1,19 @@
 current_path=`pwd`
-echo -e "\033[0;34mUpgrading Oh My Zsh\033[0m"
-( cd $ZSH && git pull origin master )
-echo -e "\033[0;32m"'         __                                     __   '"\033[0m"
-echo -e "\033[0;32m"'  ____  / /_     ____ ___  __  __   ____  _____/ /_  '"\033[0m"
-echo -e "\033[0;32m"' / __ \/ __ \   / __ `__ \/ / / /  /_  / / ___/ __ \ '"\033[0m"
-echo -e "\033[0;32m"'/ /_/ / / / /  / / / / / / /_/ /    / /_(__  ) / / / '"\033[0m"
-echo -e "\033[0;32m"'\____/_/ /_/  /_/ /_/ /_/\__, /    /___/____/_/ /_/  '"\033[0m"
-echo -e "\033[0;32m"'                        /____/                       '"\033[0m"
-echo -e "\033[0;34mHooray! Oh My Zsh has been updated and/or is at the current version.\033[0m"
-echo -e "\033[0;34mTo keep up on the latest, be sure to follow Oh My Zsh on twitter: \033[1mhttp://twitter.com/ohmyzsh\033[0m"
-cd "$current_path"
+printf '\033[0;34m%s\033[0m\n' "Upgrading Oh My Zsh"
+cd $ZSH
+
+if git pull origin master
+then
+  printf '\033[0;32m%s\033[0m\n' '         __                                     __   '
+  printf '\033[0;32m%s\033[0m\n' '  ____  / /_     ____ ___  __  __   ____  _____/ /_  '
+  printf '\033[0;32m%s\033[0m\n' ' / __ \/ __ \   / __ `__ \/ / / /  /_  / / ___/ __ \ '
+  printf '\033[0;32m%s\033[0m\n' '/ /_/ / / / /  / / / / / / /_/ /    / /_(__  ) / / / '
+  printf '\033[0;32m%s\033[0m\n' '\____/_/ /_/  /_/ /_/ /_/\__, /    /___/____/_/ /_/  '
+  printf '\033[0;32m%s\033[0m\n' '                        /____/                       '
+  printf '\033[0;34m%s\033[0m\n' 'Hooray! Oh My Zsh has been updated and/or is at the current version.'
+  printf '\033[0;34m%s\033[1m%s\033[0m\n' 'To keep up on the latest, be sure to follow Oh My Zsh on twitter: ' 'http://twitter.com/ohmyzsh'
+else
+  printf '\033[0;31m%s\033[0m\n' 'There was an error updating. Try again later?'
+fi
+
+cd "$current_path"