From bf9645224b529be0e03655b4cef9c32f66c76015 Mon Sep 17 00:00:00 2001
From: Philipp Tessenow <philipp@tessenow.org>
Date: Wed, 24 Apr 2013 08:33:02 +0200
Subject: [PATCH 01/46] extend mercurial plugin to be more like git/svn

implement in_hg(), hg_get_branch_name(), hg_prompt_info(), and hg_dirty() for the mercurial plugin
named functions similar to subversion plugin, to give theme maintainers an easier life
---
 plugins/mercurial/mercurial.plugin.zsh | 38 ++++++++++++++++++++++++--
 1 file changed, 35 insertions(+), 3 deletions(-)

diff --git a/plugins/mercurial/mercurial.plugin.zsh b/plugins/mercurial/mercurial.plugin.zsh
index 9aa2d167a..83dd578b3 100644
--- a/plugins/mercurial/mercurial.plugin.zsh
+++ b/plugins/mercurial/mercurial.plugin.zsh
@@ -17,8 +17,40 @@ alias hgs='hg status'
 # this is the 'git commit --amend' equivalent
 alias hgca='hg qimport -r tip ; hg qrefresh -e ; hg qfinish tip'
 
-function hg_current_branch() {
-  if [ -d .hg ]; then
-    echo hg:$(hg branch)
+function in_hg() {
+  if [[ -d .hg ]] || $(hg summary > /dev/null 2>&1); then
+    echo 1
   fi
 }
+
+function hg_get_branch_name() {
+  if [ $(in_hg) ]; then
+    echo $(hg branch)
+  fi
+}
+
+function hg_prompt_info {
+  if [ $(in_hg) ]; then
+    _DISPLAY=$(hg_get_branch_name)
+    echo "$ZSH_PROMPT_BASE_COLOR$ZSH_THEME_HG_PROMPT_PREFIX\
+$ZSH_THEME_REPO_NAME_COLOR$_DISPLAY$ZSH_PROMPT_BASE_COLOR$ZSH_THEME_HG_PROMPT_SUFFIX$ZSH_PROMPT_BASE_COLOR$(hg_dirty)$ZSH_PROMPT_BASE_COLOR"
+    unset _DISPLAY
+  fi
+}
+
+function hg_dirty_choose {
+  if [ $(in_hg) ]; then
+    hg status 2> /dev/null | grep -Eq '^\s*[ACDIM!?L]'
+    if [ $pipestatus[-1] -eq 0 ]; then
+      # Grep exits with 0 when "One or more lines were selected", return "dirty".
+      echo $1
+    else
+      # Otherwise, no lines were found, or an error occurred. Return clean.
+      echo $2
+    fi
+  fi
+}
+
+function hg_dirty {
+  hg_dirty_choose $ZSH_THEME_HG_PROMPT_DIRTY $ZSH_THEME_HG_PROMPT_CLEAN
+}

From cf9b0119fa909f6e507759986b8e887ef771012f Mon Sep 17 00:00:00 2001
From: Roman Kamyk <roman.kamyk@gmail.com>
Date: Wed, 24 Apr 2013 06:50:48 -0700
Subject: [PATCH 02/46] Fixed missing retcode function

---
 themes/rkj-repos.zsh-theme | 2 ++
 themes/rkj.zsh-theme       | 3 ++-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/themes/rkj-repos.zsh-theme b/themes/rkj-repos.zsh-theme
index 46b8e83a0..4ab3bc757 100644
--- a/themes/rkj-repos.zsh-theme
+++ b/themes/rkj-repos.zsh-theme
@@ -22,6 +22,8 @@ function mygit() {
   echo "$ZSH_THEME_GIT_PROMPT_PREFIX${ref#refs/heads/}$( git_prompt_status )%{$reset_color%}$ZSH_THEME_GIT_PROMPT_SUFFIX"
 }
 
+function retcode() {}
+
 # alternate prompt with git & hg
 PROMPT=$'%{\e[0;34m%}%B┌─[%b%{\e[0m%}%{\e[1;32m%}%n%{\e[1;30m%}@%{\e[0m%}%{\e[0;36m%}%m%{\e[0;34m%}%B]%b%{\e[0m%} - %b%{\e[0;34m%}%B[%b%{\e[1;37m%}%~%{\e[0;34m%}%B]%b%{\e[0m%} - %{\e[0;34m%}%B[%b%{\e[0;33m%}'%D{"%Y-%m-%d %I:%M:%S"}%b$'%{\e[0;34m%}%B]%b%{\e[0m%}
 %{\e[0;34m%}%B└─%B[%{\e[1;35m%}%?$(retcode)%{\e[0;34m%}%B] <$(mygit)$(hg_prompt_info)>%{\e[0m%}%b '
diff --git a/themes/rkj.zsh-theme b/themes/rkj.zsh-theme
index 80122d5c6..fe06161c8 100644
--- a/themes/rkj.zsh-theme
+++ b/themes/rkj.zsh-theme
@@ -2,7 +2,8 @@
 # on two lines for easier vgrepping
 # entry in a nice long thread on the Arch Linux forums: http://bbs.archlinux.org/viewtopic.php?pid=521888#p521888
 
+function retcode() {}
+
 PROMPT=$'%{\e[0;34m%}%B┌─[%b%{\e[0m%}%{\e[1;32m%}%n%{\e[1;30m%}@%{\e[0m%}%{\e[0;36m%}%m%{\e[0;34m%}%B]%b%{\e[0m%} - %b%{\e[0;34m%}%B[%b%{\e[1;37m%}%~%{\e[0;34m%}%B]%b%{\e[0m%} - %{\e[0;34m%}%B[%b%{\e[0;33m%}'%D{"%Y-%m-%d %I:%M:%S"}%b$'%{\e[0;34m%}%B]%b%{\e[0m%}
 %{\e[0;34m%}%B└─%B[%{\e[1;35m%}%?$(retcode)%{\e[0;34m%}%B]%{\e[0m%}%b '
 
-

From f77a545a4bfe07e0fd097a21ad8c1e80ff3d65f9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20M-B?= <essembeh@gmail.com>
Date: Sun, 28 Apr 2013 16:34:36 +0200
Subject: [PATCH 03/46] Uncomment l alias

---
 lib/aliases.zsh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/aliases.zsh b/lib/aliases.zsh
index 2b58c4faa..9b3709172 100644
--- a/lib/aliases.zsh
+++ b/lib/aliases.zsh
@@ -17,7 +17,7 @@ alias history='fc -l 1'
 
 # List direcory contents
 alias lsa='ls -lah'
-#alias l='ls -la'
+alias l='ls -la'
 alias ll='ls -l'
 alias la='ls -lA'
 alias sl=ls # often screw this up

From 39b46f526c83a5d4704bd25eff03c7678230ec78 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marcus=20M=C3=BCller?= <mueller@cel.kit.edu>
Date: Mon, 29 Apr 2013 09:51:21 +0200
Subject: [PATCH 04/46] eliminated unnecessary cd and failing substitution

Changing the working directory in a sub-subshell
does not change the working directory of the executing
shell.

The substitution was broken for me on _all_ my machines,
so I started looking into the business.
---
 tools/upgrade.sh | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/tools/upgrade.sh b/tools/upgrade.sh
index 0aeebdebf..3624a88e5 100644
--- a/tools/upgrade.sh
+++ b/tools/upgrade.sh
@@ -1,8 +1,5 @@
-current_path=`pwd`
-current_path=${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' '         __                                     __   '
@@ -17,4 +14,3 @@ else
   printf '\033[0;31m%s\033[0m\n' 'There was an error updating. Try again later?'
 fi
 
-cd "$current_path"

From 4ff861ee115fdba24033f945dcf3cacea3120074 Mon Sep 17 00:00:00 2001
From: Christopher Roach <vthakr@gmail.com>
Date: Sun, 19 May 2013 12:55:10 -0700
Subject: [PATCH 05/46] Adding a fix for the DISABLE_UNTRACKED_FILES_DIRTY
 option.

---
 lib/git.zsh | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/lib/git.zsh b/lib/git.zsh
index 96598cf5f..c4b5b5d62 100644
--- a/lib/git.zsh
+++ b/lib/git.zsh
@@ -15,12 +15,12 @@ parse_git_dirty() {
     if [[ $POST_1_7_2_GIT -gt 0 ]]; then
           SUBMODULE_SYNTAX="--ignore-submodules=dirty"
     fi
-    if [[ "$DISABLE_UNTRACKED_FILES_DIRTY" != "true" ]]; then
-        GIT_STATUS=$(git status -s ${SUBMODULE_SYNTAX} 2> /dev/null | tail -n1)
-    else
+    if [[ "$DISABLE_UNTRACKED_FILES_DIRTY" == "true" ]]; then
         GIT_STATUS=$(git status -s ${SUBMODULE_SYNTAX} -uno 2> /dev/null | tail -n1)
+    else
+        GIT_STATUS=$(git status -s ${SUBMODULE_SYNTAX} 2> /dev/null | tail -n1)
     fi
-    if [[ -n $(git status -s ${SUBMODULE_SYNTAX} -uno  2> /dev/null) ]]; then
+    if [[ -n $GIT_STATUS ]]; then
       echo "$ZSH_THEME_GIT_PROMPT_DIRTY"
     else
       echo "$ZSH_THEME_GIT_PROMPT_CLEAN"

From 25313814775c08c64dc541fbadceb38c669c541a Mon Sep 17 00:00:00 2001
From: Hong Xu <hong@topbug.net>
Date: Mon, 20 May 2013 22:18:07 -0700
Subject: [PATCH 06/46] Add web-search plugin.

This plugin adds google, bing and yahoo commands to launch the default
web browser to do web search:

e.g.

    google oh-my-zsh
    bing what is zsh
---
 plugins/web-search/web-search.plugin.zsh | 43 ++++++++++++++++++++++++
 1 file changed, 43 insertions(+)
 create mode 100644 plugins/web-search/web-search.plugin.zsh

diff --git a/plugins/web-search/web-search.plugin.zsh b/plugins/web-search/web-search.plugin.zsh
new file mode 100644
index 000000000..6b6de2b15
--- /dev/null
+++ b/plugins/web-search/web-search.plugin.zsh
@@ -0,0 +1,43 @@
+# web_search from terminal
+
+function web_search() {
+
+  # get the open command
+  local open_cmd
+  if [[ $(uname -s) == 'Darwin' ]]; then
+    open_cmd='open'
+  else
+    open_cmd='xdg-open'
+  fi
+
+  # check whether the search engine is supported
+  if [[ ! $1 =~ '(google|bing|yahoo)' ]];
+  then
+    echo "Search engine $1 not supported."
+    return 1
+  fi
+
+  local url="http://www.$1.com"
+
+  # no keyword provided, simply open the search engine homepage
+  if [[ $# -le 1 ]]; then
+    $open_cmd "$url"
+    return
+  fi
+
+  url="${url}/search?q="
+  shift   # shift out $1
+
+  while [[ $# -gt 0 ]]; do
+    url="${url}$1+"
+    shift
+  done
+
+  url="${url%?}" # remove the last '+'
+
+  $open_cmd "$url"
+}
+
+alias bing='web_search bing'
+alias google='web_search google'
+alias yahoo='web_search yahoo'

From 69116fa806f5a7405d33cc1f7c66d4c26ad4253b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Germ=C3=A1n=20M=2E=20Bravo?= <german.mb@gmail.com>
Date: Tue, 21 May 2013 14:20:28 -0400
Subject: [PATCH 07/46] Fixed recursion. Git not needed for it to work.

Avoid infinite `cd` loops under certain conditions. Try getting `.venv` from the current directory (not necessarily always using git)
---
 .../virtualenvwrapper.plugin.zsh              | 36 ++++++++++++-------
 1 file changed, 23 insertions(+), 13 deletions(-)

diff --git a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh
index 0ed2565b4..35de50874 100644
--- a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh
+++ b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh
@@ -8,26 +8,36 @@ if [[ -f "$wrapsource" ]]; then
     # directory name of the project. Virtual environment name can be overridden
     # by placing a .venv file in the project root with a virtualenv name in it
     function workon_cwd {
-        # Check that this is a Git repo
-        PROJECT_ROOT=`git rev-parse --show-toplevel 2> /dev/null`
-        if (( $? == 0 )); then
+        if [ ! $WORKON_CWD ]; then
+            WORKON_CWD=1
+            # Check if this is a Git repo
+            PROJECT_ROOT=`git rev-parse --show-toplevel 2> /dev/null`
+            if (( $? != 0 )); then
+                PROJECT_ROOT="."
+            fi
             # Check for virtualenv name override
-            ENV_NAME=`basename "$PROJECT_ROOT"`
             if [[ -f "$PROJECT_ROOT/.venv" ]]; then
                 ENV_NAME=`cat "$PROJECT_ROOT/.venv"`
+            elif [[ "$PROJECT_ROOT" != "." ]]; then
+                ENV_NAME=`basename "$PROJECT_ROOT"`
+            else
+                ENV_NAME=""
             fi
-            # Activate the environment only if it is not already active
-            if [[ "$VIRTUAL_ENV" != "$WORKON_HOME/$ENV_NAME" ]]; then
-                if [[ -e "$WORKON_HOME/$ENV_NAME/bin/activate" ]]; then
-                    workon "$ENV_NAME" && export CD_VIRTUAL_ENV="$ENV_NAME"
+            if [[ "$ENV_NAME" != "" ]]; then
+                # Activate the environment only if it is not already active
+                if [[ "$VIRTUAL_ENV" != "$WORKON_HOME/$ENV_NAME" ]]; then
+                    if [[ -e "$WORKON_HOME/$ENV_NAME/bin/activate" ]]; then
+                        workon "$ENV_NAME" && export CD_VIRTUAL_ENV="$ENV_NAME"
+                    fi
                 fi
+            elif [ $CD_VIRTUAL_ENV ]; then
+                # We've just left the repo, deactivate the environment
+                # Note: this only happens if the virtualenv was activated automatically
+                deactivate && unset CD_VIRTUAL_ENV
             fi
-        elif [ $CD_VIRTUAL_ENV ]; then
-            # We've just left the repo, deactivate the environment
-            # Note: this only happens if the virtualenv was activated automatically
-            deactivate && unset CD_VIRTUAL_ENV
+            unset PROJECT_ROOT
+            unset WORKON_CWD
         fi
-        unset PROJECT_ROOT
     }
 
     # New cd function that does the virtualenv magic

From bd38c50241647a1d0b0e2ca49fb1d6b9a2b88806 Mon Sep 17 00:00:00 2001
From: Marc-Antoine Lemieux <marc@marcantoinelemieux.com>
Date: Mon, 27 May 2013 09:23:14 -0400
Subject: [PATCH 08/46] fix the open command in linux using xdg-open

---
 plugins/jira/jira.plugin.zsh | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/plugins/jira/jira.plugin.zsh b/plugins/jira/jira.plugin.zsh
index b91f93c95..bea726a54 100644
--- a/plugins/jira/jira.plugin.zsh
+++ b/plugins/jira/jira.plugin.zsh
@@ -11,6 +11,13 @@
 # Usage: jira           # opens a new issue
 #        jira ABC-123   # Opens an existing issue
 open_jira_issue () {
+  local open_cmd
+  if [[ $(uname -s) == 'Darwin' ]]; then
+    open_cmd='open'
+  else
+    open_cmd='xdg-open'
+  fi
+
   if [ -f .jira-url ]; then
     jira_url=$(cat .jira-url)
   elif [ -f ~/.jira-url ]; then
@@ -28,9 +35,9 @@ open_jira_issue () {
   else
     echo "Opening issue #$1"
     if [[ "x$JIRA_RAPID_BOARD" = "yes" ]]; then
-      `open $jira_url/issues/$1`
+      $open_cmd  "$jira_url/issues/$1"
     else
-      `open $jira_url/browse/$1`
+      $open_cmd  "$jira_url/browse/$1"
     fi
   fi
 }

From 6f8e8c58a05a3ff9d48ade08544e3a4d5cc4185d Mon Sep 17 00:00:00 2001
From: Ayush Samantroy <ayush@ayush.org>
Date: Sat, 1 Jun 2013 18:02:38 +0530
Subject: [PATCH 09/46] Added alias for git clean

---
 plugins/git/git.plugin.zsh | 1 +
 1 file changed, 1 insertion(+)

diff --git a/plugins/git/git.plugin.zsh b/plugins/git/git.plugin.zsh
index 6c016aa6b..c81a72ff4 100644
--- a/plugins/git/git.plugin.zsh
+++ b/plugins/git/git.plugin.zsh
@@ -62,6 +62,7 @@ alias gm='git merge'
 compdef _git gm=git-merge
 alias grh='git reset HEAD'
 alias grhh='git reset HEAD --hard'
+alias gclean='git reset --hard && git clean -dfx'
 alias gwc='git whatchanged -p --abbrev-commit --pretty=medium'
 alias gf='git ls-files | grep'
 alias gpoat='git push origin --all && git push origin --tags'

From 4b945a856c7d43891b645e99a91eb9d38b62b64a Mon Sep 17 00:00:00 2001
From: Gaetan Semet <gaetan@xeberon.net>
Date: Wed, 5 Jun 2013 15:12:56 +0200
Subject: [PATCH 10/46] New plugin for git-repo
 (https://code.google.com/p/git-repo/)

Signed-off-by: Gaetan Semet <gaetan@xeberon.net>
---
 plugins/repo/README.md       |   7 +
 plugins/repo/_repo           | 272 +++++++++++++++++++++++++++++++++++
 plugins/repo/repo.plugin.zsh |   2 +
 3 files changed, 281 insertions(+)
 create mode 100644 plugins/repo/README.md
 create mode 100644 plugins/repo/_repo
 create mode 100644 plugins/repo/repo.plugin.zsh

diff --git a/plugins/repo/README.md b/plugins/repo/README.md
new file mode 100644
index 000000000..0b77e6d48
--- /dev/null
+++ b/plugins/repo/README.md
@@ -0,0 +1,7 @@
+## repo
+**Maintainer:** [Stibbons](https://github.com/Stibbons)
+
+This plugin mainly add support automatic completion for the repo command line tool:
+http://code.google.com/p/git-repo/
+
+* `r` aliases `repo`
diff --git a/plugins/repo/_repo b/plugins/repo/_repo
new file mode 100644
index 000000000..59e39c954
--- /dev/null
+++ b/plugins/repo/_repo
@@ -0,0 +1,272 @@
+#compdef repo
+
+
+__git_apply_whitespace_strategies ()
+{
+  declare -a strategies
+
+  strategies=(
+    'nowarn:turn off the trailing-whitespace warning'
+    'warn:output trailing-whitespace warning, but apply patch'
+    'fix:output trailing-whitespace warning and strip trailing whitespace'
+    'error:output trailing-whitespace warning and refuse to apply patch'
+    'error-all:same as "error", but output warnings for all files')
+
+  _describe -t strategies 'trailing-whitespace resolution strategy' strategies $*
+}
+
+
+_repo()
+{
+  local context state state_descr line curcontext="$curcontext"
+  typeset -A opt_args
+
+  local ret=1
+
+  _arguments -C \
+    '(- 1 *)--help[show usage]'\
+    '1:command:->command'\
+    '*::args:->args' && ret=0
+
+  case $state in
+    (command)
+      repo list  2> /dev/null > /dev/null
+      if [[ $? == 0 ]]; then
+        local commands;
+        commands=(
+          'abandon:Permanently abandon a development branch'
+          'branch:View current topic branches'
+          'branches:View current topic branches'
+          'checkout:Checkout a branch for development'
+          'cherry-pick:Cherry-pick a change.'
+          'diff:Show changes between commit and working tree'
+          'download:Download and checkout a change'
+          'forall:execute command on several project'
+          'grep:Print lines matching a pattern'
+          'help:Display detailed help on a command'
+          'init:Initialize repo in the current directory'
+          'list:List projects and their associated directories'
+          'manifest:Manifest inspection utility'
+          'overview:Display overview of unmerged project branches'
+          'prune:Prune (delete) already merged topics'
+          'rebase:Rebase local branches on upstream branch'
+          'selfupdate:Update repo to the latest version'
+          'smartsync:Update working tree to the latest known good revision'
+          'stage:Stage file(s) for commit'
+          'start:Start a new branch for development'
+          'status:Show the working tree status'
+          'sync:Update working tree to the latest revision'
+          'upload:Upload changes for code review'
+          'version:Display the version of repo'
+        )
+        _describe -t commands 'command' commands && ret=0
+      else
+        local commands;
+        commands=(
+          'init:Install repo in the current working directory'
+          'help:Display detailed help on a command'
+        )
+        _describe -t commands 'command' commands && ret=0
+      fi
+      ;;
+    (args)
+      case $words[1] in
+        (branch | branches)
+          # TODO : list available projects and add them in list to feed compadd with
+          _arguments  : \
+                     "(-h --help)"{-h,--help}"[Show help]" \
+                     ': :__repo_projects' \
+                      && ret=0
+         ;;
+        (abandon)
+          # TODO : list available projects and add them in list to feed compadd with
+          _arguments  : \
+                     "(-h --help)"{-h,--help}"[Show help]" \
+                     ':branch name:__repo_branch' \
+                     ': :__repo_projects'\
+                      && ret=0
+          ;;
+        (checkout)
+          # TODO : list available projects and add them in list to feed compadd with
+          _arguments  : \
+                     "(-h --help)"{-h,--help}"[Show help]" \
+                     ':branch name:__repo_branch' \
+                     ': :__repo_projects'\
+                     && ret=0
+          ;;
+        (init)
+          _arguments : \
+                     "(-h --help)"{-h,--help}"[Show help]" \
+                     "(-q --quiet)"{-q,--quiet}"[be quiet]" \
+                     "(-u --manifest-url)"{-u,--manifest-url=}"[manifest repository location]":url:__repo_url_prompt \
+                     "(-b --manifest-branch)"{-b,--manifest-branch=}"[manifest branch or revision]":branch:__repo_branch\
+                     "(-m --manifest-name)"{-m,--manifest-name=}"[initial manifest file]":manifest_name:__repo_manifest_name\
+                     "(--mirror)--mirror[mirror the forrest]"\
+                     "(--reference)--reference=[location of mirror directory]":dir:_dirs\
+                     "(--depth)--depth=[create a shallow clone with given depth; see git clone]":depth:__repo_depth_prompt\
+                     "(-g --group=)"{-g,--group=}"[restrict manifest projects to ones with a specified group]":group:_group\
+                     "(-p --platform=)"{-p,--platform=}"[restrict manifest projects to ones with a specified platform group(auto|all|none|linux|darwin|...)]":platform:"(auto all none linux darwin)"\
+                     "(--repo-url)--repo-url=[repo repository location]":url:__repo_url_prompt\
+                     "(--repo-branch)--repo-branch[repo branch or revision]":branch_or_rev:__repo__repo_branch_or_rev\
+                     "(--no-repo-verify)--no-repo-verify[do not verify repo source code]"\
+                     "(--config-name)--config-name[Always prompt for name/e-mail]"\
+                     && ret=0
+          ;;
+        (start)
+          _arguments : \
+                     "(-h --help)"{-h,--help}"[Show help]" \
+                     "(--all)--all=[begin branch in all projects]"\
+                    ':branch name:__repo_new__repo_branch_name' \
+                    ':projects:__repo_projects_or_all' \
+                    && ret=0
+          ;;
+        (rebase)
+          _arguments : \
+                     "(-h --help)"{-h,--help}"[Show help]" \
+                     "(-i --interactive)"{-i,--interactive}"[interactive rebase (single project only)]: :__repo_projects" \
+                     "(-f --force-rebase)"{-f,--force-rebase}"[Pass --force-rebase to git rebase]" \
+                     "(--no-ff)--no-ff=[Pass --no-ff to git rebase]"\
+                     "(-q --quiet)"{-q,--quiet}"[Pass --quiet to git rebase]" \
+                     "(--autosquash)--no-ff[Pass --autosquash to git rebase]"\
+                     "(--whitespace=)--whitespace=[Pass --whitespace to git rebase]: :__git_apply_whitespace_strategies"\
+                     "(--auto-stash)--auto-stash[Stash local modifications before starting]"\
+                     && ret=0
+          ;;
+        (checkout)
+          _arguments : \
+                     "(-h --help)"{-h,--help}"[Show help]" \
+                    ':branch name:__git_branch_names' \
+                    ':projects:__repo_projects' \
+                    && ret=0
+          ;;
+        (list)
+          _arguments : \
+                     "(-h --help)"{-h,--help}"[Show help]" \
+                    && ret=0
+          ;;
+        (status)
+          _arguments : \
+                     "(-h --help)"{-h,--help}"[Show help]" \
+                     "(-j --jobs)"{-j,--jobs}"[number of projects to check simultaneously]" \
+                    ':projects:__repo_projects' \
+                    && ret=0
+          ;;
+        (sync)
+          _arguments : \
+                     "(-h --help)"{-h,--help}"[Show help]" \
+                     "(--no-force-broken)--no-force-broken[stop sync if a project fails to sync (probably because of permissions)]" \
+                     "(-l --local-only)"{-l,--local-only}"[only update working tree, don't fetch]" \
+                     "(-n --network-only)"{-n,--network-branch}"[fetch only, don't update working tree]" \
+                     "(-d --detach)"{-d,--detach}"[detach projects back to manifest revision]" \
+                     "(-c --current-branch)"{-c,--current-branch}"[fetch only current branch from server]" \
+                     "(-q --quiet)"{-q,--quiet}"[be more quiet]" \
+                     "(-j --jobs=)"{-j,--jobs=}"[projects to fetch simultaneously (default 1) (limited to 5)]:projects to fetch simultaneously (default 1) (limited to 5)" \
+                     "(-m --manifest-name=)"{-m,--manifest-name=}"[temporary manifest to use for this sync]:manifest xml file:_files -g *.xml" \
+                     "(--no-clone-bundle)--no-clone-bundle[disable use of /clone.bundle on HTTP/HTTPS]" \
+                     "(-s --smart-sync)"{-s,--smart-sync=}"[smart sync using manifest from a known tag]:tag:" \
+                     '(--no-repo-verify)--no-repo-verify[do not verify repo source code]' \
+                     ': :__repo_projects' \
+                     && ret=0
+          ;;
+        (upload)
+          _arguments : \
+                     "(-h --help)"{-h,--help}"[Show help]" \
+                     "(-t)-t[Send local branch name to Gerrit Code Review]" \
+                     "(--re= --reviewers=)"{--re=,--reviewers=}"[Request reviews from these people]:Request reviews from these people:" \
+                     "(--cc=)--cc=[Also send email to these email addresses.]:email addresses:_email_addresses" \
+                     "(--br=)--br=[Branch to upload.]:branch:__repo_branch" \
+                     "(--cbr --current-branch)"{--cbr,--current-branch}"[Upload current git branch]" \
+                     "(-d --draft)"{-d,--draft}"[If specified, upload as a draft.]" \
+                     "(--verify --no-verify)--no-verify[Do not run the upload hook.]" \
+                     '(--verify --no-verify)--verify[Run the upload hook without prompting]' \
+                     ': :__repo_projects' \
+                     && ret=0
+          ;;
+        (forall)
+          _arguments : \
+                     "(-h --help)"{-h,--help}"[Show help]" \
+                     "(-v --verbose)"{-v,--verbose}"[Show command error messages]" \
+                     '(-p)-p[Show project headers before output]' \
+                     ': :__repo_projects_mandatory' \
+                     "(-c --command -h --help -v --verbose -p)"{-c,--command}"[Command (and arguments) to execute]" \
+                     && ret=0
+          ;;
+        *)
+          ret=0
+      esac
+      ;;
+  esac
+
+  return $ret
+}
+
+__repo_reviewers()
+{
+ # _message -e url 'reviewers'
+}
+
+__repo_url_prompt()
+{
+  _message -e url 'url'
+}
+
+__repo_manifest_name()
+{
+  _message -e manifest_name 'manifest name'
+}
+
+_group()
+{
+  _message -e group 'group'
+}
+
+__repo_branch()
+{
+  #_message -e branch 'Repo branch'
+  branches=($(repo branches| cut -c4- | grep '|' | cut -d' ' -f1))
+  _describe -t branches 'Select repo branch' branches
+}
+
+__repo__repo_branch_or_rev()
+{
+  _message -e branch_or_rev 'repo branch or revision'
+}
+
+__repo_depth_prompt()
+{
+  _message -e depth 'depth'
+}
+
+__repo_projects()
+{
+  _message -e depth 'Optional option : <projects>...'
+  projects=($(repo list | cut -d' ' -f1))
+  _describe -t projects 'Select projects (keep empty for selecting all projects)' projects
+}
+
+__repo_projects_mandatory()
+{
+  projects=($(repo list | cut -d' ' -f1))
+  #_describe -t projects 'Select projects to apply commands' projects
+  _values -s ' ' "Select projects to apply commands" $projects
+}
+
+__repo_new__repo_branch_name()
+{
+  branches=($(repo branches| cut -c4- | grep '|' | cut -d' ' -f1))
+  _describe "" branches
+  _message -e "branch name" 'Enter new branch name or select an existing repo branch'
+}
+
+__repo_projects_or_all()
+{
+  #_message -e depth '[--all | <project>...]'
+
+  projects=(--all $(repo list | cut -d' ' -f1))
+  _describe -t projects 'Select projects or --all' projects
+  _describe -t --all 'All projects'
+}
+
+_repo "$@"
+return $?
+
diff --git a/plugins/repo/repo.plugin.zsh b/plugins/repo/repo.plugin.zsh
new file mode 100644
index 000000000..9cc336959
--- /dev/null
+++ b/plugins/repo/repo.plugin.zsh
@@ -0,0 +1,2 @@
+# Aliases
+alias r='repo'

From 46f0d8dba95aae400e4d9fc825691d0119cf7189 Mon Sep 17 00:00:00 2001
From: Gaetan Semet <gaetan@xeberon.net>
Date: Wed, 5 Jun 2013 15:16:51 +0200
Subject: [PATCH 11/46] Improvement in the git plugin

Signed-off-by: Gaetan Semet <gaetan@xeberon.net>
---
 plugins/git/README.md      |  4 +++
 plugins/git/_git-branch    | 62 ++++++++++++++++++++++++++++++++
 plugins/git/_git-remote    | 74 ++++++++++++++++++++++++++++++++++++++
 plugins/git/git.plugin.zsh | 13 +++++++
 4 files changed, 153 insertions(+)
 create mode 100644 plugins/git/README.md
 create mode 100644 plugins/git/_git-branch
 create mode 100644 plugins/git/_git-remote

diff --git a/plugins/git/README.md b/plugins/git/README.md
new file mode 100644
index 000000000..8462dda1c
--- /dev/null
+++ b/plugins/git/README.md
@@ -0,0 +1,4 @@
+## git
+**Maintainer:** [Stibbons](https://github.com/Stibbons)
+
+This plugin adds several git aliases and increase the completion function provided by zsh
diff --git a/plugins/git/_git-branch b/plugins/git/_git-branch
new file mode 100644
index 000000000..86d03bc30
--- /dev/null
+++ b/plugins/git/_git-branch
@@ -0,0 +1,62 @@
+#compdef git-branch
+
+_git-branch () 
+{
+  declare l c m d
+
+  l='--color --no-color -r -a --all -v --verbose --abbrev --no-abbrev'
+  c='-l -f --force -t --track --no-track --set-upstream --contains --merged --no-merged'
+  m='-m -M'
+  d='-d -D'
+
+  declare -a dependent_creation_args
+  if (( words[(I)-r] == 0 )); then
+    dependent_creation_args=(
+      "($l $m $d): :__git_branch_names"
+      "::start-point:__git_revisions")
+  fi
+
+  declare -a dependent_deletion_args
+  if (( words[(I)-d] || words[(I)-D] )); then
+    dependent_creation_args=
+    dependent_deletion_args=(
+      '-r[delete only remote-tracking branches]')
+    if (( words[(I)-r] )); then
+      dependent_deletion_args+='*: :__git_ignore_line_inside_arguments __git_remote_branch_names'
+    else
+      dependent_deletion_args+='*: :__git_ignore_line_inside_arguments __git_branch_names'
+    fi
+  fi
+
+  declare -a dependent_modification_args
+  if (( words[(I)-m] || words[(I)-M] )); then
+    dependent_creation_args=
+    dependent_modification_args=(
+      ':old or new branch name:__git_branch_names'
+      '::new branch name:__git_branch_names')
+  fi
+
+  _arguments -w -S -s \
+    "($c $m $d --no-color :)--color=-[turn on branch coloring]:: :__git_color_whens" \
+    "($c $m $d : --color)--no-color[turn off branch coloring]" \
+    "($c $m      -a --all)-r[list or delete only remote-tracking branches]" \
+    "($c $m $d : -r)"{-a,--all}"[list both remote-tracking branches and local branches]" \
+    "($c $m $d : -v --verbose)"{-v,--verbose}'[show SHA1 and commit subject line for each head]' \
+    "($c $m $d :)--abbrev=[set minimum SHA1 display-length]: :__git_guard_number length" \
+    "($c $m $d :)--no-abbrev[do not abbreviate sha1s]" \
+    "($l $m $d)-l[create the branch's reflog]" \
+    "($l $m $d -f --force)"{-f,--force}"[force the creation of a new branch]" \
+    "($l $m $d -t --track)"{-t,--track}"[set up configuration so that pull merges from the start point]" \
+    "($l $m $d)--no-track[override the branch.autosetupmerge configuration variable]" \
+    "($l $m $d)--set-upstream[set up configuration so that pull merges]" \
+    "($l $m $d)--contains=[only list branches which contain the specified commit]: :__git_committishs" \
+    "($l $m $d)--merged=[only list branches which are fully contained by HEAD]: :__git_committishs" \
+    "($l $m $d)--no-merged=[do not list branches which are fully contained by HEAD]: :__git_committishs" \
+    $dependent_creation_args \
+    "($l $c $d -M)-m[rename a branch and the corresponding reflog]" \
+    "($l $c $d -m)-M[rename a branch even if the new branch-name already exists]" \
+    $dependent_modification_args \
+    "($l $c $m -D)-d[delete a fully merged branch]" \
+    "($l $c $m -d)-D[delete a branch]" \
+    $dependent_deletion_args
+}
diff --git a/plugins/git/_git-remote b/plugins/git/_git-remote
new file mode 100644
index 000000000..4ba62a357
--- /dev/null
+++ b/plugins/git/_git-remote
@@ -0,0 +1,74 @@
+#compdef git-remote
+
+# NOTE: --track is undocumented.
+# TODO: --track, -t, --master, and -m should take remote branches, I guess.
+# NOTE: --master is undocumented.
+# NOTE: --fetch is undocumented.
+_git-remote () {
+  local curcontext=$curcontext state line
+  declare -A opt_args
+
+  _arguments -C \
+    ':command:->command' \
+    '*::options:->options' && ret=0
+
+  case $state in
+    (command)
+      declare -a commands
+
+      commands=(
+        'add:add a new remote'
+        'show:show information about a given remote'
+        'prune:delete all stale tracking branches for a given remote'
+        'update:fetch updates for a set of remotes'
+        'rm:remove a remote from .git/config and all associated tracking branches'
+        'rename:rename a remote from .git/config and update all associated tracking branches'
+        'set-head:sets or deletes the default branch'
+        'set-branches:changes the list of branches tracked by the named remote.'
+        'set-url:changes URL remote points to.'
+        )
+
+      _describe -t commands 'sub-command' commands && ret=0
+      ;;
+    (options)
+      case $line[1] in
+        (add)
+          _arguments \
+            '*'{--track,-t}'[track given branch instead of default glob refspec]:branch:__git_branch_names' \
+            '(--master -m)'{--master,-m}'[set the remote'\''s HEAD to point to given master branch]:branch:__git_branch_names' \
+            '(--fetch -f)'{--fetch,-f}'[run git-fetch on the new remote after it has been created]' \
+            ':branch name:__git_remotes' \
+            ':url:_urls' && ret=0
+          ;;
+        (show)
+          _arguments \
+            '-n[do not contact the remote for a list of branches]' \
+            ':remote:__git_remotes' && ret=0
+          ;;
+        (prune)
+          _arguments \
+            '(--dry-run -n)'{-n,--dry-run}'[do not actually prune, only list what would be done]' \
+            ':remote:__git_remotes' && ret=0
+          ;;
+        (update)
+          __git_remote-groups && ret=0
+          ;;
+        (rm)
+          __git_remotes && ret=0
+          ;;
+        (rename)
+          __git_remotes && ret=0
+          ;;
+        (set-url)
+          _arguments \
+            '*--push[manipulate push URLs]' \
+            '(--add)--add[add URL]' \
+            '(--delete)--delete[delete URLs]' \
+            ':branch name:__git_remotes' \
+            ':url:_urls' && ret=0
+          ;;
+          
+      esac
+      ;;
+  esac
+}
diff --git a/plugins/git/git.plugin.zsh b/plugins/git/git.plugin.zsh
index 6c016aa6b..cf897239c 100644
--- a/plugins/git/git.plugin.zsh
+++ b/plugins/git/git.plugin.zsh
@@ -37,6 +37,12 @@ alias grset='git remote set-url'
 compdef _git grset=git-remote
 alias grup='git remote update'
 compdef _git grset=git-remote
+alias grbi='git rebase -i'
+compdef _git grbi=git-rebase
+alias grbc='git rebase --continue'
+compdef _git grbc=git-rebase
+alias grba='git rebase --abort'
+compdef _git grba=git-rebase
 alias gb='git branch'
 compdef _git gb=git-branch
 alias gba='git branch -a'
@@ -65,6 +71,13 @@ alias grhh='git reset HEAD --hard'
 alias gwc='git whatchanged -p --abbrev-commit --pretty=medium'
 alias gf='git ls-files | grep'
 alias gpoat='git push origin --all && git push origin --tags'
+alias gmt='git mergetool --no-prompt'
+compdef _git gm=git-mergetool
+
+alias gg='git gui citool'
+alias gga='git gui citool --amend'
+alias gk='gitk --all --branches'
+alias gss='git stash show --text'
 
 # Will cd into the top of the current repository
 # or submodule.

From 82666e25e31451527520ab49a819e4135ed8a34c Mon Sep 17 00:00:00 2001
From: Trev <trev311@gmail.com>
Date: Wed, 5 Jun 2013 13:22:33 -0400
Subject: [PATCH 12/46] A cabal plugin based on the lein plugin

---
 plugins/cabal/cabal.plugin.zsh | 36 ++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)
 create mode 100644 plugins/cabal/cabal.plugin.zsh

diff --git a/plugins/cabal/cabal.plugin.zsh b/plugins/cabal/cabal.plugin.zsh
new file mode 100644
index 000000000..8d3c64587
--- /dev/null
+++ b/plugins/cabal/cabal.plugin.zsh
@@ -0,0 +1,36 @@
+function _cabal_commands() {
+    local ret=1 state
+    _arguments ':subcommand:->subcommand' && ret=0
+
+    case $state in
+      subcommand)
+        subcommands=(
+          "bench:Run the benchmark, if any (configure with UserHooks)"
+          "build:Make this package ready for installation"
+          "check:Check the package for common mistakes"
+          "clean:Clean up after a build"
+          "copy:Copy teh files into the install locations"
+          "configure:Prepare to build the package"
+          "fetch:Downloads packages for later installation"
+          "haddock:Generate HAddock HTML documentation"
+          "help:Help about commands"
+          "hscolour:Generate HsColour colourised code, in HTML format"
+          "info:Display detailed information about a particular package"
+          "init:Interactively create a .cabal file"
+          "install:Installs a list of packages"
+          "list:List packages matching a search string"
+          "register:Register this package with the compiler"
+          "report:Upload build reports to a remote server"
+          "sdist:Generate a source distribution file (.tar.gz)"
+          "test:Run the test suite, if any (configure with UserHooks)"
+          "unpack:Unpacks packages for user inspection"
+          "update:Updates list of known packages"
+          "upload:Uploads source packages to Hackage"
+        )
+        _describe -t subcommands 'cabal subcommands' subcommands && ret=0
+    esac
+
+    return ret
+}
+
+compdef _cabal_commands cabal

From 0118e182894b1756ce292936b6a1ff64582879b4 Mon Sep 17 00:00:00 2001
From: Michael LaCorte <mlacorte@oddz.com>
Date: Wed, 5 Jun 2013 12:37:02 -0700
Subject: [PATCH 13/46] Fixed color on git prompt for superjarin theme

---
 themes/superjarin.zsh-theme | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/themes/superjarin.zsh-theme b/themes/superjarin.zsh-theme
index 86955a560..2920d17a2 100644
--- a/themes/superjarin.zsh-theme
+++ b/themes/superjarin.zsh-theme
@@ -11,13 +11,13 @@ fi
 # Append the current git branch, if in a git repository
 JARIN_CURRENT_LOCA_="%{$fg_bold[cyan]%}%~\$(git_prompt_info)%{$reset_color%}"
 ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[white]%} <%{$fg[magenta]%}"
-ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
+ZSH_THEME_GIT_PROMPT_SUFFIX="%{$fg[white]%}"
 
 # Do nothing if the branch is clean (no changes).
-ZSH_THEME_GIT_PROMPT_CLEAN="%{$reset_color%}>"
+ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[white]%}>"
 
 # Add a yellow ✗ if the branch is dirty
-ZSH_THEME_GIT_PROMPT_DIRTY="%{$reset_color%}> %{$fg[yellow]%}✗"
+ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[white]%}> %{$fg[yellow]%}✗"
 
 # Put it all together!
 PROMPT="$JARIN_CURRENT_RUBY_ $JARIN_CURRENT_LOCA_ "

From 8300f62e92bd63a1b221889f98318e9c5b441e0b Mon Sep 17 00:00:00 2001
From: Lucas Uyezu <lucas.uyezu@gmail.com>
Date: Thu, 6 Jun 2013 00:40:02 -0300
Subject: [PATCH 14/46] Adding testlog and prodlog.

---
 plugins/rails/rails.plugin.zsh   | 2 ++
 plugins/rails3/rails3.plugin.zsh | 2 ++
 plugins/rails4/rails4.plugin.zsh | 2 ++
 3 files changed, 6 insertions(+)

diff --git a/plugins/rails/rails.plugin.zsh b/plugins/rails/rails.plugin.zsh
index 0139d22c3..dd8b174b2 100644
--- a/plugins/rails/rails.plugin.zsh
+++ b/plugins/rails/rails.plugin.zsh
@@ -10,6 +10,8 @@ alias migrate='rake db:migrate && rake db:test:prepare'
 alias sc='ruby script/console'
 alias sd='ruby script/server --debugger'
 alias devlog='tail -f log/development.log'
+alias testlog='tail -f log/test.log'
+alias prodlog='tail -f log/production.log'
 alias -g RET='RAILS_ENV=test'
 alias -g REP='RAILS_ENV=production'
 alias -g RED='RAILS_ENV=development'
diff --git a/plugins/rails3/rails3.plugin.zsh b/plugins/rails3/rails3.plugin.zsh
index a2697872a..2555fab67 100644
--- a/plugins/rails3/rails3.plugin.zsh
+++ b/plugins/rails3/rails3.plugin.zsh
@@ -19,6 +19,8 @@ alias ru='_rails_command runner'
 alias rs='_rails_command server'
 alias rsd='_rails_command server --debugger'
 alias devlog='tail -f log/development.log'
+alias testlog='tail -f log/test.log'
+alias prodlog='tail -f log/production.log'
 alias rdm='rake db:migrate'
 alias rdr='rake db:rollback'
 alias -g RET='RAILS_ENV=test'
diff --git a/plugins/rails4/rails4.plugin.zsh b/plugins/rails4/rails4.plugin.zsh
index fce827ee3..cb6cf816d 100644
--- a/plugins/rails4/rails4.plugin.zsh
+++ b/plugins/rails4/rails4.plugin.zsh
@@ -21,6 +21,8 @@ alias ru='_rails_command runner'
 alias rs='_rails_command server'
 alias rsd='_rails_command server --debugger'
 alias devlog='tail -f log/development.log'
+alias testlog='tail -f log/test.log'
+alias prodlog='tail -f log/production.log'
 alias rdm='rake db:migrate'
 alias rdc='rake db:create'
 alias rdr='rake db:rollback'

From b1f41f6fa5fbfb9317704fa1416a8d081b4e2310 Mon Sep 17 00:00:00 2001
From: Matthew Robben <mattr@terrarium.io>
Date: Thu, 6 Jun 2013 02:18:25 -0300
Subject: [PATCH 15/46] Update README.textile

Add upgrade command to docs. I canceled the prompt once and went hunting for this so I could upgrade.
---
 README.textile | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/README.textile b/README.textile
index 5f8067499..1916d9f4e 100644
--- a/README.textile
+++ b/README.textile
@@ -72,6 +72,8 @@ To disable updates entirely, put this in your ~/.zshrc
 
 @DISABLE_AUTO_UPDATE=true@
 
+To upgrade directly from the command line, just run @upgrade_oh_my_zsh@
+
 h3. Uninstalling
 
 If you want to uninstall it, just run @uninstall_oh_my_zsh@ from the command line and it'll remove itself and revert you to bash (or your previous zsh config).

From 97849bd9b65300a839f3c340e9dbb30b494d9898 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gr=C3=A9goire=20D=C3=A9trez?= <gdetrez@crans.org>
Date: Thu, 6 Jun 2013 13:06:29 +0200
Subject: [PATCH 16/46] Update the character used in powerline

The code points have been updated in 53fbfe1, see
- https://github.com/Lokaltog/powerline/commit/53fbfe15fead8cc7598bcb4ee9714a221ab7e446
- https://github.com/Lokaltog/powerline/issues/4
---
 themes/agnoster.zsh-theme | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/themes/agnoster.zsh-theme b/themes/agnoster.zsh-theme
index a9de8c84e..e65293858 100644
--- a/themes/agnoster.zsh-theme
+++ b/themes/agnoster.zsh-theme
@@ -26,7 +26,7 @@
 # A few utility functions to make it easy and re-usable to draw segmented prompts
 
 CURRENT_BG='NONE'
-SEGMENT_SEPARATOR='⮀'
+SEGMENT_SEPARATOR=''
 
 # Begin a segment
 # Takes two arguments, background and foreground. Both can be omitted,
@@ -90,7 +90,7 @@ prompt_git() {
     zstyle ':vcs_info:*' formats ' %u%c'
     zstyle ':vcs_info:*' actionformats '%u%c'
     vcs_info
-    echo -n "${ref/refs\/heads\//⭠ }${vcs_info_msg_0_}"
+    echo -n "${ref/refs\/heads\// }${vcs_info_msg_0_}"
   fi
 }
 
@@ -110,7 +110,7 @@ prompt_hg() {
 				# if working copy is clean
 				prompt_segment green black
 			fi
-			echo -n $(hg prompt "⭠ {rev}@{branch}") $st
+			echo -n $(hg prompt " {rev}@{branch}") $st
 		else
 			st=""
 			rev=$(hg id -n 2>/dev/null | sed 's/[^-0-9]//g')
@@ -124,7 +124,7 @@ prompt_hg() {
 			else
 				prompt_segment green black
 			fi
-			echo -n "⭠ $rev@$branch" $st
+			echo -n " $rev@$branch" $st
 		fi
 	fi
 }

From 1e86e65e3a424145bda6096f7770c448f0286dce Mon Sep 17 00:00:00 2001
From: Charles Johnson <charles@opscode.com>
Date: Thu, 6 Jun 2013 13:34:36 -0600
Subject: [PATCH 17/46] Update bundler.plugin.zsh

Added berks, foodcritic, kitchen, and knife commands to bundler plugin.
---
 plugins/bundler/bundler.plugin.zsh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/plugins/bundler/bundler.plugin.zsh b/plugins/bundler/bundler.plugin.zsh
index 9446aafab..58476206c 100644
--- a/plugins/bundler/bundler.plugin.zsh
+++ b/plugins/bundler/bundler.plugin.zsh
@@ -7,7 +7,7 @@ alias bu="bundle update"
 
 # The following is based on https://github.com/gma/bundler-exec
 
-bundled_commands=(annotate cap capify cucumber foreman guard jekyll middleman nanoc rackup rainbows rake rspec ruby shotgun spec spin spork thin thor unicorn unicorn_rails puma)
+bundled_commands=(annotate berks cap capify cucumber foodcritic foreman guard jekyll kitchen knife middleman nanoc rackup rainbows rake rspec ruby shotgun spec spin spork thin thor unicorn unicorn_rails puma)
 
 ## Functions
 

From ec177659df38865c77c930c3f6223069e0cdab78 Mon Sep 17 00:00:00 2001
From: Charles Johnson <charles@opscode.com>
Date: Thu, 6 Jun 2013 14:37:39 -0600
Subject: [PATCH 18/46] Update bundler.plugin.zsh

Added strainer & tailor to commands in bundler plugin.
---
 plugins/bundler/bundler.plugin.zsh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/plugins/bundler/bundler.plugin.zsh b/plugins/bundler/bundler.plugin.zsh
index 58476206c..c01241409 100644
--- a/plugins/bundler/bundler.plugin.zsh
+++ b/plugins/bundler/bundler.plugin.zsh
@@ -7,7 +7,7 @@ alias bu="bundle update"
 
 # The following is based on https://github.com/gma/bundler-exec
 
-bundled_commands=(annotate berks cap capify cucumber foodcritic foreman guard jekyll kitchen knife middleman nanoc rackup rainbows rake rspec ruby shotgun spec spin spork thin thor unicorn unicorn_rails puma)
+bundled_commands=(annotate berks cap capify cucumber foodcritic foreman guard jekyll kitchen knife middleman nanoc rackup rainbows rake rspec ruby shotgun spec spin spork strainer tailor thin thor unicorn unicorn_rails puma)
 
 ## Functions
 

From c5aaa11ceee00142e0f385f157b90910d692705f Mon Sep 17 00:00:00 2001
From: Chris Krycho <github@chriskrycho.com>
Date: Fri, 7 Jun 2013 18:36:07 -0300
Subject: [PATCH 19/46] Add count for incoming and outgoing changesets.

---
 plugins/mercurial/mercurial.plugin.zsh | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/plugins/mercurial/mercurial.plugin.zsh b/plugins/mercurial/mercurial.plugin.zsh
index 9aa2d167a..2d1a0ac0d 100644
--- a/plugins/mercurial/mercurial.plugin.zsh
+++ b/plugins/mercurial/mercurial.plugin.zsh
@@ -1,4 +1,3 @@
-
 # Mercurial
 alias hgc='hg commit'
 alias hgb='hg branch'
@@ -9,9 +8,11 @@ alias hgd='hg diff'
 alias hged='hg diffmerge'
 # pull and update
 alias hgi='hg incoming'
+alias hgic='hg incoming | grep "changeset" | wc -l'
 alias hgl='hg pull -u'
 alias hglr='hg pull --rebase'
 alias hgo='hg outgoing'
+alias hgoc='hg outgoing | grep 'changeset' | wc -l'
 alias hgp='hg push'
 alias hgs='hg status'
 # this is the 'git commit --amend' equivalent

From e73dd2cdf895879a3584eca3a475f33f72f48da8 Mon Sep 17 00:00:00 2001
From: Andrew Grangaard <Andrew.Grangaard@demandmedia.com>
Date: Sat, 8 Jun 2013 11:25:52 -0700
Subject: [PATCH 20/46] virtualenvwrapper plugin cleanup

* removes cd override by using chpwd_functions
* removes subshell call to which by using $+commands array and
  c param expansion to find in PATH
* zsh love!
---
 .../virtualenvwrapper.plugin.zsh              | 25 +++++++++++--------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh
index 35de50874..670c287bd 100644
--- a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh
+++ b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh
@@ -1,10 +1,9 @@
-wrapsource=`which virtualenvwrapper_lazy.sh`
-
-if [[ -f "$wrapsource" ]]; then
-  source $wrapsource
+virtualenvwrapper='virtualenvwrapper_lazy.sh'
+if (( $+commands[$virtualenvwrapper] )); then
+  source ${${virtualenvwrapper}:c}
 
   if [[ ! $DISABLE_VENV_CD -eq 1 ]]; then
-    # Automatically activate Git projects' virtual environments based on the
+    # Automatically activate Git projects's virtual environments based on the
     # directory name of the project. Virtual environment name can be overridden
     # by placing a .venv file in the project root with a virtualenv name in it
     function workon_cwd {
@@ -40,11 +39,17 @@ if [[ -f "$wrapsource" ]]; then
         fi
     }
 
-    # New cd function that does the virtualenv magic
-    function cd {
-        builtin cd "$@" && workon_cwd
-    }
+    # Append workon_cwd to the chpwd_functions array, so it will be called on cd
+    # http://zsh.sourceforge.net/Doc/Release/Functions.html
+    # TODO: replace with 'add-zsh-hook chpwd workon_cwd' when oh-my-zsh min version is raised above 4.3.4
+    if (( ${+chpwd_functions} )); then
+        if (( $chpwd_functions[(I)workon_cwd] == 0 )); then
+            set -A chpwd_functions $chpwd_functions workon_cwd
+        fi
+    else
+        set -A chpwd_functions workon_cwd
+    fi
   fi
 else
-  print "zsh virtualenvwrapper plugin: Cannot find virtualenvwrapper_lazy.sh. Please install with \`pip install virtualenvwrapper\`."
+  print "zsh virtualenvwrapper plugin: Cannot find ${virtualenvwrapper}. Please install with \`pip install virtualenvwrapper\`."
 fi

From 894e1caa0a7fb2e02aa139d23d0b05d62c6d8932 Mon Sep 17 00:00:00 2001
From: Andrew Grangaard <Andrew.Grangaard@demandmedia.com>
Date: Sat, 8 Jun 2013 10:02:32 -0700
Subject: [PATCH 21/46] virtualenv cleanup: replaces subshell with prompt
 expansion.

* :t parameter expansion returns the last portion of the path,
  equivalent to basename. I <3 zsh.
* adds comments for the VIRTUAL_ENV_DISABLE_PROMPT,
  used by virtual_env activate

See also:
  http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion
---
 plugins/virtualenv/virtualenv.plugin.zsh | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/plugins/virtualenv/virtualenv.plugin.zsh b/plugins/virtualenv/virtualenv.plugin.zsh
index e8458389f..8e06450b1 100644
--- a/plugins/virtualenv/virtualenv.plugin.zsh
+++ b/plugins/virtualenv/virtualenv.plugin.zsh
@@ -1,9 +1,8 @@
 function virtualenv_prompt_info(){
-  local virtualenv_path="$VIRTUAL_ENV"
-  if [[ -n $virtualenv_path ]]; then
-    local virtualenv_name=`basename $virtualenv_path`
-    printf "%s[%s] " "%{${fg[yellow]}%}" $virtualenv_name
+  if [[ -n $VIRTUAL_ENV ]]; then
+    printf "%s[%s] " "%{${fg[yellow]}%}" ${${VIRTUAL_ENV}:t}
   fi
 }
 
+# disables prompt mangling in virtual_env/bin/activate
 export VIRTUAL_ENV_DISABLE_PROMPT=1

From e4884da5a09b121a43121c79449e4cfae7a5c9d0 Mon Sep 17 00:00:00 2001
From: San Martin Morote Eduardo <posva13@gmail.com>
Date: Sun, 9 Jun 2013 11:01:20 +0200
Subject: [PATCH 22/46] Random quotes from the internet

---
 plugins/rand-quote/rand-quote.plugin.zsh | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
 create mode 100644 plugins/rand-quote/rand-quote.plugin.zsh

diff --git a/plugins/rand-quote/rand-quote.plugin.zsh b/plugins/rand-quote/rand-quote.plugin.zsh
new file mode 100644
index 000000000..b85abc81c
--- /dev/null
+++ b/plugins/rand-quote/rand-quote.plugin.zsh
@@ -0,0 +1,17 @@
+Get a random quote fron the sitehttp://www.quotationspage.com/random.php3
+# Created by Eduardo San Martin Morote aka Posva
+# http://posva.github.io
+# Sun Jun 09 10:59:36 CEST 2013 
+# Don't remove this header, thank you
+# Usage: quote
+
+if [[ -x `which curl` ]]; then
+    function quote()
+    {
+        Q=$(curl -s --connect-timeout 2 "http://www.quotationspage.com/random.php3" | grep -m 1 "dt ")
+        TXT=$(echo "$Q" | sed -e 's/<\/dt>.*//g' -e 's/.*html//g' -e 's/^[^a-zA-Z]*//' -e 's/<\/a..*$//g')
+        W=$(echo "$Q" | sed -e 's/.*\/quotes\///g' -e 's/<.*//g' -e 's/.*">//g')
+        echo "\e[0;33m${W}\e[0;30m: \e[0;35m“${TXT}”\e[m"
+    }
+    #quote
+fi

From 60aa92bae3a589af93d8a52443f01609b81cd4ab Mon Sep 17 00:00:00 2001
From: San Martin Morote Eduardo <posva13@gmail.com>
Date: Sun, 9 Jun 2013 11:04:39 +0200
Subject: [PATCH 23/46] Messed up the comment somehow...

---
 plugins/rand-quote/rand-quote.plugin.zsh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/plugins/rand-quote/rand-quote.plugin.zsh b/plugins/rand-quote/rand-quote.plugin.zsh
index b85abc81c..5544ca565 100644
--- a/plugins/rand-quote/rand-quote.plugin.zsh
+++ b/plugins/rand-quote/rand-quote.plugin.zsh
@@ -1,4 +1,4 @@
-Get a random quote fron the sitehttp://www.quotationspage.com/random.php3
+# Get a random quote fron the site http://www.quotationspage.com/random.php3
 # Created by Eduardo San Martin Morote aka Posva
 # http://posva.github.io
 # Sun Jun 09 10:59:36 CEST 2013 

From d6945e2daad2b980da8cd6af9b1d1ea4f874ec95 Mon Sep 17 00:00:00 2001
From: Michiel Missotten <michiel@lil-web.fr>
Date: Tue, 11 Jun 2013 11:23:02 +0200
Subject: [PATCH 24/46] Adding a rebase option to git alias.

---
 plugins/git/git.plugin.zsh | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/plugins/git/git.plugin.zsh b/plugins/git/git.plugin.zsh
index 6c016aa6b..6f2f59df3 100644
--- a/plugins/git/git.plugin.zsh
+++ b/plugins/git/git.plugin.zsh
@@ -95,6 +95,8 @@ function current_repository() {
 # these aliases take advantage of the previous function
 alias ggpull='git pull origin $(current_branch)'
 compdef ggpull=git
+alias ggpur='git pull --rebase origin $(current_branch)'
+compdef ggpur=git
 alias ggpush='git push origin $(current_branch)'
 compdef ggpush=git
 alias ggpnp='git pull origin $(current_branch) && git push origin $(current_branch)'

From ab7604e5c2a4e07e656b3e4edf0d3e45407665e5 Mon Sep 17 00:00:00 2001
From: Ehren Kret <ehren.kret@gmail.com>
Date: Tue, 11 Jun 2013 11:37:35 -0700
Subject: [PATCH 25/46] Escape both % and $ in the command line

Fixes issue #1884
---
 lib/termsupport.zsh | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/lib/termsupport.zsh b/lib/termsupport.zsh
index e3828da14..80319e1a8 100644
--- a/lib/termsupport.zsh
+++ b/lib/termsupport.zsh
@@ -27,7 +27,9 @@ function omz_termsupport_preexec {
   emulate -L zsh
   setopt extended_glob
   local CMD=${1[(wr)^(*=*|sudo|ssh|rake|-*)]} #cmd name only, or if this is sudo or ssh, the next cmd
-  title "$CMD" "%100>...>${2:gs/%/%%}%<<"
+  local LINE="${2:gs/$/\\$}"
+  LINE="${LINE:gs/%/%%}"
+  title "$CMD" "%100>...>$LINE%<<"
 }
 
 autoload -U add-zsh-hook

From 9703eba66e2a45ee28cd895a852853fd34ea4ff0 Mon Sep 17 00:00:00 2001
From: Theodore Kokkoris <t.kokkoris@gmail.com>
Date: Wed, 12 Jun 2013 20:04:08 +0300
Subject: [PATCH 26/46] Fixed slow behavior when using GitHub wrappers

---
 lib/git.zsh | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/lib/git.zsh b/lib/git.zsh
index c4b5b5d62..df0fcedbb 100644
--- a/lib/git.zsh
+++ b/lib/git.zsh
@@ -1,7 +1,7 @@
 # get the name of the branch we are on
 function git_prompt_info() {
-  ref=$(git symbolic-ref HEAD 2> /dev/null) || \
-  ref=$(git rev-parse --short HEAD 2> /dev/null) || return
+  ref=$(command git symbolic-ref HEAD 2> /dev/null) || \
+  ref=$(command git rev-parse --short HEAD 2> /dev/null) || return
   echo "$ZSH_THEME_GIT_PROMPT_PREFIX${ref#refs/heads/}$(parse_git_dirty)$ZSH_THEME_GIT_PROMPT_SUFFIX"
 }
 
@@ -11,14 +11,14 @@ parse_git_dirty() {
   local SUBMODULE_SYNTAX=''
   local GIT_STATUS=''
   local CLEAN_MESSAGE='nothing to commit (working directory clean)'
-  if [[ "$(git config --get oh-my-zsh.hide-status)" != "1" ]]; then
+  if [[ "$(command git config --get oh-my-zsh.hide-status)" != "1" ]]; then
     if [[ $POST_1_7_2_GIT -gt 0 ]]; then
           SUBMODULE_SYNTAX="--ignore-submodules=dirty"
     fi
     if [[ "$DISABLE_UNTRACKED_FILES_DIRTY" == "true" ]]; then
-        GIT_STATUS=$(git status -s ${SUBMODULE_SYNTAX} -uno 2> /dev/null | tail -n1)
+        GIT_STATUS=$(command git status -s ${SUBMODULE_SYNTAX} -uno 2> /dev/null | tail -n1)
     else
-        GIT_STATUS=$(git status -s ${SUBMODULE_SYNTAX} 2> /dev/null | tail -n1)
+        GIT_STATUS=$(command git status -s ${SUBMODULE_SYNTAX} 2> /dev/null | tail -n1)
     fi
     if [[ -n $GIT_STATUS ]]; then
       echo "$ZSH_THEME_GIT_PROMPT_DIRTY"
@@ -32,10 +32,10 @@ parse_git_dirty() {
 
 # get the difference between the local and remote branches
 git_remote_status() {
-    remote=${$(git rev-parse --verify ${hook_com[branch]}@{upstream} --symbolic-full-name 2>/dev/null)/refs\/remotes\/}
+    remote=${$(command git rev-parse --verify ${hook_com[branch]}@{upstream} --symbolic-full-name 2>/dev/null)/refs\/remotes\/}
     if [[ -n ${remote} ]] ; then
-        ahead=$(git rev-list ${hook_com[branch]}@{upstream}..HEAD 2>/dev/null | wc -l)
-        behind=$(git rev-list HEAD..${hook_com[branch]}@{upstream} 2>/dev/null | wc -l)
+        ahead=$(command git rev-list ${hook_com[branch]}@{upstream}..HEAD 2>/dev/null | wc -l)
+        behind=$(command git rev-list HEAD..${hook_com[branch]}@{upstream} 2>/dev/null | wc -l)
 
         if [ $ahead -eq 0 ] && [ $behind -gt 0 ]
         then
@@ -52,24 +52,24 @@ git_remote_status() {
 
 # 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
+  if $(echo "$(command git log origin/$(current_branch)..HEAD 2> /dev/null)" | grep '^commit' &> /dev/null); then
     echo "$ZSH_THEME_GIT_PROMPT_AHEAD"
   fi
 }
 
 # Formats prompt string for current git commit short SHA
 function git_prompt_short_sha() {
-  SHA=$(git rev-parse --short HEAD 2> /dev/null) && echo "$ZSH_THEME_GIT_PROMPT_SHA_BEFORE$SHA$ZSH_THEME_GIT_PROMPT_SHA_AFTER"
+  SHA=$(command git rev-parse --short HEAD 2> /dev/null) && echo "$ZSH_THEME_GIT_PROMPT_SHA_BEFORE$SHA$ZSH_THEME_GIT_PROMPT_SHA_AFTER"
 }
 
 # Formats prompt string for current git commit long SHA
 function git_prompt_long_sha() {
-  SHA=$(git rev-parse HEAD 2> /dev/null) && echo "$ZSH_THEME_GIT_PROMPT_SHA_BEFORE$SHA$ZSH_THEME_GIT_PROMPT_SHA_AFTER"
+  SHA=$(command git rev-parse HEAD 2> /dev/null) && echo "$ZSH_THEME_GIT_PROMPT_SHA_BEFORE$SHA$ZSH_THEME_GIT_PROMPT_SHA_AFTER"
 }
 
 # Get the status of the working tree
 git_prompt_status() {
-  INDEX=$(git status --porcelain -b 2> /dev/null)
+  INDEX=$(command git status --porcelain -b 2> /dev/null)
   STATUS=""
   if $(echo "$INDEX" | grep -E '^\?\? ' &> /dev/null); then
     STATUS="$ZSH_THEME_GIT_PROMPT_UNTRACKED$STATUS"
@@ -96,7 +96,7 @@ git_prompt_status() {
   elif $(echo "$INDEX" | grep '^AD ' &> /dev/null); then
     STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS"
   fi
-  if $(git rev-parse --verify refs/stash >/dev/null 2>&1); then
+  if $(command git rev-parse --verify refs/stash >/dev/null 2>&1); then
     STATUS="$ZSH_THEME_GIT_PROMPT_STASHED$STATUS"
   fi
   if $(echo "$INDEX" | grep '^UU ' &> /dev/null); then
@@ -121,7 +121,7 @@ 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 2>/dev/null));
+  INSTALLED_GIT_VERSION=($(command git --version 2>/dev/null));
   INSTALLED_GIT_VERSION=(${(s/./)INSTALLED_GIT_VERSION[3]});
 
   for i in {1..3}; do

From bab1800ded30331b289550b1de8d60bb64f5512f Mon Sep 17 00:00:00 2001
From: Brian Hartvigsen <brian.andrew@brianandjenny.com>
Date: Wed, 12 Jun 2013 12:22:47 -0500
Subject: [PATCH 27/46] Correctly detect Rapid Board

* Add "x" in front of the value we check against...
* Use true instead of yes (more consistent with the rest of ohmyzsh)

The fact that no one seems to have raised this as an issue leads me to believe it's not used that much...
---
 plugins/jira/jira.plugin.zsh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/plugins/jira/jira.plugin.zsh b/plugins/jira/jira.plugin.zsh
index bea726a54..9aa192c1e 100644
--- a/plugins/jira/jira.plugin.zsh
+++ b/plugins/jira/jira.plugin.zsh
@@ -3,7 +3,7 @@
 #         .jira-url in the current directory takes precedence
 #
 # If you use Rapid Board, set:
-#JIRA_RAPID_BOARD="yes"
+#JIRA_RAPID_BOARD="true"
 # in you .zshrc
 #
 # Setup: cd to/my/project
@@ -34,7 +34,7 @@ open_jira_issue () {
     `open $jira_url/secure/CreateIssue!default.jspa`
   else
     echo "Opening issue #$1"
-    if [[ "x$JIRA_RAPID_BOARD" = "yes" ]]; then
+    if [[ "x$JIRA_RAPID_BOARD" = "xtrue" ]]; then
       $open_cmd  "$jira_url/issues/$1"
     else
       $open_cmd  "$jira_url/browse/$1"

From b074886ae66ed73957858608b21401767e3c66c0 Mon Sep 17 00:00:00 2001
From: Christoph Jerolimov <jerolimov@gmail.com>
Date: Fri, 14 Jun 2013 01:36:37 +0300
Subject: [PATCH 28/46] Do not clear tab when calling it with an argument.

---
 plugins/osx/osx.plugin.zsh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/plugins/osx/osx.plugin.zsh b/plugins/osx/osx.plugin.zsh
index 51cd7c143..dd785f911 100644
--- a/plugins/osx/osx.plugin.zsh
+++ b/plugins/osx/osx.plugin.zsh
@@ -6,7 +6,7 @@
 # ------------------------------------------------------------------------------
 
 function tab() {
-  local command="cd \\\"$PWD\\\""
+  local command="cd \\\"$PWD\\\"; clear; "
   (( $# > 0 )) && command="${command}; $*"
 
   the_app=$(
@@ -34,7 +34,7 @@ EOF
           launch session "Default Session"
           set current_session to current session
           tell current_session
-            write text "${command}; clear;"
+            write text "${command}"
           end tell
         end tell
       end tell

From f8e3f293e0ae4e5890f83d9233e2829e64a04df9 Mon Sep 17 00:00:00 2001
From: Jeremy Tennant <registrations@jeremytennant.com>
Date: Sun, 16 Jun 2013 14:04:02 +1000
Subject: [PATCH 29/46] Add new plugin for homebrew installed version of
 postgres

---
 plugins/postgres/postgres.plugin.zsh | 6 ++++++
 1 file changed, 6 insertions(+)
 create mode 100644 plugins/postgres/postgres.plugin.zsh

diff --git a/plugins/postgres/postgres.plugin.zsh b/plugins/postgres/postgres.plugin.zsh
new file mode 100644
index 000000000..cdd142e92
--- /dev/null
+++ b/plugins/postgres/postgres.plugin.zsh
@@ -0,0 +1,6 @@
+# Aliases to stop, start and restart Postgres
+# Paths noted below are for Postgress installed via Homebrew on OSX
+
+alias startpost='pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start'
+alias stoppost='pg_ctl -D /usr/local/var/postgres stop -s -m fast'
+alias restartpost='stoppost && sleep 1 && startpost'
\ No newline at end of file

From 4eace8753be4793f109c997bede7f0985692bb0a Mon Sep 17 00:00:00 2001
From: Code Whale <hoiwai930@gmail.com>
Date: Sun, 16 Jun 2013 13:25:29 +0800
Subject: [PATCH 30/46] debian plugin: ignore alias in sudo/aptitude check

---
 plugins/debian/debian.plugin.zsh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/plugins/debian/debian.plugin.zsh b/plugins/debian/debian.plugin.zsh
index 55b90e379..b51d0cd37 100644
--- a/plugins/debian/debian.plugin.zsh
+++ b/plugins/debian/debian.plugin.zsh
@@ -6,14 +6,14 @@
 
 # Use aptitude if installed, or apt-get if not.
 # You can just set apt_pref='apt-get' to override it.
-if [[ -e $( which aptitude 2>&1 ) ]]; then
+if [[ -e $( which -p aptitude 2>&1 ) ]]; then
     apt_pref='aptitude'
 else
     apt_pref='apt-get'
 fi
 
 # Use sudo by default if it's installed
-if [[ -e $( which sudo 2>&1 ) ]]; then
+if [[ -e $( which -p sudo 2>&1 ) ]]; then
     use_sudo=1
 fi
 

From decf9cdb3143fde3d2e608c008e61ba9838c0deb Mon Sep 17 00:00:00 2001
From: Gunther Konig <gunther.s.konig@gmail.com>
Date: Fri, 21 Jun 2013 12:21:25 +0300
Subject: [PATCH 31/46] autocomplete required packages as second argumet

---
 plugins/composer/composer.plugin.zsh | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/plugins/composer/composer.plugin.zsh b/plugins/composer/composer.plugin.zsh
index 2d1557541..37dd282e4 100644
--- a/plugins/composer/composer.plugin.zsh
+++ b/plugins/composer/composer.plugin.zsh
@@ -10,14 +10,36 @@ _composer_get_command_list () {
 	composer --no-ansi | sed "1,/Available commands/d" | awk '/^  [a-z]+/ { print $1 }'
 }
 
+_composer_get_required_list () {
+    composer show -s --no-ansi | sed '1,/requires/d' | awk 'NF > 0 && !/^requires \(dev\)/{ print $1 }'
+}
+
 _composer () {
+  local curcontext="$curcontext" state line
+  typeset -A opt_args
+  _arguments \
+    '1: :->command'\
+    '*: :->args'
   if [ -f composer.json ]; then
-    compadd `_composer_get_command_list`
+    case $state in
+      command)
+        compadd `_composer_get_command_list`
+        ;;
+      *)
+        compadd `_composer_get_required_list`
+        ;;
+    esac
   else
     compadd create-project init search selfupdate show
   fi
 }
 
+_composer_required () {
+  if [ -f composer.json ]; then
+    compadd `_composer_get_required_list`
+  fi
+}
+
 compdef _composer composer
 
 # Aliases

From 85c43f8a894b7aa521a68d096e39587855d2d35f Mon Sep 17 00:00:00 2001
From: Gunther Konig <gunther.s.konig@gmail.com>
Date: Fri, 21 Jun 2013 12:38:17 +0300
Subject: [PATCH 32/46] remove unused function

---
 plugins/composer/composer.plugin.zsh | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/plugins/composer/composer.plugin.zsh b/plugins/composer/composer.plugin.zsh
index 37dd282e4..9975aaca4 100644
--- a/plugins/composer/composer.plugin.zsh
+++ b/plugins/composer/composer.plugin.zsh
@@ -34,12 +34,6 @@ _composer () {
   fi
 }
 
-_composer_required () {
-  if [ -f composer.json ]; then
-    compadd `_composer_get_required_list`
-  fi
-}
-
 compdef _composer composer
 
 # Aliases

From bc65443734ec96ddc8da61c022d630fa8303765a Mon Sep 17 00:00:00 2001
From: Andrew Schwartzmeyer <andrew.schwartzmeyer@gmail.com>
Date: Sat, 22 Jun 2013 15:58:45 -0700
Subject: [PATCH 33/46] Adding support for iTerm2 tmux integration via option
 '-CC'

---
 plugins/tmux/tmux.plugin.zsh | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/plugins/tmux/tmux.plugin.zsh b/plugins/tmux/tmux.plugin.zsh
index 465f5b053..5bd946f08 100644
--- a/plugins/tmux/tmux.plugin.zsh
+++ b/plugins/tmux/tmux.plugin.zsh
@@ -14,6 +14,8 @@ if which tmux &> /dev/null
 	[[ -n "$ZSH_TMUX_AUTOQUIT" ]] || ZSH_TMUX_AUTOQUIT=$ZSH_TMUX_AUTOSTART
 	# Set term to screen or screen-256color based on current terminal support
 	[[ -n "$ZSH_TMUX_FIXTERM" ]] || ZSH_TMUX_FIXTERM=true
+	# Set '-CC' option for iTerm2 tmux integration
+	[[ -n "$$ZSH_TMUX_ITERM2" ]] || ZSH_TMUX_ITERM2=false
 	# The TERM to use for non-256 color terminals.
 	# Tmux states this should be screen, but you may need to change it on
 	# systems without the proper terminfo
@@ -55,11 +57,11 @@ if which tmux &> /dev/null
 		# Try to connect to an existing session.
 		elif [[ "$ZSH_TMUX_AUTOCONNECT" == "true" ]]
 		then
-			\tmux attach || \tmux `[[ "$ZSH_TMUX_FIXTERM" == "true" ]] && echo '-f '$_ZSH_TMUX_FIXED_CONFIG`  new-session
+			\tmux `[[ "$ZSH_TMUX_ITERM2" == "true" ]] && echo '-CC '` attach || \tmux `[[ "$ZSH_TMUX_ITERM2" == "true" ]] && echo '-CC '` `[[ "$ZSH_TMUX_FIXTERM" == "true" ]] && echo '-f '$_ZSH_TMUX_FIXED_CONFIG` new-session
 			[[ "$ZSH_TMUX_AUTOQUIT" == "true" ]] && exit
 		# Just run tmux, fixing the TERM variable if requested.
 		else
-			\tmux `[[ "$ZSH_TMUX_FIXTERM" == "true" ]] && echo '-f '$_ZSH_TMUX_FIXED_CONFIG`
+			\tmux `[[ "$ZSH_TMUX_ITERM2" == "true" ]] && echo '-CC '` `[[ "$ZSH_TMUX_FIXTERM" == "true" ]] && echo '-f '$_ZSH_TMUX_FIXED_CONFIG`
 			[[ "$ZSH_TMUX_AUTOQUIT" == "true" ]] && exit
 		fi
 	}

From 55f7990607ae413ae9f1edacf94f9c6369456983 Mon Sep 17 00:00:00 2001
From: Andrew Schwartzmeyer <andrew.schwartzmeyer@gmail.com>
Date: Sat, 22 Jun 2013 17:43:42 -0700
Subject: [PATCH 34/46] Not loading home tmux confs when iTerm2 tmux
 integration is enabled

---
 plugins/tmux/tmux.plugin.zsh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/plugins/tmux/tmux.plugin.zsh b/plugins/tmux/tmux.plugin.zsh
index 5bd946f08..049ceb30f 100644
--- a/plugins/tmux/tmux.plugin.zsh
+++ b/plugins/tmux/tmux.plugin.zsh
@@ -38,7 +38,7 @@ if which tmux &> /dev/null
 	fi
 
 	# Set the correct local config file to use.
-	if [[ -f $HOME/.tmux.conf || -h $HOME/.tmux.conf ]]
+    if [[ "$ZSH_TMUX_ITERM2" == "false" ]] && (( [[ -f $HOME/.tmux.conf ]] || -h $HOME/.tmux.conf ]] ))
 	then
 		#use this when they have a ~/.tmux.conf
 		export _ZSH_TMUX_FIXED_CONFIG="$zsh_tmux_plugin_path/tmux.extra.conf"

From 711e96b1a277b1d5b9771c2eec19fa34f796839b Mon Sep 17 00:00:00 2001
From: Olaf Conradi <olaf@conradi.org>
Date: Sun, 23 Jun 2013 11:34:03 +0200
Subject: [PATCH 35/46] Prevent starting multiple gpg-agents

Don't just overwrite the environment. First check for a running agent (an
x-session might have one running). If no agent is found, source the
environment and check again using those settings. If again no agent is
found, start a new instance.
---
 plugins/gpg-agent/gpg-agent.plugin.zsh | 26 +++++++++++++++++---------
 1 file changed, 17 insertions(+), 9 deletions(-)

diff --git a/plugins/gpg-agent/gpg-agent.plugin.zsh b/plugins/gpg-agent/gpg-agent.plugin.zsh
index 109af44c8..b82711872 100644
--- a/plugins/gpg-agent/gpg-agent.plugin.zsh
+++ b/plugins/gpg-agent/gpg-agent.plugin.zsh
@@ -14,16 +14,24 @@ function start_agent_withssh {
     export SSH_AGENT_PID
 }
 
-# source settings of old agent, if applicable
-if [ -f "${GPG_ENV}" ]; then
-  . ${GPG_ENV} > /dev/null
-fi
+# check if another agent is running
+if ! gpg-connect-agent --quiet /bye > /dev/null 2> /dev/null; then
+    # source settings of old agent, if applicable
+    if [ -f "${GPG_ENV}" ]; then
+        . ${GPG_ENV} > /dev/null
+    fi
 
-# check for existing ssh-agent
-if ssh-add -l > /dev/null 2> /dev/null; then
-    start_agent_nossh;
-else
-    start_agent_withssh;
+    # check again if another agent is running using the newly sources settings
+    if ! gpg-connect-agent --quiet /bye > /dev/null 2> /dev/null; then
+        # check for existing ssh-agent
+        if ssh-add -l > /dev/null 2> /dev/null; then
+            # ssh-agent running, start gpg-agent without ssh support
+            start_agent_nossh;
+        else
+            # otherwise start gpg-agent with ssh support
+            start_agent_withssh;
+        fi
+    fi
 fi
 
 GPG_TTY=$(tty)

From 64fc125eba09f48f17184cde4403267c1cb16999 Mon Sep 17 00:00:00 2001
From: Olaf Conradi <olaf@conradi.org>
Date: Sun, 23 Jun 2013 12:25:35 +0200
Subject: [PATCH 36/46] Typo

---
 plugins/gpg-agent/gpg-agent.plugin.zsh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/plugins/gpg-agent/gpg-agent.plugin.zsh b/plugins/gpg-agent/gpg-agent.plugin.zsh
index b82711872..4071334cb 100644
--- a/plugins/gpg-agent/gpg-agent.plugin.zsh
+++ b/plugins/gpg-agent/gpg-agent.plugin.zsh
@@ -21,7 +21,7 @@ if ! gpg-connect-agent --quiet /bye > /dev/null 2> /dev/null; then
         . ${GPG_ENV} > /dev/null
     fi
 
-    # check again if another agent is running using the newly sources settings
+    # check again if another agent is running using the newly sourced settings
     if ! gpg-connect-agent --quiet /bye > /dev/null 2> /dev/null; then
         # check for existing ssh-agent
         if ssh-add -l > /dev/null 2> /dev/null; then

From 87a1d8a02df5413b4e718eb0fb486535f0aae8e3 Mon Sep 17 00:00:00 2001
From: UncleBill <billbill290@gmail.com>
Date: Tue, 25 Jun 2013 12:08:02 +0800
Subject: [PATCH 37/46] git-pull add --rebase option

---
 tools/upgrade.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/upgrade.sh b/tools/upgrade.sh
index 3624a88e5..e04fc672f 100644
--- a/tools/upgrade.sh
+++ b/tools/upgrade.sh
@@ -1,6 +1,6 @@
 printf '\033[0;34m%s\033[0m\n' "Upgrading Oh My Zsh"
 cd "$ZSH"
-if git pull origin master
+if git pull --rebase origin master
 then
   printf '\033[0;32m%s\033[0m\n' '         __                                     __   '
   printf '\033[0;32m%s\033[0m\n' '  ____  / /_     ____ ___  __  __   ____  _____/ /_  '

From ebfc9042ed2121c1d330a6767736fbf7bff2e369 Mon Sep 17 00:00:00 2001
From: Gong Hao <gonghao@ghsky.com>
Date: Tue, 25 Jun 2013 12:26:42 +0800
Subject: [PATCH 38/46] add virtualenv prompt support for agnoster theme

---
 themes/agnoster.zsh-theme | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/themes/agnoster.zsh-theme b/themes/agnoster.zsh-theme
index e65293858..c7a59ad0d 100644
--- a/themes/agnoster.zsh-theme
+++ b/themes/agnoster.zsh-theme
@@ -134,6 +134,14 @@ prompt_dir() {
   prompt_segment blue black '%~'
 }
 
+# Virtualenv: current working virtualenv
+prompt_virtualenv() {
+  local virtualenv_path="$VIRTUAL_ENV"
+  if [[ -n $virtualenv_path ]]; then
+    prompt_segment blue black "(`basename $virtualenv_path`)"
+  fi
+}
+
 # Status:
 # - was there an error
 # - am I root
@@ -152,6 +160,7 @@ prompt_status() {
 build_prompt() {
   RETVAL=$?
   prompt_status
+  prompt_virtualenv
   prompt_context
   prompt_dir
   prompt_git

From a18fa835503acb44ac656c5bb592873e66bd40f1 Mon Sep 17 00:00:00 2001
From: dongweiming <ciici123@gmail.com>
Date: Tue, 25 Jun 2013 21:12:01 +0800
Subject: [PATCH 39/46] Add celery completion

---
 plugins/celery/_celery | 129 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 129 insertions(+)
 create mode 100644 plugins/celery/_celery

diff --git a/plugins/celery/_celery b/plugins/celery/_celery
new file mode 100644
index 000000000..63af9fad5
--- /dev/null
+++ b/plugins/celery/_celery
@@ -0,0 +1,129 @@
+#compdef celery
+#autoload
+
+#celery zsh  completion
+
+_celery () {
+local -a _1st_arguments ifargs dopts controlargs
+
+typeset -A opt_args
+
+_1st_arguments=('worker' 'events' 'beat' 'shell' 'multi' 'amqp' 'status' 'inspect' \
+                'control' 'purge' 'list' 'migrate' 'call' 'result' 'report')
+ifargs=('--app=' '--broker=' '--loader=' '--config=' '--version')
+dopts=('--detach' '--umask=' '--gid=' '--uid=' '--pidfile=' '--logfile=' '--loglevel=')
+controlargs=('--timeout' '--destination')
+_arguments \
+        '(-A --app=)'{-A,--app}'[app instance to use (e.g. module.attr_name):APP]' \
+        '(-b --broker=)'{-b,--broker}'[url to broker.  default is "amqp://guest@localhost//":BROKER]' \
+        '(--loader)--loader[name of custom loader class to use.:LOADER]' \
+        '(--config)--config[Name of the configuration module:CONFIG]' \
+        '(--workdir)--workdir[Optional directory to change to after detaching.:WORKING_DIRECTORY]' \
+        '(-q --quiet)'{-q,--quiet}'[Don"t show as much output.]' \
+        '(-C --no-color)'{-C,--no-color}'[Don"t display colors.]' \
+        '(--version)--version[show program"s version number and exit]' \
+        '(- : *)'{-h,--help}'[show this help message and exit]' \
+        '*:: :->subcmds' && return 0
+
+if (( CURRENT == 1 )); then
+    _describe -t commands "celery subcommand" _1st_arguments
+    return
+fi
+
+case "$words[1]" in
+    worker)
+    _arguments \
+    '(-C --concurrency=)'{-C,--concurrency=}'[Number of child processes processing the queue. The default is the number of CPUs.]' \
+    '(--pool)--pool=:::(processes eventlet gevent threads solo)' \
+    '(--purge --discard)'{--discard,--purge}'[Purges all waiting tasks before the daemon is started.]' \
+    '(-f --logfile=)'{-f,--logfile=}'[Path to log file. If no logfile is specified, stderr is used.]' \
+    '(--loglevel=)--loglevel=:::(critical error warning info debug)' \
+    '(-N --hostname=)'{-N,--hostname=}'[Set custom hostname, e.g. "foo.example.com".]' \
+    '(-B --beat)'{-B,--beat}'[Also run the celerybeat periodic task scheduler.]' \
+    '(-s --schedule=)'{-s,--schedule=}'[Path to the schedule database if running with the -B option. Defaults to celerybeat-schedule.]' \
+    '(-S --statedb=)'{-S,--statedb=}'[Path to the state database.Default: None]' \
+    '(-E --events)'{-E,--events}'[Send events that can be captured by monitors like celeryev, celerymon, and others.]' \
+    '(--time-limit=)--time-limit=[nables a hard time limit (in seconds int/float) for tasks]' \
+    '(--soft-time-limit=)--soft-time-limit=[Enables a soft time limit (in seconds int/float) for tasks]' \
+    '(--maxtasksperchild=)--maxtasksperchild=[Maximum number of tasks a pool worker can execute before it"s terminated and replaced by a new worker.]' \
+    '(-Q --queues=)'{-Q,--queues=}'[List of queues to enable for this worker, separated by comma. By default all configured queues are enabled.]' \
+    '(-I --include=)'{-I,--include=}'[Comma separated list of additional modules to import.]' \
+    '(--pidfile=)--pidfile=[Optional file used to store the process pid.]' \
+    '(--autoscale=)--autoscale=[Enable autoscaling by providing max_concurrency, min_concurrency.]' \
+    '(--autoreload)--autoreload[Enable autoreloading.]' \
+    '(--no-execv)--no-execv[Don"t do execv after multiprocessing child fork.]'
+    compadd -a ifargs
+    ;;
+    inspect)
+    _values -s \
+    'active[dump active tasks (being processed)]' \
+    'active_queues[dump queues being consumed from]' \
+    'ping[ping worker(s)]' \
+    'registered[dump of registered tasks]' \
+    'report[get bugreport info]' \
+    'reserved[dump reserved tasks (waiting to be processed)]' \
+    'revoked[dump of revoked task ids]' \
+    'scheduled[dump scheduled tasks (eta/countdown/retry)]' \
+    'stats[dump worker statistics]'
+    compadd -a controlargs ifargs
+    ;;
+    control)
+    _values -s \
+    'add_consumer[tell worker(s) to start consuming a queue]' \
+    'autoscale[change autoscale settings]' \
+    'cancel_consumer[tell worker(s) to stop consuming a queue]' \
+    'disable_events[tell worker(s) to disable events]' \
+    'enable_events[tell worker(s) to enable events]' \
+    'pool_grow[start more pool processes]' \
+    'pool_shrink[use less pool processes]' \
+    'rate_limit[tell worker(s) to modify the rate limit for a task type]' \
+    'time_limit[tell worker(s) to modify the time limit for a task type.]'
+    compadd -a controlargs ifargs
+    ;;
+    multi)
+    _values -s \
+    '--nosplash[Don"t display program info.]' \
+    '--verbose[Show more output.]' \
+    '--no-color[Don"t display colors.]' \
+    '--quiet[Don"t show as much output.]' \
+    'start' 'restart' 'stopwait' 'stop' 'show' \
+    'names' 'expand' 'get' 'kill'
+    compadd -a ifargs
+    ;;
+    amqp)
+    _values -s \
+    'queue.declare' 'queue.purge' 'exchange.delete' 'basic.publish' \
+    'exchange.declare' 'queue.delete' 'queue.bind' 'basic.get'
+    ;;
+    list)
+    _values -s, 'bindings'
+    ;;
+    shell)
+    _values -s \
+    '--ipython[force iPython.]' \
+    '--bpython[force bpython.]' \
+    '--python[force default Python shell.]' \
+    '--without-tasks[don"t add tasks to locals.]' \
+    '--eventlet[use eventlet.]' \
+    '--gevent[use gevent.]'
+    compadd -a ifargs
+    ;;
+    beat)
+    _arguments \
+    '(-s --schedule=)'{-s,--schedule=}'[Path to the schedule database. Defaults to celerybeat-schedule.]' \
+    '(-S --scheduler=)'{-S,--scheduler=}'[Scheduler class to use. Default is celery.beat.PersistentScheduler.]' \
+    '(--max-interval)--max-interval[]'
+    compadd -a dopts fargs
+    ;;
+    events)
+    _arguments \
+    '(-d --dump)'{-d,--dump}'[Dump events to stdout.]' \
+    '(-c --camera=)'{-c,--camera=}'[Take snapshots of events using this camera.]' \
+    '(-F --frequency=)'{-F,--frequency=}'[Camera: Shutter frequency.  Default is every 1.0 seconds.]' \
+    '(-r --maxrate=)'{-r,--maxrate=}'[Camera: Optional shutter rate limit (e.g. 10/m).]'
+    compadd -a dopts fargs
+    ;;
+    *)
+        ;;
+    esac
+}

From f25e2d2856281698914f21f7d22f84ae7e421f39 Mon Sep 17 00:00:00 2001
From: Chris Krycho <github@chriskrycho.com>
Date: Tue, 25 Jun 2013 15:52:26 -0300
Subject: [PATCH 40/46] Add more capable hg incoming and outgoing count
 handling

The original hgic and hgoc aliases worked well for the default path, but attempting to call them with a different path failed. I created functions to handle them instead.
---
 plugins/mercurial/mercurial.plugin.zsh | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/plugins/mercurial/mercurial.plugin.zsh b/plugins/mercurial/mercurial.plugin.zsh
index de036e44d..c18aa726c 100644
--- a/plugins/mercurial/mercurial.plugin.zsh
+++ b/plugins/mercurial/mercurial.plugin.zsh
@@ -8,11 +8,9 @@ alias hgd='hg diff'
 alias hged='hg diffmerge'
 # pull and update
 alias hgi='hg incoming'
-alias hgic='hg incoming | grep "changeset" | wc -l'
 alias hgl='hg pull -u'
 alias hglr='hg pull --rebase'
 alias hgo='hg outgoing'
-alias hgoc='hg outgoing | grep 'changeset' | wc -l'
 alias hgp='hg push'
 alias hgs='hg status'
 # this is the 'git commit --amend' equivalent
@@ -55,3 +53,11 @@ function hg_dirty_choose {
 function hg_dirty {
   hg_dirty_choose $ZSH_THEME_HG_PROMPT_DIRTY $ZSH_THEME_HG_PROMPT_CLEAN
 }
+
+function hgic() {
+    hg incoming "$@" | grep "changeset" | wc -l
+}
+
+function hgoc() {
+    hg outgoing "$@" | grep "changeset" | wc -l
+}

From 10bd036dfe466d82f90f10edaa83dc67a90b8571 Mon Sep 17 00:00:00 2001
From: Tobias Preuss <tobias.preuss@googlemail.com>
Date: Fri, 26 Apr 2013 11:02:18 +0200
Subject: [PATCH 41/46] Add autocompletion for Rails3.

+ Originally published by Christopher Chow.
+ Source:
https://github.com/robbyrussell/oh-my-zsh/blob/30620d463850c17f86e7a56fbf6a8b5e793a4e07/plugins/rails3/_rails3
  Commit: 30620d463850c17f86e7a56fbf6a8b5e793a4e07
---
 plugins/rails3/_rails3 | 56 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 56 insertions(+)
 create mode 100644 plugins/rails3/_rails3

diff --git a/plugins/rails3/_rails3 b/plugins/rails3/_rails3
new file mode 100644
index 000000000..97915e68b
--- /dev/null
+++ b/plugins/rails3/_rails3
@@ -0,0 +1,56 @@
+#compdef rails
+#autoload
+
+# rails 3 zsh completion, based on homebrew completion
+# Extracted from https://github.com/robbyrussell/oh-my-zsh/blob/30620d463850c17f86e7a56fbf6a8b5e793a4e07/plugins/rails3/_rails3
+# Published by Christopher Chow
+
+local -a _1st_arguments
+_1st_arguments=(
+    'generate:Generate new code (short-cut alias: "g")'
+    'console:Start the Rails console (short-cut alias: "c")'
+    'server:Start the Rails server (short-cut alias: "s")'
+    'dbconsole:Start a console for the database specified in config/database.yml (short-cut alias: "db")'
+    'new:Create a new Rails application. "rails new my_app" creates a new application called MyApp in "./my_app"'
+    'application:Generate the Rails application code'
+    'destroy:Undo code generated with "generate"'
+    'benchmarker:See how fast a piece of code runs'
+    'profiler:Get profile information from a piece of code'
+    'plugin:Install a plugin'
+)
+
+_rails_generate_arguments() {
+    generate_arguments=(
+        controller
+        generator
+        helper
+        integration_test
+        mailer
+        migration
+        model
+        observer
+        performance_test
+        plugin
+        resource
+        scaffold
+        scaffold_controller
+        session_migration
+        stylesheets
+    )
+}
+
+_arguments \
+    '(--version)--version[show version]' \
+    '(--help)--help[show help]' \
+    '*:: :->subcmds' && return 0
+
+if (( CURRENT == 1 )); then
+  _describe -t commands "rails subcommand" _1st_arguments
+  return
+fi
+
+case "$words[1]" in
+  generate)
+    _rails_generate_arguments
+    _wanted generate_arguments expl 'all generate' compadd -a generate_arguments ;;
+esac

From c51ef9dce6a600976aa3d0a3d733bb99c477959b Mon Sep 17 00:00:00 2001
From: Okura Masafumi <masafumi.o1988@gmail.com>
Date: Thu, 27 Jun 2013 22:28:14 +0900
Subject: [PATCH 42/46] Change duplicated alias name

---
 plugins/git/git.plugin.zsh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/plugins/git/git.plugin.zsh b/plugins/git/git.plugin.zsh
index 851fdf24b..2ecc74eb6 100644
--- a/plugins/git/git.plugin.zsh
+++ b/plugins/git/git.plugin.zsh
@@ -78,7 +78,7 @@ compdef _git gm=git-mergetool
 alias gg='git gui citool'
 alias gga='git gui citool --amend'
 alias gk='gitk --all --branches'
-alias gss='git stash show --text'
+alias gsts='git stash show --text'
 
 # Will cd into the top of the current repository
 # or submodule.

From 644728bd225c70068e32501c81a95713d04b8ff1 Mon Sep 17 00:00:00 2001
From: Brandon Black <brandonmblack@gmail.com>
Date: Thu, 27 Jun 2013 11:38:04 -0700
Subject: [PATCH 43/46] rvm plugin: update to ruby version helpers and
 rvm-update

* the current patch levels hard-coded here are pretty dated. I updated the ruby version helpers to use loose ruby version matchers so they don't continually need to be updated with every new patch level release.

* `rvm get head` actually performs an `rvm reload` in the post install. there's no need to do again here in rvm-update so I've removed that.
---
 plugins/rvm/rvm.plugin.zsh | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/plugins/rvm/rvm.plugin.zsh b/plugins/rvm/rvm.plugin.zsh
index cdd0a7847..e6ad6450d 100644
--- a/plugins/rvm/rvm.plugin.zsh
+++ b/plugins/rvm/rvm.plugin.zsh
@@ -3,9 +3,9 @@ fpath=($rvm_path/scripts/zsh/Completion $fpath)
 alias rubies='rvm list rubies'
 alias gemsets='rvm gemset list'
 
-local ruby18='ruby-1.8.7-p371'
-local ruby19='ruby-1.9.3-p392'
-local ruby20='ruby-2.0.0-p0'
+local ruby18='ruby-1.8.7'
+local ruby19='ruby-1.9.3'
+local ruby20='ruby-2.0.0'
 
 function rb18 {
 	if [ -z "$1" ]; then
@@ -42,7 +42,6 @@ compdef _rb20 rb20
 
 function rvm-update {
 	rvm get head
-	rvm reload # TODO: Reload rvm completion?
 }
 
 # TODO: Make this usable w/o rvm.

From 012afe238159d87701fde176309d8a1a5cf8ea41 Mon Sep 17 00:00:00 2001
From: dongweiming <ciici123@hotmail.com>
Date: Fri, 28 Jun 2013 11:47:03 +0800
Subject: [PATCH 44/46] The current version of bower is completely unavailable,
 plugin depth modification

---
 plugins/bower/bower.plugin.zsh | 91 +++++++++++++++++++++++++---------
 1 file changed, 67 insertions(+), 24 deletions(-)

diff --git a/plugins/bower/bower.plugin.zsh b/plugins/bower/bower.plugin.zsh
index ed9c04840..68a67a3cc 100644
--- a/plugins/bower/bower.plugin.zsh
+++ b/plugins/bower/bower.plugin.zsh
@@ -2,37 +2,80 @@ alias bi="bower install"
 alias bl="bower list"
 alias bs="bower search"
 
-bower_package_list=''
-
+_bower_installed_packages () {
+    bower_package_list=$(bower ls --no-color 2>/dev/null| awk 'NR>3{print p}{p=$0}'| cut -d ' ' -f 2|sed 's/#.*//')
+}
 _bower ()
 {
-	local curcontext="$curcontext" state line
-	typeset -A opt_args
+    local -a _1st_arguments _no_color _dopts _save_dev _force_lastest _production
+    local expl
+    typeset -A opt_args
 
-	_arguments -C \
-		':command:->command' \
-		'*::options:->options'
+    _no_color=('--no-color[Do not print colors (available in all commands)]')
 
-	case $state in
-		(command)
+    _dopts=(
+        '(--save)--save[Save installed packages into the project"s bower.json dependencies]'
+        '(--force)--force[Force fetching remote resources even if a local copy exists on disk]'
+    )
 
-			local -a subcommands
-			subcommands=(${=$(bower help | grep help | sed -e 's/,//g')})
-			_describe -t commands 'bower' subcommands
-		;;
+    _save_dev=('(--save-dev)--save-dev[Save installed packages into the project"s bower.json devDependencies]')
 
-		(options)
-			case $line[1] in
+    _force_lastest=('(--force-latest)--force-latest[Force latest version on conflict]')
+
+    _production=('(--production)--production[Do not install project devDependencies]')
+
+    _1st_arguments=(
+    'cache-clean:Clean the Bower cache, or the specified package caches' \
+    'help:Display help information about Bower' \
+    'info:Version info and description of a particular package' \
+    'init:Interactively create a bower.json file' \
+    'install:Install a package locally' \
+    'link:Symlink a package folder' \
+    'lookup:Look up a package URL by name' \
+    'register:Register a package' \
+    'search:Search for a package by name' \
+    'uninstall:Remove a package' \
+    'update:Update a package' \
+    {ls,list}:'[List all installed packages]'
+    )
+    _arguments \
+    $_no_color \
+    '*:: :->subcmds' && return 0
+
+    if (( CURRENT == 1 )); then
+        _describe -t commands "bower subcommand" _1st_arguments
+        return
+    fi
+
+    case "$words[1]" in
+        install)
+        _arguments \
+        $_dopts \
+        $_save_dev \
+        $_force_lastest \
+        $_no_color \
+        $_production
+        ;;
+        update)
+        _arguments \
+        $_dopts \
+        $_no_color \
+        $_force_lastest
+        _bower_installed_packages
+        compadd "$@" $(echo $bower_package_list)
+        ;;
+        uninstall)
+        _arguments \
+        $_no_color \
+        $_dopts
+        _bower_installed_packages
+        compadd "$@" $(echo $bower_package_list)
+        ;;
+        *)
+        $_no_color \
+        ;;
+    esac
 
-				(install)
-				    if [ -z "$bower_package_list" ];then
-                    bower_package_list=$(bower search | awk 'NR > 2' | cut -d '-' -f 2 | cut -d ' ' -f 2 | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g")
-                fi
-				    compadd "$@" $(echo $bower_package_list)
-                ;;
-			esac
-		;;
-	esac
 }
 
 compdef _bower bower

From 4fe4db51285af30f1195a817dadcf5d8b3b93e79 Mon Sep 17 00:00:00 2001
From: dongweiming <ciici123@hotmail.com>
Date: Fri, 28 Jun 2013 15:08:26 +0800
Subject: [PATCH 45/46] Update coffee completion

---
 plugins/coffee/_coffee | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/plugins/coffee/_coffee b/plugins/coffee/_coffee
index 5c8eb9a08..10b6b8164 100644
--- a/plugins/coffee/_coffee
+++ b/plugins/coffee/_coffee
@@ -35,27 +35,37 @@
 # -------
 #
 #  * Mario Fernandez (https://github.com/sirech)
+#  * Dong Weiming (https://github.com/dongweiming)
 #
 # ------------------------------------------------------------------------------
 
-local curcontext="$curcontext" state line ret=1
+local curcontext="$curcontext" state line ret=1 version opts first second third
 typeset -A opt_args
+version=(${(f)"$(_call_program version $words[1] --version)"})
+version=${${(z)${version[1]}}[3]}
+first=$(echo $version|cut -d '.' -f 1)
+second=$(echo $version|cut -d '.' -f 2)
+third=$(echo $version|cut -d '.' -f 3)
+if (( $first < 2 )) &&  (( $second < 7 )) && (( $third < 3 ));then
+  opts+=('(-l --lint)'{-l,--lint}'[pipe the compiled JavaScript through JavaScript Lint]'
+         '(-r --require)'{-r,--require}'[require a library before executing your script]:library')
+fi
+
 
 _arguments -C \
   '(- *)'{-h,--help}'[display this help message]' \
   '(- *)'{-v,--version}'[display the version number]' \
+  $opts \
   '(-b --bare)'{-b,--bare}'[compile without a top-level function wrapper]' \
   '(-e --eval)'{-e,--eval}'[pass a string from the command line as input]:Inline Script' \
   '(-i --interactive)'{-i,--interactive}'[run an interactive CoffeeScript REPL]' \
   '(-j --join)'{-j,--join}'[concatenate the source CoffeeScript before compiling]:Destination JS file:_files -g "*.js"' \
-  '(-l --lint)'{-l,--lint}'[pipe the compiled JavaScript through JavaScript Lint]' \
   '(--nodejs)--nodejs[pass options directly to the "node" binary]' \
   '(-c --compile)'{-c,--compile}'[compile to JavaScript and save as .js files]' \
   '(-o --output)'{-o,--output}'[set the output directory for compiled JavaScript]:Output Directory:_files -/' \
   '(-n -t -p)'{-n,--nodes}'[print out the parse tree that the parser produces]' \
   '(-n -t -p)'{-p,--print}'[print out the compiled JavaScript]' \
   '(-n -t -p)'{-t,--tokens}'[print out the tokens that the lexer/rewriter produce]' \
-  '(-r --require)'{-r,--require}'[require a library before executing your script]:library' \
   '(-s --stdio)'{-s,--stdio}'[listen for and compile scripts over stdio]' \
   '(-w --watch)'{-w,--watch}'[watch scripts for changes and rerun commands]' \
   '*:script or directory:_files' && ret=0

From 9cec52c4495cc3e439b637ffd9dcdf7cea54a288 Mon Sep 17 00:00:00 2001
From: Matei Trusca <matei.trusca@sellerengine.com>
Date: Tue, 2 Jul 2013 11:29:25 +0300
Subject: [PATCH 46/46] fixed typo in tmux plugin

---
 plugins/tmux/tmux.plugin.zsh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/plugins/tmux/tmux.plugin.zsh b/plugins/tmux/tmux.plugin.zsh
index 049ceb30f..3ecc2ac69 100644
--- a/plugins/tmux/tmux.plugin.zsh
+++ b/plugins/tmux/tmux.plugin.zsh
@@ -15,7 +15,7 @@ if which tmux &> /dev/null
 	# Set term to screen or screen-256color based on current terminal support
 	[[ -n "$ZSH_TMUX_FIXTERM" ]] || ZSH_TMUX_FIXTERM=true
 	# Set '-CC' option for iTerm2 tmux integration
-	[[ -n "$$ZSH_TMUX_ITERM2" ]] || ZSH_TMUX_ITERM2=false
+	[[ -n "$ZSH_TMUX_ITERM2" ]] || ZSH_TMUX_ITERM2=false
 	# The TERM to use for non-256 color terminals.
 	# Tmux states this should be screen, but you may need to change it on
 	# systems without the proper terminfo