summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'plugins')
-rw-r--r--plugins/autojump/autojump.plugin.zsh2
-rw-r--r--plugins/battery/battery.plugin.zsh10
-rw-r--r--plugins/brew/_brew4
-rw-r--r--plugins/bundler/bundler.plugin.zsh23
-rw-r--r--plugins/chruby/chruby.plugin.zsh99
-rw-r--r--plugins/docker/README.md19
-rw-r--r--plugins/docker/_docker290
-rw-r--r--plugins/extract/extract.plugin.zsh2
-rw-r--r--plugins/forklift/forklift.plugin.zsh35
-rw-r--r--plugins/git-flow/git-flow.plugin.zsh6
-rw-r--r--plugins/git-prompt/git-prompt.plugin.zsh60
-rw-r--r--plugins/git-prompt/gitstatus.py68
-rw-r--r--plugins/git/_git-branch21
-rw-r--r--plugins/git/git.plugin.zsh31
-rw-r--r--plugins/gitignore/gitignore.plugin.zsh12
-rw-r--r--plugins/gpg-agent/gpg-agent.plugin.zsh3
-rw-r--r--plugins/heroku/_heroku6
-rw-r--r--plugins/jira/jira.plugin.zsh2
-rw-r--r--plugins/jump/jump.plugin.zsh58
-rw-r--r--plugins/mercurial/mercurial.plugin.zsh1
-rw-r--r--plugins/mosh/mosh.plugin.zsh2
-rw-r--r--plugins/mvn/mvn.plugin.zsh12
-rw-r--r--plugins/node/node.plugin.zsh10
-rw-r--r--plugins/nvm/_nvm26
-rw-r--r--plugins/nvm/nvm.plugin.zsh3
-rw-r--r--plugins/osx/osx.plugin.zsh34
-rw-r--r--plugins/pass/_pass2
-rw-r--r--plugins/pip/_pip11
-rw-r--r--plugins/pip/pip.plugin.zsh78
-rw-r--r--plugins/pod/_pod389
-rw-r--r--plugins/pyenv/pyenv.plugin.zsh31
-rw-r--r--plugins/python/python.plugin.zsh1
-rw-r--r--plugins/rails/_rails (renamed from plugins/rails3/_rails3)17
-rw-r--r--plugins/rails/rails.plugin.zsh68
-rw-r--r--plugins/rails3/rails3.plugin.zsh32
-rw-r--r--plugins/rails4/rails4.plugin.zsh36
-rw-r--r--plugins/rvm/rvm.plugin.zsh2
-rw-r--r--plugins/sfffe/sfffe.plugin.zsh28
-rw-r--r--plugins/ssh-agent/ssh-agent.plugin.zsh2
-rwxr-xr-xplugins/sublime/sublime.plugin.zsh37
-rw-r--r--plugins/suse/suse.plugin.zsh68
-rw-r--r--plugins/terminalapp/terminalapp.plugin.zsh2
-rw-r--r--plugins/themes/themes.plugin.zsh2
-rw-r--r--plugins/tmux/tmux.plugin.zsh10
-rwxr-xr-xplugins/wd2/wd2/wd.plugin.zsh9
-rwxr-xr-xplugins/wd2/wd2/wd.sh201
-rw-r--r--plugins/web-search/web-search.plugin.zsh21
-rw-r--r--plugins/z/Makefile4
-rw-r--r--plugins/z/README135
-rw-r--r--plugins/z/z.1155
-rw-r--r--plugins/z/z.plugin.zsh6
-rw-r--r--plugins/z/z.sh228
-rw-r--r--plugins/zeus/README.md10
-rw-r--r--plugins/zeus/zeus.plugin.zsh14
54 files changed, 2306 insertions, 132 deletions
diff --git a/plugins/autojump/autojump.plugin.zsh b/plugins/autojump/autojump.plugin.zsh
index f856f2f01..0aa14959d 100644
--- a/plugins/autojump/autojump.plugin.zsh
+++ b/plugins/autojump/autojump.plugin.zsh
@@ -5,6 +5,8 @@ if [ $commands[autojump] ]; then # check if autojump is installed
. /etc/profile.d/autojump.zsh
elif [ -f /etc/profile.d/autojump.sh ]; then # gentoo installation
. /etc/profile.d/autojump.sh
+ elif [ -f /usr/local/share/autojump/autojump.zsh ]; then # freebsd installation
+ . /usr/local/share/autojump/autojump.zsh
elif [ -f $HOME/.autojump/etc/profile.d/autojump.zsh ]; then # manual user-local installation
. $HOME/.autojump/etc/profile.d/autojump.zsh
elif [ -f /opt/local/etc/profile.d/autojump.zsh ]; then # mac os x with ports
diff --git a/plugins/battery/battery.plugin.zsh b/plugins/battery/battery.plugin.zsh
index 66bf46d13..9f053383a 100644
--- a/plugins/battery/battery.plugin.zsh
+++ b/plugins/battery/battery.plugin.zsh
@@ -79,4 +79,14 @@ elif [[ $(uname) == "Linux" ]] ; then
echo "∞"
fi
}
+else
+ # Empty functions so we don't cause errors in prompts
+ function battery_pct_remaining() {
+ }
+
+ function battery_time_remaining() {
+ }
+
+ function battery_pct_prompt() {
+ }
fi
diff --git a/plugins/brew/_brew b/plugins/brew/_brew
index e43ba2900..a25caf40c 100644
--- a/plugins/brew/_brew
+++ b/plugins/brew/_brew
@@ -26,8 +26,10 @@ _1st_arguments=(
'list:list files in a formula or not-installed formulae'
'log:git commit log for a formula'
'missing:check all installed formuale for missing dependencies.'
+ 'options:display install options specific to formula.'
'outdated:list formulas for which a newer version is available'
'prune:remove dead links'
+ 'reinstall:reinstall a formula'
'remove:remove a formula'
'search:search for a formula (/regex/ or string)'
'server:start a local web app that lets you browse formulae (requires Sinatra)'
@@ -75,7 +77,7 @@ case "$words[1]" in
install|home|homepage|log|info|abv|uses|cat|deps|edit|options|versions)
_brew_all_formulae
_wanted formulae expl 'all formulae' compadd -a formulae ;;
- remove|rm|uninstall|unlink|cleanup|link|ln)
+ reinstall|remove|rm|uninstall|unlink|cleanup|link|ln)
_brew_installed_formulae
_wanted installed_formulae expl 'installed formulae' compadd -a installed_formulae ;;
esac
diff --git a/plugins/bundler/bundler.plugin.zsh b/plugins/bundler/bundler.plugin.zsh
index c01241409..4c3580cac 100644
--- a/plugins/bundler/bundler.plugin.zsh
+++ b/plugins/bundler/bundler.plugin.zsh
@@ -1,5 +1,4 @@
alias be="bundle exec"
-alias bi="bundle install"
alias bl="bundle list"
alias bp="bundle package"
alias bo="bundle open"
@@ -7,10 +6,29 @@ 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 strainer tailor 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 taps thin thor unicorn unicorn_rails puma)
## Functions
+bi() {
+ if _bundler-installed && _within-bundled-project; then
+ local bundler_version=`bundle version | cut -d' ' -f3`
+ if [[ $bundler_version > '1.4.0' || $bundler_version = '1.4.0' ]]; then
+ if [[ "$(uname)" == 'Darwin' ]]
+ then
+ local cores_num="$(sysctl hw.ncpu | awk '{print $2}')"
+ else
+ local cores_num="$(nproc)"
+ fi
+ bundle install --jobs=$cores_num $@
+ else
+ bundle install $@
+ fi
+ else
+ echo "Can't 'bundle install' outside a bundled project"
+ fi
+}
+
_bundler-installed() {
which bundle > /dev/null 2>&1
}
@@ -42,3 +60,4 @@ for cmd in $bundled_commands; do
compdef _$cmd bundled_$cmd=$cmd
fi
done
+
diff --git a/plugins/chruby/chruby.plugin.zsh b/plugins/chruby/chruby.plugin.zsh
new file mode 100644
index 000000000..2a2c80cf6
--- /dev/null
+++ b/plugins/chruby/chruby.plugin.zsh
@@ -0,0 +1,99 @@
+#
+# INSTRUCTIONS
+#
+# With either a manual or brew installed chruby things should just work.
+#
+# If you'd prefer to specify an explicit path to load chruby from
+# you can set variables like so:
+#
+# zstyle :omz:plugins:chruby path /local/path/to/chruby.sh
+# zstyle :omz:plugins:chruby auto /local/path/to/auto.sh
+#
+# TODO
+# - autodetermine correct source path on non OS X systems
+# - completion if ruby-install exists
+
+# rvm and rbenv plugins also provide this alias
+alias rubies='chruby'
+
+local _chruby_path
+local _chruby_auto
+
+_homebrew-installed() {
+ whence brew &> /dev/null
+}
+
+_chruby-from-homebrew-installed() {
+ brew --prefix chruby &> /dev/null
+}
+
+_ruby-build_installed() {
+ whence ruby-build &> /dev/null
+}
+
+_ruby-install-installed() {
+ whence ruby-install &> /dev/null
+}
+
+# Simple definition completer for ruby-build
+if _ruby-build_installed; then
+ _ruby-build() { compadd $(ruby-build --definitions) }
+ compdef _ruby-build ruby-build
+fi
+
+_source_from_omz_settings() {
+ zstyle -s :omz:plugins:chruby path _chruby_path
+ zstyle -s :omz:plugins:chruby auto _chruby_auto
+
+ if _chruby_path && [[ -r _chruby_path ]]; then
+ source ${_chruby_path}
+ fi
+
+ if _chruby_auto && [[ -r _chruby_auto ]]; then
+ source ${_chruby_auto}
+ fi
+}
+
+_chruby_dirs() {
+ chrubydirs=($HOME/.rubies/ $PREFIX/opt/rubies)
+ for dir in chrubydirs; do
+ if [[ -d $dir ]]; then
+ RUBIES+=$dir
+ fi
+ done
+}
+
+if _homebrew-installed && _chruby-from-homebrew-installed ; then
+ source $(brew --prefix chruby)/share/chruby/chruby.sh
+ source $(brew --prefix chruby)/share/chruby/auto.sh
+ _chruby_dirs
+elif [[ -r "/usr/local/share/chruby/chruby.sh" ]] ; then
+ source /usr/local/share/chruby/chruby.sh
+ source /usr/local/share/chruby/auto.sh
+ _chruby_dirs
+else
+ _source_from_omz_settings
+ _chruby_dirs
+fi
+
+function ensure_chruby() {
+ $(whence chruby)
+}
+
+function current_ruby() {
+ local _ruby
+ _ruby="$(chruby |grep \* |tr -d '* ')"
+ if [[ $(chruby |grep -c \*) -eq 1 ]]; then
+ echo ${_ruby}
+ else
+ echo "system"
+ fi
+}
+
+function chruby_prompt_info() {
+ echo "$(current_ruby)"
+}
+
+# complete on installed rubies
+_chruby() { compadd $(chruby | tr -d '* ') }
+compdef _chruby chruby
diff --git a/plugins/docker/README.md b/plugins/docker/README.md
new file mode 100644
index 000000000..231a6dcf5
--- /dev/null
+++ b/plugins/docker/README.md
@@ -0,0 +1,19 @@
+## Docker autocomplete plugin
+
+- Adds autocomplete options for all docker commands.
+- Will also show containerIDs and Image names where applicable
+
+####Shows help for all commands
+![General Help](http://i.imgur.com/tUBO9jh.png "Help for all commands")
+
+
+####Shows your downloaded images where applicable
+![Images](http://i.imgur.com/R8ZsWO1.png "Images")
+
+
+####Shows your running containers where applicable
+![Containers](http://i.imgur.com/WQtbheg.png "Containers")
+
+
+
+Maintainer : Ahmed Azaan ([@aeonazaan](https://twitter.com/aeonazaan))
diff --git a/plugins/docker/_docker b/plugins/docker/_docker
new file mode 100644
index 000000000..f13f876cf
--- /dev/null
+++ b/plugins/docker/_docker
@@ -0,0 +1,290 @@
+#compdef docker
+
+# Docker autocompletion for oh-my-zsh
+# Requires: Docker installed
+# Author : Azaan (@aeonazaan)
+
+
+# ----- Helper functions
+# Output a selectable list of all running docker containers
+__docker_containers() {
+ declare -a cont_cmd
+ cont_cmd=($(docker ps | awk 'NR>1{print $1":[CON("$1")"$2"("$3")]"}'))
+ _describe 'containers' cont_cmd
+}
+
+# output a selectable list of all docker images
+__docker_images() {
+ declare -a img_cmd
+ img_cmd=($(docker images | awk 'NR>1{print $1}'))
+ _describe 'images' img_cmd
+}
+
+# ----- Commands
+# Seperate function for each command, makes extension easier later
+# ---------------------------
+__attach() {
+ __docker_containers
+}
+
+__build() {
+ _arguments \
+ '-q=false[Suppress verbose build output]' \
+ '-t="[fuck to be applied to the resulting image in case of success]' \
+ '*:files:_files'
+}
+
+__commit() {
+ _arguments \
+ '-author="[Author]' \
+ '-m="[Commit message]' \
+ '-run="[Config automatically applied when the image is run.\n]'
+ __docker_containers
+}
+
+__diff() {
+ __docker_containers
+}
+
+__export() {
+ __docker_containers
+}
+
+
+__history() {
+ __docker_images
+}
+
+__images() {
+ _arguments \
+ '-a[show all images]' \
+ '-notrunc[dont truncate output]' \
+ '-q[only show numeric IDs]' \
+ '-viz[output graph in graphviz format]'
+ __docker_images
+}
+
+__import() {
+ _arguments '*:files:_files'
+}
+
+__info() {
+ # no arguments
+}
+
+__insert() {
+ __docker_images
+ _arguments '*:files:_files'
+}
+
+__inspect() {
+ __docker_images
+ __docker_containers
+}
+
+__kill() {
+ __docker_containers
+}
+
+__login() {
+ _arguments \
+ '-e="[email]' \
+ '-p="[password]' \
+ '-u="[username]' \
+}
+
+__logs() {
+ __docker_containers
+}
+
+__port() {
+ __docker_containers
+}
+
+__top() {
+ __docker_containers
+}
+
+__ps() {
+ _arguments \
+ '-a[Show all containers. Only running containers are shown by default.]' \
+ '-beforeId="[Show only container created before Id, include non-running ones.]' \
+ '-l[Show only the latest created container, include non-running ones.]' \
+ '-n=[Show n last created containers, include non-running ones.]' \
+ '-notrurrrrnc[Dont truncate output]' \
+ '-q[Only display numeric IDs]' \
+ '-s[Display sizes]' \
+ '-sinceId="[Show only containers created since Id, include non-running ones.]'
+}
+
+__pull() {
+ _arguments '-t="[Download tagged image in repository]'
+}
+
+__push() {
+
+}
+
+__restart() {
+ _arguments '-t=[number of seconds to try to stop before killing]'
+ __docker_containers
+}
+
+__rm() {
+ _arguments '-v[Remove the volumes associated to the container]'
+ __docker_containers
+}
+
+__rmi() {
+ __docker_images
+}
+
+__run() {
+ _arguments \
+ '-a=[Attach to stdin, stdout or stderr.]' \
+ '-c=[CPU shares (relative weight)]' \
+ '-d[Detached mode: leave the container running in the background]' \
+ '-dns=[Set custom dns servers]' \
+ '-e=[Set environment variables]' \
+ '-entrypoint="[Overwrite the default entrypoint of the image]' \
+ '-h="[Container host name]' \
+ '-i[Keep stdin open even if not attached]' \
+ '-m=[Memory limit (in bytes)]' \
+ '-p=[Expose a containers port to the host (use docker port to see the actual mapping)]' \
+ '-t[Allocate a pseudo-tty]' \
+ '-u="[Username or UID]' \
+ '-v=[Bind mount a volume (e.g. from the host: -v /host:/container, from docker: -v /container)]' \
+ '-volumes-from="[Mount volumes from the specified container]'
+ __docker_images
+}
+
+__search() {
+ _arguments '-notrunc[Dont truncate output]'
+}
+
+__start() {
+ __docker_containers
+}
+
+__stop() {
+ _arguments '-t=[number of seconds to try to stop before killing]'
+ __docker_containers
+}
+
+__tag() {
+ _arguments '-f[Force]'
+ __docker_images
+}
+
+__version() {
+
+}
+
+__wait() {
+ __docker_containers
+}
+
+# end commands ---------
+# ----------------------
+
+local -a _1st_arguments
+_1st_arguments=(
+ "attach":"Attach to a running container"
+ "build":"Build a container from a Dockerfile"
+ "commit":"Create a new image from a container's changes"
+ "diff":"Inspect changes on a container's filesystem"
+ "export":"Stream the contents of a container as a tar archive"
+ "history":"Show the history of an image"
+ "images":"List images"
+ "import":"Create a new filesystem image from the contents of a tarball"
+ "info":"Display system-wide information"
+ "insert":"Insert a file in an image"
+ "inspect":"Return low-level information on a container"
+ "kill":"Kill a running container"
+ "login":"Register or Login to the docker registry server"
+ "logs":"Fetch the logs of a container"
+ "port":"Lookup the public-facing port which is NAT-ed to PRIVATE_PORT"
+ "top":"Lookup the running processes of a container"
+ "ps":"List containers"
+ "pull":"Pull an image or a repository from the docker registry server"
+ "push":"Push an image or a repository to the docker registry server"
+ "restart":"Restart a running container"
+ "rm":"Remove one or more containers"
+ "rmi":"Remove one or more images"
+ "run":"Run a command in a new container"
+ "search":"Search for an image in the docker index"
+ "start":"Start a stopped container"
+ "stop":"Stop a running container"
+ "tag":"Tag an image into a repository"
+ "version":"Show the docker version information"
+ "wait":"Block until a container stops, then print its exit code"
+)
+
+_arguments '*:: :->command'
+
+if (( CURRENT == 1 )); then
+ _describe -t commands "docker command" _1st_arguments
+ return
+fi
+
+local -a _command_args
+case "$words[1]" in
+ attach)
+ __docker_containers ;;
+ build)
+ __build ;;
+ commit)
+ __commit ;;
+ diff)
+ __diff ;;
+ export)
+ __export ;;
+ history)
+ __history ;;
+ images)
+ __images ;;
+ import)
+ __import ;;
+ info)
+ __info ;;
+ insert)
+ __insert ;;
+ inspect)
+ __inspect ;;
+ kill)
+ __kill ;;
+ login)
+ __login ;;
+ logs)
+ __logs ;;
+ port)
+ __port ;;
+ top)
+ __top ;;
+ ps)
+ __ps ;;
+ pull)
+ __pull ;;
+ push)
+ __push ;;
+ restart)
+ __restart ;;
+ rm)
+ __rm ;;
+ rmi)
+ __rmi ;;
+ run)
+ __run ;;
+ search)
+ __search ;;
+ start)
+ __start ;;
+ stop)
+ __stop ;;
+ tag)
+ __tag ;;
+ version)
+ __version ;;
+ wait)
+ __wait ;;
+esac
diff --git a/plugins/extract/extract.plugin.zsh b/plugins/extract/extract.plugin.zsh
index 23e86c593..7352e5bad 100644
--- a/plugins/extract/extract.plugin.zsh
+++ b/plugins/extract/extract.plugin.zsh
@@ -52,7 +52,7 @@ function extract() {
(*.xz) unxz "$1" ;;
(*.lzma) unlzma "$1" ;;
(*.Z) uncompress "$1" ;;
- (*.zip) unzip "$1" -d $extract_dir ;;
+ (*.zip|*.war|*.jar) unzip "$1" -d $extract_dir ;;
(*.rar) unrar x -ad "$1" ;;
(*.7z) 7za x "$1" ;;
(*.deb)
diff --git a/plugins/forklift/forklift.plugin.zsh b/plugins/forklift/forklift.plugin.zsh
index 056069d36..b0e60a434 100644
--- a/plugins/forklift/forklift.plugin.zsh
+++ b/plugins/forklift/forklift.plugin.zsh
@@ -1,5 +1,6 @@
-# Open folder in ForkLift.app from console
+# Open folder in ForkLift.app of ForkLift2.app from console
# Author: Adam Strzelecki nanoant.com, modified by Bodo Tasche bitboxer.de
+# Updated to support ForkLift2 by Johan Kaving
#
# Usage:
# fl [<folder>]
@@ -22,9 +23,33 @@ function fl {
fi
fi
osascript 2>&1 1>/dev/null <<END
- tell application "ForkLift"
- activate
- end tell
+
+ try
+ tell application "Finder"
+ set appName to name of application file id "com.binarynights.ForkLift2"
+ end tell
+ on error err_msg number err_num
+ tell application "Finder"
+ set appName to name of application file id "com.binarynights.ForkLift"
+ end tell
+ end try
+
+ if application appName is running
+ tell application appName
+ activate
+ end tell
+ else
+ tell application appName
+ activate
+ end tell
+ repeat until application appName is running
+ delay 1
+ end repeat
+ tell application appName
+ activate
+ end tell
+ end if
+
tell application "System Events"
tell application process "ForkLift"
try
@@ -36,7 +61,7 @@ function fl {
keystroke "g" using {command down, shift down}
tell sheet 1 of topWindow
set value of text field 1 to "$PWD"
- keystroke return
+ keystroke return
end tell
end tell
end tell
diff --git a/plugins/git-flow/git-flow.plugin.zsh b/plugins/git-flow/git-flow.plugin.zsh
index ab9c0c848..b9ea06844 100644
--- a/plugins/git-flow/git-flow.plugin.zsh
+++ b/plugins/git-flow/git-flow.plugin.zsh
@@ -20,6 +20,12 @@
# c. Or, use this file as a oh-my-zsh plugin.
#
+#Alias
+alias gf='git flow'
+alias gcd='git checkout develop'
+alias gch='git checkout hotfix'
+alias gcr='git checkout release'
+
_git-flow ()
{
local curcontext="$curcontext" state line
diff --git a/plugins/git-prompt/git-prompt.plugin.zsh b/plugins/git-prompt/git-prompt.plugin.zsh
new file mode 100644
index 000000000..01b8a88d9
--- /dev/null
+++ b/plugins/git-prompt/git-prompt.plugin.zsh
@@ -0,0 +1,60 @@
+# ZSH Git Prompt Plugin from:
+# http://github.com/olivierverdier/zsh-git-prompt
+#
+export __GIT_PROMPT_DIR=$ZSH/plugins/git-prompt
+# Initialize colors.
+autoload -U colors
+colors
+
+# Allow for functions in the prompt.
+setopt PROMPT_SUBST
+
+## Enable auto-execution of functions.
+typeset -ga preexec_functions
+typeset -ga precmd_functions
+typeset -ga chpwd_functions
+
+# Append git functions needed for prompt.
+preexec_functions+='preexec_update_git_vars'
+precmd_functions+='precmd_update_git_vars'
+chpwd_functions+='chpwd_update_git_vars'
+
+## Function definitions
+function preexec_update_git_vars() {
+ case "$2" in
+ git*)
+ __EXECUTED_GIT_COMMAND=1
+ ;;
+ esac
+}
+
+function precmd_update_git_vars() {
+ if [ -n "$__EXECUTED_GIT_COMMAND" ]; then
+ update_current_git_vars
+ unset __EXECUTED_GIT_COMMAND
+ fi
+}
+
+function chpwd_update_git_vars() {
+ update_current_git_vars
+}
+
+function update_current_git_vars() {
+ unset __CURRENT_GIT_STATUS
+
+ local gitstatus="$__GIT_PROMPT_DIR/gitstatus.py"
+ _GIT_STATUS=`python ${gitstatus}`
+ __CURRENT_GIT_STATUS=("${(f)_GIT_STATUS}")
+}
+
+function prompt_git_info() {
+ if [ -n "$__CURRENT_GIT_STATUS" ]; then
+ echo "(%{${fg[red]}%}$__CURRENT_GIT_STATUS[1]%{${fg[default]}%}$__CURRENT_GIT_STATUS[2]%{${fg[magenta]}%}$__CURRENT_GIT_STATUS[3]%{${fg[default]}%})"
+ fi
+}
+
+# Set the prompt.
+#PROMPT='%B%m%~%b$(prompt_git_info) %# '
+# for a right prompt:
+#RPROMPT='%b$(prompt_git_info)'
+RPROMPT='$(prompt_git_info)'
diff --git a/plugins/git-prompt/gitstatus.py b/plugins/git-prompt/gitstatus.py
new file mode 100644
index 000000000..ee6fab9bd
--- /dev/null
+++ b/plugins/git-prompt/gitstatus.py
@@ -0,0 +1,68 @@
+#!/usr/bin/env python
+# -*- coding: UTF-8 -*-
+
+# change those symbols to whatever you prefer
+symbols = {'ahead of': '↑', 'behind': '↓', 'staged':'♦', 'changed':'‣', 'untracked':'…', 'clean':'⚡', 'unmerged':'≠', 'sha1':':'}
+
+from subprocess import Popen, PIPE
+
+output,error = Popen(['git','status'], stdout=PIPE, stderr=PIPE).communicate()
+
+if error:
+ import sys
+ sys.exit(0)
+lines = output.splitlines()
+
+import re
+behead_re = re.compile(r"^# Your branch is (ahead of|behind) '(.*)' by (\d+) commit")
+diverge_re = re.compile(r"^# and have (\d+) and (\d+) different")
+
+status = ''
+staged = re.compile(r'^# Changes to be committed:$', re.MULTILINE)
+changed = re.compile(r'^# Changed but not updated:$', re.MULTILINE)
+untracked = re.compile(r'^# Untracked files:$', re.MULTILINE)
+unmerged = re.compile(r'^# Unmerged paths:$', re.MULTILINE)
+
+def execute(*command):
+ out, err = Popen(stdout=PIPE, stderr=PIPE, *command).communicate()
+ if not err:
+ nb = len(out.splitlines())
+ else:
+ nb = '?'
+ return nb
+
+if staged.search(output):
+ nb = execute(['git','diff','--staged','--name-only','--diff-filter=ACDMRT'])
+ status += '%s%s' % (symbols['staged'], nb)
+if unmerged.search(output):
+ nb = execute(['git','diff', '--staged','--name-only', '--diff-filter=U'])
+ status += '%s%s' % (symbols['unmerged'], nb)
+if changed.search(output):
+ nb = execute(['git','diff','--name-only', '--diff-filter=ACDMRT'])
+ status += '%s%s' % (symbols['changed'], nb)
+if untracked.search(output):
+## nb = len(Popen(['git','ls-files','--others','--exclude-standard'],stdout=PIPE).communicate()[0].splitlines())
+## status += "%s" % (symbols['untracked']*(nb//3 + 1), )
+ status += symbols['untracked']
+if status == '':
+ status = symbols['clean']
+
+remote = ''
+
+bline = lines[0]
+if bline.find('Not currently on any branch') != -1:
+ branch = symbols['sha1']+ Popen(['git','rev-parse','--short','HEAD'], stdout=PIPE).communicate()[0][:-1]
+else:
+ branch = bline.split(' ')[3]
+ bstatusline = lines[1]
+ match = behead_re.match(bstatusline)
+ if match:
+ remote = symbols[match.groups()[0]]
+ remote += match.groups()[2]
+ elif lines[2:]:
+ div_match = diverge_re.match(lines[2])
+ if div_match:
+ remote = "{behind}{1}{ahead of}{0}".format(*div_match.groups(), **symbols)
+
+print '\n'.join([branch,remote,status])
+
diff --git a/plugins/git/_git-branch b/plugins/git/_git-branch
index 86d03bc30..6b9c1a483 100644
--- a/plugins/git/_git-branch
+++ b/plugins/git/_git-branch
@@ -60,3 +60,24 @@ _git-branch ()
"($l $c $m -d)-D[delete a branch]" \
$dependent_deletion_args
}
+
+(( $+functions[__git_ignore_line] )) ||
+__git_ignore_line () {
+ declare -a ignored
+ ignored=()
+ ((CURRENT > 1)) &&
+ ignored+=(${line[1,CURRENT-1]//(#m)[\[\]()\\*?#<>~\^]/\\$MATCH})
+ ((CURRENT < $#line)) &&
+ ignored+=(${line[CURRENT+1,-1]//(#m)[\[\]()\\*?#<>~\^]/\\$MATCH})
+ $* -F ignored
+}
+
+(( $+functions[__git_ignore_line_inside_arguments] )) ||
+__git_ignore_line_inside_arguments () {
+ declare -a compadd_opts
+
+ zparseopts -D -E -a compadd_opts V: J: 1 2 n f X: M: P: S: r: R: q F:
+
+ __git_ignore_line $* $compadd_opts
+}
+
diff --git a/plugins/git/git.plugin.zsh b/plugins/git/git.plugin.zsh
index 2ecc74eb6..7b3cec27d 100644
--- a/plugins/git/git.plugin.zsh
+++ b/plugins/git/git.plugin.zsh
@@ -5,6 +5,8 @@ alias gst='git status'
compdef _git gst=git-status
alias gd='git diff'
compdef _git gd=git-diff
+alias gdc='git diff --cached'
+compdef _git gdc=git-diff
alias gl='git pull'
compdef _git gl=git-pull
alias gup='git pull --rebase'
@@ -22,6 +24,8 @@ alias gca='git commit -v -a'
compdef _git gc=git-commit
alias gca!='git commit -v -a --amend'
compdef _git gca!=git-commit
+alias gcmsg='git commit -m'
+compdef _git gcmsg=git-commit
alias gco='git checkout'
compdef _git gco=git-checkout
alias gcm='git checkout master'
@@ -52,9 +56,9 @@ compdef gcount=git
alias gcl='git config --list'
alias gcp='git cherry-pick'
compdef _git gcp=git-cherry-pick
-alias glg='git log --stat --max-count=5'
+alias glg='git log --stat --max-count=10'
compdef _git glg=git-log
-alias glgg='git log --graph --max-count=5'
+alias glgg='git log --graph --max-count=10'
compdef _git glgg=git-log
alias glgga='git log --graph --decorate --all'
compdef _git glgga=git-log
@@ -70,7 +74,10 @@ 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'
+
+#remove the gf alias
+#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
@@ -78,7 +85,11 @@ compdef _git gm=git-mergetool
alias gg='git gui citool'
alias gga='git gui citool --amend'
alias gk='gitk --all --branches'
+
alias gsts='git stash show --text'
+alias gsta='git stash'
+alias gstp='git stash pop'
+alias gstd='git stash drop'
# Will cd into the top of the current repository
# or submodule.
@@ -124,3 +135,17 @@ function _git_log_prettily(){
}
alias glp="_git_log_prettily"
compdef _git glp=git-log
+
+# Work In Progress (wip)
+# These features allow to pause a branch development and switch to another one (wip)
+# When you want to go back to work, just unwip it
+#
+# This function return a warning if the current branch is a wip
+function work_in_progress() {
+ if $(git log -n 1 2>/dev/null | grep -q -c wip); then
+ echo "WIP!!"
+ fi
+}
+# these alias commit and uncomit wip branches
+alias gwip='git add -A; git ls-files --deleted -z | xargs -0 git rm; git commit -m "wip"'
+alias gunwip='git log -n 1 | grep -q -c wip && git reset HEAD~1'
diff --git a/plugins/gitignore/gitignore.plugin.zsh b/plugins/gitignore/gitignore.plugin.zsh
new file mode 100644
index 000000000..332497cec
--- /dev/null
+++ b/plugins/gitignore/gitignore.plugin.zsh
@@ -0,0 +1,12 @@
+function gi() { curl http://gitignore.io/api/$@ ;}
+
+_gitignireio_get_command_list() {
+ curl -s http://gitignore.io/api/list | tr "," "\n"
+}
+
+_gitignireio () {
+ compset -P '*,'
+ compadd -S '' `_gitignireio_get_command_list`
+}
+
+compdef _gitignireio gi \ No newline at end of file
diff --git a/plugins/gpg-agent/gpg-agent.plugin.zsh b/plugins/gpg-agent/gpg-agent.plugin.zsh
index 4071334cb..3e6a34f42 100644
--- a/plugins/gpg-agent/gpg-agent.plugin.zsh
+++ b/plugins/gpg-agent/gpg-agent.plugin.zsh
@@ -19,6 +19,9 @@ 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
+ export GPG_AGENT_INFO
+ export SSH_AUTH_SOCK
+ export SSH_AGENT_PID
fi
# check again if another agent is running using the newly sourced settings
diff --git a/plugins/heroku/_heroku b/plugins/heroku/_heroku
index a95c38647..46663303a 100644
--- a/plugins/heroku/_heroku
+++ b/plugins/heroku/_heroku
@@ -23,8 +23,10 @@ _1st_arguments=(
"auth\:login":"log in with your heroku credentials"
"auth\:logout":"clear local authentication credentials"
"config":"display the config vars for an app"
- "config\:add":"add one or more config vars"
- "config\:remove":"remove a config var"
+ "config\:pull":"pull heroku config vars down to the local environment"
+ "config\:push":"push local config vars to heroku"
+ "config\:set":"set one or more config vars"
+ "config\:unset":"unset one or more config vars"
"db\:push":"push local data up to your app"
"db\:pull":"pull heroku data down into your local database"
"domains":"list custom domains for an app"
diff --git a/plugins/jira/jira.plugin.zsh b/plugins/jira/jira.plugin.zsh
index 9aa192c1e..739ee7142 100644
--- a/plugins/jira/jira.plugin.zsh
+++ b/plugins/jira/jira.plugin.zsh
@@ -31,7 +31,7 @@ open_jira_issue () {
if [ -z "$1" ]; then
echo "Opening new issue"
- `open $jira_url/secure/CreateIssue!default.jspa`
+ $open_cmd "$jira_url/secure/CreateIssue!default.jspa"
else
echo "Opening issue #$1"
if [[ "x$JIRA_RAPID_BOARD" = "xtrue" ]]; then
diff --git a/plugins/jump/jump.plugin.zsh b/plugins/jump/jump.plugin.zsh
new file mode 100644
index 000000000..5096879d8
--- /dev/null
+++ b/plugins/jump/jump.plugin.zsh
@@ -0,0 +1,58 @@
+# Easily jump around the file system by manually adding marks
+# marks are stored as symbolic links in the directory $MARKPATH (default $HOME/.marks)
+#
+# jump FOO: jump to a mark named FOO
+# mark FOO: create a mark named FOO
+# unmark FOO: delete a mark
+# marks: lists all marks
+#
+export MARKPATH=$HOME/.marks
+
+jump() {
+ cd -P "$MARKPATH/$1" 2>/dev/null || echo "No such mark: $1"
+}
+
+mark() {
+ if (( $# == 0 )); then
+ MARK=$(basename "$(pwd)")
+ else
+ MARK="$1"
+ fi
+ if read -q \?"Mark $(pwd) as ${MARK}? (y/n) "; then
+ mkdir -p "$MARKPATH"; ln -s "$(pwd)" "$MARKPATH/$MARK"
+ fi
+}
+
+unmark() {
+ rm -i "$MARKPATH/$1"
+}
+
+autoload colors
+marks() {
+ for link in $MARKPATH/*(@); do
+ local markname="$fg[cyan]${link:t}$reset_color"
+ local markpath="$fg[blue]$(readlink $link)$reset_color"
+ printf "%s\t" $markname
+ printf "-> %s \t\n" $markpath
+ done
+}
+
+_completemarks() {
+ if [[ $(ls "${MARKPATH}" | wc -l) -gt 1 ]]; then
+ reply=($(ls $MARKPATH/**/*(-) | grep : | sed -E 's/(.*)\/([_\da-zA-Z\-]*):$/\2/g'))
+ else
+ if readlink -e "${MARKPATH}"/* &>/dev/null; then
+ reply=($(ls "${MARKPATH}"))
+ fi
+ fi
+}
+compctl -K _completemarks jump
+compctl -K _completemarks unmark
+
+_mark_expansion() {
+ setopt extendedglob
+ autoload -U modify-current-argument
+ modify-current-argument '$(readlink "$MARKPATH/$ARG")'
+}
+zle -N _mark_expansion
+bindkey "^g" _mark_expansion
diff --git a/plugins/mercurial/mercurial.plugin.zsh b/plugins/mercurial/mercurial.plugin.zsh
index c18aa726c..d2db89d04 100644
--- a/plugins/mercurial/mercurial.plugin.zsh
+++ b/plugins/mercurial/mercurial.plugin.zsh
@@ -13,6 +13,7 @@ alias hglr='hg pull --rebase'
alias hgo='hg outgoing'
alias hgp='hg push'
alias hgs='hg status'
+alias hgsl='log --limit 20 --template "{node|short} | {date|isodatesec} | {author|user}: {desc|strip|firstline}\n" '
# this is the 'git commit --amend' equivalent
alias hgca='hg qimport -r tip ; hg qrefresh -e ; hg qfinish tip'
diff --git a/plugins/mosh/mosh.plugin.zsh b/plugins/mosh/mosh.plugin.zsh
new file mode 100644
index 000000000..ea36b7ee9
--- /dev/null
+++ b/plugins/mosh/mosh.plugin.zsh
@@ -0,0 +1,2 @@
+# Allow SSH tab completion for mosh hostnames
+compdef mosh=ssh
diff --git a/plugins/mvn/mvn.plugin.zsh b/plugins/mvn/mvn.plugin.zsh
index 799f6fc8c..0c9141907 100644
--- a/plugins/mvn/mvn.plugin.zsh
+++ b/plugins/mvn/mvn.plugin.zsh
@@ -24,16 +24,18 @@ export RESET_FORMATTING=`tput sgr0`
# Wrapper function for Maven's mvn command.
mvn-color()
{
- # Filter mvn output using sed
- mvn $@ | sed -e "s/\(\[INFO\]\ \-.*\)/${TEXT_BLUE}${BOLD}\1/g" \
- -e "s/\(\[INFO\]\ \[.*\)/${RESET_FORMATTING}${BOLD}\1${RESET_FORMATTING}/g" \
+ (
+ # Filter mvn output using sed. Before filtering set the locale to C, so invalid characters won't break some sed implementations
+ unset LANG
+ LC_CTYPE=C mvn $@ | sed -e "s/\(\[INFO\]\)\(.*\)/${TEXT_BLUE}${BOLD}\1${RESET_FORMATTING}\2/g" \
-e "s/\(\[INFO\]\ BUILD SUCCESSFUL\)/${BOLD}${TEXT_GREEN}\1${RESET_FORMATTING}/g" \
- -e "s/\(\[WARNING\].*\)/${BOLD}${TEXT_YELLOW}\1${RESET_FORMATTING}/g" \
- -e "s/\(\[ERROR\].*\)/${BOLD}${TEXT_RED}\1${RESET_FORMATTING}/g" \
+ -e "s/\(\[WARNING\]\)\(.*\)/${BOLD}${TEXT_YELLOW}\1${RESET_FORMATTING}\2/g" \
+ -e "s/\(\[ERROR\]\)\(.*\)/${BOLD}${TEXT_RED}\1${RESET_FORMATTING}\2/g" \
-e "s/Tests run: \([^,]*\), Failures: \([^,]*\), Errors: \([^,]*\), Skipped: \([^,]*\)/${BOLD}${TEXT_GREEN}Tests run: \1${RESET_FORMATTING}, Failures: ${BOLD}${TEXT_RED}\2${RESET_FORMATTING}, Errors: ${BOLD}${TEXT_RED}\3${RESET_FORMATTING}, Skipped: ${BOLD}${TEXT_YELLOW}\4${RESET_FORMATTING}/g"
# Make sure formatting is reset
echo -ne ${RESET_FORMATTING}
+ )
}
# Override the mvn command with the colorized one.
diff --git a/plugins/node/node.plugin.zsh b/plugins/node/node.plugin.zsh
index 3bbed6f04..2d78f2b4c 100644
--- a/plugins/node/node.plugin.zsh
+++ b/plugins/node/node.plugin.zsh
@@ -1,5 +1,13 @@
# Open the node api for your current version to the optional section.
# TODO: Make the section part easier to use.
function node-docs {
- open "http://nodejs.org/docs/$(node --version)/api/all.html#all_$1"
+ # get the open command
+ local open_cmd
+ if [[ $(uname -s) == 'Darwin' ]]; then
+ open_cmd='open'
+ else
+ open_cmd='xdg-open'
+ fi
+
+ $open_cmd "http://nodejs.org/docs/$(node --version)/api/all.html#all_$1"
}
diff --git a/plugins/nvm/_nvm b/plugins/nvm/_nvm
new file mode 100644
index 000000000..a95c9e375
--- /dev/null
+++ b/plugins/nvm/_nvm
@@ -0,0 +1,26 @@
+#compdef nvm
+#autoload
+
+[[ -s ~/.nvm/nvm.sh ]] || return 0
+
+local -a _1st_arguments
+_1st_arguments=(
+ 'help:show help'
+ 'install:download and install a version'
+ 'uninstall:uninstall a version'
+ 'use:modify PATH to use version'
+ 'run:run version with given arguments'
+ 'ls:list installed versions or versions matching a given description'
+ 'ls-remote:list remote versions available for install'
+ 'deactivate:undo effects of NVM on current shell'
+ 'alias:show or set aliases'
+ 'unalias:deletes an alias'
+ 'copy-packages:install global NPM packages to current version'
+)
+
+_arguments -C '*:: :->subcmds' && return 0
+
+if (( CURRENT == 1 )); then
+ _describe -t commands "nvm subcommand" _1st_arguments
+ return
+fi \ No newline at end of file
diff --git a/plugins/nvm/nvm.plugin.zsh b/plugins/nvm/nvm.plugin.zsh
new file mode 100644
index 000000000..9709719fe
--- /dev/null
+++ b/plugins/nvm/nvm.plugin.zsh
@@ -0,0 +1,3 @@
+# The addition 'nvm install' attempts in ~/.profile
+
+[[ -s ~/.nvm/nvm.sh ]] && . ~/.nvm/nvm.sh
diff --git a/plugins/osx/osx.plugin.zsh b/plugins/osx/osx.plugin.zsh
index dd785f911..608ec3789 100644
--- a/plugins/osx/osx.plugin.zsh
+++ b/plugins/osx/osx.plugin.zsh
@@ -157,3 +157,37 @@ function trash() {
function vncviewer() {
open vnc://$@
}
+
+# iTunes control function
+function itunes() {
+ local opt=$1
+ shift
+ case "$opt" in
+ launch|play|pause|stop|rewind|resume|quit)
+ ;;
+ mute)
+ opt="set mute to true"
+ ;;
+ unmute)
+ opt="set mute to false"
+ ;;
+ next|previous)
+ opt="$opt track"
+ ;;
+ ""|-h|--help)
+ echo "Usage: itunes <option>"
+ echo "option:"
+ echo "\tlaunch|play|pause|stop|rewind|resume|quit"
+ echo "\tmute|unmute\tcontrol volume set"
+ echo "\tnext|previous\tplay next or previous track"
+ echo "\thelp\tshow this message and exit"
+ return 0
+ ;;
+ *)
+ print "Unkonwn option: $opt"
+ return 1
+ ;;
+ esac
+ osascript -e "tell application \"iTunes\" to $opt"
+}
+
diff --git a/plugins/pass/_pass b/plugins/pass/_pass
index f6c1a6c4b..d8ec38828 100644
--- a/plugins/pass/_pass
+++ b/plugins/pass/_pass
@@ -101,7 +101,7 @@ _pass_cmd_show () {
_pass_complete_entries_helper () {
local IFS=$'\n'
local prefix="${PASSWORD_STORE_DIR:-$HOME/.password-store}"
- _values -C 'passwords' $(find "$prefix" \( -name .git -o -name .gpg-id \) -prune -o $@ -print | sed -e "s#${prefix}.##" -e 's#\.gpg##' | sort)
+ _values -C 'passwords' $(find -L "$prefix" \( -name .git -o -name .gpg-id \) -prune -o $@ -print | sed -e "s#${prefix}.##" -e 's#\.gpg##' | sort)
}
_pass_complete_entries_with_subdirs () {
diff --git a/plugins/pip/_pip b/plugins/pip/_pip
index df53ba5ce..967da48ca 100644
--- a/plugins/pip/_pip
+++ b/plugins/pip/_pip
@@ -6,8 +6,8 @@
_pip_all() {
# we cache the list of packages (originally from the macports plugin)
if (( ! $+piplist )); then
- echo -n " (caching package index...)"
- piplist=($(pip search * | cut -d ' ' -f 1 | tr '[A-Z]' '[a-z]'))
+ zsh-pip-cache-packages
+ piplist=($(cat $ZSH_PIP_CACHE_FILE))
fi
}
@@ -62,8 +62,13 @@ case "$words[1]" in
'(--no-install)--no-install[only download packages]' \
'(--no-download)--no-download[only install downloaded packages]' \
'(--install-option)--install-option[extra arguments to be supplied to the setup.py]' \
+ '(--single-version-externally-managed)--single-version-externally-managed[do not download/install dependencies. requires --record or --root]'\
+ '(--root)--root[treat this path as a fake chroot, installing into it. implies --single-version-externally-managed]'\
+ '(--record)--record[file to record all installed files to.]'\
+ '(-r --requirement)'{-r,--requirement}'[requirements file]: :_files'\
+ '(-e --editable)'{-e,--editable}'[path of or url to source to link to instead of installing.]: :_files -/'\
'1: :->packages' && return 0
-
+
if [[ "$state" == packages ]]; then
_pip_all
_wanted piplist expl 'packages' compadd -a piplist
diff --git a/plugins/pip/pip.plugin.zsh b/plugins/pip/pip.plugin.zsh
new file mode 100644
index 000000000..b5433ae9d
--- /dev/null
+++ b/plugins/pip/pip.plugin.zsh
@@ -0,0 +1,78 @@
+# Usage:
+# Just add pip to your installed plugins.
+
+# If you would like to change the cheeseshops used for autocomplete set
+# ZSH_PIP_INDEXES in your zshrc. If one of your indexes are bogus you won't get
+# any kind of error message, pip will just not autocomplete from them. Double
+# check!
+#
+# If you would like to clear your cache, go ahead and do a
+# "zsh-pip-clear-cache".
+
+ZSH_PIP_CACHE_FILE=~/.pip/zsh-cache
+ZSH_PIP_INDEXES=(https://pypi.python.org/simple/)
+
+zsh-pip-clear-cache() {
+ rm $ZSH_PIP_CACHE_FILE
+ unset piplist
+}
+
+zsh-pip-clean-packages() {
+ sed -n '/<a href/ s/.*>\([^<]\{1,\}\).*/\1/p'
+}
+
+zsh-pip-cache-packages() {
+ if [[ ! -d ${ZSH_PIP_CACHE_FILE:h} ]]; then
+ mkdir -p ${ZSH_PIP_CACHE_FILE:h}
+ fi
+
+ if [[ ! -f $ZSH_PIP_CACHE_FILE ]]; then
+ echo -n "(...caching package index...)"
+ tmp_cache=/tmp/zsh_tmp_cache
+ for index in $ZSH_PIP_INDEXES ; do
+ # well... I've already got two problems
+ curl $index 2>/dev/null | \
+ zsh-pip-clean-packages \
+ >> $tmp_cache
+ done
+ sort $tmp_cache | uniq | tr '\n' ' ' > $ZSH_PIP_CACHE_FILE
+ rm $tmp_cache
+ fi
+}
+
+# A test function that validates the regex against known forms of the simple
+# index. If you modify the regex to make it work for you, you should add a test
+# case in here and make sure that your changes don't break things for someone
+# else.
+zsh-pip-test-clean-packages() {
+ local expected
+ local actual
+ expected="0x10c-asm
+1009558_nester"
+
+ actual=$(echo -n "<html><head><title>Simple Index</title><meta name=\"api-version\" value=\"2\" /></head><body>
+<a href='0x10c-asm'>0x10c-asm</a><br/>
+<a href='1009558_nester'>1009558_nester</a><br/>
+</body></html>" | zsh-pip-clean-packages)
+
+ if [[ $actual != $expected ]] ; then
+ echo -e "python's simple index is broken:\n$actual\n !=\n$expected"
+ else
+ echo "python's simple index is fine"
+ fi
+
+ actual=$(echo -n '<html>
+ <head>
+ <title>Simple Package Index</title>
+ </head>
+ <body>
+ <a href="0x10c-asm">0x10c-asm</a><br/>
+ <a href="1009558_nester">1009558_nester</a><br/>
+</body></html>' | zsh-pip-clean-packages)
+
+ if [[ $actual != $expected ]] ; then
+ echo -e "the djangopypi2 index is broken:\n$actual\n !=\n$expected"
+ else
+ echo "the djangopypi2 index is fine"
+ fi
+}
diff --git a/plugins/pod/_pod b/plugins/pod/_pod
new file mode 100644
index 000000000..8c0f4460f
--- /dev/null
+++ b/plugins/pod/_pod
@@ -0,0 +1,389 @@
+#compdef pod
+#autoload
+
+# -----------------------------------------------------------------------------
+# FILE: _pod
+# DESCRIPTION: Cocoapods (0.27.1) autocomplete plugin for Oh-My-Zsh
+# http://cocoapods.org
+# AUTHOR: Alexandre Joly (alexandre.joly@mekanics.ch)
+# GITHUB: https://github.com/mekanics
+# TWITTER: @jolyAlexandre
+# VERSION: 0.0.3
+# LICENSE: MIT
+# -----------------------------------------------------------------------------
+
+local -a _1st_arguments
+_1st_arguments=(
+ 'help:Show help for the given command'
+ 'init:Generate a Podfile for the current directory'
+ 'install:Install project dependencies'
+ 'ipc:Inter-process communication'
+ 'list:List pods'
+ 'outdated:Show outdated project dependencies'
+ 'podfile-info:Shows information on installed Pods'
+ 'push:Push new specifications to a spec-repo'
+ 'repo:Manage spec-repositories'
+ 'search:Searches for pods'
+ 'setup:Setup the CocoaPods environment'
+ 'spec:Manage pod specs'
+ 'update:Update outdated project dependencies'
+)
+
+local -a _repo_arguments
+_repo_arguments=(
+ 'add:Add a spec repo'
+ 'lint:Validates all specs in a repo'
+ 'remove:Remove a spec repo.'
+ 'update:Update a spec repo'
+)
+
+local -a _spec_arguments
+_spec_arguments=(
+ 'cat:Prints a spec file'
+ 'create:Create spec file stub'
+ 'edit:Edit a spec file'
+ 'lint:Validates a spec file'
+ 'which:Prints the path of the given spec'
+)
+
+local -a _ipc_arguments
+_ipc_arguments=(
+ 'list:Lists the specifications know to CocoaPods'
+ 'podfile:Converts a Podfile to YAML'
+ 'repl:The repl listens to commands on standard input'
+ 'spec:Converts a podspec to YAML'
+ 'update-search-index:Updates the search index'
+)
+
+local -a _list_arguments
+_list_arguments=(
+ 'new:Lists pods introduced in the master spec-repo since the last check'
+)
+
+local -a _inherited_options
+_inherited_options=(
+ '(--silent)--silent[Show nothing]' \
+ '(--version)--version[Show the version of CocoaPods]' \
+ '(--no-color)--no-color[Show output without color]' \
+ '(--verbose)--verbose[Show more debugging information]' \
+ '(--help)--help[Show help banner of specified command]'
+)
+
+local -a _install_options
+_install_options=(
+ '(--no-clean)--no-clean[Leave SCM dirs like `.git` and `.svn` intact after downloading]' \
+ '(--no-integrate)--no-integrate[Skip integration of the Pods libraries in the Xcode project(s)]' \
+ '(--no-repo-update)--no-repo-update[Skip running `pod repo update` before install]'
+)
+
+local -a _update_options
+_update_options=(
+ '(--no-clean)--no-clean[Leave SCM dirs like `.git` and `.svn intact after downloading]' \
+ '(--no-integrate)--no-integrate[Skip integration of the Pods libraries in the Xcode project(s)]' \
+ '(--no-repo-update)--no-repo-update[Skip running `pod repo update before install]'
+)
+
+local -a _outdated_options
+_outdated_options=(
+ '(--no-repo-update)--no-repo-update[Skip running `pod repo update` before install]'
+)
+
+local -a _search_options
+_search_options=(
+ '(--full)--full[Search by name, summary, and description]' \
+ '(--stats)--stats[Show additional stats (like GitHub watchers and forks)]' \
+ '(--ios)--ios[Restricts the search to Pods supported on iOS]' \
+ '(--osx)--osx[Restricts the search to Pods supported on OS X]'
+)
+
+local -a _list_options
+_list_options=(
+ '(--update)--update[Run `pod repo update` before listing]'
+)
+
+local -a _podfile_info_options
+_podfile_info_options=(
+ '(--all)--all[Show information about all Pods with dependencies that are used in a project]' \
+ '(--md)--md[Output information in Markdown format]' \
+ '*:script or directory:_files'
+)
+
+local -a _push_options
+_push_options=(
+ '(--allow-warnings)--allow-warnings[Allows pushing even if there are warnings]' \
+ '(--local-only)--local-only[Does not perform the step of pushing REPO to its remote]' \
+ '*:script or directory:_files'
+)
+
+local -a _repo_lint_options
+_repo_lint_options=(
+ '(--only-errors)--only-errors[Lint presents only the errors]'
+)
+
+local -a _setup_options
+_setup_options=(
+ '(--push)--push[Use this option to enable push access once granted]'
+)
+
+local -a _spec_lint_options
+_spec_lint_options=(
+ '(--quick)--quick[Lint skips checks that would require to download and build the spec]' \
+ '(--only-errors)--only-errors[Lint validates even if warnings are present]' \
+ '(--no-clean)--no-clean[Lint leaves the build directory intact for inspection]' \
+ '*:script or directory:_files'
+)
+
+local -a _spec_cat_options
+_spec_cat_options=(
+ '(--show-all)--show-all[Pick from all versions of the given podspec]'
+)
+
+local -a _spec_which_options
+_spec_which_options=(
+ '(--show-all)--show-all[Print all versions of the given podspec]'
+)
+
+local -a _spec_edit_options
+_spec_edit_options=(
+ '(--show-all)--show-all[Pick which spec to edit from all available versions of the given podspec]'
+)
+
+
+__first_command_list ()
+{
+ local expl
+ declare -a tasks
+
+ tasks=(install ipc list outdated podfile-info push repo search setup spec update)
+
+ _wanted tasks expl 'help' compadd $tasks
+}
+
+__repo_list() {
+ _wanted application expl 'repo' compadd $(command ls -1 ~/.cocoapods/repos 2>/dev/null | sed -e 's/ /\\ /g')
+}
+
+__pod-repo() {
+ local curcontext="$curcontext" state line
+ typeset -A opt_args
+
+ _arguments -C \
+ ':command:->command' \
+ '*::options:->options'
+
+ case $state in
+ (command)
+ _describe -t commands "pod repo" _repo_arguments
+ return
+ ;;
+
+ (options)
+ case $line[1] in
+ (lint)
+ _arguments \
+ $_inherited_options \
+ $_repo_lint_options \
+ ':feature:__repo_list'
+ ;;
+
+ (update)
+ _arguments \
+ $_inherited_options \
+ ':feature:__repo_list'
+ ;;
+
+ (add)
+ _arguments \
+ $_inherited_options
+
+ (remove)
+ _arguments \
+ $_inherited_options \
+ ':feature:__repo_list'
+ ;;
+ esac
+ ;;
+ esac
+}
+
+__pod-spec() {
+ local curcontext="$curcontext" state line
+ typeset -A opt_args
+
+ _arguments -C \
+ ':command:->command' \
+ '*::options:->options'
+
+ case $state in
+ (command)
+ _describe -t commands "pod spec" _spec_arguments
+ return
+ ;;
+
+ (options)
+ case $line[1] in
+ (create)
+ _arguments \
+ $_inherited_options
+ ;;
+
+ (lint)
+ _arguments \
+ $_inherited_options \
+ $_spec_lint_options
+ ;;
+
+ (cat)
+ _arguments \
+ $_inherited_options \
+ $_spec_cat_options
+ ;;
+
+ (which)
+ _arguments \
+ $_inherited_options \
+ $_spec_which_options
+ ;;
+
+ (edit)
+ _arguments \
+ $_inherited_options \
+ $_spec_edit_options
+ ;;
+ esac
+ return
+ ;;
+ esac
+}
+
+__pod-ipc() {
+ local curcontext="$curcontext" state line
+ typeset -A opt_args
+
+ _arguments -C \
+ ':command:->command' \
+ '*::options:->options'
+
+ case $state in
+ (command)
+ _describe -t commands "pod ipc" _ipc_arguments
+ return
+ ;;
+
+ (options)
+ _arguments -C \
+ $_inherited_options
+ return
+ ;;
+ esac
+}
+
+__pod-list() {
+ local curcontext="$curcontext" state line
+ typeset -A opt_args
+
+ _arguments -C \
+ $_inherited_options \
+ $_list_options \
+ ':command:->command' \
+ '*::options:->options'
+
+ case $state in
+ (command)
+ _describe -t commands "pod list" _list_arguments
+ return
+ ;;
+
+ (options)
+ _arguments -C \
+ $_inherited_options \
+ $_list_options
+ return
+ ;;
+ esac
+}
+
+local curcontext="$curcontext" state line
+typeset -A opt_args
+
+_arguments -C \
+ $_inherited_options \
+ ':command:->command' \
+ '*::options:->options'
+
+case $state in
+ (command)
+ _describe -t commands "pod" _1st_arguments
+ return
+ ;;
+
+ (options)
+ case $line[1] in
+ (help)
+ _arguments \
+ $_inherited_options \
+ ':help:__first_command_list'
+ ;;
+
+ (push)
+ _arguments \
+ $_inherited_options \
+ $_push_options \
+ ':repo:__repo_list'
+ ;;
+
+ (repo)
+ __pod-repo
+ ;;
+
+ (spec)
+ __pod-spec
+ ;;
+
+ (ipc)
+ __pod-ipc
+ ;;
+
+ (list)
+ __pod-list
+ ;;
+
+ (install)
+ _arguments \
+ $_inherited_options \
+ $_install_options
+ ;;
+
+ (update)
+ _arguments \
+ $_inherited_options \
+ $_update_options
+ ;;
+
+ (outdated)
+ _arguments \
+ $_inherited_options \
+ $_outdated_options
+ ;;
+
+ (search)
+ _arguments \
+ $_inherited_options \
+ $_search_options
+ ;;
+
+ (podfile-info)
+ _arguments \
+ $_inherited_options \
+ $_podfile_info_options
+ ;;
+
+ (setup)
+ _arguments \
+ $_inherited_options \
+ $_setup_options
+ ;;
+
+ esac
+ ;;
+esac
diff --git a/plugins/pyenv/pyenv.plugin.zsh b/plugins/pyenv/pyenv.plugin.zsh
new file mode 100644
index 000000000..b3dc7aa17
--- /dev/null
+++ b/plugins/pyenv/pyenv.plugin.zsh
@@ -0,0 +1,31 @@
+_homebrew-installed() {
+ type brew &> /dev/null
+}
+
+_pyenv-from-homebrew-installed() {
+ brew --prefix pyenv &> /dev/null
+}
+
+FOUND_PYENV=0
+pyenvdirs=("$HOME/.pyenv" "/usr/local/pyenv" "/opt/pyenv")
+if _homebrew-installed && _pyenv-from-homebrew-installed ; then
+ pyenvdirs=($(brew --prefix pyenv) "${pyenvdirs[@]}")
+fi
+
+for pyenvdir in "${pyenvdirs[@]}" ; do
+ if [ -d $pyenvdir/bin -a $FOUND_PYENV -eq 0 ] ; then
+ FOUND_PYENV=1
+ export PYENV_ROOT=$pyenvdir
+ export PATH=${pyenvdir}/bin:$PATH
+ eval "$(pyenv init --no-rehash - zsh)"
+
+ function pyenv_prompt_info() {
+ echo "$(pyenv version-name)"
+ }
+ fi
+done
+unset pyenvdir
+
+if [ $FOUND_PYENV -eq 0 ] ; then
+ function pyenv_prompt_info() { echo "system: $(python -V 2>&1 | cut -f 2 -d ' ')" }
+fi
diff --git a/plugins/python/python.plugin.zsh b/plugins/python/python.plugin.zsh
index 852c8b919..a8f9760ad 100644
--- a/plugins/python/python.plugin.zsh
+++ b/plugins/python/python.plugin.zsh
@@ -6,6 +6,7 @@ alias pyfind='find . -name "*.py"'
function pyclean() {
ZSH_PYCLEAN_PLACES=${*:-'.'}
find ${ZSH_PYCLEAN_PLACES} -type f -name "*.py[co]" -delete
+ find ${ZSH_PYCLEAN_PLACES} -type d -name "__pycache__" -delete
}
# Grep among .py files
diff --git a/plugins/rails3/_rails3 b/plugins/rails/_rails
index 97915e68b..96f57ce64 100644
--- a/plugins/rails3/_rails3
+++ b/plugins/rails/_rails
@@ -1,10 +1,6 @@
#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")'
@@ -14,14 +10,20 @@ _1st_arguments=(
'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'
+
+ 'plugin new:Generates skeleton for developing a Rails plugin'
+ 'runner:Run a piece of code in the application environment (short-cut alias: "r")'
)
_rails_generate_arguments() {
generate_arguments=(
+ assets
controller
+ decorator
generator
helper
integration_test
@@ -36,9 +38,11 @@ _rails_generate_arguments() {
scaffold_controller
session_migration
stylesheets
+ task
)
}
+
_arguments \
'(--version)--version[show version]' \
'(--help)--help[show help]' \
@@ -50,7 +54,10 @@ if (( CURRENT == 1 )); then
fi
case "$words[1]" in
- generate)
+ g|generate)
+ _rails_generate_arguments
+ _wanted generate_arguments expl 'all generate' compadd -a generate_arguments ;;
+ d|destroy)
_rails_generate_arguments
_wanted generate_arguments expl 'all generate' compadd -a generate_arguments ;;
esac
diff --git a/plugins/rails/rails.plugin.zsh b/plugins/rails/rails.plugin.zsh
index dd8b174b2..23d15a9a1 100644
--- a/plugins/rails/rails.plugin.zsh
+++ b/plugins/rails/rails.plugin.zsh
@@ -1,20 +1,70 @@
+function _rails_command () {
+ if [ -e "script/server" ]; then
+ ruby script/$@
+ elif [ -e "script/rails" ]; then
+ ruby script/rails $@
+ elif [ -e "bin/rails" ]; then
+ bin/rails $@
+ else
+ rails $@
+ fi
+}
+
+function _rake_command () {
+ if [ -e "bin/rake" ]; then
+ bin/rake $@
+ else
+ rake $@
+ fi
+}
+
+alias rails='_rails_command'
+compdef _rails_command=rails
+
+alias rake='_rake_command'
+compdef _rake_command=rake
+
+alias devlog='tail -f log/development.log'
+alias prodlog='tail -f log/production.log'
+alias testlog='tail -f log/test.log'
+
+alias -g RED='RAILS_ENV=development'
+alias -g REP='RAILS_ENV=production'
+alias -g RET='RAILS_ENV=test'
+
+# Rails aliases
+alias rc='rails console'
+alias rd='rails destroy'
+alias rdb='rails dbconsole'
+alias rg='rails generate'
+alias rgm='rails generate migration'
+alias rp='rails plugin'
+alias ru='rails runner'
+alias rs='rails server'
+alias rsd='rails server --debugger'
+
+# Rake aliases
+alias rdm='rake db:migrate'
+alias rdr='rake db:rollback'
+alias rdc='rake db:create'
+alias rds='rake db:seed'
+alias rdd='rake db:drop'
+alias rdtc='rake db:test:clone'
+alias rdtp='rake db:test:prepare'
+
+alias rlc='rake log:clear'
+alias rn='rake notes'
+alias rr='rake routes'
+
+# legacy stuff
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 rdbtp='rake db:test:prepare'
-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'
function remote_console() {
/usr/bin/env ssh $1 "( cd $2 && ruby script/console production )"
diff --git a/plugins/rails3/rails3.plugin.zsh b/plugins/rails3/rails3.plugin.zsh
index 2555fab67..261b92108 100644
--- a/plugins/rails3/rails3.plugin.zsh
+++ b/plugins/rails3/rails3.plugin.zsh
@@ -1,28 +1,4 @@
-# Rails 3 aliases, backwards-compatible with Rails 2.
-
-function _rails_command () {
- if [ -e "script/server" ]; then
- ruby script/$@
- else
- ruby script/rails $@
- fi
-}
-
-alias rc='_rails_command console'
-alias rd='_rails_command destroy'
-alias rdb='_rails_command dbconsole'
-alias rdbm='rake db:migrate db:test:clone'
-alias rg='_rails_command generate'
-alias rgm='_rails_command generate migration'
-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'
-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'
-alias -g REP='RAILS_ENV=production'
-alias -g RED='RAILS_ENV=development'
+echo "It looks like you have been using the 'rails3' plugin,"
+echo "which has been deprecated in favor of a newly consolidated 'rails' plugin."
+echo "You will want to modify your ~/.zshrc configuration to begin using it."
+echo "Learn more at https://github.com/robbyrussell/oh-my-zsh/pull/2240"
diff --git a/plugins/rails4/rails4.plugin.zsh b/plugins/rails4/rails4.plugin.zsh
index cb6cf816d..5452c242c 100644
--- a/plugins/rails4/rails4.plugin.zsh
+++ b/plugins/rails4/rails4.plugin.zsh
@@ -1,32 +1,4 @@
-# Rails 4 aliases
-
-function _rails_command () {
- if [ -e "script/server" ]; then
- ruby script/$@
- elif [ -e "script/rails" ]; then
- ruby script/rails $@
- else
- ruby bin/rails $@
- fi
-}
-
-alias rc='_rails_command console'
-alias rd='_rails_command destroy'
-alias rdb='_rails_command dbconsole'
-alias rdbm='rake db:migrate db:test:clone'
-alias rg='_rails_command generate'
-alias rgm='_rails_command generate migration'
-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'
-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'
-alias rds='rake db:seed'
-alias rlc='rake log:clear'
-alias rn='rake notes'
-alias rr='rake routes'
+echo "It looks like you have been using the 'rails4' plugin,"
+echo "which has been deprecated in favor of a newly consolidated 'rails' plugin."
+echo "You will want to modify your ~/.zshrc configuration to begin using it."
+echo "Learn more at https://github.com/robbyrussell/oh-my-zsh/pull/2240"
diff --git a/plugins/rvm/rvm.plugin.zsh b/plugins/rvm/rvm.plugin.zsh
index e6ad6450d..3bde154df 100644
--- a/plugins/rvm/rvm.plugin.zsh
+++ b/plugins/rvm/rvm.plugin.zsh
@@ -31,7 +31,7 @@ compdef _rb19 rb19
function rb20 {
if [ -z "$1" ]; then
- rvm use "$ruby"
+ rvm use "$ruby20"
else
rvm use "$ruby20@$1"
fi
diff --git a/plugins/sfffe/sfffe.plugin.zsh b/plugins/sfffe/sfffe.plugin.zsh
new file mode 100644
index 000000000..a0f034908
--- /dev/null
+++ b/plugins/sfffe/sfffe.plugin.zsh
@@ -0,0 +1,28 @@
+# ------------------------------------------------------------------------------
+# FILE: sfffe.plugin.zsh
+# DESCRIPTION: search file for FE
+# AUTHOR: yleo77 (ylep77@gmail.com)
+# VERSION: 0.1
+# REQUIRE: ack
+# ------------------------------------------------------------------------------
+
+if [ ! -x $(which ack) ]; then
+ echo \'ack\' is not installed!
+ exit -1
+fi
+
+ajs() {
+ ack "$@" --type js
+}
+
+acss() {
+ ack "$@" --type css
+}
+
+fjs() {
+ find ./ -name "$@*" -type f | grep '\.js'
+}
+
+fcss() {
+ find ./ -name "$@*" -type f | grep '\.css'
+}
diff --git a/plugins/ssh-agent/ssh-agent.plugin.zsh b/plugins/ssh-agent/ssh-agent.plugin.zsh
index 3b0042a7d..a1e64ad0f 100644
--- a/plugins/ssh-agent/ssh-agent.plugin.zsh
+++ b/plugins/ssh-agent/ssh-agent.plugin.zsh
@@ -57,7 +57,7 @@ if [[ ${_plugin__forwarding} == "yes" && -n "$SSH_AUTH_SOCK" ]]; then
elif [ -f "${_plugin__ssh_env}" ]; then
# Source SSH settings, if applicable
. ${_plugin__ssh_env} > /dev/null
- ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
+ ps x | grep ${SSH_AGENT_PID} | grep ssh-agent > /dev/null || {
_plugin__start_agent;
}
else
diff --git a/plugins/sublime/sublime.plugin.zsh b/plugins/sublime/sublime.plugin.zsh
index 82faf87c9..566279183 100755
--- a/plugins/sublime/sublime.plugin.zsh
+++ b/plugins/sublime/sublime.plugin.zsh
@@ -2,29 +2,32 @@
local _sublime_darwin_paths > /dev/null 2>&1
_sublime_darwin_paths=(
- "/usr/local/bin/subl"
- "$HOME/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl"
- "$HOME/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl"
- "/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl"
- "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl"
+ "/usr/local/bin/subl"
+ "$HOME/Applications/Sublime Text 3.app/Contents/SharedSupport/bin/subl"
+ "$HOME/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl"
+ "$HOME/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl"
+ "/Applications/Sublime Text 3.app/Contents/SharedSupport/bin/subl"
+ "/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl"
+ "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl"
)
if [[ $('uname') == 'Linux' ]]; then
- if [ -f '/usr/bin/sublime_text' ]; then
- st_run() { nohup /usr/bin/sublime_text $@ > /dev/null & }
- else
- st_run() { nohup /usr/bin/sublime-text $@ > /dev/null & }
- fi
- alias st=st_run
+ if [ -f '/usr/bin/sublime_text' ]; then
+ st_run() { nohup /usr/bin/sublime_text $@ > /dev/null & }
+ else
+ st_run() { nohup /usr/bin/sublime-text $@ > /dev/null & }
+ fi
+ alias st=st_run
elif [[ $('uname') == 'Darwin' ]]; then
- for _sublime_path in $_sublime_darwin_paths; do
- if [[ -a $_sublime_path ]]; then
- alias st="'$_sublime_path'"
- break
- fi
- done
+ for _sublime_path in $_sublime_darwin_paths; do
+ if [[ -a $_sublime_path ]]; then
+ alias subl="'$_sublime_path'"
+ alias st=subl
+ break
+ fi
+ done
fi
alias stt='st .'
diff --git a/plugins/suse/suse.plugin.zsh b/plugins/suse/suse.plugin.zsh
index d46286948..afd8ecabd 100644
--- a/plugins/suse/suse.plugin.zsh
+++ b/plugins/suse/suse.plugin.zsh
@@ -1,7 +1,61 @@
-alias zi='sudo zypper install'
-alias zrf='sudo zypper refresh'
-alias zs='zypper search'
-alias zup='sudo zypper dist-upgrade'
-alias zrm='sudo zypper remove'
-alias zp='sudo zypper patch'
-alias zps='sudo zypper ps'
+#Alias for Zypper according to the offical Zypper's alias
+
+#Main commands
+alias z='sudo zypper' #call zypper
+alias zh='sudo zypper -h' #print help
+alias zhse='sudo zypper -h se' #print help for the search command
+alias zlicenses='sudo zypper licenses' #prints a report about licenses and EULAs of installed packages
+alias zps='sudo zypper ps' #list process using deleted files
+alias zshell='sudo zypper shell' #open a zypper shell session
+alias zsource-download='sudo zypper source-download' #download source rpms for all installed packages
+alias ztos='sudo zypper tos' #shows the ID string of the target operating system
+alias zvcmp='sudo zypper vcmp' #tell whether version1 is older or newer than version2
+
+#Packages commands
+alias zin='sudo zypper in' #install packages
+alias zinr='sudo zypper inr' #install newly added packages recommended by already installed ones
+alias zrm='sudo zypper rm' #remove packages
+alias zsi='sudo zypper si' #install source of a package
+alias zve='sudo zypper ve' #verify dependencies of installed packages
+
+#Updates commands
+alias zdup='sudo zypper dup' #upgrade packages
+alias zlp='sudo zypper lp' #list necessary patchs
+alias zlu='sudo zypper lu' #list updates
+alias zpchk='sudo zypper pchk' #check for patches
+alias zup='sudo zypper up' #update packages
+alias zpatch='sudo zypper patch' #install patches
+
+#Request commands
+alias zif='sudo zypper if' #display info about packages
+alias zpa='sudo zypper pa' #list packages
+alias zpatch-info='sudo zypper patch-info' #display info about patches
+alias zpattern-info='sudo zypper patch-info' #display info about patterns
+alias zproduct-info='sudo zypper patch-info' #display info about products
+alias zpch='sudo zypper pch' #list all patches
+alias zpd='sudo zypper pd' #list products
+alias zpt='sudo zypper pt' #list patterns
+alias zse='sudo zypper se' #search for packages
+alias zwp='sudo zypper wp' #list all packages providing the specified capability
+
+#Repositories commands
+alias zar='sudo zypper ar' #add a repository
+alias zcl='sudo zypper clean' #clean cache
+alias zlr='sudo zypper lr' #list repositories
+alias zmr='sudo zypper mr' #modify repositories
+alias znr='sudo zypper nr' #rename repositories (for the alias only)
+alias zref='sudo zypper ref' #refresh repositories
+alias zrr='sudo zypper rr' #remove repositories
+
+#Services commands
+alias zas='sudo zypper as' #adds a service specified by URI to the system
+alias zms='sudo zypper ms' #modify properties of specified services
+alias zrefs='sudo zypper refs' #refreshing a service mean executing the service's special task
+alias zrs='sudo zypper rs' #remove specified repository index service from the sytem
+alias zls='sudo zypper ls' #list services defined on the system
+
+#Package Locks Management commands
+alias zal='sudo zypper al' #add a package lock
+alias zcl='sudo zypper cl' #Remove unused locks
+alias zll='sudo zypper ll' #list currently active package locks
+alias zrl='sudo zypper rl' #remove specified package lock
diff --git a/plugins/terminalapp/terminalapp.plugin.zsh b/plugins/terminalapp/terminalapp.plugin.zsh
index 2249b1e2f..6e47ee188 100644
--- a/plugins/terminalapp/terminalapp.plugin.zsh
+++ b/plugins/terminalapp/terminalapp.plugin.zsh
@@ -32,7 +32,7 @@ if [[ "$TERM_PROGRAM" == "Apple_Terminal" ]] && [[ -z "$INSIDE_EMACS" ]]; then
# Register the function so it is called whenever the working
# directory changes.
autoload add-zsh-hook
- add-zsh-hook chpwd update_terminal_cwd
+ add-zsh-hook precmd update_terminal_cwd
# Tell the terminal about the initial directory.
update_terminal_cwd
diff --git a/plugins/themes/themes.plugin.zsh b/plugins/themes/themes.plugin.zsh
index 8bab257ea..7519b0253 100644
--- a/plugins/themes/themes.plugin.zsh
+++ b/plugins/themes/themes.plugin.zsh
@@ -1,6 +1,6 @@
function theme
{
- if [ "$1" = "random" ]; then
+ if [ -z "$1" ] || [ "$1" = "random" ]; then
themes=($ZSH/themes/*zsh-theme)
N=${#themes[@]}
((N=(RANDOM%N)+1))
diff --git a/plugins/tmux/tmux.plugin.zsh b/plugins/tmux/tmux.plugin.zsh
index 3ecc2ac69..626c41f3d 100644
--- a/plugins/tmux/tmux.plugin.zsh
+++ b/plugins/tmux/tmux.plugin.zsh
@@ -1,3 +1,11 @@
+#
+# Aliases
+#
+
+alias ta='tmux attach -t'
+alias ts='tmux new-session -s'
+alias tl='tmux list-sessions'
+
# Only run if tmux is actually installed
if which tmux &> /dev/null
then
@@ -38,7 +46,7 @@ if which tmux &> /dev/null
fi
# Set the correct local config file to use.
- if [[ "$ZSH_TMUX_ITERM2" == "false" ]] && (( [[ -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"
diff --git a/plugins/wd2/wd2/wd.plugin.zsh b/plugins/wd2/wd2/wd.plugin.zsh
new file mode 100755
index 000000000..e0846ffd9
--- /dev/null
+++ b/plugins/wd2/wd2/wd.plugin.zsh
@@ -0,0 +1,9 @@
+#!/bin/zsh
+
+# WARP
+# ====
+# oh-my-zsh plugin
+#
+# @github.com/mfaerevaag/wd
+
+alias wd='. ~/.oh-my-zsh/plugins/wd/wd.sh'
diff --git a/plugins/wd2/wd2/wd.sh b/plugins/wd2/wd2/wd.sh
new file mode 100755
index 000000000..7852028c0
--- /dev/null
+++ b/plugins/wd2/wd2/wd.sh
@@ -0,0 +1,201 @@
+#!/bin/zsh
+
+# WARP
+# ====
+# Jump to custom directories in terminal
+# because `cd` takes too long...
+#
+# @github.com/mfaerevaag/wd
+
+
+## variables
+CONFIG=$HOME/.warprc
+
+## colors
+BLUE="\033[96m"
+GREEN="\033[92m"
+YELLOW="\033[93m"
+RED="\033[91m"
+NOC="\033[m"
+
+
+## load warp points
+typeset -A points
+while read line
+do
+ arr=(${(s,:,)line})
+ key=${arr[1]}
+ val=${arr[2]}
+
+ points[$key]=$val
+done < $CONFIG
+
+
+## functions
+# prepended wd_ to not conflict with your environment (no sub shell)
+
+wd_warp()
+{
+ if [[ $1 =~ "^\.+$" ]]
+ then
+ if [[ $#1 < 2 ]]
+ then
+ wd_print_msg $YELLOW "Warping to current directory?"
+ else
+ (( n = $#1 - 1 ))
+ wd_print_msg $BLUE "Warping..."
+ cd -$n > /dev/null
+ fi
+ elif [[ ${points[$1]} != "" ]]
+ then
+ wd_print_msg $BLUE "Warping..."
+ cd ${points[$1]}
+ else
+ wd_print_msg $RED "Unkown warp point '$1'"
+ fi
+}
+
+wd_add()
+{
+ if [[ $1 =~ "^\.+$" ]]
+ then
+ wd_print_msg $RED "Illeagal warp point (see README)."
+ elif [[ ${points[$1]} == "" ]] || $2
+ then
+ wd_remove $1 > /dev/null
+ print "$1:$PWD" >> $CONFIG
+ wd_print_msg $GREEN "Warp point added"
+ else
+ wd_print_msg $YELLOW "Warp point '$1' alredy exists. Use 'add!' to overwrite."
+ fi
+}
+
+wd_remove()
+{
+ if [[ ${points[$1]} != "" ]]
+ then
+ if wd_tmp=`sed "/^$1:/d" $CONFIG`
+ then
+ echo $wd_tmp > $CONFIG
+ wd_print_msg $GREEN "Warp point removed"
+ else
+ wd_print_msg $RED "Warp point unsuccessfully removed. Sorry!"
+ fi
+ else
+ wd_print_msg $RED "Warp point was not found"
+ fi
+}
+
+wd_show()
+{
+ wd_print_msg $BLUE "Warp points to current directory:"
+ wd_list_all | grep $PWD$
+}
+
+wd_list_all()
+{
+ wd_print_msg $BLUE "All warp points:"
+ while read line
+ do
+ if [[ $line != "" ]]
+ then
+ arr=(${(s,:,)line})
+ key=${arr[1]}
+ val=${arr[2]}
+
+ print "\t" $key "\t -> \t" $val
+ fi
+ done < $CONFIG
+}
+
+wd_print_msg()
+{
+ if [[ $1 == "" || $2 == "" ]]
+ then
+ print " $RED*$NOC Could not print message. Sorry!"
+ else
+ print " $1*$NOC $2"
+ fi
+}
+
+wd_print_usage()
+{
+ print "Usage: wd [add|-a|--add] [rm|-r|--remove] [ls|-l|--list] <point>"
+ print "\nCommands:"
+ print "\t add \t Adds the current working directory to your warp points"
+ print "\t add! \t Overwrites existing warp point"
+ print "\t remove Removes the given warp point"
+ print "\t list \t Outputs all stored warp points"
+ print "\t help \t Show this extremely helpful text"
+}
+
+
+## run
+
+# get opts
+args=`getopt -o a:r:lhs -l add:,remove:,list,help,show -- $*`
+
+if [[ $? -ne 0 || $#* -eq 0 ]]
+then
+ wd_print_usage
+else
+ # can't exit, as this would exit the excecuting shell
+ # e.i. your terminal
+
+ #set -- $args # WTF
+
+ for i
+ do
+ case "$i"
+ in
+ -a|--add|add)
+ wd_add $2 false
+ shift
+ shift
+ break
+ ;;
+ -a!|--add!|add!)
+ wd_add $2 true
+ shift
+ shift
+ break
+ ;;
+ -r|--remove|rm)
+ wd_remove $2
+ shift
+ shift
+ break
+ ;;
+ -l|--list|ls)
+ wd_list_all
+ shift
+ break
+ ;;
+ -h|--help|help)
+ wd_print_usage
+ shift
+ break
+ ;;
+ -s|--show|show)
+ wd_show
+ shift
+ break
+ ;;
+ *)
+ wd_warp $i
+ shift
+ break
+ ;;
+ --)
+ shift; break;;
+ esac
+ done
+fi
+
+
+## garbage collection
+# if not, next time warp will pick up variables from this run
+# remember, there's no sub shell
+points=""
+args=""
+unhash -d val &> /dev/null # fixes issue #1
diff --git a/plugins/web-search/web-search.plugin.zsh b/plugins/web-search/web-search.plugin.zsh
index 6b6de2b15..8eedb90ee 100644
--- a/plugins/web-search/web-search.plugin.zsh
+++ b/plugins/web-search/web-search.plugin.zsh
@@ -11,7 +11,7 @@ function web_search() {
fi
# check whether the search engine is supported
- if [[ ! $1 =~ '(google|bing|yahoo)' ]];
+ if [[ ! $1 =~ '(google|bing|yahoo|duckduckgo)' ]];
then
echo "Search engine $1 not supported."
return 1
@@ -24,8 +24,12 @@ function web_search() {
$open_cmd "$url"
return
fi
-
- url="${url}/search?q="
+ if [[ $1 == 'duckduckgo' ]]; then
+ #slightly different search syntax for DDG
+ url="${url}/?q="
+ else
+ url="${url}/search?q="
+ fi
shift # shift out $1
while [[ $# -gt 0 ]]; do
@@ -34,10 +38,19 @@ function web_search() {
done
url="${url%?}" # remove the last '+'
-
+
$open_cmd "$url"
}
+
alias bing='web_search bing'
alias google='web_search google'
alias yahoo='web_search yahoo'
+alias ddg='web_search duckduckgo'
+#add your own !bang searches here
+alias wiki='web_search duckduckgo \!w'
+alias news='web_search duckduckgo \!n'
+alias youtube='web_search duckduckgo \!yt'
+alias map='web_search duckduckgo \!m'
+alias image='web_search duckduckgo \!i'
+alias ducky='web_search duckduckgo \!'
diff --git a/plugins/z/Makefile b/plugins/z/Makefile
new file mode 100644
index 000000000..dcf433d40
--- /dev/null
+++ b/plugins/z/Makefile
@@ -0,0 +1,4 @@
+readme:
+ @groff -man -Tascii z.1 | col -bx
+
+.PHONY: readme
diff --git a/plugins/z/README b/plugins/z/README
new file mode 100644
index 000000000..ec5abc6f5
--- /dev/null
+++ b/plugins/z/README
@@ -0,0 +1,135 @@
+Z(1) User Commands Z(1)
+
+
+
+NAME
+ z - jump around
+
+SYNOPSIS
+ z [-chlrt] [regex1 regex2 ... regexn]
+
+AVAILABILITY
+ bash, zsh
+
+DESCRIPTION
+ Tracks your most used directories, based on 'frecency'.
+
+ After a short learning phase, z will take you to the most 'frecent'
+ directory that matches ALL of the regexes given on the command line.
+
+OPTIONS
+ -c restrict matches to subdirectories of the current directory.
+
+ -h show a brief help message
+
+ -l list only
+
+ -r match by rank only
+
+ -t match by recent access only
+
+EXAMPLES
+ z foo cd to most frecent dir matching foo
+
+ z foo bar cd to most frecent dir matching foo and bar
+
+ z -r foo cd to highest ranked dir matching foo
+
+ z -t foo cd to most recently accessed dir matching foo
+
+ z -l foo list all dirs matching foo (by frecency)
+
+NOTES
+ Installation:
+ Put something like this in your $HOME/.bashrc or $HOME/.zshrc:
+
+ . /path/to/z.sh
+
+ cd around for a while to build up the db.
+
+ PROFIT!!
+
+ Optionally:
+ Set $_Z_CMD to change the command name (default z).
+ Set $_Z_DATA to change the datafile (default $HOME/.z).
+ Set $_Z_NO_RESOLVE_SYMLINKS to prevent symlink resolution.
+ Set $_Z_NO_PROMPT_COMMAND to handle PROMPT_COMMAND/precmd your-
+ self.
+ Set $_Z_EXCLUDE_DIRS to an array of directories to exclude.
+ (These settings should go in .bashrc/.zshrc before the lines
+ added above.)
+ Install the provided man page z.1 somewhere like
+ /usr/local/man/man1.
+
+ Aging:
+ The rank of directories maintained by z undergoes aging based on a sim-
+ ple formula. The rank of each entry is incremented every time it is
+ accessed. When the sum of ranks is greater than 6000, all ranks are
+ multiplied by 0.99. Entries with a rank lower than 1 are forgotten.
+
+ Frecency:
+ Frecency is a portmantaeu of 'recent' and 'frequency'. It is a weighted
+ rank that depends on how often and how recently something occured. As
+ far as I know, Mozilla came up with the term.
+
+ To z, a directory that has low ranking but has been accessed recently
+ will quickly have higher rank than a directory accessed frequently a
+ long time ago.
+
+ Frecency is determined at runtime.
+
+ Common:
+ When multiple directories match all queries, and they all have a common
+ prefix, z will cd to the shortest matching directory, without regard to
+ priority. This has been in effect, if undocumented, for quite some
+ time, but should probably be configurable or reconsidered.
+
+ Tab Completion:
+ z supports tab completion. After any number of arguments, press TAB to
+ complete on directories that match each argument. Due to limitations of
+ the completion implementations, only the last argument will be com-
+ pleted in the shell.
+
+ Internally, z decides you've requested a completion if the last argu-
+ ment passed is an absolute path to an existing directory. This may
+ cause unexpected behavior if the last argument to z begins with /.
+
+ENVIRONMENT
+ A function _z() is defined.
+
+ The contents of the variable $_Z_CMD is aliased to _z 2>&1. If not set,
+ $_Z_CMD defaults to z.
+
+ The environment variable $_Z_DATA can be used to control the datafile
+ location. If it is not defined, the location defaults to $HOME/.z.
+
+ The environment variable $_Z_NO_RESOLVE_SYMLINKS can be set to prevent
+ resolving of symlinks. If it is not set, symbolic links will be
+ resolved when added to the datafile.
+
+ In bash, z prepends a command to the PROMPT_COMMAND environment vari-
+ able to maintain its database. In zsh, z appends a function _z_precmd
+ to the precmd_functions array.
+
+ The environment variable $_Z_NO_PROMPT_COMMAND can be set if you want
+ to handle PROMPT_COMMAND or precmd yourself.
+
+ The environment variable $_Z_EXCLUDE_DIRS can be set to an array of
+ directories to exclude from tracking. $HOME is always excluded. Direc-
+ tories must be full paths without trailing slashes.
+
+FILES
+ Data is stored in $HOME/.z. This can be overridden by setting the
+ $_Z_DATA environment variable. When initialized, z will raise an error
+ if this path is a directory, and not function correctly.
+
+ A man page (z.1) is provided.
+
+SEE ALSO
+ regex(7), pushd, popd, autojump, cdargs
+
+ Please file bugs at https://github.com/rupa/z/
+
+
+
+z January 2013 Z(1)
diff --git a/plugins/z/z.1 b/plugins/z/z.1
new file mode 100644
index 000000000..022a4b35d
--- /dev/null
+++ b/plugins/z/z.1
@@ -0,0 +1,155 @@
+.TH "Z" "1" "January 2013" "z" "User Commands"
+.SH
+NAME
+z \- jump around
+.SH
+SYNOPSIS
+z [\-chlrt] [regex1 regex2 ... regexn]
+.SH
+AVAILABILITY
+bash, zsh
+.SH
+DESCRIPTION
+Tracks your most used directories, based on 'frecency'.
+.P
+After a short learning phase, \fBz\fR will take you to the most 'frecent'
+directory that matches ALL of the regexes given on the command line.
+.SH
+OPTIONS
+.TP
+\fB\-c\fR
+restrict matches to subdirectories of the current directory.
+.TP
+\fB\-h\fR
+show a brief help message
+.TP
+\fB\-l\fR
+list only
+.TP
+\fB\-r\fR
+match by rank only
+.TP
+\fB\-t\fR
+match by recent access only
+.SH EXAMPLES
+.TP 14
+\fBz foo\fR
+cd to most frecent dir matching foo
+.TP 14
+\fBz foo bar\fR
+cd to most frecent dir matching foo and bar
+.TP 14
+\fBz -r foo\fR
+cd to highest ranked dir matching foo
+.TP 14
+\fBz -t foo\fR
+cd to most recently accessed dir matching foo
+.TP 14
+\fBz -l foo\fR
+list all dirs matching foo (by frecency)
+.SH
+NOTES
+.SS
+Installation:
+.P
+Put something like this in your \fB$HOME/.bashrc\fR or \fB$HOME/.zshrc\fR:
+.RS
+.P
+\fB. /path/to/z.sh\fR
+.RE
+.P
+\fBcd\fR around for a while to build up the db.
+.P
+PROFIT!!
+.P
+Optionally:
+.RS
+Set \fB$_Z_CMD\fR to change the command name (default \fBz\fR).
+.RE
+.RS
+Set \fB$_Z_DATA\fR to change the datafile (default \fB$HOME/.z\fR).
+.RE
+.RS
+Set \fB$_Z_NO_RESOLVE_SYMLINKS\fR to prevent symlink resolution.
+.RE
+.RS
+Set \fB$_Z_NO_PROMPT_COMMAND\fR to handle \fBPROMPT_COMMAND/precmd\fR yourself.
+.RE
+.RS
+Set \fB$_Z_EXCLUDE_DIRS\fR to an array of directories to exclude.
+.RE
+.RS
+(These settings should go in .bashrc/.zshrc before the lines added above.)
+.RE
+.RS
+Install the provided man page \fBz.1\fR somewhere like \fB/usr/local/man/man1\fR.
+.RE
+.SS
+Aging:
+The rank of directories maintained by \fBz\fR undergoes aging based on a simple
+formula. The rank of each entry is incremented every time it is accessed. When
+the sum of ranks is greater than 6000, all ranks are multiplied by 0.99. Entries
+with a rank lower than 1 are forgotten.
+.SS
+Frecency:
+Frecency is a portmantaeu of 'recent' and 'frequency'. It is a weighted rank
+that depends on how often and how recently something occured. As far as I
+know, Mozilla came up with the term.
+.P
+To \fBz\fR, a directory that has low ranking but has been accessed recently
+will quickly have higher rank than a directory accessed frequently a long time
+ago.
+.P
+Frecency is determined at runtime.
+.SS
+Common:
+When multiple directories match all queries, and they all have a common prefix,
+\fBz\fR will cd to the shortest matching directory, without regard to priority.
+This has been in effect, if undocumented, for quite some time, but should
+probably be configurable or reconsidered.
+.SS
+Tab Completion:
+\fBz\fR supports tab completion. After any number of arguments, press TAB to
+complete on directories that match each argument. Due to limitations of the
+completion implementations, only the last argument will be completed in the
+shell.
+.P
+Internally, \fBz\fR decides you've requested a completion if the last argument
+passed is an absolute path to an existing directory. This may cause unexpected
+behavior if the last argument to \fBz\fR begins with \fB/\fR.
+.SH
+ENVIRONMENT
+A function \fB_z()\fR is defined.
+.P
+The contents of the variable \fB$_Z_CMD\fR is aliased to \fB_z 2>&1\fR. If not
+set, \fB$_Z_CMD\fR defaults to \fBz\fR.
+.P
+The environment variable \fB$_Z_DATA\fR can be used to control the datafile
+location. If it is not defined, the location defaults to \fB$HOME/.z\fR.
+.P
+The environment variable \fB$_Z_NO_RESOLVE_SYMLINKS\fR can be set to prevent
+resolving of symlinks. If it is not set, symbolic links will be resolved when
+added to the datafile.
+.P
+In bash, \fBz\fR prepends a command to the \fBPROMPT_COMMAND\fR environment
+variable to maintain its database. In zsh, \fBz\fR appends a function
+\fB_z_precmd\fR to the \fBprecmd_functions\fR array.
+.P
+The environment variable \fB$_Z_NO_PROMPT_COMMAND\fR can be set if you want to
+handle \fBPROMPT_COMMAND\fR or \fBprecmd\fR yourself.
+.P
+The environment variable \fB$_Z_EXCLUDE_DIRS\fR can be set to an array of
+directories to exclude from tracking. \fB$HOME\fR is always excluded.
+Directories must be full paths without trailing slashes.
+.SH
+FILES
+Data is stored in \fB$HOME/.z\fR. This can be overridden by setting the
+\fB$_Z_DATA\fR environment variable. When initialized, \fBz\fR will raise an
+error if this path is a directory, and not function correctly.
+.P
+A man page (\fBz.1\fR) is provided.
+.SH
+SEE ALSO
+regex(7), pushd, popd, autojump, cdargs
+.P
+Please file bugs at https://github.com/rupa/z/
diff --git a/plugins/z/z.plugin.zsh b/plugins/z/z.plugin.zsh
new file mode 100644
index 000000000..196b88b12
--- /dev/null
+++ b/plugins/z/z.plugin.zsh
@@ -0,0 +1,6 @@
+_load_z() {
+ source $1/z.sh
+}
+
+[[ -f $ZSH_CUSTOM/plugins/z/z.plugin.zsh ]] && _load_z $ZSH_CUSTOM/plugins/z
+[[ -f $ZSH/plugins/z/z.plugin.zsh ]] && _load_z $ZSH/plugins/z
diff --git a/plugins/z/z.sh b/plugins/z/z.sh
new file mode 100644
index 000000000..7e444ef46
--- /dev/null
+++ b/plugins/z/z.sh
@@ -0,0 +1,228 @@
+# Copyright (c) 2009 rupa deadwyler under the WTFPL license
+
+# maintains a jump-list of the directories you actually use
+#
+# INSTALL:
+# * put something like this in your .bashrc/.zshrc:
+# . /path/to/z.sh
+# * cd around for a while to build up the db
+# * PROFIT!!
+# * optionally:
+# set $_Z_CMD in .bashrc/.zshrc to change the command (default z).
+# set $_Z_DATA in .bashrc/.zshrc to change the datafile (default ~/.z).
+# set $_Z_NO_RESOLVE_SYMLINKS to prevent symlink resolution.
+# set $_Z_NO_PROMPT_COMMAND if you're handling PROMPT_COMMAND yourself.
+# set $_Z_EXCLUDE_DIRS to an array of directories to exclude.
+#
+# USE:
+# * z foo # cd to most frecent dir matching foo
+# * z foo bar # cd to most frecent dir matching foo and bar
+# * z -r foo # cd to highest ranked dir matching foo
+# * z -t foo # cd to most recently accessed dir matching foo
+# * z -l foo # list matches instead of cd
+# * z -c foo # restrict matches to subdirs of $PWD
+
+case $- in
+ *i*) ;;
+ *) echo 'ERROR: z.sh is meant to be sourced, not directly executed.'
+esac
+
+[ -d "${_Z_DATA:-$HOME/.z}" ] && {
+ echo "ERROR: z.sh's datafile (${_Z_DATA:-$HOME/.z}) is a directory."
+}
+
+_z() {
+
+ local datafile="${_Z_DATA:-$HOME/.z}"
+
+ # bail out if we don't own ~/.z (we're another user but our ENV is still set)
+ [ -f "$datafile" -a ! -O "$datafile" ] && return
+
+ # add entries
+ if [ "$1" = "--add" ]; then
+ shift
+
+ # $HOME isn't worth matching
+ [ "$*" = "$HOME" ] && return
+
+ # don't track excluded dirs
+ local exclude
+ for exclude in "${_Z_EXCLUDE_DIRS[@]}"; do
+ [ "$*" = "$exclude" ] && return
+ done
+
+ # maintain the file
+ local tempfile
+ tempfile="$(mktemp "$datafile.XXXXXX")" || return
+ while read line; do
+ [ -d "${line%%\|*}" ] && echo $line
+ done < "$datafile" | awk -v path="$*" -v now="$(date +%s)" -F"|" '
+ BEGIN {
+ rank[path] = 1
+ time[path] = now
+ }
+ $2 >= 1 {
+ if( $1 == path ) {
+ rank[$1] = $2 + 1
+ time[$1] = now
+ } else {
+ rank[$1] = $2
+ time[$1] = $3
+ }
+ count += $2
+ }
+ END {
+ if( count > 6000 ) {
+ for( i in rank ) print i "|" 0.99*rank[i] "|" time[i] # aging
+ } else for( i in rank ) print i "|" rank[i] "|" time[i]
+ }
+ ' 2>/dev/null >| "$tempfile"
+ if [ $? -ne 0 -a -f "$datafile" ]; then
+ env rm -f "$tempfile"
+ else
+ env mv -f "$tempfile" "$datafile"
+ fi
+
+ # tab completion
+ elif [ "$1" = "--complete" ]; then
+ while read line; do
+ [ -d "${line%%\|*}" ] && echo $line
+ done < "$datafile" | awk -v q="$2" -F"|" '
+ BEGIN {
+ if( q == tolower(q) ) nocase = 1
+ split(substr(q,3),fnd," ")
+ }
+ {
+ if( nocase ) {
+ for( i in fnd ) tolower($1) !~ tolower(fnd[i]) && $1 = ""
+ } else {
+ for( i in fnd ) $1 !~ fnd[i] && $1 = ""
+ }
+ if( $1 ) print $1
+ }
+ ' 2>/dev/null
+
+ else
+ # list/go
+ while [ "$1" ]; do case "$1" in
+ --) while [ "$1" ]; do shift; local fnd="$fnd $1";done;;
+ -*) local opt=${1:1}; while [ "$opt" ]; do case ${opt:0:1} in
+ c) local fnd="^$PWD $fnd";;
+ h) echo "${_Z_CMD:-z} [-chlrt] args" >&2; return;;
+ l) local list=1;;
+ r) local typ="rank";;
+ t) local typ="recent";;
+ esac; opt=${opt:1}; done;;
+ *) local fnd="$fnd $1";;
+ esac; local last=$1; shift; done
+ [ "$fnd" -a "$fnd" != "^$PWD " ] || local list=1
+
+ # if we hit enter on a completion just go there
+ case "$last" in
+ # completions will always start with /
+ /*) [ -z "$list" -a -d "$last" ] && cd "$last" && return;;
+ esac
+
+ # no file yet
+ [ -f "$datafile" ] || return
+
+ local cd
+ cd="$(while read line; do
+ [ -d "${line%%\|*}" ] && echo $line
+ done < "$datafile" | awk -v t="$(date +%s)" -v list="$list" -v typ="$typ" -v q="$fnd" -F"|" '
+ function frecent(rank, time) {
+ dx = t-time
+ if( dx < 3600 ) return rank*4
+ if( dx < 86400 ) return rank*2
+ if( dx < 604800 ) return rank/2
+ return rank/4
+ }
+ function output(files, toopen, override) {
+ if( list ) {
+ cmd = "sort -n >&2"
+ for( i in files ) if( files[i] ) printf "%-10s %s\n", files[i], i | cmd
+ if( override ) printf "%-10s %s\n", "common:", override > "/dev/stderr"
+ } else {
+ if( override ) toopen = override
+ print toopen
+ }
+ }
+ function common(matches) {
+ # shortest match
+ for( i in matches ) {
+ if( matches[i] && (!short || length(i) < length(short)) ) short = i
+ }
+ if( short == "/" ) return
+ # shortest match must be common to each match. escape special characters in
+ # a copy when testing, so we can return the original.
+ clean_short = short
+ gsub(/[\(\)\[\]\|]/, "\\\\&", clean_short)
+ for( i in matches ) if( matches[i] && i !~ clean_short ) return
+ return short
+ }
+ BEGIN { split(q, a, " "); oldf = noldf = -9999999999 }
+ {
+ if( typ == "rank" ) {
+ f = $2
+ } else if( typ == "recent" ) {
+ f = $3-t
+ } else f = frecent($2, $3)
+ wcase[$1] = nocase[$1] = f
+ for( i in a ) {
+ if( $1 !~ a[i] ) delete wcase[$1]
+ if( tolower($1) !~ tolower(a[i]) ) delete nocase[$1]
+ }
+ if( wcase[$1] && wcase[$1] > oldf ) {
+ cx = $1
+ oldf = wcase[$1]
+ } else if( nocase[$1] && nocase[$1] > noldf ) {
+ ncx = $1
+ noldf = nocase[$1]
+ }
+ }
+ END {
+ if( cx ) {
+ output(wcase, cx, common(wcase))
+ } else if( ncx ) output(nocase, ncx, common(nocase))
+ }
+ ')"
+ [ $? -gt 0 ] && return
+ [ "$cd" ] && cd "$cd"
+ fi
+}
+
+alias ${_Z_CMD:-z}='_z 2>&1'
+
+[ "$_Z_NO_RESOLVE_SYMLINKS" ] || _Z_RESOLVE_SYMLINKS="-P"
+
+if compctl &> /dev/null; then
+ [ "$_Z_NO_PROMPT_COMMAND" ] || {
+ # zsh populate directory list, avoid clobbering any other precmds
+ if [ "$_Z_NO_RESOLVE_SYMLINKS" ]; then
+ _z_precmd() {
+ _z --add "${PWD:a}"
+ }
+ else
+ _z_precmd() {
+ _z --add "${PWD:A}"
+ }
+ fi
+ precmd_functions+=(_z_precmd)
+ }
+ # zsh tab completion
+ _z_zsh_tab_completion() {
+ local compl
+ read -l compl
+ reply=(${(f)"$(_z --complete "$compl")"})
+ }
+ compctl -U -K _z_zsh_tab_completion _z
+elif complete &> /dev/null; then
+ # bash tab completion
+ complete -o filenames -C '_z --complete "$COMP_LINE"' ${_Z_CMD:-z}
+ [ "$_Z_NO_PROMPT_COMMAND" ] || {
+ # bash populate directory list. avoid clobbering other PROMPT_COMMANDs.
+ echo $PROMPT_COMMAND | grep -q "_z --add" || {
+ PROMPT_COMMAND='_z --add "$(pwd '$_Z_RESOLVE_SYMLINKS' 2>/dev/null)" 2>/dev/null;'"$PROMPT_COMMAND"
+ }
+ }
+fi
diff --git a/plugins/zeus/README.md b/plugins/zeus/README.md
index d7c2aef80..8964eaaec 100644
--- a/plugins/zeus/README.md
+++ b/plugins/zeus/README.md
@@ -41,3 +41,13 @@
* `zsw` aliases `rm .zeus.sock`
* `zweep` aliases `rm .zeus.sock`
+
+`zdbr` aliases `zeus rake db:reset db:test:prepare`
+`zdbreset` aliases `zeus rake db:reset db:test:prepare`
+
+`zdbm` aliases `zeus rake db:migrate db:test:prepare`
+`zdbmigrate` aliases `zeus rake db:migrate db:test:prepare`
+
+`zdbc` aliases `zeus rake db:create`
+
+`zdbcm` aliases `zeus rake db:create db:migrate db:test:prepare`
diff --git a/plugins/zeus/zeus.plugin.zsh b/plugins/zeus/zeus.plugin.zsh
index eddfb4f94..5ec9fa579 100644
--- a/plugins/zeus/zeus.plugin.zsh
+++ b/plugins/zeus/zeus.plugin.zsh
@@ -53,3 +53,17 @@ alias zall='zeus test test/unit/*; zeus test test/functional/; zeus cucumber'
# Clean up crashed zeus instances.
alias zsw='rm .zeus.sock'
alias zweep='rm .zeus.sock'
+
+# Reset database
+alias zdbr='zeus rake db:reset db:test:prepare'
+alias zdbreset='zeus rake db:reset db:test:prepare'
+
+# Migrate and prepare database
+alias zdbm='zeus rake db:migrate db:test:prepare'
+alias zdbmigrate='zeus rake db:migrate db:test:prepare'
+
+# Create database
+alias zdbc='zeus rake db:create'
+
+# Create, migrate and prepare database
+alias zdbcm='zeus rake db:create db:migrate db:test:prepare' \ No newline at end of file