summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--README.textile20
-rw-r--r--lib/aliases.zsh4
-rw-r--r--lib/completion.zsh4
-rw-r--r--lib/directories.zsh11
-rw-r--r--lib/functions.zsh2
-rw-r--r--lib/git.zsh35
-rw-r--r--lib/key-bindings.zsh1
-rw-r--r--lib/misc.zsh4
-rw-r--r--lib/rvm.zsh11
-rw-r--r--lib/termsupport.zsh10
-rw-r--r--oh-my-zsh.sh14
-rw-r--r--plugins/archlinux/archlinux.plugin.zsh20
-rw-r--r--plugins/autojump/autojump.plugin.zsh8
-rw-r--r--plugins/battery/battery.plugin.zsh83
-rw-r--r--plugins/bundler/bundler.plugin.zsh2
-rw-r--r--plugins/cap/cap.plugin.zsh21
-rw-r--r--plugins/capistrano/_capistrano10
-rw-r--r--plugins/coffee/_coffee71
-rw-r--r--plugins/colemak/colemak-less6
-rw-r--r--plugins/colemak/colemak.plugin.zsh22
-rw-r--r--plugins/command-not-found/command-not-found.plugin.zsh2
-rw-r--r--plugins/composer/composer.plugin.zsh29
-rw-r--r--plugins/cp/cp.plugin.zsh14
-rw-r--r--plugins/debian/debian.plugin.zsh53
-rw-r--r--plugins/dircycle/dircycle.plugin.zsh10
-rw-r--r--plugins/dirpersist/dirpersist.plugin.zsh2
-rw-r--r--plugins/encode64/encode64.plugin.zsh2
-rw-r--r--plugins/fasd/fasd.plugin.zsh6
-rw-r--r--plugins/forklift/forklift.plugin.zsh44
-rw-r--r--plugins/git-extras/git-extras.plugin.zsh285
-rw-r--r--plugins/git-flow/git-flow.plugin.zsh7
-rw-r--r--plugins/git-hubflow/git-hubflow.plugin.zsh348
-rw-r--r--plugins/git-remote-branch/git-remote-branch.plugin.zsh18
-rw-r--r--plugins/git/git.plugin.zsh36
-rw-r--r--plugins/gitfast/_git78
-rw-r--r--plugins/gitfast/git-completion.bash2483
-rw-r--r--plugins/gitfast/git-prompt.sh290
-rw-r--r--plugins/gitfast/gitfast.plugin.zsh7
-rw-r--r--plugins/github/github.plugin.zsh1
-rw-r--r--plugins/heroku/_heroku1
-rw-r--r--plugins/history/history.plugin.zsh8
-rw-r--r--plugins/jira/jira.plugin.zsh38
-rwxr-xr-xplugins/jruby/jruby.plugin.zsh4
-rw-r--r--plugins/knife/_knife6
-rw-r--r--plugins/laravel/_artisan40
-rw-r--r--plugins/laravel/laravel.plugin.zsh3
-rw-r--r--plugins/last-working-dir/last-working-dir.plugin.zsh24
-rw-r--r--plugins/lol/lol.plugin.zsh2
-rw-r--r--plugins/mercurial/mercurial.plugin.zsh6
-rw-r--r--plugins/mvn/mvn.plugin.zsh170
-rw-r--r--plugins/nanoc/_nanoc44
-rw-r--r--plugins/nanoc/nanoc.plugin.zsh9
-rw-r--r--plugins/node/node.plugin.zsh2
-rw-r--r--plugins/osx/osx.plugin.zsh63
-rw-r--r--plugins/pass/_pass119
-rw-r--r--plugins/per-directory-history/per-directory-history.plugin.zsh149
-rw-r--r--plugins/python/python.plugin.zsh11
-rw-r--r--plugins/rails/rails.plugin.zsh2
-rw-r--r--plugins/rails3/rails3.plugin.zsh1
-rw-r--r--plugins/rbenv/rbenv.plugin.zsh17
-rw-r--r--plugins/rbfu/rbfu.plugin.zsh42
-rw-r--r--plugins/rsync/rsync.plugin.zsh4
-rw-r--r--plugins/rvm/_rvm147
-rw-r--r--plugins/rvm/rvm.plugin.zsh9
-rw-r--r--plugins/screen/screen.plugin.zsh54
-rwxr-xr-xplugins/sublime/sublime.plugin.zsh21
-rw-r--r--plugins/supervisor/_supervisorctl136
-rw-r--r--plugins/supervisor/_supervisord32
-rw-r--r--plugins/supervisor/supervisor.plugin.zsh1
-rw-r--r--plugins/suse/suse.plugin.zsh7
-rw-r--r--plugins/svn/svn.plugin.zsh32
-rw-r--r--plugins/symfony/symfony.plugin.zsh13
-rw-r--r--plugins/symfony2/symfony2.plugin.zsh8
-rw-r--r--plugins/systemd/systemd.plugin.zsh11
-rw-r--r--plugins/terminalapp/terminalapp.plugin.zsh42
-rw-r--r--plugins/themes/_theme3
-rw-r--r--plugins/themes/themes.plugin.zsh24
-rw-r--r--plugins/urltools/urltools.plugin.zsh36
-rw-r--r--plugins/vagrant/_vagrant7
-rw-r--r--plugins/vi-mode/vi-mode.plugin.zsh20
-rw-r--r--plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh40
-rw-r--r--plugins/yum/yum.plugin.zsh6
-rw-r--r--plugins/zeus/README.md41
-rw-r--r--plugins/zeus/zeus.plugin.zsh58
-rw-r--r--templates/zshrc.zsh-template5
-rw-r--r--themes/3den.zsh-theme7
-rw-r--r--themes/adben.zsh-theme26
-rw-r--r--themes/af-magic.zsh-theme36
-rw-r--r--themes/agnoster.zsh-theme115
-rw-r--r--themes/candy-kingdom.zsh-theme37
-rw-r--r--themes/cloud.zsh-theme6
-rw-r--r--themes/fino-time.zsh-theme39
-rw-r--r--themes/fishy.zsh-theme6
-rw-r--r--themes/frisk.zsh-theme16
-rw-r--r--themes/frontcube.zsh-theme12
-rw-r--r--themes/gentoo.zsh-theme6
-rw-r--r--themes/intheloop.zsh-theme24
-rw-r--r--themes/jnrowe.zsh-theme19
-rw-r--r--themes/jonathan.zsh-theme2
-rw-r--r--themes/junkfood.zsh-theme34
-rw-r--r--themes/kafeitu.zsh-theme6
-rw-r--r--themes/minimal.zsh-theme25
-rw-r--r--themes/mortalscumbag.zsh-theme3
-rw-r--r--themes/nebirhos.zsh-theme2
-rw-r--r--themes/norm.zsh-theme2
-rw-r--r--themes/simonoff.zsh-theme141
-rw-r--r--themes/steeef.zsh-theme2
-rw-r--r--themes/terminalparty.zsh-theme2
-rw-r--r--themes/tjkirch_mod.zsh-theme13
-rw-r--r--tools/check_for_upgrade.sh13
-rwxr-xr-xtools/install.sh10
-rw-r--r--tools/uninstall.sh18
113 files changed, 5895 insertions, 322 deletions
diff --git a/.gitignore b/.gitignore
index 2e8db7341..51a5ee6c3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,5 +4,6 @@ projects.zsh
custom/*
!custom/example
!custom/example.zsh
-cache
*.swp
+!custom/example.zshcache
+cache/
diff --git a/README.textile b/README.textile
index bf6776665..0a4545bac 100644
--- a/README.textile
+++ b/README.textile
@@ -1,5 +1,6 @@
A handful of functions, auto-complete helpers, and stuff that makes you shout...
+
bq. "OH MY ZSHELL!"
h2. Setup
@@ -25,17 +26,20 @@ h3. The manual way
@git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh@
-2. Create a new zsh config by copying the zsh template we've provided.
+2. *OPTIONAL* Backup your existing ~/.zshrc file
+
+ @cp ~/.zshrc ~/.zshrc.orig@
- *NOTE*: If you already have a ~/.zshrc file, you should back it up. @cp ~/.zshrc ~/.zshrc.orig@ in case you want to go back to your original settings.
+3. Create a new zsh config by copying the zsh template we've provided.
@cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc@
-3. Set zsh as your default shell:
+
+4. Set zsh as your default shell:
@chsh -s /bin/zsh@
-4. Start / restart zsh (open a new terminal is easy enough...)
+5. Start / restart zsh (open a new terminal is easy enough...)
h3. Problems?
@@ -68,9 +72,13 @@ h2. Help out!
I'm far from being a zsh-expert and suspect there are many ways to improve. If you have ideas on how to make the configuration easier to maintain (and faster), don't hesitate to fork and send pull requests!
-h3. Send us your theme!
+h3. (Don't) Send us your theme! (for now)
+
+-I'm hoping to collect a bunch of themes for our command prompts. You can see existing ones in the @themes/@ directory.-
+
+We have enough themes for the time being. Please fork the project and add on in there, you can let people know how to grab it from there.
+
-I'm hoping to collect a bunch of themes for our command prompts. You can see existing ones in the @themes/@ directory.
h2. Contributors
diff --git a/lib/aliases.zsh b/lib/aliases.zsh
index 0555be264..a7f699c19 100644
--- a/lib/aliases.zsh
+++ b/lib/aliases.zsh
@@ -8,6 +8,7 @@ alias -- -='cd -'
# Super user
alias _='sudo'
+alias please='sudo'
#alias g='grep -in'
@@ -16,8 +17,9 @@ alias history='fc -l 1'
# List direcory contents
alias lsa='ls -lah'
-alias l='ls -la'
+alias l='ls -lA1'
alias ll='ls -l'
+alias la='ls -lA'
alias sl=ls # often screw this up
alias afind='ack-grep -il'
diff --git a/lib/completion.zsh b/lib/completion.zsh
index b964595ed..ba839a067 100644
--- a/lib/completion.zsh
+++ b/lib/completion.zsh
@@ -32,7 +32,7 @@ zstyle ':completion:*:cd:*' tag-order local-directories directory-stack path-dir
cdpath=(.)
# use /etc/hosts and known_hosts for hostname completion
-[ -r /etc/ssh/ssh_known_hosts ] && _global_ssh_hosts=(${${${${(f)"$(</etc/ssh/ssh_known_hosts)"}:#[\|]*}%%\ *}%%,*}) || _ssh_hosts=()
+[ -r /etc/ssh/ssh_known_hosts ] && _global_ssh_hosts=(${${${${(f)"$(</etc/ssh/ssh_known_hosts)"}:#[\|]*}%%\ *}%%,*}) || _global_ssh_hosts=()
[ -r ~/.ssh/known_hosts ] && _ssh_hosts=(${${${${(f)"$(<$HOME/.ssh/known_hosts)"}:#[\|]*}%%\ *}%%,*}) || _ssh_hosts=()
[ -r /etc/hosts ] && : ${(A)_etc_hosts:=${(s: :)${(ps:\t:)${${(f)~~"$(</etc/hosts)"}%%\#*}##[:blank:]#[^[:blank:]]#}}} || _etc_hosts=()
hosts=(
@@ -46,7 +46,7 @@ zstyle ':completion:*:hosts' hosts $hosts
# Use caching so that commands like apt and dpkg complete are useable
zstyle ':completion::complete:*' use-cache 1
-zstyle ':completion::complete:*' cache-path ~/.oh-my-zsh/cache/
+zstyle ':completion::complete:*' cache-path $ZSH/cache/
# Don't complete uninteresting users
zstyle ':completion:*:*:*:users' ignored-patterns \
diff --git a/lib/directories.zsh b/lib/directories.zsh
index bb114f615..6c743e40e 100644
--- a/lib/directories.zsh
+++ b/lib/directories.zsh
@@ -26,9 +26,9 @@ cd () {
elif [[ "x$*" == "x...." ]]; then
cd ../../..
elif [[ "x$*" == "x....." ]]; then
- cd ../../..
- elif [[ "x$*" == "x......" ]]; then
cd ../../../..
+ elif [[ "x$*" == "x......" ]]; then
+ cd ../../../../..
else
builtin cd "$@"
fi
@@ -36,9 +36,4 @@ cd () {
alias md='mkdir -p'
alias rd=rmdir
-alias d='dirs -v'
-
-# mkdir & cd to it
-function mcd() {
- mkdir -p "$1" && cd "$1";
-} \ No newline at end of file
+alias d='dirs -v | head -10'
diff --git a/lib/functions.zsh b/lib/functions.zsh
index d2dcadd0c..63ab755cf 100644
--- a/lib/functions.zsh
+++ b/lib/functions.zsh
@@ -1,5 +1,5 @@
function zsh_stats() {
- history | awk '{print $2}' | sort | uniq -c | sort -rn | head
+ history | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n20
}
function uninstall_oh_my_zsh() {
diff --git a/lib/git.zsh b/lib/git.zsh
index fb4ad8ca6..95dd3dd43 100644
--- a/lib/git.zsh
+++ b/lib/git.zsh
@@ -1,6 +1,7 @@
# get the name of the branch we are on
function git_prompt_info() {
- ref=$(git symbolic-ref HEAD 2> /dev/null) || return
+ ref=$(git symbolic-ref HEAD 2> /dev/null) || \
+ ref=$(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"
}
@@ -18,6 +19,25 @@ parse_git_dirty() {
fi
}
+# 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\/}
+ 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)
+
+ if [ $ahead -eq 0 ] && [ $behind -gt 0 ]
+ then
+ echo "$ZSH_THEME_GIT_PROMPT_BEHIND_REMOTE"
+ elif [ $ahead -gt 0 ] && [ $behind -eq 0 ]
+ then
+ echo "$ZSH_THEME_GIT_PROMPT_AHEAD_REMOTE"
+ elif [ $ahead -gt 0 ] && [ $behind -gt 0 ]
+ then
+ echo "$ZSH_THEME_GIT_PROMPT_DIVERGED_REMOTE"
+ fi
+ fi
+}
# Checks if there are commits ahead from remote
function git_prompt_ahead() {
@@ -38,7 +58,7 @@ function git_prompt_long_sha() {
# Get the status of the working tree
git_prompt_status() {
- INDEX=$(git status --porcelain 2> /dev/null)
+ INDEX=$(git status --porcelain -b 2> /dev/null)
STATUS=""
if $(echo "$INDEX" | grep '^?? ' &> /dev/null); then
STATUS="$ZSH_THEME_GIT_PROMPT_UNTRACKED$STATUS"
@@ -60,12 +80,23 @@ git_prompt_status() {
fi
if $(echo "$INDEX" | grep '^ D ' &> /dev/null); then
STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS"
+ elif $(echo "$INDEX" | grep '^D ' &> /dev/null); then
+ STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS"
elif $(echo "$INDEX" | grep '^AD ' &> /dev/null); then
STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS"
fi
if $(echo "$INDEX" | grep '^UU ' &> /dev/null); then
STATUS="$ZSH_THEME_GIT_PROMPT_UNMERGED$STATUS"
fi
+ if $(echo "$INDEX" | grep '^## .*ahead' &> /dev/null); then
+ STATUS="$ZSH_THEME_GIT_PROMPT_AHEAD$STATUS"
+ fi
+ if $(echo "$INDEX" | grep '^## .*behind' &> /dev/null); then
+ STATUS="$ZSH_THEME_GIT_PROMPT_BEHIND$STATUS"
+ fi
+ if $(echo "$INDEX" | grep '^## .*diverged' &> /dev/null); then
+ STATUS="$ZSH_THEME_GIT_PROMPT_DIVERGED$STATUS"
+ fi
echo $STATUS
}
diff --git a/lib/key-bindings.zsh b/lib/key-bindings.zsh
index 5c1b90bfa..5f499f3e8 100644
--- a/lib/key-bindings.zsh
+++ b/lib/key-bindings.zsh
@@ -3,7 +3,6 @@
bindkey -e
bindkey '\ew' kill-region
bindkey -s '\el' "ls\n"
-bindkey -s '\e.' "..\n"
bindkey '^r' history-incremental-search-backward
bindkey "^[[5~" up-line-or-history
bindkey "^[[6~" down-line-or-history
diff --git a/lib/misc.zsh b/lib/misc.zsh
index 88732e664..a8678b8ec 100644
--- a/lib/misc.zsh
+++ b/lib/misc.zsh
@@ -9,5 +9,7 @@ bindkey "^[m" copy-prev-shell-word
setopt long_list_jobs
## pager
-export PAGER=less
+export PAGER="less"
+export LESS="-R"
+
export LC_CTYPE=$LANG
diff --git a/lib/rvm.zsh b/lib/rvm.zsh
index 597be1b33..e8744e61e 100644
--- a/lib/rvm.zsh
+++ b/lib/rvm.zsh
@@ -1,7 +1,8 @@
-# get the name of the branch we are on
+# get the name of the ruby version
function rvm_prompt_info() {
- ruby_version=$(~/.rvm/bin/rvm-prompt 2> /dev/null) || return
- echo "($ruby_version)"
+ [ -f $HOME/.rvm/bin/rvm-prompt ] || return
+ local rvm_prompt
+ rvm_prompt=$($HOME/.rvm/bin/rvm-prompt ${ZSH_THEME_RVM_PROMPT_OPTIONS} 2>/dev/null)
+ [[ "${rvm_prompt}x" == "x" ]] && return
+ echo "${ZSH_THEME_RVM_PROMPT_PREFIX:=(}${rvm_prompt}${ZSH_THEME_RVM_PROMPT_SUFFIX:=)}"
}
-
-
diff --git a/lib/termsupport.zsh b/lib/termsupport.zsh
index 221989502..7470110b6 100644
--- a/lib/termsupport.zsh
+++ b/lib/termsupport.zsh
@@ -3,9 +3,13 @@
#Fully support screen, iterm, and probably most modern xterm and rxvt
#Limited support for Apple Terminal (Terminal can't set window or tab separately)
function title {
- [ "$DISABLE_AUTO_TITLE" != "true" ] || return
+ if [[ "$DISABLE_AUTO_TITLE" == "true" ]] || [[ "$EMACS" == *term* ]]; then
+ return
+ fi
if [[ "$TERM" == screen* ]]; then
print -Pn "\ek$1:q\e\\" #set screen hardstatus, usually truncated at 20 chars
+ elif [[ "$TERM_PROGRAM" == "Apple_Terminal" ]]; then
+ print -Pn "\e]1;$1:q\a" #set icon (=tab) name (will override window name on broken terminal)
elif [[ "$TERM" == xterm* ]] || [[ $TERM == rxvt* ]] || [[ "$TERM_PROGRAM" == "iTerm.app" ]]; then
print -Pn "\e]2;$2:q\a" #set window name
print -Pn "\e]1;$1:q\a" #set icon (=tab) name (will override window name on broken terminal)
@@ -24,8 +28,8 @@ function omz_termsupport_precmd {
function omz_termsupport_preexec {
emulate -L zsh
setopt extended_glob
- local CMD=${1[(wr)^(*=*|sudo|ssh|-*)]} #cmd name only, or if this is sudo or ssh, the next cmd
- title "$CMD" "%100>...>$2%<<"
+ 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/%/%%}%<<"
}
autoload -U add-zsh-hook
diff --git a/oh-my-zsh.sh b/oh-my-zsh.sh
index 732a403b7..689a79fef 100644
--- a/oh-my-zsh.sh
+++ b/oh-my-zsh.sh
@@ -11,7 +11,9 @@ fpath=($ZSH/functions $ZSH/completions $fpath)
# Load all of the config files in ~/oh-my-zsh that end in .zsh
# TIP: Add files you don't want in git to .gitignore
-for config_file ($ZSH/lib/*.zsh) source $config_file
+for config_file ($ZSH/lib/*.zsh); do
+ source $config_file
+done
# Set ZSH_CUSTOM to the path where your custom config files
# and plugins exists, or else we will use the default custom/
@@ -51,7 +53,10 @@ for plugin ($plugins); do
done
# Load all of your custom configurations from custom/
-for config_file ($ZSH_CUSTOM/*.zsh) source $config_file
+for config_file ($ZSH_CUSTOM/*.zsh(N)); do
+ source $config_file
+done
+unset config_file
# Load the theme
if [ "$ZSH_THEME" = "random" ]
@@ -65,12 +70,11 @@ then
else
if [ ! "$ZSH_THEME" = "" ]
then
- if [ -f "$ZSH/custom/$ZSH_THEME.zsh-theme" ]
+ if [ -f "$ZSH_CUSTOM/$ZSH_THEME.zsh-theme" ]
then
- source "$ZSH/custom/$ZSH_THEME.zsh-theme"
+ source "$ZSH_CUSTOM/$ZSH_THEME.zsh-theme"
else
source "$ZSH/themes/$ZSH_THEME.zsh-theme"
fi
fi
fi
-
diff --git a/plugins/archlinux/archlinux.plugin.zsh b/plugins/archlinux/archlinux.plugin.zsh
index 294dc5354..ae92a0b4c 100644
--- a/plugins/archlinux/archlinux.plugin.zsh
+++ b/plugins/archlinux/archlinux.plugin.zsh
@@ -11,7 +11,7 @@ if [[ -x `which yaourt` ]]; then
alias yaupg='yaourt -Syu' # Synchronize with repositories before upgrading packages that are out of date on the local system.
alias yasu='yaourt --sucre' # Same as yaupg, but without confirmation
alias yain='yaourt -S' # Install specific package(s) from the repositories
- alias yains='yaourt -U' # Install specific package not from the repositories but from a file
+ alias yains='yaourt -U' # Install specific package not from the repositories but from a file
alias yare='yaourt -R' # Remove the specified package(s), retaining its configuration(s) and required dependencies
alias yarem='yaourt -Rns' # Remove the specified package(s), its configuration(s) and unneeded dependencies
alias yarep='yaourt -Si' # Display information about a given package in the repositories
@@ -35,7 +35,7 @@ fi
# Pacman - https://wiki.archlinux.org/index.php/Pacman_Tips
alias pacupg='sudo pacman -Syu' # Synchronize with repositories before upgrading packages that are out of date on the local system.
alias pacin='sudo pacman -S' # Install specific package(s) from the repositories
-alias pacins='sudo pacman -U' # Install specific package not from the repositories but from a file
+alias pacins='sudo pacman -U' # Install specific package not from the repositories but from a file
alias pacre='sudo pacman -R' # Remove the specified package(s), retaining its configuration(s) and required dependencies
alias pacrem='sudo pacman -Rns' # Remove the specified package(s), its configuration(s) and unneeded dependencies
alias pacrep='pacman -Si' # Display information about a given package in the repositories
@@ -75,3 +75,19 @@ pacdisowned() {
comm -23 "$fs" "$db"
}
+
+pacmanallkeys() {
+ # Get all keys for developers and trusted users
+ curl https://www.archlinux.org/{developers,trustedusers}/ |
+ awk -F\" '(/pgp.mit.edu/) {sub(/.*search=0x/,"");print $1}' |
+ xargs sudo pacman-key --recv-keys
+}
+
+pacmansignkeys() {
+ for key in $*; do
+ sudo pacman-key --recv-keys $key
+ sudo pacman-key --lsign-key $key
+ printf 'trust\n3\n' | sudo gpg --homedir /etc/pacman.d/gnupg \
+ --no-permission-warning --command-fd 0 --edit-key $key
+ done
+}
diff --git a/plugins/autojump/autojump.plugin.zsh b/plugins/autojump/autojump.plugin.zsh
index 6f0edb062..3894ccd2f 100644
--- a/plugins/autojump/autojump.plugin.zsh
+++ b/plugins/autojump/autojump.plugin.zsh
@@ -3,7 +3,11 @@ if [ $commands[autojump] ]; then # check if autojump is installed
. /usr/share/autojump/autojump.zsh
elif [ -f /etc/profile.d/autojump.zsh ]; then # manual installation
. /etc/profile.d/autojump.zsh
- elif [ $commands[brew] -a -f `brew --prefix`/etc/autojump ]; then # mac os x with brew
- . `brew --prefix`/etc/autojump
+ 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
+ . /opt/local/etc/profile.d/autojump.zsh
+ elif [ $commands[brew] -a -f `brew --prefix`/etc/autojump.zsh ]; then # mac os x with brew
+ . `brew --prefix`/etc/autojump.zsh
fi
fi
diff --git a/plugins/battery/battery.plugin.zsh b/plugins/battery/battery.plugin.zsh
index bc75c5cf9..95f890632 100644
--- a/plugins/battery/battery.plugin.zsh
+++ b/plugins/battery/battery.plugin.zsh
@@ -1,20 +1,71 @@
-if [[ $(acpi 2&>/dev/null | grep -c '^Battery.*Discharging') -gt 0 ]] ; then
- function battery_pct_remaining() { echo "$(acpi | cut -f2 -d ',' | tr -cd '[:digit:]')" }
- function battery_time_remaining() { echo $(acpi | cut -f3 -d ',') }
- function battery_pct_prompt() {
- b=$(battery_pct_remaining)
- if [ $b -gt 50 ] ; then
- color='green'
- elif [ $b -gt 20 ] ; then
- color='yellow'
+###########################################
+# Battery plugin for oh-my-zsh #
+# Original Author: Peter hoeg (peterhoeg) #
+# Email: peter@speartail.com #
+###########################################
+# Author: Sean Jones (neuralsandwich) #
+# Email: neuralsandwich@gmail.com #
+# Modified to add support for Apple Mac #
+###########################################
+
+if [[ $(uname) == "Darwin" ]] ; then
+
+ function battery_pct_remaining() {
+ if [[ $(ioreg -rc AppleSmartBattery | grep -c '^.*"ExternalConnected"\ =\ No') -eq 1 ]] ; then
+ typeset -F maxcapacity=$(ioreg -rc "AppleSmartBattery"| grep '^.*"MaxCapacity"\ =\ ' | sed -e 's/^.*"MaxCapacity"\ =\ //')
+ typeset -F currentcapacity=$(ioreg -rc "AppleSmartBattery"| grep '^.*"CurrentCapacity"\ =\ ' | sed -e 's/^.*CurrentCapacity"\ =\ //')
+ integer i=$(((currentcapacity/maxcapacity) * 100))
+ echo $i
else
- color='red'
+ echo "External Power"
fi
- echo "%{$fg[$color]%}[$(battery_pct_remaining)%%]%{$reset_color%}"
}
-else
- error_msg='no battery'
- function battery_pct_remaining() { echo $error_msg }
- function battery_time_remaining() { echo $error_msg }
- function battery_pct_prompt() { echo '' }
+
+ function battery_time_remaining() {
+ if [[ $(ioreg -rc AppleSmartBattery | grep -c '^.*"ExternalConnected"\ =\ No') -eq 1 ]] ; then
+ timeremaining=$(ioreg -rc "AppleSmartBattery"| grep '^.*"AvgTimeToEmpty"\ =\ ' | sed -e 's/^.*"AvgTimeToEmpty"\ =\ //')
+ echo "~$((timeremaining / 60)):$((timeremaining % 60))"
+ else
+ echo "∞"
+ fi
+ }
+
+ function battery_pct_prompt () {
+ if [[ $(ioreg -rc AppleSmartBattery | grep -c '^.*"ExternalConnected"\ =\ No') -eq 1 ]] ; then
+ b=$(battery_pct_remaining)
+ if [ $b -gt 50 ] ; then
+ color='green'
+ elif [ $b -gt 20 ] ; then
+ color='yellow'
+ else
+ color='red'
+ fi
+ echo "%{$fg[$color]%}[$(battery_pct_remaining)%%]%{$reset_color%}"
+ else
+ echo ""
+ fi
+ }
+
+elif [[ $(uname) == "Linux" ]] ; then
+
+ if [[ $(acpi 2&>/dev/null | grep -c '^Battery.*Discharging') -gt 0 ]] ; then
+ function battery_pct_remaining() { echo "$(acpi | cut -f2 -d ',' | tr -cd '[:digit:]')" }
+ function battery_time_remaining() { echo $(acpi | cut -f3 -d ',') }
+ function battery_pct_prompt() {
+ b=$(battery_pct_remaining)
+ if [ $b -gt 50 ] ; then
+ color='green'
+ elif [ $b -gt 20 ] ; then
+ color='yellow'
+ else
+ color='red'
+ fi
+ echo "%{$fg[$color]%}[$(battery_pct_remaining)%%]%{$reset_color%}"
+ }
+ else
+ error_msg='no battery'
+ function battery_pct_remaining() { echo $error_msg }
+ function battery_time_remaining() { echo $error_msg }
+ function battery_pct_prompt() { echo '' }
+ fi
fi
diff --git a/plugins/bundler/bundler.plugin.zsh b/plugins/bundler/bundler.plugin.zsh
index e1f571237..2305c4979 100644
--- a/plugins/bundler/bundler.plugin.zsh
+++ b/plugins/bundler/bundler.plugin.zsh
@@ -6,7 +6,7 @@ alias bu="bundle update"
# The following is based on https://github.com/gma/bundler-exec
-bundled_commands=(annotate cap capify cucumber ey foreman guard heroku middleman nanoc rackup rainbows rails rake rspec ruby shotgun spec spork thin thor unicorn unicorn_rails)
+bundled_commands=(annotate cap capify cucumber foreman guard middleman nanoc rackup rainbows rake rspec ruby shotgun spec spork thin thor unicorn unicorn_rails puma)
## Functions
diff --git a/plugins/cap/cap.plugin.zsh b/plugins/cap/cap.plugin.zsh
deleted file mode 100644
index 8336182d5..000000000
--- a/plugins/cap/cap.plugin.zsh
+++ /dev/null
@@ -1,21 +0,0 @@
-function _cap_does_task_list_need_generating () {
- if [ ! -f .cap_tasks~ ]; then return 0;
- else
- accurate=$(stat -f%m .cap_tasks~)
- changed=$(stat -f%m config/deploy.rb)
- return $(expr $accurate '>=' $changed)
- fi
-}
-
-function _cap () {
- if [ -f config/deploy.rb ]; then
- if _cap_does_task_list_need_generating; then
- echo "\nGenerating .cap_tasks~..." > /dev/stderr
- cap show_tasks -q | cut -d " " -f 1 | sed -e '/^ *$/D' -e '1,2D'
-> .cap_tasks~
- fi
- compadd `cat .cap_tasks~`
- fi
-}
-
-compctl -K _cap cap
diff --git a/plugins/capistrano/_capistrano b/plugins/capistrano/_capistrano
new file mode 100644
index 000000000..cf6b50c7f
--- /dev/null
+++ b/plugins/capistrano/_capistrano
@@ -0,0 +1,10 @@
+#compdef cap
+#autoload
+
+if [ -f config/deploy.rb ]; then
+ if [[ ! -f .cap_tasks~ || config/deploy.rb -nt .cap_tasks~ ]]; then
+ echo "\nGenerating .cap_tasks~..." > /dev/stderr
+ cap --tasks | grep '#' | cut -d " " -f 2 > .cap_tasks~
+ fi
+ compadd `cat .cap_tasks~`
+fi
diff --git a/plugins/coffee/_coffee b/plugins/coffee/_coffee
new file mode 100644
index 000000000..5c8eb9a08
--- /dev/null
+++ b/plugins/coffee/_coffee
@@ -0,0 +1,71 @@
+#compdef coffee
+# ------------------------------------------------------------------------------
+# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of the zsh-users nor the
+# names of its contributors may be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# ------------------------------------------------------------------------------
+# Description
+# -----------
+#
+# Completion script for Coffee.js v0.6.11 (http://coffeejs.org)
+#
+# ------------------------------------------------------------------------------
+# Authors
+# -------
+#
+# * Mario Fernandez (https://github.com/sirech)
+#
+# ------------------------------------------------------------------------------
+
+local curcontext="$curcontext" state line ret=1
+typeset -A opt_args
+
+_arguments -C \
+ '(- *)'{-h,--help}'[display this help message]' \
+ '(- *)'{-v,--version}'[display the version number]' \
+ '(-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
+
+return ret
+
+# Local Variables:
+# mode: Shell-Script
+# sh-indentation: 2
+# indent-tabs-mode: nil
+# sh-basic-offset: 2
+# End:
+# vim: ft=zsh sw=2 ts=2 et
diff --git a/plugins/colemak/colemak-less b/plugins/colemak/colemak-less
new file mode 100644
index 000000000..e4ca4facd
--- /dev/null
+++ b/plugins/colemak/colemak-less
@@ -0,0 +1,6 @@
+n forw-line
+e back-line
+k repeat-search
+\ek repeat-search-all
+K reverse-search
+\eK reverse-search-all
diff --git a/plugins/colemak/colemak.plugin.zsh b/plugins/colemak/colemak.plugin.zsh
new file mode 100644
index 000000000..34d42c280
--- /dev/null
+++ b/plugins/colemak/colemak.plugin.zsh
@@ -0,0 +1,22 @@
+# ctrl-j newline
+bindkey '^n' accept-line
+bindkey -a '^n' accept-line
+
+# another rotation to match qwerty
+bindkey -a 'n' down-line-or-history
+bindkey -a 'e' up-line-or-history
+bindkey -a 'i' vi-forward-char
+
+# make qwerty
+bindkey -a 'k' vi-repeat-search
+bindkey -a 'K' vi-rev-repeat-search
+bindkey -a 'u' vi-insert
+bindkey -a 'U' vi-insert-bol
+bindkey -a 'l' vi-undo-change
+bindkey -a 'N' vi-join
+
+# spare
+bindkey -a 'j' vi-forward-word-end
+bindkey -a 'J' vi-forward-blank-word-end
+
+lesskey $ZSH_CUSTOM/plugins/colemak/colemak-less
diff --git a/plugins/command-not-found/command-not-found.plugin.zsh b/plugins/command-not-found/command-not-found.plugin.zsh
index 5ab03d5a9..567da1b45 100644
--- a/plugins/command-not-found/command-not-found.plugin.zsh
+++ b/plugins/command-not-found/command-not-found.plugin.zsh
@@ -2,4 +2,4 @@
# as seen in http://www.porcheron.info/command-not-found-for-zsh/
# this is installed in Ubuntu
-source /etc/zsh_command_not_found
+[[ -e /etc/zsh_command_not_found ]] && source /etc/zsh_command_not_found
diff --git a/plugins/composer/composer.plugin.zsh b/plugins/composer/composer.plugin.zsh
new file mode 100644
index 000000000..c9b762d07
--- /dev/null
+++ b/plugins/composer/composer.plugin.zsh
@@ -0,0 +1,29 @@
+# ------------------------------------------------------------------------------
+# FILE: composer.plugin.zsh
+# DESCRIPTION: oh-my-zsh composer plugin file.
+# AUTHOR: Daniel Gomes (me@danielcsgomes.com)
+# VERSION: 1.0.0
+# ------------------------------------------------------------------------------
+
+# Composer basic command completion
+_composer_get_command_list () {
+ composer --no-ansi | sed "1,/Available commands/d" | awk '/^ [a-z]+/ { print $1 }'
+}
+
+_composer () {
+ if [ -f composer.json ]; then
+ compadd `_composer_get_command_list`
+ fi
+}
+
+compdef _composer composer
+
+# Aliases
+alias c='composer'
+alias csu='composer self-update'
+alias cu='composer update'
+alias ci='composer install'
+alias ccp='composer create-project'
+
+# install composer in the current directory
+alias cget='curl -s https://getcomposer.org/installer | php' \ No newline at end of file
diff --git a/plugins/cp/cp.plugin.zsh b/plugins/cp/cp.plugin.zsh
new file mode 100644
index 000000000..7355a9990
--- /dev/null
+++ b/plugins/cp/cp.plugin.zsh
@@ -0,0 +1,14 @@
+#Show progress while file is copying
+
+# Rsync options are:
+# -p - preserve permissions
+# -o - preserve owner
+# -g - preserve group
+# -h - output in human-readable format
+# --progress - display progress
+# -b - instead of just overwriting an existing file, save the original
+# --backup-dir=/tmp/rsync - move backup copies to "/tmp/rsync"
+# -e /dev/null - only work on local files
+# -- - everything after this is an argument, even if it looks like an option
+
+alias cpv="rsync -poghb --backup-dir=/tmp/rsync -e /dev/null --progress --"
diff --git a/plugins/debian/debian.plugin.zsh b/plugins/debian/debian.plugin.zsh
index 16a5d54ca..55b90e379 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 ) ]]; then
+if [[ -e $( which 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 ) ]]; then
+if [[ -e $( which sudo 2>&1 ) ]]; then
use_sudo=1
fi
@@ -21,7 +21,7 @@ fi
# These are for more obscure uses of apt-get and aptitude that aren't covered
# below.
alias ag='apt-get'
-alias at='aptitude'
+alias ap='aptitude'
# Some self-explanatory aliases
alias acs="apt-cache search"
@@ -35,30 +35,34 @@ alias afs='apt-file search --regexp'
# These are apt-get only
alias asrc='apt-get source'
-alias ap='apt-cache policy'
+alias app='apt-cache policy'
# superuser operations ######################################################
if [[ $use_sudo -eq 1 ]]; then
# commands using sudo #######
- alias aac="sudo $apt_pref autoclean"
- alias abd="sudo $apt_pref build-dep"
- alias ac="sudo $apt_pref clean"
- alias ad="sudo $apt_pref update"
- alias adg="sudo $apt_pref update && sudo $apt_pref upgrade"
- alias adu="sudo $apt_pref update && sudo $apt_pref dist-upgrade"
+ alias aac='sudo $apt_pref autoclean'
+ alias abd='sudo $apt_pref build-dep'
+ alias ac='sudo $apt_pref clean'
+ alias ad='sudo $apt_pref update'
+ alias adg='sudo $apt_pref update && sudo $apt_pref upgrade'
+ alias adu='sudo $apt_pref update && sudo $apt_pref dist-upgrade'
alias afu='sudo apt-file update'
- alias ag="sudo $apt_pref upgrade"
- alias ai="sudo $apt_pref install"
- alias ap="sudo $apt_pref purge"
- alias ar="sudo $apt_pref remove"
+ alias ag='sudo $apt_pref upgrade'
+ alias ai='sudo $apt_pref install'
+ # Install all packages given on the command line while using only the first word of each line:
+ # acs ... | ail
+ alias ail="sed -e 's/ */ /g' -e 's/ *//' | cut -s -d ' ' -f 1 | "' xargs sudo $apt_pref install'
+ alias ap='sudo $apt_pref purge'
+ alias ar='sudo $apt_pref remove'
# apt-get only
- alias ads="sudo $apt_pref dselect-upgrade"
+ alias ads='sudo $apt_pref dselect-upgrade'
# Install all .deb files in the current directory.
# Warning: you will need to put the glob in single quotes if you use:
# glob_subst
- alias di='sudo dpkg -i ./*.deb'
+ alias dia='sudo dpkg -i ./*.deb'
+ alias di='sudo dpkg -i'
# Remove ALL kernel images and headers EXCEPT the one in use
alias kclean='sudo aptitude remove -P ?and(~i~nlinux-(ima|hea) \
@@ -67,18 +71,18 @@ if [[ $use_sudo -eq 1 ]]; then
# commands using su #########
else
- alias aac='su -ls "'"$apt_pref"' autoclean" root'
+ alias aac='su -ls \'$apt_pref autoclean\' root'
abd() {
cmd="su -lc '$apt_pref build-dep $@' root"
print "$cmd"
eval "$cmd"
}
- alias ac='su -ls "'"$apt_pref"' clean" root'
- alias ad='su -lc "'"$apt_pref"' update" root'
- alias adg='su -lc "'"$apt_pref"' update && aptitude safe-upgrade" root'
- alias adu='su -lc "'"$apt_pref"' update && aptitude dist-upgrade" root'
+ alias ac='su -ls \'$apt_pref clean\' root'
+ alias ad='su -lc \'$apt_pref update\' root'
+ alias adg='su -lc \'$apt_pref update && aptitude safe-upgrade\' root'
+ alias adu='su -lc \'$apt_pref update && aptitude dist-upgrade\' root'
alias afu='su -lc "apt-file update"'
- alias ag='su -lc "'"$apt_pref"' safe-upgrade" root'
+ alias ag='su -lc \'$apt_pref safe-upgrade\' root'
ai() {
cmd="su -lc 'aptitude -P install $@' root"
print "$cmd"
@@ -97,7 +101,8 @@ else
# Install all .deb files in the current directory
# Assumes glob_subst is off
- alias di='su -lc "dpkg -i ./*.deb" root'
+ alias dia='su -lc "dpkg -i ./*.deb" root'
+ alias di='su -lc "dpkg -i" root'
# Remove ALL kernel images and headers EXCEPT the one in use
alias kclean='su -lc '\''aptitude remove -P ?and(~i~nlinux-(ima|hea) \
@@ -118,7 +123,7 @@ alias mydeb='time dpkg-buildpackage -rfakeroot -us -uc'
apt-copy() {
print '#!/bin/sh'"\n" > apt-copy.sh
- cmd="$apt_pref install "
+ cmd='$apt_pref install'
for p in ${(f)"$(aptitude search -F "%p" --disable-columns \~i)"}; {
cmd="${cmd} ${p}"
diff --git a/plugins/dircycle/dircycle.plugin.zsh b/plugins/dircycle/dircycle.plugin.zsh
new file mode 100644
index 000000000..46a0ab268
--- /dev/null
+++ b/plugins/dircycle/dircycle.plugin.zsh
@@ -0,0 +1,10 @@
+##
+# dircycle plugin: enables cycling through the directory
+# stack using Ctrl+Shift+Left/Right
+
+eval "insert-cycledleft () { zle push-line; LBUFFER='pushd -q +1'; zle accept-line }"
+zle -N insert-cycledleft
+bindkey "\e[1;6D" insert-cycledleft
+eval "insert-cycledright () { zle push-line; LBUFFER='pushd -q -0'; zle accept-line }"
+zle -N insert-cycledright
+bindkey "\e[1;6C" insert-cycledright
diff --git a/plugins/dirpersist/dirpersist.plugin.zsh b/plugins/dirpersist/dirpersist.plugin.zsh
index 6a2b289a2..0f6d9f435 100644
--- a/plugins/dirpersist/dirpersist.plugin.zsh
+++ b/plugins/dirpersist/dirpersist.plugin.zsh
@@ -12,7 +12,7 @@ dirpersistinstall () {
if grep 'dirpersiststore' ~/.zlogout > /dev/null; then
else
if read -q \?"Would you like to set up your .zlogout file for use with dirspersist? (y/n) "; then
- echo "# Store dirs stack\n# See ~/.oh-my-zsh/plugins/dirspersist.plugin.zsh\ndirpersiststore" >> ~/.zlogout
+ echo "# Store dirs stack\n# See $ZSH/plugins/dirspersist.plugin.zsh\ndirpersiststore" >> ~/.zlogout
else
echo "If you don't want this message to appear, remove dirspersist from \$plugins"
fi
diff --git a/plugins/encode64/encode64.plugin.zsh b/plugins/encode64/encode64.plugin.zsh
new file mode 100644
index 000000000..cfb7c6a18
--- /dev/null
+++ b/plugins/encode64/encode64.plugin.zsh
@@ -0,0 +1,2 @@
+encode64(){ echo -n $1 | base64 }
+decode64(){ echo -n $1 | base64 -D } \ No newline at end of file
diff --git a/plugins/fasd/fasd.plugin.zsh b/plugins/fasd/fasd.plugin.zsh
new file mode 100644
index 000000000..d42584f1a
--- /dev/null
+++ b/plugins/fasd/fasd.plugin.zsh
@@ -0,0 +1,6 @@
+if [ $commands[fasd] ]; then # check if fasd is installed
+ eval "$(fasd --init auto)"
+ alias v='f -e vim'
+ alias o='a -e open'
+fi
+
diff --git a/plugins/forklift/forklift.plugin.zsh b/plugins/forklift/forklift.plugin.zsh
new file mode 100644
index 000000000..056069d36
--- /dev/null
+++ b/plugins/forklift/forklift.plugin.zsh
@@ -0,0 +1,44 @@
+# Open folder in ForkLift.app from console
+# Author: Adam Strzelecki nanoant.com, modified by Bodo Tasche bitboxer.de
+#
+# Usage:
+# fl [<folder>]
+#
+# Opens specified directory or current working directory in ForkLift.app
+#
+# Notes:
+# It assumes Shift+Cmd+G launches go to folder panel and Cmd+N opens new
+# app window.
+#
+# https://gist.github.com/3313481
+function fl {
+ if [ ! -z "$1" ]; then
+ DIR=$1
+ if [ ! -d "$DIR" ]; then
+ DIR=$(dirname $DIR)
+ fi
+ if [ "$DIR" != "." ]; then
+ PWD=`cd "$DIR";pwd`
+ fi
+ fi
+ osascript 2>&1 1>/dev/null <<END
+ tell application "ForkLift"
+ activate
+ end tell
+ tell application "System Events"
+ tell application process "ForkLift"
+ try
+ set topWindow to window 1
+ on error
+ keystroke "n" using command down
+ set topWindow to window 1
+ end try
+ keystroke "g" using {command down, shift down}
+ tell sheet 1 of topWindow
+ set value of text field 1 to "$PWD"
+ keystroke return
+ end tell
+ end tell
+ end tell
+END
+}
diff --git a/plugins/git-extras/git-extras.plugin.zsh b/plugins/git-extras/git-extras.plugin.zsh
new file mode 100644
index 000000000..8419166ab
--- /dev/null
+++ b/plugins/git-extras/git-extras.plugin.zsh
@@ -0,0 +1,285 @@
+#compdef git
+# ------------------------------------------------------------------------------
+# Description
+# -----------
+#
+# Completion script for git-extras (http://github.com/visionmedia/git-extras).
+#
+# ------------------------------------------------------------------------------
+# Authors
+# -------
+#
+# * Alexis GRIMALDI (https://github.com/agrimaldi)
+#
+# ------------------------------------------------------------------------------
+# Inspirations
+# -----------
+#
+# * git-extras (http://github.com/visionmedia/git-extras)
+# * git-flow-completion (http://github.com/bobthecow/git-flow-completion)
+#
+# ------------------------------------------------------------------------------
+
+
+__git_command_successful () {
+ if (( ${#pipestatus:#0} > 0 )); then
+ _message 'not a git repository'
+ return 1
+ fi
+ return 0
+}
+
+
+__git_tag_names() {
+ local expl
+ declare -a tag_names
+ tag_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/tags 2>/dev/null)"}#refs/tags/})
+ __git_command_successful || return
+ _wanted tag-names expl tag-name compadd $* - $tag_names
+}
+
+
+__git_branch_names() {
+ local expl
+ declare -a branch_names
+ branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads 2>/dev/null)"}#refs/heads/})
+ __git_command_successful || return
+ _wanted branch-names expl branch-name compadd $* - $branch_names
+}
+
+
+__git_feature_branch_names() {
+ local expl
+ declare -a branch_names
+ branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads/feature 2>/dev/null)"}#refs/heads/feature/})
+ __git_command_successful || return
+ _wanted branch-names expl branch-name compadd $* - $branch_names
+}
+
+
+__git_refactor_branch_names() {
+ local expl
+ declare -a branch_names
+ branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads/refactor 2>/dev/null)"}#refs/heads/refactor/})
+ __git_command_successful || return
+ _wanted branch-names expl branch-name compadd $* - $branch_names
+}
+
+
+__git_bug_branch_names() {
+ local expl
+ declare -a branch_names
+ branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads/bug 2>/dev/null)"}#refs/heads/bug/})
+ __git_command_successful || return
+ _wanted branch-names expl branch-name compadd $* - $branch_names
+}
+
+
+__git_submodule_names() {
+ local expl
+ declare -a submodule_names
+ submodule_names=(${(f)"$(_call_program branchrefs git submodule status | awk '{print $2}')"})
+ __git_command_successful || return
+ _wanted submodule-names expl submodule-name compadd $* - $submodule_names
+}
+
+
+__git_author_names() {
+ local expl
+ declare -a author_names
+ author_names=(${(f)"$(_call_program branchrefs git log --format='%aN' | sort -u)"})
+ __git_command_successful || return
+ _wanted author-names expl author-name compadd $* - $author_names
+}
+
+
+_git-changelog() {
+ _arguments \
+ '(-l --list)'{-l,--list}'[list commits]' \
+}
+
+
+_git-effort() {
+ _arguments \
+ '--above[ignore file with less than x commits]' \
+}
+
+
+_git-contrib() {
+ _arguments \
+ ':author:__git_author_names'
+}
+
+
+_git-count() {
+ _arguments \
+ '--all[detailed commit count]'
+}
+
+
+_git-delete-branch() {
+ _arguments \
+ ':branch-name:__git_branch_names'
+}
+
+
+_git-delete-submodule() {
+ _arguments \
+ ':submodule-name:__git_submodule_names'
+}
+
+
+_git-delete-tag() {
+ _arguments \
+ ':tag-name:__git_tag_names'
+}
+
+
+_git-extras() {
+ local curcontext=$curcontext state line ret=1
+ declare -A opt_args
+
+ _arguments -C \
+ ': :->command' \
+ '*:: :->option-or-argument' && ret=0
+
+ case $state in
+ (command)
+ declare -a commands
+ commands=(
+ 'update:update git-extras'
+ )
+ _describe -t commands command commands && ret=0
+ ;;
+ esac
+
+ _arguments \
+ '(-v --version)'{-v,--version}'[show current version]' \
+}
+
+
+_git-graft() {
+ _arguments \
+ ':src-branch-name:__git_branch_names' \
+ ':dest-branch-name:__git_branch_names'
+}
+
+
+_git-squash() {
+ _arguments \
+ ':branch-name:__git_branch_names'
+}
+
+
+_git-feature() {
+ local curcontext=$curcontext state line ret=1
+ declare -A opt_args
+
+ _arguments -C \
+ ': :->command' \
+ '*:: :->option-or-argument' && ret=0
+
+ case $state in
+ (command)
+ declare -a commands
+ commands=(
+ 'finish:merge feature into the current branch'
+ )
+ _describe -t commands command commands && ret=0
+ ;;
+ (option-or-argument)
+ curcontext=${curcontext%:*}-$line[1]:
+ case $line[1] in
+ (finish)
+ _arguments -C \
+ ':branch-name:__git_feature_branch_names'
+ ;;
+ esac
+ esac
+}
+
+
+_git-refactor() {
+ local curcontext=$curcontext state line ret=1
+ declare -A opt_args
+
+ _arguments -C \
+ ': :->command' \
+ '*:: :->option-or-argument' && ret=0
+
+ case $state in
+ (command)
+ declare -a commands
+ commands=(
+ 'finish:merge refactor into the current branch'
+ )
+ _describe -t commands command commands && ret=0
+ ;;
+ (option-or-argument)
+ curcontext=${curcontext%:*}-$line[1]:
+ case $line[1] in
+ (finish)
+ _arguments -C \
+ ':branch-name:__git_refactor_branch_names'
+ ;;
+ esac
+ esac
+}
+
+
+_git-bug() {
+ local curcontext=$curcontext state line ret=1
+ declare -A opt_args
+
+ _arguments -C \
+ ': :->command' \
+ '*:: :->option-or-argument' && ret=0
+
+ case $state in
+ (command)
+ declare -a commands
+ commands=(
+ 'finish:merge bug into the current branch'
+ )
+ _describe -t commands command commands && ret=0
+ ;;
+ (option-or-argument)
+ curcontext=${curcontext%:*}-$line[1]:
+ case $line[1] in
+ (finish)
+ _arguments -C \
+ ':branch-name:__git_bug_branch_names'
+ ;;
+ esac
+ esac
+}
+
+
+zstyle ':completion:*:*:git:*' user-commands \
+ changelog:'populate changelog file with commits since the previous tag' \
+ contrib:'display author contributions' \
+ count:'count commits' \
+ delete-branch:'delete local and remote branch' \
+ delete-submodule:'delete submodule' \
+ delete-tag:'delete local and remote tag' \
+ extras:'git-extras' \
+ graft:'merge commits from source branch to destination branch' \
+ squash:'merge commits from source branch into the current one as a single commit' \
+ feature:'create a feature branch' \
+ refactor:'create a refactor branch' \
+ bug:'create a bug branch' \
+ summary:'repository summary' \
+ effort:'display effort statistics' \
+ repl:'read-eval-print-loop' \
+ commits-since:'list commits since a given date' \
+ release:'release commit with the given tag' \
+ alias:'define, search and show aliases' \
+ ignore:'add patterns to .gitignore' \
+ info:'show info about the repository' \
+ create-branch:'create local and remote branch' \
+ fresh-branch:'create empty local branch' \
+ undo:'remove the latest commit' \
+ setup:'setup a git repository' \
+ touch:'one step creation of new files' \
+ obliterate:'Completely remove a file from the repository, including past commits and tags' \
+ local-commits:'list unpushed commits on the local branch' \
diff --git a/plugins/git-flow/git-flow.plugin.zsh b/plugins/git-flow/git-flow.plugin.zsh
index 270bcbe38..4afb85b8b 100644
--- a/plugins/git-flow/git-flow.plugin.zsh
+++ b/plugins/git-flow/git-flow.plugin.zsh
@@ -110,6 +110,8 @@ __git-flow-release ()
-u'[Use the given GPG-key for the digital signature (implies -s)]'\
-m'[Use the given tag message]'\
-p'[Push to $ORIGIN after performing finish]'\
+ -k'[Keep branch after performing finish]'\
+ -n"[Don't tag this release]"\
':version:__git_flow_version_list'
;;
@@ -162,6 +164,8 @@ __git-flow-hotfix ()
-u'[Use the given GPG-key for the digital signature (implies -s)]'\
-m'[Use the given tag message]'\
-p'[Push to $ORIGIN after performing finish]'\
+ -k'[Keep branch after performing finish]'\
+ -n"[Don't tag this release]"\
':hotfix:__git_flow_hotfix_list'
;;
@@ -191,7 +195,7 @@ __git-flow-feature ()
'start:Start a new feature branch.'
'finish:Finish a feature branch.'
'list:List all your feature branches. (Alias to `git flow feature`)'
- 'publish: public'
+ 'publish: publish'
'track: track'
'diff: diff'
'rebase: rebase'
@@ -217,6 +221,7 @@ __git-flow-feature ()
_arguments \
-F'[Fetch from origin before performing finish]' \
-r'[Rebase instead of merge]'\
+ -k'[Keep branch after performing finish]'\
':feature:__git_flow_feature_list'
;;
diff --git a/plugins/git-hubflow/git-hubflow.plugin.zsh b/plugins/git-hubflow/git-hubflow.plugin.zsh
new file mode 100644
index 000000000..a09f88391
--- /dev/null
+++ b/plugins/git-hubflow/git-hubflow.plugin.zsh
@@ -0,0 +1,348 @@
+#!zsh
+#
+# Installation
+# ------------
+#
+# To achieve git-hubflow completion nirvana:
+#
+# 0. Update your zsh's git-completion module to the newest verion.
+# From here. http://zsh.git.sourceforge.net/git/gitweb.cgi?p=zsh/zsh;a=blob_plain;f=Completion/Unix/Command/_git;hb=HEAD
+#
+# 1. Install this file. Either:
+#
+# a. Place it in your .zshrc:
+#
+# b. Or, copy it somewhere (e.g. ~/.git-hubflow-completion.zsh) and put the following line in
+# your .zshrc:
+#
+# source ~/.git-hubflow-completion.zsh
+#
+# c. Or, use this file as a oh-my-zsh plugin.
+#
+
+_git-hf ()
+{
+ local curcontext="$curcontext" state line
+ typeset -A opt_args
+
+ _arguments -C \
+ ':command:->command' \
+ '*::options:->options'
+
+ case $state in
+ (command)
+
+ local -a subcommands
+ subcommands=(
+ 'init:Initialize a new git repo with support for the branching model.'
+ 'feature:Manage your feature branches.'
+ 'release:Manage your release branches.'
+ 'hotfix:Manage your hotfix branches.'
+ 'support:Manage your support branches.'
+ 'update:Pull upstream changes down into your master and develop branches.'
+ 'version:Shows version information.'
+ )
+ _describe -t commands 'git hf' subcommands
+ ;;
+
+ (options)
+ case $line[1] in
+
+ (init)
+ _arguments \
+ -f'[Force setting of gitflow branches, even if already configured]'
+ ;;
+
+ (version)
+ ;;
+
+ (hotfix)
+ __git-hf-hotfix
+ ;;
+
+ (release)
+ __git-hf-release
+ ;;
+
+ (feature)
+ __git-hf-feature
+ ;;
+ esac
+ ;;
+ esac
+}
+
+__git-hf-release ()
+{
+ local curcontext="$curcontext" state line
+ typeset -A opt_args
+
+ _arguments -C \
+ ':command:->command' \
+ '*::options:->options'
+
+ case $state in
+ (command)
+
+ local -a subcommands
+ subcommands=(
+ 'start:Start a new release branch.'
+ 'finish:Finish a release branch.'
+ 'list:List all your release branches. (Alias to `git hf release`)'
+ 'cancel:Cancel release'
+ 'push:Push release to github'
+ 'pull:Pull release from github'
+ 'track:Track release'
+ )
+ _describe -t commands 'git hf release' subcommands
+ _arguments \
+ -v'[Verbose (more) output]'
+ ;;
+
+ (options)
+ case $line[1] in
+
+ (start)
+ _arguments \
+ -F'[Fetch from origin before performing finish]'\
+ ':version:__git_hf_version_list'
+ ;;
+
+ (finish)
+ _arguments \
+ -F'[Fetch from origin before performing finish]' \
+ -s'[Sign the release tag cryptographically]'\
+ -u'[Use the given GPG-key for the digital signature (implies -s)]'\
+ -m'[Use the given tag message]'\
+ -p'[Push to $ORIGIN after performing finish]'\
+ -k'[Keep branch after performing finish]'\
+ -n"[Don't tag this release]"\
+ ':version:__git_hf_version_list'
+ ;;
+
+ *)
+ _arguments \
+ -v'[Verbose (more) output]'
+ ;;
+ esac
+ ;;
+ esac
+}
+
+__git-hf-hotfix ()
+{
+ local curcontext="$curcontext" state line
+ typeset -A opt_args
+
+ _arguments -C \
+ ':command:->command' \
+ '*::options:->options'
+
+ case $state in
+ (command)
+
+ local -a subcommands
+ subcommands=(
+ 'start:Start a new hotfix branch.'
+ 'finish:Finish a hotfix branch.'
+ 'list:List all your hotfix branches. (Alias to `git hf hotfix`)'
+ 'publish:Publish the hotfix branch.'
+ 'track:Track the hotfix branch.'
+ 'pull:Pull the hotfix from github.'
+ 'push:Push the hotfix to github.'
+ 'cancel:Cancel the hotfix.'
+ )
+ _describe -t commands 'git hf hotfix' subcommands
+ _arguments \
+ -v'[Verbose (more) output]'
+ ;;
+
+ (options)
+ case $line[1] in
+
+ (start)
+ _arguments \
+ -F'[Fetch from origin before performing finish]'\
+ ':hotfix:__git_hf_version_list'\
+ ':branch-name:__git_branch_names'
+ ;;
+
+ (finish)
+ _arguments \
+ -F'[Fetch from origin before performing finish]' \
+ -s'[Sign the release tag cryptographically]'\
+ -u'[Use the given GPG-key for the digital signature (implies -s)]'\
+ -m'[Use the given tag message]'\
+ -p'[Push to $ORIGIN after performing finish]'\
+ -k'[Keep branch after performing finish]'\
+ -n"[Don't tag this release]"\
+ ':hotfix:__git_hf_hotfix_list'
+ ;;
+
+ *)
+ _arguments \
+ -v'[Verbose (more) output]'
+ ;;
+ esac
+ ;;
+ esac
+}
+
+__git-hf-feature ()
+{
+ local curcontext="$curcontext" state line
+ typeset -A opt_args
+
+ _arguments -C \
+ ':command:->command' \
+ '*::options:->options'
+
+ case $state in
+ (command)
+
+ local -a subcommands
+ subcommands=(
+ 'list:List all your feature branches. (Alias to `git hf feature`)'
+ 'start:Start a new feature branch'
+ 'finish:Finish a feature branch'
+ 'submit:submit'
+ 'track:track'
+ 'diff:Diff'
+ 'rebase:Rebase feature branch against develop'
+ 'checkout:Checkout feature'
+ 'pull:Pull feature branch from github'
+ 'push:Push feature branch to github'
+ 'cancel:Cancel feature'
+ )
+ _describe -t commands 'git hf feature' subcommands
+ _arguments \
+ -v'[Verbose (more) output]'
+ ;;
+
+ (options)
+ case $line[1] in
+
+ (start)
+ _arguments \
+ -F'[Fetch from origin before performing finish]'\
+ ':feature:__git_hf_feature_list'\
+ ':branch-name:__git_branch_names'
+ ;;
+
+ (finish)
+ _arguments \
+ -F'[Fetch from origin before performing finish]' \
+ -r'[Rebase instead of merge]'\
+ ':feature:__git_hf_feature_list'
+ ;;
+
+ (publish)
+ _arguments \
+ ':feature:__git_hf_feature_list'\
+ ;;
+
+ (track)
+ _arguments \
+ ':feature:__git_hf_feature_list'\
+ ;;
+
+ (diff)
+ _arguments \
+ ':branch:__git_branch_names'\
+ ;;
+
+ (rebase)
+ _arguments \
+ -i'[Do an interactive rebase]' \
+ ':branch:__git_branch_names'
+ ;;
+
+ (checkout)
+ _arguments \
+ ':branch:__git_hf_feature_list'\
+ ;;
+
+ (pull)
+ _arguments \
+ ':remote:__git_remotes'\
+ ':branch:__git_branch_names'
+ ;;
+
+ *)
+ _arguments \
+ -v'[Verbose (more) output]'
+ ;;
+ esac
+ ;;
+ esac
+}
+
+__git_hf_version_list ()
+{
+ local expl
+ declare -a versions
+
+ versions=(${${(f)"$(_call_program versions git hf release list 2> /dev/null | tr -d ' |*')"}})
+ __git_command_successful || return
+
+ _wanted versions expl 'version' compadd $versions
+}
+
+__git_hf_feature_list ()
+{
+ local expl
+ declare -a features
+
+ features=(${${(f)"$(_call_program features git hf feature list 2> /dev/null | tr -d ' |*')"}})
+ __git_command_successful || return
+
+ _wanted features expl 'feature' compadd $features
+}
+
+__git_remotes () {
+ local expl gitdir remotes
+
+ gitdir=$(_call_program gitdir git rev-parse --git-dir 2>/dev/null)
+ __git_command_successful || return
+
+ remotes=(${${(f)"$(_call_program remotes git config --get-regexp '"^remote\..*\.url$"')"}//#(#b)remote.(*).url */$match[1]})
+ __git_command_successful || return
+
+ # TODO: Should combine the two instead of either or.
+ if (( $#remotes > 0 )); then
+ _wanted remotes expl remote compadd $* - $remotes
+ else
+ _wanted remotes expl remote _files $* - -W "($gitdir/remotes)" -g "$gitdir/remotes/*"
+ fi
+}
+
+__git_hf_hotfix_list ()
+{
+ local expl
+ declare -a hotfixes
+
+ hotfixes=(${${(f)"$(_call_program hotfixes git hf hotfix list 2> /dev/null | tr -d ' |*')"}})
+ __git_command_successful || return
+
+ _wanted hotfixes expl 'hotfix' compadd $hotfixes
+}
+
+__git_branch_names () {
+ local expl
+ declare -a branch_names
+
+ branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads 2>/dev/null)"}#refs/heads/})
+ __git_command_successful || return
+
+ _wanted branch-names expl branch-name compadd $* - $branch_names
+}
+
+__git_command_successful () {
+ if (( ${#pipestatus:#0} > 0 )); then
+ _message 'not a git repository'
+ return 1
+ fi
+ return 0
+}
+
+zstyle ':completion:*:*:git:*' user-commands flow:'description for foo'
diff --git a/plugins/git-remote-branch/git-remote-branch.plugin.zsh b/plugins/git-remote-branch/git-remote-branch.plugin.zsh
new file mode 100644
index 000000000..ff98cbf87
--- /dev/null
+++ b/plugins/git-remote-branch/git-remote-branch.plugin.zsh
@@ -0,0 +1,18 @@
+_git_remote_branch() {
+ ref=$(git symbolic-ref HEAD 2> /dev/null)
+ if [[ -n $ref ]]; then
+ if (( CURRENT == 2 )); then
+ # first arg: operation
+ compadd create publish rename delete track
+ elif (( CURRENT == 3 )); then
+ # second arg: remote branch name
+ compadd `git branch -r | grep -v HEAD | sed "s/.*\///" | sed "s/ //g"`
+ elif (( CURRENT == 4 )); then
+ # third arg: remote name
+ compadd `git remote`
+ fi
+ else;
+ _files
+ fi
+}
+compdef _git_remote_branch grb
diff --git a/plugins/git/git.plugin.zsh b/plugins/git/git.plugin.zsh
index e1d682508..154aa6db1 100644
--- a/plugins/git/git.plugin.zsh
+++ b/plugins/git/git.plugin.zsh
@@ -5,10 +5,11 @@ alias gst='git status'
compdef _git gst=git-status
alias gl='git pull'
compdef _git gl=git-pull
-alias gup='git fetch && git rebase'
+alias gup='git pull --rebase'
compdef _git gup=git-fetch
alias gp='git push'
compdef _git gp=git-push
+alias gd='git diff'
gdv() { git diff -w "$@" | view - }
compdef _git gdv=git-diff
alias gc='git commit -v'
@@ -18,18 +19,33 @@ compdef _git gca=git-commit
alias gco='git checkout'
compdef _git gco=git-checkout
alias gcm='git checkout master'
+alias gr='git remote'
+compdef _git gr=git-remote
+alias grv='git remote -v'
+compdef _git grv=git-remote
+alias grmv='git remote rename'
+compdef _git grmv=git-remote
+alias grrm='git remote remove'
+compdef _git grrm=git-remote
+alias grset='git remote set-url'
+compdef _git grset=git-remote
+alias grup='git remote update'
+compdef _git grset=git-remote
alias gb='git branch'
compdef _git gb=git-branch
alias gba='git branch -a'
compdef _git gba=git-branch
alias gcount='git shortlog -sn'
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'
compdef _git glg=git-log
alias glgg='git log --graph --max-count=5'
compdef _git glgg=git-log
+alias glgga='git log --graph --decorate --all'
+compdef _git glgga=git-log
alias gss='git status -s'
compdef _git gss=git-status
alias ga='git add'
@@ -38,6 +54,13 @@ alias gm='git merge'
compdef _git gm=git-merge
alias grh='git reset HEAD'
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'
+
+# Will cd into the top of the current repository
+# or submodule.
+alias grt='cd $(git rev-parse --show-toplevel || echo ".")'
# Git and svn mix
alias git-svn-dcommit-push='git svn dcommit && git push github master:svntrunk'
@@ -50,14 +73,21 @@ alias gsd='git svn dcommit'
# Usage example: git pull origin $(current_branch)
#
function current_branch() {
- ref=$(git symbolic-ref HEAD 2> /dev/null) || return
+ ref=$(git symbolic-ref HEAD 2> /dev/null) || \
+ ref=$(git rev-parse --short HEAD 2> /dev/null) || return
echo ${ref#refs/heads/}
}
+function current_repository() {
+ ref=$(git symbolic-ref HEAD 2> /dev/null) || \
+ ref=$(git rev-parse --short HEAD 2> /dev/null) || return
+ echo $(git remote -v | cut -d':' -f 2)
+}
+
# these aliases take advantage of the previous function
alias ggpull='git pull origin $(current_branch)'
compdef ggpull=git
alias ggpush='git push origin $(current_branch)'
compdef ggpush=git
alias ggpnp='git pull origin $(current_branch) && git push origin $(current_branch)'
-compdef ggpnp=git \ No newline at end of file
+compdef ggpnp=git
diff --git a/plugins/gitfast/_git b/plugins/gitfast/_git
new file mode 100644
index 000000000..45775021f
--- /dev/null
+++ b/plugins/gitfast/_git
@@ -0,0 +1,78 @@
+#compdef git gitk
+
+# zsh completion wrapper for git
+#
+# You need git's bash completion script installed somewhere, by default on the
+# same directory as this script.
+#
+# If your script is on ~/.git-completion.sh instead, you can configure it on
+# your ~/.zshrc:
+#
+# zstyle ':completion:*:*:git:*' script ~/.git-completion.sh
+#
+# The recommended way to install this script is to copy to
+# '~/.zsh/completion/_git', and then add the following to your ~/.zshrc file:
+#
+# fpath=(~/.zsh/completion $fpath)
+
+complete ()
+{
+ # do nothing
+ return 0
+}
+
+zstyle -s ":completion:*:*:git:*" script script
+test -z "$script" && script="$(dirname ${funcsourcetrace[1]%:*})"/git-completion.bash
+ZSH_VERSION='' . "$script"
+
+__gitcomp ()
+{
+ emulate -L zsh
+
+ local cur_="${3-$cur}"
+
+ case "$cur_" in
+ --*=)
+ ;;
+ *)
+ local c IFS=$' \t\n'
+ local -a array
+ for c in ${=1}; do
+ c="$c${4-}"
+ case $c in
+ --*=*|*.) ;;
+ *) c="$c " ;;
+ esac
+ array+=("$c")
+ done
+ compset -P '*[=:]'
+ compadd -Q -S '' -p "${2-}" -a -- array && _ret=0
+ ;;
+ esac
+}
+
+__gitcomp_nl ()
+{
+ emulate -L zsh
+
+ local IFS=$'\n'
+ compset -P '*[=:]'
+ compadd -Q -S "${4- }" -p "${2-}" -- ${=1} && _ret=0
+}
+
+_git ()
+{
+ local _ret=1
+ () {
+ emulate -L ksh
+ local cur cword prev
+ cur=${words[CURRENT-1]}
+ prev=${words[CURRENT-2]}
+ let cword=CURRENT-1
+ __${service}_main
+ }
+ let _ret && _default -S '' && _ret=0
+ return _ret
+}
+
+_git
diff --git a/plugins/gitfast/git-completion.bash b/plugins/gitfast/git-completion.bash
new file mode 100644
index 000000000..be800e09b
--- /dev/null
+++ b/plugins/gitfast/git-completion.bash
@@ -0,0 +1,2483 @@
+#!bash
+#
+# bash/zsh completion support for core Git.
+#
+# Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org>
+# Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
+# Distributed under the GNU General Public License, version 2.0.
+#
+# The contained completion routines provide support for completing:
+#
+# *) local and remote branch names
+# *) local and remote tag names
+# *) .git/remotes file names
+# *) git 'subcommands'
+# *) tree paths within 'ref:path/to/file' expressions
+# *) common --long-options
+#
+# To use these routines:
+#
+# 1) Copy this file to somewhere (e.g. ~/.git-completion.sh).
+# 2) Add the following line to your .bashrc/.zshrc:
+# source ~/.git-completion.sh
+# 3) Consider changing your PS1 to also show the current branch,
+# see git-prompt.sh for details.
+
+if [[ -n ${ZSH_VERSION-} ]]; then
+ autoload -U +X bashcompinit && bashcompinit
+fi
+
+case "$COMP_WORDBREAKS" in
+*:*) : great ;;
+*) COMP_WORDBREAKS="$COMP_WORDBREAKS:"
+esac
+
+# __gitdir accepts 0 or 1 arguments (i.e., location)
+# returns location of .git repo
+__gitdir ()
+{
+ # Note: this function is duplicated in git-prompt.sh
+ # When updating it, make sure you update the other one to match.
+ if [ -z "${1-}" ]; then
+ if [ -n "${__git_dir-}" ]; then
+ echo "$__git_dir"
+ elif [ -n "${GIT_DIR-}" ]; then
+ test -d "${GIT_DIR-}" || return 1
+ echo "$GIT_DIR"
+ elif [ -d .git ]; then
+ echo .git
+ else
+ git rev-parse --git-dir 2>/dev/null
+ fi
+ elif [ -d "$1/.git" ]; then
+ echo "$1/.git"
+ else
+ echo "$1"
+ fi
+}
+
+__gitcomp_1 ()
+{
+ local c IFS=$' \t\n'
+ for c in $1; do
+ c="$c$2"
+ case $c in
+ --*=*|*.) ;;
+ *) c="$c " ;;
+ esac
+ printf '%s\n' "$c"
+ done
+}
+
+# The following function is based on code from:
+#
+# bash_completion - programmable completion functions for bash 3.2+
+#
+# Copyright © 2006-2008, Ian Macdonald <ian@caliban.org>
+# © 2009-2010, Bash Completion Maintainers
+# <bash-completion-devel@lists.alioth.debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# The latest version of this software can be obtained here:
+#
+# http://bash-completion.alioth.debian.org/
+#
+# RELEASE: 2.x
+
+# This function can be used to access a tokenized list of words
+# on the command line:
+#
+# __git_reassemble_comp_words_by_ref '=:'
+# if test "${words_[cword_-1]}" = -w
+# then
+# ...
+# fi
+#
+# The argument should be a collection of characters from the list of
+# word completion separators (COMP_WORDBREAKS) to treat as ordinary
+# characters.
+#
+# This is roughly equivalent to going back in time and setting
+# COMP_WORDBREAKS to exclude those characters. The intent is to
+# make option types like --date=<type> and <rev>:<path> easy to
+# recognize by treating each shell word as a single token.
+#
+# It is best not to set COMP_WORDBREAKS directly because the value is
+# shared with other completion scripts. By the time the completion
+# function gets called, COMP_WORDS has already been populated so local
+# changes to COMP_WORDBREAKS have no effect.
+#
+# Output: words_, cword_, cur_.
+
+__git_reassemble_comp_words_by_ref()
+{
+ local exclude i j first
+ # Which word separators to exclude?
+ exclude="${1//[^$COMP_WORDBREAKS]}"
+ cword_=$COMP_CWORD
+ if [ -z "$exclude" ]; then
+ words_=("${COMP_WORDS[@]}")
+ return
+ fi
+ # List of word completion separators has shrunk;
+ # re-assemble words to complete.
+ for ((i=0, j=0; i < ${#COMP_WORDS[@]}; i++, j++)); do
+ # Append each nonempty word consisting of just
+ # word separator characters to the current word.
+ first=t
+ while
+ [ $i -gt 0 ] &&
+ [ -n "${COMP_WORDS[$i]}" ] &&
+ # word consists of excluded word separators
+ [ "${COMP_WORDS[$i]//[^$exclude]}" = "${COMP_WORDS[$i]}" ]
+ do
+ # Attach to the previous token,
+ # unless the previous token is the command name.
+ if [ $j -ge 2 ] && [ -n "$first" ]; then
+ ((j--))
+ fi
+ first=
+ words_[$j]=${words_[j]}${COMP_WORDS[i]}
+ if [ $i = $COMP_CWORD ]; then
+ cword_=$j
+ fi
+ if (($i < ${#COMP_WORDS[@]} - 1)); then
+ ((i++))
+ else
+ # Done.
+ return
+ fi
+ done
+ words_[$j]=${words_[j]}${COMP_WORDS[i]}
+ if [ $i = $COMP_CWORD ]; then
+ cword_=$j
+ fi
+ done
+}
+
+if ! type _get_comp_words_by_ref >/dev/null 2>&1; then
+if [[ -z ${ZSH_VERSION:+set} ]]; then
+_get_comp_words_by_ref ()
+{
+ local exclude cur_ words_ cword_
+ if [ "$1" = "-n" ]; then
+ exclude=$2
+ shift 2
+ fi
+ __git_reassemble_comp_words_by_ref "$exclude"
+ cur_=${words_[cword_]}
+ while [ $# -gt 0 ]; do
+ case "$1" in
+ cur)
+ cur=$cur_
+ ;;
+ prev)
+ prev=${words_[$cword_-1]}
+ ;;
+ words)
+ words=("${words_[@]}")
+ ;;
+ cword)
+ cword=$cword_
+ ;;
+ esac
+ shift
+ done
+}
+else
+_get_comp_words_by_ref ()
+{
+ while [ $# -gt 0 ]; do
+ case "$1" in
+ cur)
+ cur=${COMP_WORDS[COMP_CWORD]}
+ ;;
+ prev)
+ prev=${COMP_WORDS[COMP_CWORD-1]}
+ ;;
+ words)
+ words=("${COMP_WORDS[@]}")
+ ;;
+ cword)
+ cword=$COMP_CWORD
+ ;;
+ -n)
+ # assume COMP_WORDBREAKS is already set sanely
+ shift
+ ;;
+ esac
+ shift
+ done
+}
+fi
+fi
+
+# Generates completion reply with compgen, appending a space to possible
+# completion words, if necessary.
+# It accepts 1 to 4 arguments:
+# 1: List of possible completion words.
+# 2: A prefix to be added to each possible completion word (optional).
+# 3: Generate possible completion matches for this word (optional).
+# 4: A suffix to be appended to each possible completion word (optional).
+__gitcomp ()
+{
+ local cur_="${3-$cur}"
+
+ case "$cur_" in
+ --*=)
+ COMPREPLY=()
+ ;;
+ *)
+ local IFS=$'\n'
+ COMPREPLY=($(compgen -P "${2-}" \
+ -W "$(__gitcomp_1 "${1-}" "${4-}")" \
+ -- "$cur_"))
+ ;;
+ esac
+}
+
+# Generates completion reply with compgen from newline-separated possible
+# completion words by appending a space to all of them.
+# It accepts 1 to 4 arguments:
+# 1: List of possible completion words, separated by a single newline.
+# 2: A prefix to be added to each possible completion word (optional).
+# 3: Generate possible completion matches for this word (optional).
+# 4: A suffix to be appended to each possible completion word instead of
+# the default space (optional). If specified but empty, nothing is
+# appended.
+__gitcomp_nl ()
+{
+ local IFS=$'\n'
+ COMPREPLY=($(compgen -P "${2-}" -S "${4- }" -W "$1" -- "${3-$cur}"))
+}
+
+__git_heads ()
+{
+ local dir="$(__gitdir)"
+ if [ -d "$dir" ]; then
+ git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
+ refs/heads
+ return
+ fi
+}
+
+__git_tags ()
+{
+ local dir="$(__gitdir)"
+ if [ -d "$dir" ]; then
+ git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
+ refs/tags
+ return
+ fi
+}
+
+# __git_refs accepts 0, 1 (to pass to __gitdir), or 2 arguments
+# presence of 2nd argument means use the guess heuristic employed
+# by checkout for tracking branches
+__git_refs ()
+{
+ local i hash dir="$(__gitdir "${1-}")" track="${2-}"
+ local format refs
+ if [ -d "$dir" ]; then
+ case "$cur" in
+ refs|refs/*)
+ format="refname"
+ refs="${cur%/*}"
+ track=""
+ ;;
+ *)
+ for i in HEAD FETCH_HEAD ORIG_HEAD MERGE_HEAD; do
+ if [ -e "$dir/$i" ]; then echo $i; fi
+ done
+ format="refname:short"
+ refs="refs/tags refs/heads refs/remotes"
+ ;;
+ esac
+ git --git-dir="$dir" for-each-ref --format="%($format)" \
+ $refs
+ if [ -n "$track" ]; then
+ # employ the heuristic used by git checkout
+ # Try to find a remote branch that matches the completion word
+ # but only output if the branch name is unique
+ local ref entry
+ git --git-dir="$dir" for-each-ref --shell --format="ref=%(refname:short)" \
+ "refs/remotes/" | \
+ while read -r entry; do
+ eval "$entry"
+ ref="${ref#*/}"
+ if [[ "$ref" == "$cur"* ]]; then
+ echo "$ref"
+ fi
+ done | uniq -u
+ fi
+ return
+ fi
+ case "$cur" in
+ refs|refs/*)
+ git ls-remote "$dir" "$cur*" 2>/dev/null | \
+ while read -r hash i; do
+ case "$i" in
+ *^{}) ;;
+ *) echo "$i" ;;
+ esac
+ done
+ ;;
+ *)
+ git ls-remote "$dir" HEAD ORIG_HEAD 'refs/tags/*' 'refs/heads/*' 'refs/remotes/*' 2>/dev/null | \
+ while read -r hash i; do
+ case "$i" in
+ *^{}) ;;
+ refs/*) echo "${i#refs/*/}" ;;
+ *) echo "$i" ;;
+ esac
+ done
+ ;;
+ esac
+}
+
+# __git_refs2 requires 1 argument (to pass to __git_refs)
+__git_refs2 ()
+{
+ local i
+ for i in $(__git_refs "$1"); do
+ echo "$i:$i"
+ done
+}
+
+# __git_refs_remotes requires 1 argument (to pass to ls-remote)
+__git_refs_remotes ()
+{
+ local i hash
+ git ls-remote "$1" 'refs/heads/*' 2>/dev/null | \
+ while read -r hash i; do
+ echo "$i:refs/remotes/$1/${i#refs/heads/}"
+ done
+}
+
+__git_remotes ()
+{
+ local i IFS=$'\n' d="$(__gitdir)"
+ test -d "$d/remotes" && ls -1 "$d/remotes"
+ for i in $(git --git-dir="$d" config --get-regexp 'remote\..*\.url' 2>/dev/null); do
+ i="${i#remote.}"
+ echo "${i/.url*/}"
+ done
+}
+
+__git_list_merge_strategies ()
+{
+ git merge -s help 2>&1 |
+ sed -n -e '/[Aa]vailable strategies are: /,/^$/{
+ s/\.$//
+ s/.*://
+ s/^[ ]*//
+ s/[ ]*$//
+ p
+ }'
+}
+
+__git_merge_strategies=
+# 'git merge -s help' (and thus detection of the merge strategy
+# list) fails, unfortunately, if run outside of any git working
+# tree. __git_merge_strategies is set to the empty string in
+# that case, and the detection will be repeated the next time it
+# is needed.
+__git_compute_merge_strategies ()
+{
+ test -n "$__git_merge_strategies" ||
+ __git_merge_strategies=$(__git_list_merge_strategies)
+}
+
+__git_complete_revlist_file ()
+{
+ local pfx ls ref cur_="$cur"
+ case "$cur_" in
+ *..?*:*)
+ return
+ ;;
+ ?*:*)
+ ref="${cur_%%:*}"
+ cur_="${cur_#*:}"
+ case "$cur_" in
+ ?*/*)
+ pfx="${cur_%/*}"
+ cur_="${cur_##*/}"
+ ls="$ref:$pfx"
+ pfx="$pfx/"
+ ;;
+ *)
+ ls="$ref"
+ ;;
+ esac
+
+ case "$COMP_WORDBREAKS" in
+ *:*) : great ;;
+ *) pfx="$ref:$pfx" ;;
+ esac
+
+ __gitcomp_nl "$(git --git-dir="$(__gitdir)" ls-tree "$ls" \
+ | sed '/^100... blob /{
+ s,^.* ,,
+ s,$, ,
+ }
+ /^120000 blob /{
+ s,^.* ,,
+ s,$, ,
+ }
+ /^040000 tree /{
+ s,^.* ,,
+ s,$,/,
+ }
+ s/^.* //')" \
+ "$pfx" "$cur_" ""
+ ;;
+ *...*)
+ pfx="${cur_%...*}..."
+ cur_="${cur_#*...}"
+ __gitcomp_nl "$(__git_refs)" "$pfx" "$cur_"
+ ;;
+ *..*)
+ pfx="${cur_%..*}.."
+ cur_="${cur_#*..}"
+ __gitcomp_nl "$(__git_refs)" "$pfx" "$cur_"
+ ;;
+ *)
+ __gitcomp_nl "$(__git_refs)"
+ ;;
+ esac
+}
+
+
+__git_complete_file ()
+{
+ __git_complete_revlist_file
+}
+
+__git_complete_revlist ()
+{
+ __git_complete_revlist_file
+}
+
+__git_complete_remote_or_refspec ()
+{
+ local cur_="$cur" cmd="${words[1]}"
+ local i c=2 remote="" pfx="" lhs=1 no_complete_refspec=0
+ if [ "$cmd" = "remote" ]; then
+ ((c++))
+ fi
+ while [ $c -lt $cword ]; do
+ i="${words[c]}"
+ case "$i" in
+ --mirror) [ "$cmd" = "push" ] && no_complete_refspec=1 ;;
+ --all)
+ case "$cmd" in
+ push) no_complete_refspec=1 ;;
+ fetch)
+ COMPREPLY=()
+ return
+ ;;
+ *) ;;
+ esac
+ ;;
+ -*) ;;
+ *) remote="$i"; break ;;
+ esac
+ ((c++))
+ done
+ if [ -z "$remote" ]; then
+ __gitcomp_nl "$(__git_remotes)"
+ return
+ fi
+ if [ $no_complete_refspec = 1 ]; then
+ COMPREPLY=()
+ return
+ fi
+ [ "$remote" = "." ] && remote=
+ case "$cur_" in
+ *:*)
+ case "$COMP_WORDBREAKS" in
+ *:*) : great ;;
+ *) pfx="${cur_%%:*}:" ;;
+ esac
+ cur_="${cur_#*:}"
+ lhs=0
+ ;;
+ +*)
+ pfx="+"
+ cur_="${cur_#+}"
+ ;;
+ esac
+ case "$cmd" in
+ fetch)
+ if [ $lhs = 1 ]; then
+ __gitcomp_nl "$(__git_refs2 "$remote")" "$pfx" "$cur_"
+ else
+ __gitcomp_nl "$(__git_refs)" "$pfx" "$cur_"
+ fi
+ ;;
+ pull|remote)
+ if [ $lhs = 1 ]; then
+ __gitcomp_nl "$(__git_refs "$remote")" "$pfx" "$cur_"
+ else
+ __gitcomp_nl "$(__git_refs)" "$pfx" "$cur_"
+ fi
+ ;;
+ push)
+ if [ $lhs = 1 ]; then
+ __gitcomp_nl "$(__git_refs)" "$pfx" "$cur_"
+ else
+ __gitcomp_nl "$(__git_refs "$remote")" "$pfx" "$cur_"
+ fi
+ ;;
+ esac
+}
+
+__git_complete_strategy ()
+{
+ __git_compute_merge_strategies
+ case "$prev" in
+ -s|--strategy)
+ __gitcomp "$__git_merge_strategies"
+ return 0
+ esac
+ case "$cur" in
+ --strategy=*)
+ __gitcomp "$__git_merge_strategies" "" "${cur##--strategy=}"
+ return 0
+ ;;
+ esac
+ return 1
+}
+
+__git_list_all_commands ()
+{
+ local i IFS=" "$'\n'
+ for i in $(git help -a|egrep '^ [a-zA-Z0-9]')
+ do
+ case $i in
+ *--*) : helper pattern;;
+ *) echo $i;;
+ esac
+ done
+}
+
+__git_all_commands=
+__git_compute_all_commands ()
+{
+ test -n "$__git_all_commands" ||
+ __git_all_commands=$(__git_list_all_commands)
+}
+
+__git_list_porcelain_commands ()
+{
+ local i IFS=" "$'\n'
+ __git_compute_all_commands
+ for i in "help" $__git_all_commands
+ do
+ case $i in
+ *--*) : helper pattern;;
+ applymbox) : ask gittus;;
+ applypatch) : ask gittus;;
+ archimport) : import;;
+ cat-file) : plumbing;;
+ check-attr) : plumbing;;
+ check-ref-format) : plumbing;;
+ checkout-index) : plumbing;;
+ commit-tree) : plumbing;;
+ count-objects) : infrequent;;
+ credential-cache) : credentials helper;;
+ credential-store) : credentials helper;;
+ cvsexportcommit) : export;;
+ cvsimport) : import;;
+ cvsserver) : daemon;;
+ daemon) : daemon;;
+ diff-files) : plumbing;;
+ diff-index) : plumbing;;
+ diff-tree) : plumbing;;
+ fast-import) : import;;
+ fast-export) : export;;
+ fsck-objects) : plumbing;;
+ fetch-pack) : plumbing;;
+ fmt-merge-msg) : plumbing;;
+ for-each-ref) : plumbing;;
+ hash-object) : plumbing;;
+ http-*) : transport;;
+ index-pack) : plumbing;;
+ init-db) : deprecated;;
+ local-fetch) : plumbing;;
+ lost-found) : infrequent;;
+ ls-files) : plumbing;;
+ ls-remote) : plumbing;;
+ ls-tree) : plumbing;;
+ mailinfo) : plumbing;;
+ mailsplit) : plumbing;;
+ merge-*) : plumbing;;
+ mktree) : plumbing;;
+ mktag) : plumbing;;
+ pack-objects) : plumbing;;
+ pack-redundant) : plumbing;;
+ pack-refs) : plumbing;;
+ parse-remote) : plumbing;;
+ patch-id) : plumbing;;
+ peek-remote) : plumbing;;
+ prune) : plumbing;;
+ prune-packed) : plumbing;;
+ quiltimport) : import;;
+ read-tree) : plumbing;;
+ receive-pack) : plumbing;;
+ remote-*) : transport;;
+ repo-config) : deprecated;;
+ rerere) : plumbing;;
+ rev-list) : plumbing;;
+ rev-parse) : plumbing;;
+ runstatus) : plumbing;;
+ sh-setup) : internal;;
+ shell) : daemon;;
+ show-ref) : plumbing;;
+ send-pack) : plumbing;;
+ show-index) : plumbing;;
+ ssh-*) : transport;;
+ stripspace) : plumbing;;
+ symbolic-ref) : plumbing;;
+ tar-tree) : deprecated;;
+ unpack-file) : plumbing;;
+ unpack-objects) : plumbing;;
+ update-index) : plumbing;;
+ update-ref) : plumbing;;
+ update-server-info) : daemon;;
+ upload-archive) : plumbing;;
+ upload-pack) : plumbing;;
+ write-tree) : plumbing;;
+ var) : infrequent;;
+ verify-pack) : infrequent;;
+ verify-tag) : plumbing;;
+ *) echo $i;;
+ esac
+ done
+}
+
+__git_porcelain_commands=
+__git_compute_porcelain_commands ()
+{
+ __git_compute_all_commands
+ test -n "$__git_porcelain_commands" ||
+ __git_porcelain_commands=$(__git_list_porcelain_commands)
+}
+
+__git_pretty_aliases ()
+{
+ local i IFS=$'\n'
+ for i in $(git --git-dir="$(__gitdir)" config --get-regexp "pretty\..*" 2>/dev/null); do
+ case "$i" in
+ pretty.*)
+ i="${i#pretty.}"
+ echo "${i/ */}"
+ ;;
+ esac
+ done
+}
+
+__git_aliases ()
+{
+ local i IFS=$'\n'
+ for i in $(git --git-dir="$(__gitdir)" config --get-regexp "alias\..*" 2>/dev/null); do
+ case "$i" in
+ alias.*)
+ i="${i#alias.}"
+ echo "${i/ */}"
+ ;;
+ esac
+ done
+}
+
+# __git_aliased_command requires 1 argument
+__git_aliased_command ()
+{
+ local word cmdline=$(git --git-dir="$(__gitdir)" \
+ config --get "alias.$1")
+ for word in $cmdline; do
+ case "$word" in
+ \!gitk|gitk)
+ echo "gitk"
+ return
+ ;;
+ \!*) : shell command alias ;;
+ -*) : option ;;
+ *=*) : setting env ;;
+ git) : git itself ;;
+ *)
+ echo "$word"
+ return
+ esac
+ done
+}
+
+# __git_find_on_cmdline requires 1 argument
+__git_find_on_cmdline ()
+{
+ local word subcommand c=1
+ while [ $c -lt $cword ]; do
+ word="${words[c]}"
+ for subcommand in $1; do
+ if [ "$subcommand" = "$word" ]; then
+ echo "$subcommand"
+ return
+ fi
+ done
+ ((c++))
+ done
+}
+
+__git_has_doubledash ()
+{
+ local c=1
+ while [ $c -lt $cword ]; do
+ if [ "--" = "${words[c]}" ]; then
+ return 0
+ fi
+ ((c++))
+ done
+ return 1
+}
+
+__git_whitespacelist="nowarn warn error error-all fix"
+
+_git_am ()
+{
+ local dir="$(__gitdir)"
+ if [ -d "$dir"/rebase-apply ]; then
+ __gitcomp "--skip --continue --resolved --abort"
+ return
+ fi
+ case "$cur" in
+ --whitespace=*)
+ __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
+ return
+ ;;
+ --*)
+ __gitcomp "
+ --3way --committer-date-is-author-date --ignore-date
+ --ignore-whitespace --ignore-space-change
+ --interactive --keep --no-utf8 --signoff --utf8
+ --whitespace= --scissors
+ "
+ return
+ esac
+ COMPREPLY=()
+}
+
+_git_apply ()
+{
+ case "$cur" in
+ --whitespace=*)
+ __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
+ return
+ ;;
+ --*)
+ __gitcomp "
+ --stat --numstat --summary --check --index
+ --cached --index-info --reverse --reject --unidiff-zero
+ --apply --no-add --exclude=
+ --ignore-whitespace --ignore-space-change
+ --whitespace= --inaccurate-eof --verbose
+ "
+ return
+ esac
+ COMPREPLY=()
+}
+
+_git_add ()
+{
+ __git_has_doubledash && return
+
+ case "$cur" in
+ --*)
+ __gitcomp "
+ --interactive --refresh --patch --update --dry-run
+ --ignore-errors --intent-to-add
+ "
+ return
+ esac
+ COMPREPLY=()
+}
+
+_git_archive ()
+{
+ case "$cur" in
+ --format=*)
+ __gitcomp "$(git archive --list)" "" "${cur##--format=}"
+ return
+ ;;
+ --remote=*)
+ __gitcomp_nl "$(__git_remotes)" "" "${cur##--remote=}"
+ return
+ ;;
+ --*)
+ __gitcomp "
+ --format= --list --verbose
+ --prefix= --remote= --exec=
+ "
+ return
+ ;;
+ esac
+ __git_complete_file
+}
+
+_git_bisect ()
+{
+ __git_has_doubledash && return
+
+ local subcommands="start bad good skip reset visualize replay log run"
+ local subcommand="$(__git_find_on_cmdline "$subcommands")"
+ if [ -z "$subcommand" ]; then
+ if [ -f "$(__gitdir)"/BISECT_START ]; then
+ __gitcomp "$subcommands"
+ else
+ __gitcomp "replay start"
+ fi
+ return
+ fi
+
+ case "$subcommand" in
+ bad|good|reset|skip|start)
+ __gitcomp_nl "$(__git_refs)"
+ ;;
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+}
+
+_git_branch ()
+{
+ local i c=1 only_local_ref="n" has_r="n"
+
+ while [ $c -lt $cword ]; do
+ i="${words[c]}"
+ case "$i" in
+ -d|-m) only_local_ref="y" ;;
+ -r) has_r="y" ;;
+ esac
+ ((c++))
+ done
+
+ case "$cur" in
+ --set-upstream-to=*)
+ __gitcomp "$(__git_refs)" "" "${cur##--set-upstream-to=}"
+ ;;
+ --*)
+ __gitcomp "
+ --color --no-color --verbose --abbrev= --no-abbrev
+ --track --no-track --contains --merged --no-merged
+ --set-upstream-to= --edit-description --list
+ --unset-upstream
+ "
+ ;;
+ *)
+ if [ $only_local_ref = "y" -a $has_r = "n" ]; then
+ __gitcomp_nl "$(__git_heads)"
+ else
+ __gitcomp_nl "$(__git_refs)"
+ fi
+ ;;
+ esac
+}
+
+_git_bundle ()
+{
+ local cmd="${words[2]}"
+ case "$cword" in
+ 2)
+ __gitcomp "create list-heads verify unbundle"
+ ;;
+ 3)
+ # looking for a file
+ ;;
+ *)
+ case "$cmd" in
+ create)
+ __git_complete_revlist
+ ;;
+ esac
+ ;;
+ esac
+}
+
+_git_checkout ()
+{
+ __git_has_doubledash && return
+
+ case "$cur" in
+ --conflict=*)
+ __gitcomp "diff3 merge" "" "${cur##--conflict=}"
+ ;;
+ --*)
+ __gitcomp "
+ --quiet --ours --theirs --track --no-track --merge
+ --conflict= --orphan --patch
+ "
+ ;;
+ *)
+ # check if --track, --no-track, or --no-guess was specified
+ # if so, disable DWIM mode
+ local flags="--track --no-track --no-guess" track=1
+ if [ -n "$(__git_find_on_cmdline "$flags")" ]; then
+ track=''
+ fi
+ __gitcomp_nl "$(__git_refs '' $track)"
+ ;;
+ esac
+}
+
+_git_cherry ()
+{
+ __gitcomp "$(__git_refs)"
+}
+
+_git_cherry_pick ()
+{
+ case "$cur" in
+ --*)
+ __gitcomp "--edit --no-commit"
+ ;;
+ *)
+ __gitcomp_nl "$(__git_refs)"
+ ;;
+ esac
+}
+
+_git_clean ()
+{
+ __git_has_doubledash && return
+
+ case "$cur" in
+ --*)
+ __gitcomp "--dry-run --quiet"
+ return
+ ;;
+ esac
+ COMPREPLY=()
+}
+
+_git_clone ()
+{
+ case "$cur" in
+ --*)
+ __gitcomp "
+ --local
+ --no-hardlinks
+ --shared
+ --reference
+ --quiet
+ --no-checkout
+ --bare
+ --mirror
+ --origin
+ --upload-pack
+ --template=
+ --depth
+ "
+ return
+ ;;
+ esac
+ COMPREPLY=()
+}
+
+_git_commit ()
+{
+ __git_has_doubledash && return
+
+ case "$cur" in
+ --cleanup=*)
+ __gitcomp "default strip verbatim whitespace
+ " "" "${cur##--cleanup=}"
+ return
+ ;;
+ --reuse-message=*|--reedit-message=*|\
+ --fixup=*|--squash=*)
+ __gitcomp_nl "$(__git_refs)" "" "${cur#*=}"
+ return
+ ;;
+ --untracked-files=*)
+ __gitcomp "all no normal" "" "${cur##--untracked-files=}"
+ return
+ ;;
+ --*)
+ __gitcomp "
+ --all --author= --signoff --verify --no-verify
+ --edit --no-edit
+ --amend --include --only --interactive
+ --dry-run --reuse-message= --reedit-message=
+ --reset-author --file= --message= --template=
+ --cleanup= --untracked-files --untracked-files=
+ --verbose --quiet --fixup= --squash=
+ "
+ return
+ esac
+ COMPREPLY=()
+}
+
+_git_describe ()
+{
+ case "$cur" in
+ --*)
+ __gitcomp "
+ --all --tags --contains --abbrev= --candidates=
+ --exact-match --debug --long --match --always
+ "
+ return
+ esac
+ __gitcomp_nl "$(__git_refs)"
+}
+
+__git_diff_common_options="--stat --numstat --shortstat --summary
+ --patch-with-stat --name-only --name-status --color
+ --no-color --color-words --no-renames --check
+ --full-index --binary --abbrev --diff-filter=
+ --find-copies-harder
+ --text --ignore-space-at-eol --ignore-space-change
+ --ignore-all-space --exit-code --quiet --ext-diff
+ --no-ext-diff
+ --no-prefix --src-prefix= --dst-prefix=
+ --inter-hunk-context=
+ --patience
+ --raw
+ --dirstat --dirstat= --dirstat-by-file
+ --dirstat-by-file= --cumulative
+"
+
+_git_diff ()
+{
+ __git_has_doubledash && return
+
+ case "$cur" in
+ --*)
+ __gitcomp "--cached --staged --pickaxe-all --pickaxe-regex
+ --base --ours --theirs --no-index
+ $__git_diff_common_options
+ "
+ return
+ ;;
+ esac
+ __git_complete_revlist_file
+}
+
+__git_mergetools_common="diffuse ecmerge emerge kdiff3 meld opendiff
+ tkdiff vimdiff gvimdiff xxdiff araxis p4merge bc3 codecompare
+"
+
+_git_difftool ()
+{
+ __git_has_doubledash && return
+
+ case "$cur" in
+ --tool=*)
+ __gitcomp "$__git_mergetools_common kompare" "" "${cur##--tool=}"
+ return
+ ;;
+ --*)
+ __gitcomp "--cached --staged --pickaxe-all --pickaxe-regex
+ --base --ours --theirs
+ --no-renames --diff-filter= --find-copies-harder
+ --relative --ignore-submodules
+ --tool="
+ return
+ ;;
+ esac
+ __git_complete_file
+}
+
+__git_fetch_options="
+ --quiet --verbose --append --upload-pack --force --keep --depth=
+ --tags --no-tags --all --prune --dry-run
+"
+
+_git_fetch ()
+{
+ case "$cur" in
+ --*)
+ __gitcomp "$__git_fetch_options"
+ return
+ ;;
+ esac
+ __git_complete_remote_or_refspec
+}
+
+_git_format_patch ()
+{
+ case "$cur" in
+ --thread=*)
+ __gitcomp "
+ deep shallow
+ " "" "${cur##--thread=}"
+ return
+ ;;
+ --*)
+ __gitcomp "
+ --stdout --attach --no-attach --thread --thread=
+ --output-directory
+ --numbered --start-number
+ --numbered-files
+ --keep-subject
+ --signoff --signature --no-signature
+ --in-reply-to= --cc=
+ --full-index --binary
+ --not --all
+ --cover-letter
+ --no-prefix --src-prefix= --dst-prefix=
+ --inline --suffix= --ignore-if-in-upstream
+ --subject-prefix=
+ "
+ return
+ ;;
+ esac
+ __git_complete_revlist
+}
+
+_git_fsck ()
+{
+ case "$cur" in
+ --*)
+ __gitcomp "
+ --tags --root --unreachable --cache --no-reflogs --full
+ --strict --verbose --lost-found
+ "
+ return
+ ;;
+ esac
+ COMPREPLY=()
+}
+
+_git_gc ()
+{
+ case "$cur" in
+ --*)
+ __gitcomp "--prune --aggressive"
+ return
+ ;;
+ esac
+ COMPREPLY=()
+}
+
+_git_gitk ()
+{
+ _gitk
+}
+
+__git_match_ctag() {
+ awk "/^${1////\\/}/ { print \$1 }" "$2"
+}
+
+_git_grep ()
+{
+ __git_has_doubledash && return
+
+ case "$cur" in
+ --*)
+ __gitcomp "
+ --cached
+ --text --ignore-case --word-regexp --invert-match
+ --full-name --line-number
+ --extended-regexp --basic-regexp --fixed-strings
+ --perl-regexp
+ --files-with-matches --name-only
+ --files-without-match
+ --max-depth
+ --count
+ --and --or --not --all-match
+ "
+ return
+ ;;
+ esac
+
+ case "$cword,$prev" in
+ 2,*|*,-*)
+ if test -r tags; then
+ __gitcomp_nl "$(__git_match_ctag "$cur" tags)"
+ return
+ fi
+ ;;
+ esac
+
+ __gitcomp_nl "$(__git_refs)"
+}
+
+_git_help ()
+{
+ case "$cur" in
+ --*)
+ __gitcomp "--all --info --man --web"
+ return
+ ;;
+ esac
+ __git_compute_all_commands
+ __gitcomp "$__git_all_commands $(__git_aliases)
+ attributes cli core-tutorial cvs-migration
+ diffcore gitk glossary hooks ignore modules
+ namespaces repository-layout tutorial tutorial-2
+ workflows
+ "
+}
+
+_git_init ()
+{
+ case "$cur" in
+ --shared=*)
+ __gitcomp "
+ false true umask group all world everybody
+ " "" "${cur##--shared=}"
+ return
+ ;;
+ --*)
+ __gitcomp "--quiet --bare --template= --shared --shared="
+ return
+ ;;
+ esac
+ COMPREPLY=()
+}
+
+_git_ls_files ()
+{
+ __git_has_doubledash && return
+
+ case "$cur" in
+ --*)
+ __gitcomp "--cached --deleted --modified --others --ignored
+ --stage --directory --no-empty-directory --unmerged
+ --killed --exclude= --exclude-from=
+ --exclude-per-directory= --exclude-standard
+ --error-unmatch --with-tree= --full-name
+ --abbrev --ignored --exclude-per-directory
+ "
+ return
+ ;;
+ esac
+ COMPREPLY=()
+}
+
+_git_ls_remote ()
+{
+ __gitcomp_nl "$(__git_remotes)"
+}
+
+_git_ls_tree ()
+{
+ __git_complete_file
+}
+
+# Options that go well for log, shortlog and gitk
+__git_log_common_options="
+ --not --all
+ --branches --tags --remotes
+ --first-parent --merges --no-merges
+ --max-count=
+ --max-age= --since= --after=
+ --min-age= --until= --before=
+ --min-parents= --max-parents=
+ --no-min-parents --no-max-parents
+"
+# Options that go well for log and gitk (not shortlog)
+__git_log_gitk_options="
+ --dense --sparse --full-history
+ --simplify-merges --simplify-by-decoration
+ --left-right --notes --no-notes
+"
+# Options that go well for log and shortlog (not gitk)
+__git_log_shortlog_options="
+ --author= --committer= --grep=
+ --all-match
+"
+
+__git_log_pretty_formats="oneline short medium full fuller email raw format:"
+__git_log_date_formats="relative iso8601 rfc2822 short local default raw"
+
+_git_log ()
+{
+ __git_has_doubledash && return
+
+ local g="$(git rev-parse --git-dir 2>/dev/null)"
+ local merge=""
+ if [ -f "$g/MERGE_HEAD" ]; then
+ merge="--merge"
+ fi
+ case "$cur" in
+ --pretty=*|--format=*)
+ __gitcomp "$__git_log_pretty_formats $(__git_pretty_aliases)
+ " "" "${cur#*=}"
+ return
+ ;;
+ --date=*)
+ __gitcomp "$__git_log_date_formats" "" "${cur##--date=}"
+ return
+ ;;
+ --decorate=*)
+ __gitcomp "long short" "" "${cur##--decorate=}"
+ return
+ ;;
+ --*)
+ __gitcomp "
+ $__git_log_common_options
+ $__git_log_shortlog_options
+ $__git_log_gitk_options
+ --root --topo-order --date-order --reverse
+ --follow --full-diff
+ --abbrev-commit --abbrev=
+ --relative-date --date=
+ --pretty= --format= --oneline
+ --cherry-pick
+ --graph
+ --decorate --decorate=
+ --walk-reflogs
+ --parents --children
+ $merge
+ $__git_diff_common_options
+ --pickaxe-all --pickaxe-regex
+ "
+ return
+ ;;
+ esac
+ __git_complete_revlist
+}
+
+__git_merge_options="
+ --no-commit --no-stat --log --no-log --squash --strategy
+ --commit --stat --no-squash --ff --no-ff --ff-only --edit --no-edit
+"
+
+_git_merge ()
+{
+ __git_complete_strategy && return
+
+ case "$cur" in
+ --*)
+ __gitcomp "$__git_merge_options"
+ return
+ esac
+ __gitcomp_nl "$(__git_refs)"
+}
+
+_git_mergetool ()
+{
+ case "$cur" in
+ --tool=*)
+ __gitcomp "$__git_mergetools_common tortoisemerge" "" "${cur##--tool=}"
+ return
+ ;;
+ --*)
+ __gitcomp "--tool="
+ return
+ ;;
+ esac
+ COMPREPLY=()
+}
+
+_git_merge_base ()
+{
+ __gitcomp_nl "$(__git_refs)"
+}
+
+_git_mv ()
+{
+ case "$cur" in
+ --*)
+ __gitcomp "--dry-run"
+ return
+ ;;
+ esac
+ COMPREPLY=()
+}
+
+_git_name_rev ()
+{
+ __gitcomp "--tags --all --stdin"
+}
+
+_git_notes ()
+{
+ local subcommands='add append copy edit list prune remove show'
+ local subcommand="$(__git_find_on_cmdline "$subcommands")"
+
+ case "$subcommand,$cur" in
+ ,--*)
+ __gitcomp '--ref'
+ ;;
+ ,*)
+ case "$prev" in
+ --ref)
+ __gitcomp_nl "$(__git_refs)"
+ ;;
+ *)
+ __gitcomp "$subcommands --ref"
+ ;;
+ esac
+ ;;
+ add,--reuse-message=*|append,--reuse-message=*|\
+ add,--reedit-message=*|append,--reedit-message=*)
+ __gitcomp_nl "$(__git_refs)" "" "${cur#*=}"
+ ;;
+ add,--*|append,--*)
+ __gitcomp '--file= --message= --reedit-message=
+ --reuse-message='
+ ;;
+ copy,--*)
+ __gitcomp '--stdin'
+ ;;
+ prune,--*)
+ __gitcomp '--dry-run --verbose'
+ ;;
+ prune,*)
+ ;;
+ *)
+ case "$prev" in
+ -m|-F)
+ ;;
+ *)
+ __gitcomp_nl "$(__git_refs)"
+ ;;
+ esac
+ ;;
+ esac
+}
+
+_git_pull ()
+{
+ __git_complete_strategy && return
+
+ case "$cur" in
+ --*)
+ __gitcomp "
+ --rebase --no-rebase
+ $__git_merge_options
+ $__git_fetch_options
+ "
+ return
+ ;;
+ esac
+ __git_complete_remote_or_refspec
+}
+
+_git_push ()
+{
+ case "$prev" in
+ --repo)
+ __gitcomp_nl "$(__git_remotes)"
+ return
+ esac
+ case "$cur" in
+ --repo=*)
+ __gitcomp_nl "$(__git_remotes)" "" "${cur##--repo=}"
+ return
+ ;;
+ --*)
+ __gitcomp "
+ --all --mirror --tags --dry-run --force --verbose
+ --receive-pack= --repo= --set-upstream
+ "
+ return
+ ;;
+ esac
+ __git_complete_remote_or_refspec
+}
+
+_git_rebase ()
+{
+ local dir="$(__gitdir)"
+ if [ -d "$dir"/rebase-apply ] || [ -d "$dir"/rebase-merge ]; then
+ __gitcomp "--continue --skip --abort"
+ return
+ fi
+ __git_complete_strategy && return
+ case "$cur" in
+ --whitespace=*)
+ __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
+ return
+ ;;
+ --*)
+ __gitcomp "
+ --onto --merge --strategy --interactive
+ --preserve-merges --stat --no-stat
+ --committer-date-is-author-date --ignore-date
+ --ignore-whitespace --whitespace=
+ --autosquash
+ "
+
+ return
+ esac
+ __gitcomp_nl "$(__git_refs)"
+}
+
+_git_reflog ()
+{
+ local subcommands="show delete expire"
+ local subcommand="$(__git_find_on_cmdline "$subcommands")"
+
+ if [ -z "$subcommand" ]; then
+ __gitcomp "$subcommands"
+ else
+ __gitcomp_nl "$(__git_refs)"
+ fi
+}
+
+__git_send_email_confirm_options="always never auto cc compose"
+__git_send_email_suppresscc_options="author self cc bodycc sob cccmd body all"
+
+_git_send_email ()
+{
+ case "$cur" in
+ --confirm=*)
+ __gitcomp "
+ $__git_send_email_confirm_options
+ " "" "${cur##--confirm=}"
+ return
+ ;;
+ --suppress-cc=*)
+ __gitcomp "
+ $__git_send_email_suppresscc_options
+ " "" "${cur##--suppress-cc=}"
+
+ return
+ ;;
+ --smtp-encryption=*)
+ __gitcomp "ssl tls" "" "${cur##--smtp-encryption=}"
+ return
+ ;;
+ --*)
+ __gitcomp "--annotate --bcc --cc --cc-cmd --chain-reply-to
+ --compose --confirm= --dry-run --envelope-sender
+ --from --identity
+ --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
+ --no-suppress-from --no-thread --quiet
+ --signed-off-by-cc --smtp-pass --smtp-server
+ --smtp-server-port --smtp-encryption= --smtp-user
+ --subject --suppress-cc= --suppress-from --thread --to
+ --validate --no-validate"
+ return
+ ;;
+ esac
+ COMPREPLY=()
+}
+
+_git_stage ()
+{
+ _git_add
+}
+
+__git_config_get_set_variables ()
+{
+ local prevword word config_file= c=$cword
+ while [ $c -gt 1 ]; do
+ word="${words[c]}"
+ case "$word" in
+ --global|--system|--file=*)
+ config_file="$word"
+ break
+ ;;
+ -f|--file)
+ config_file="$word $prevword"
+ break
+ ;;
+ esac
+ prevword=$word
+ c=$((--c))
+ done
+
+ git --git-dir="$(__gitdir)" config $config_file --list 2>/dev/null |
+ while read -r line
+ do
+ case "$line" in
+ *.*=*)
+ echo "${line/=*/}"
+ ;;
+ esac
+ done
+}
+
+_git_config ()
+{
+ case "$prev" in
+ branch.*.remote)
+ __gitcomp_nl "$(__git_remotes)"
+ return
+ ;;
+ branch.*.merge)
+ __gitcomp_nl "$(__git_refs)"
+ return
+ ;;
+ remote.*.fetch)
+ local remote="${prev#remote.}"
+ remote="${remote%.fetch}"
+ if [ -z "$cur" ]; then
+ COMPREPLY=("refs/heads/")
+ return
+ fi
+ __gitcomp_nl "$(__git_refs_remotes "$remote")"
+ return
+ ;;
+ remote.*.push)
+ local remote="${prev#remote.}"
+ remote="${remote%.push}"
+ __gitcomp_nl "$(git --git-dir="$(__gitdir)" \
+ for-each-ref --format='%(refname):%(refname)' \
+ refs/heads)"
+ return
+ ;;
+ pull.twohead|pull.octopus)
+ __git_compute_merge_strategies
+ __gitcomp "$__git_merge_strategies"
+ return
+ ;;
+ color.branch|color.diff|color.interactive|\
+ color.showbranch|color.status|color.ui)
+ __gitcomp "always never auto"
+ return
+ ;;
+ color.pager)
+ __gitcomp "false true"
+ return
+ ;;
+ color.*.*)
+ __gitcomp "
+ normal black red green yellow blue magenta cyan white
+ bold dim ul blink reverse
+ "
+ return
+ ;;
+ help.format)
+ __gitcomp "man info web html"
+ return
+ ;;
+ log.date)
+ __gitcomp "$__git_log_date_formats"
+ return
+ ;;
+ sendemail.aliasesfiletype)
+ __gitcomp "mutt mailrc pine elm gnus"
+ return
+ ;;
+ sendemail.confirm)
+ __gitcomp "$__git_send_email_confirm_options"
+ return
+ ;;
+ sendemail.suppresscc)
+ __gitcomp "$__git_send_email_suppresscc_options"
+ return
+ ;;
+ --get|--get-all|--unset|--unset-all)
+ __gitcomp_nl "$(__git_config_get_set_variables)"
+ return
+ ;;
+ *.*)
+ COMPREPLY=()
+ return
+ ;;
+ esac
+ case "$cur" in
+ --*)
+ __gitcomp "
+ --global --system --file=
+ --list --replace-all
+ --get --get-all --get-regexp
+ --add --unset --unset-all
+ --remove-section --rename-section
+ "
+ return
+ ;;
+ branch.*.*)
+ local pfx="${cur%.*}." cur_="${cur##*.}"
+ __gitcomp "remote merge mergeoptions rebase" "$pfx" "$cur_"
+ return
+ ;;
+ branch.*)
+ local pfx="${cur%.*}." cur_="${cur#*.}"
+ __gitcomp_nl "$(__git_heads)" "$pfx" "$cur_" "."
+ return
+ ;;
+ guitool.*.*)
+ local pfx="${cur%.*}." cur_="${cur##*.}"
+ __gitcomp "
+ argprompt cmd confirm needsfile noconsole norescan
+ prompt revprompt revunmerged title
+ " "$pfx" "$cur_"
+ return
+ ;;
+ difftool.*.*)
+ local pfx="${cur%.*}." cur_="${cur##*.}"
+ __gitcomp "cmd path" "$pfx" "$cur_"
+ return
+ ;;
+ man.*.*)
+ local pfx="${cur%.*}." cur_="${cur##*.}"
+ __gitcomp "cmd path" "$pfx" "$cur_"
+ return
+ ;;
+ mergetool.*.*)
+ local pfx="${cur%.*}." cur_="${cur##*.}"
+ __gitcomp "cmd path trustExitCode" "$pfx" "$cur_"
+ return
+ ;;
+ pager.*)
+ local pfx="${cur%.*}." cur_="${cur#*.}"
+ __git_compute_all_commands
+ __gitcomp_nl "$__git_all_commands" "$pfx" "$cur_"
+ return
+ ;;
+ remote.*.*)
+ local pfx="${cur%.*}." cur_="${cur##*.}"
+ __gitcomp "
+ url proxy fetch push mirror skipDefaultUpdate
+ receivepack uploadpack tagopt pushurl
+ " "$pfx" "$cur_"
+ return
+ ;;
+ remote.*)
+ local pfx="${cur%.*}." cur_="${cur#*.}"
+ __gitcomp_nl "$(__git_remotes)" "$pfx" "$cur_" "."
+ return
+ ;;
+ url.*.*)
+ local pfx="${cur%.*}." cur_="${cur##*.}"
+ __gitcomp "insteadOf pushInsteadOf" "$pfx" "$cur_"
+ return
+ ;;
+ esac
+ __gitcomp "
+ add.ignoreErrors
+ advice.commitBeforeMerge
+ advice.detachedHead
+ advice.implicitIdentity
+ advice.pushNonFastForward
+ advice.resolveConflict
+ advice.statusHints
+ alias.
+ am.keepcr
+ apply.ignorewhitespace
+ apply.whitespace
+ branch.autosetupmerge
+ branch.autosetuprebase
+ browser.
+ clean.requireForce
+ color.branch
+ color.branch.current
+ color.branch.local
+ color.branch.plain
+ color.branch.remote
+ color.decorate.HEAD
+ color.decorate.branch
+ color.decorate.remoteBranch
+ color.decorate.stash
+ color.decorate.tag
+ color.diff
+ color.diff.commit
+ color.diff.frag
+ color.diff.func
+ color.diff.meta
+ color.diff.new
+ color.diff.old
+ color.diff.plain
+ color.diff.whitespace
+ color.grep
+ color.grep.context
+ color.grep.filename
+ color.grep.function
+ color.grep.linenumber
+ color.grep.match
+ color.grep.selected
+ color.grep.separator
+ color.interactive
+ color.interactive.error
+ color.interactive.header
+ color.interactive.help
+ color.interactive.prompt
+ color.pager
+ color.showbranch
+ color.status
+ color.status.added
+ color.status.changed
+ color.status.header
+ color.status.nobranch
+ color.status.untracked
+ color.status.updated
+ color.ui
+ commit.status
+ commit.template
+ core.abbrev
+ core.askpass
+ core.attributesfile
+ core.autocrlf
+ core.bare
+ core.bigFileThreshold
+ core.compression
+ core.createObject
+ core.deltaBaseCacheLimit
+ core.editor
+ core.eol
+ core.excludesfile
+ core.fileMode
+ core.fsyncobjectfiles
+ core.gitProxy
+ core.ignoreCygwinFSTricks
+ core.ignoreStat
+ core.ignorecase
+ core.logAllRefUpdates
+ core.loosecompression
+ core.notesRef
+ core.packedGitLimit
+ core.packedGitWindowSize
+ core.pager
+ core.preferSymlinkRefs
+ core.preloadindex
+ core.quotepath
+ core.repositoryFormatVersion
+ core.safecrlf
+ core.sharedRepository
+ core.sparseCheckout
+ core.symlinks
+ core.trustctime
+ core.warnAmbiguousRefs
+ core.whitespace
+ core.worktree
+ diff.autorefreshindex
+ diff.statGraphWidth
+ diff.external
+ diff.ignoreSubmodules
+ diff.mnemonicprefix
+ diff.noprefix
+ diff.renameLimit
+ diff.renames
+ diff.suppressBlankEmpty
+ diff.tool
+ diff.wordRegex
+ difftool.
+ difftool.prompt
+ fetch.recurseSubmodules
+ fetch.unpackLimit
+ format.attach
+ format.cc
+ format.headers
+ format.numbered
+ format.pretty
+ format.signature
+ format.signoff
+ format.subjectprefix
+ format.suffix
+ format.thread
+ format.to
+ gc.
+ gc.aggressiveWindow
+ gc.auto
+ gc.autopacklimit
+ gc.packrefs
+ gc.pruneexpire
+ gc.reflogexpire
+ gc.reflogexpireunreachable
+ gc.rerereresolved
+ gc.rerereunresolved
+ gitcvs.allbinary
+ gitcvs.commitmsgannotation
+ gitcvs.dbTableNamePrefix
+ gitcvs.dbdriver
+ gitcvs.dbname
+ gitcvs.dbpass
+ gitcvs.dbuser
+ gitcvs.enabled
+ gitcvs.logfile
+ gitcvs.usecrlfattr
+ guitool.
+ gui.blamehistoryctx
+ gui.commitmsgwidth
+ gui.copyblamethreshold
+ gui.diffcontext
+ gui.encoding
+ gui.fastcopyblame
+ gui.matchtrackingbranch
+ gui.newbranchtemplate
+ gui.pruneduringfetch
+ gui.spellingdictionary
+ gui.trustmtime
+ help.autocorrect
+ help.browser
+ help.format
+ http.lowSpeedLimit
+ http.lowSpeedTime
+ http.maxRequests
+ http.minSessions
+ http.noEPSV
+ http.postBuffer
+ http.proxy
+ http.sslCAInfo
+ http.sslCAPath
+ http.sslCert
+ http.sslCertPasswordProtected
+ http.sslKey
+ http.sslVerify
+ http.useragent
+ i18n.commitEncoding
+ i18n.logOutputEncoding
+ imap.authMethod
+ imap.folder
+ imap.host
+ imap.pass
+ imap.port
+ imap.preformattedHTML
+ imap.sslverify
+ imap.tunnel
+ imap.user
+ init.templatedir
+ instaweb.browser
+ instaweb.httpd
+ instaweb.local
+ instaweb.modulepath
+ instaweb.port
+ interactive.singlekey
+ log.date
+ log.decorate
+ log.showroot
+ mailmap.file
+ man.
+ man.viewer
+ merge.
+ merge.conflictstyle
+ merge.log
+ merge.renameLimit
+ merge.renormalize
+ merge.stat
+ merge.tool
+ merge.verbosity
+ mergetool.
+ mergetool.keepBackup
+ mergetool.keepTemporaries
+ mergetool.prompt
+ notes.displayRef
+ notes.rewrite.
+ notes.rewrite.amend
+ notes.rewrite.rebase
+ notes.rewriteMode
+ notes.rewriteRef
+ pack.compression
+ pack.deltaCacheLimit
+ pack.deltaCacheSize
+ pack.depth
+ pack.indexVersion
+ pack.packSizeLimit
+ pack.threads
+ pack.window
+ pack.windowMemory
+ pager.
+ pretty.
+ pull.octopus
+ pull.twohead
+ push.default
+ rebase.autosquash
+ rebase.stat
+ receive.autogc
+ receive.denyCurrentBranch
+ receive.denyDeleteCurrent
+ receive.denyDeletes
+ receive.denyNonFastForwards
+ receive.fsckObjects
+ receive.unpackLimit
+ receive.updateserverinfo
+ remotes.
+ repack.usedeltabaseoffset
+ rerere.autoupdate
+ rerere.enabled
+ sendemail.
+ sendemail.aliasesfile
+ sendemail.aliasfiletype
+ sendemail.bcc
+ sendemail.cc
+ sendemail.cccmd
+ sendemail.chainreplyto
+ sendemail.confirm
+ sendemail.envelopesender
+ sendemail.from
+ sendemail.identity
+ sendemail.multiedit
+ sendemail.signedoffbycc
+ sendemail.smtpdomain
+ sendemail.smtpencryption
+ sendemail.smtppass
+ sendemail.smtpserver
+ sendemail.smtpserveroption
+ sendemail.smtpserverport
+ sendemail.smtpuser
+ sendemail.suppresscc
+ sendemail.suppressfrom
+ sendemail.thread
+ sendemail.to
+ sendemail.validate
+ showbranch.default
+ status.relativePaths
+ status.showUntrackedFiles
+ status.submodulesummary
+ submodule.
+ tar.umask
+ transfer.unpackLimit
+ url.
+ user.email
+ user.name
+ user.signingkey
+ web.browser
+ branch. remote.
+ "
+}
+
+_git_remote ()
+{
+ local subcommands="add rename remove set-head set-branches set-url show prune update"
+ local subcommand="$(__git_find_on_cmdline "$subcommands")"
+ if [ -z "$subcommand" ]; then
+ __gitcomp "$subcommands"
+ return
+ fi
+
+ case "$subcommand" in
+ rename|remove|set-url|show|prune)
+ __gitcomp_nl "$(__git_remotes)"
+ ;;
+ set-head|set-branches)
+ __git_complete_remote_or_refspec
+ ;;
+ update)
+ local i c='' IFS=$'\n'
+ for i in $(git --git-dir="$(__gitdir)" config --get-regexp "remotes\..*" 2>/dev/null); do
+ i="${i#remotes.}"
+ c="$c ${i/ */}"
+ done
+ __gitcomp "$c"
+ ;;
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+}
+
+_git_replace ()
+{
+ __gitcomp_nl "$(__git_refs)"
+}
+
+_git_reset ()
+{
+ __git_has_doubledash && return
+
+ case "$cur" in
+ --*)
+ __gitcomp "--merge --mixed --hard --soft --patch"
+ return
+ ;;
+ esac
+ __gitcomp_nl "$(__git_refs)"
+}
+
+_git_revert ()
+{
+ case "$cur" in
+ --*)
+ __gitcomp "--edit --mainline --no-edit --no-commit --signoff"
+ return
+ ;;
+ esac
+ __gitcomp_nl "$(__git_refs)"
+}
+
+_git_rm ()
+{
+ __git_has_doubledash && return
+
+ case "$cur" in
+ --*)
+ __gitcomp "--cached --dry-run --ignore-unmatch --quiet"
+ return
+ ;;
+ esac
+ COMPREPLY=()
+}
+
+_git_shortlog ()
+{
+ __git_has_doubledash && return
+
+ case "$cur" in
+ --*)
+ __gitcomp "
+ $__git_log_common_options
+ $__git_log_shortlog_options
+ --numbered --summary
+ "
+ return
+ ;;
+ esac
+ __git_complete_revlist
+}
+
+_git_show ()
+{
+ __git_has_doubledash && return
+
+ case "$cur" in
+ --pretty=*|--format=*)
+ __gitcomp "$__git_log_pretty_formats $(__git_pretty_aliases)
+ " "" "${cur#*=}"
+ return
+ ;;
+ --*)
+ __gitcomp "--pretty= --format= --abbrev-commit --oneline
+ $__git_diff_common_options
+ "
+ return
+ ;;
+ esac
+ __git_complete_file
+}
+
+_git_show_branch ()
+{
+ case "$cur" in
+ --*)
+ __gitcomp "
+ --all --remotes --topo-order --current --more=
+ --list --independent --merge-base --no-name
+ --color --no-color
+ --sha1-name --sparse --topics --reflog
+ "
+ return
+ ;;
+ esac
+ __git_complete_revlist
+}
+
+_git_stash ()
+{
+ local save_opts='--keep-index --no-keep-index --quiet --patch'
+ local subcommands='save list show apply clear drop pop create branch'
+ local subcommand="$(__git_find_on_cmdline "$subcommands")"
+ if [ -z "$subcommand" ]; then
+ case "$cur" in
+ --*)
+ __gitcomp "$save_opts"
+ ;;
+ *)
+ if [ -z "$(__git_find_on_cmdline "$save_opts")" ]; then
+ __gitcomp "$subcommands"
+ else
+ COMPREPLY=()
+ fi
+ ;;
+ esac
+ else
+ case "$subcommand,$cur" in
+ save,--*)
+ __gitcomp "$save_opts"
+ ;;
+ apply,--*|pop,--*)
+ __gitcomp "--index --quiet"
+ ;;
+ show,--*|drop,--*|branch,--*)
+ COMPREPLY=()
+ ;;
+ show,*|apply,*|drop,*|pop,*|branch,*)
+ __gitcomp_nl "$(git --git-dir="$(__gitdir)" stash list \
+ | sed -n -e 's/:.*//p')"
+ ;;
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ fi
+}
+
+_git_submodule ()
+{
+ __git_has_doubledash && return
+
+ local subcommands="add status init update summary foreach sync"
+ if [ -z "$(__git_find_on_cmdline "$subcommands")" ]; then
+ case "$cur" in
+ --*)
+ __gitcomp "--quiet --cached"
+ ;;
+ *)
+ __gitcomp "$subcommands"
+ ;;
+ esac
+ return
+ fi
+}
+
+_git_svn ()
+{
+ local subcommands="
+ init fetch clone rebase dcommit log find-rev
+ set-tree commit-diff info create-ignore propget
+ proplist show-ignore show-externals branch tag blame
+ migrate mkdirs reset gc
+ "
+ local subcommand="$(__git_find_on_cmdline "$subcommands")"
+ if [ -z "$subcommand" ]; then
+ __gitcomp "$subcommands"
+ else
+ local remote_opts="--username= --config-dir= --no-auth-cache"
+ local fc_opts="
+ --follow-parent --authors-file= --repack=
+ --no-metadata --use-svm-props --use-svnsync-props
+ --log-window-size= --no-checkout --quiet
+ --repack-flags --use-log-author --localtime
+ --ignore-paths= $remote_opts
+ "
+ local init_opts="
+ --template= --shared= --trunk= --tags=
+ --branches= --stdlayout --minimize-url
+ --no-metadata --use-svm-props --use-svnsync-props
+ --rewrite-root= --prefix= --use-log-author
+ --add-author-from $remote_opts
+ "
+ local cmt_opts="
+ --edit --rmdir --find-copies-harder --copy-similarity=
+ "
+
+ case "$subcommand,$cur" in
+ fetch,--*)
+ __gitcomp "--revision= --fetch-all $fc_opts"
+ ;;
+ clone,--*)
+ __gitcomp "--revision= $fc_opts $init_opts"
+ ;;
+ init,--*)
+ __gitcomp "$init_opts"
+ ;;
+ dcommit,--*)
+ __gitcomp "
+ --merge --strategy= --verbose --dry-run
+ --fetch-all --no-rebase --commit-url
+ --revision --interactive $cmt_opts $fc_opts
+ "
+ ;;
+ set-tree,--*)
+ __gitcomp "--stdin $cmt_opts $fc_opts"
+ ;;
+ create-ignore,--*|propget,--*|proplist,--*|show-ignore,--*|\
+ show-externals,--*|mkdirs,--*)
+ __gitcomp "--revision="
+ ;;
+ log,--*)
+ __gitcomp "
+ --limit= --revision= --verbose --incremental
+ --oneline --show-commit --non-recursive
+ --authors-file= --color
+ "
+ ;;
+ rebase,--*)
+ __gitcomp "
+ --merge --verbose --strategy= --local
+ --fetch-all --dry-run $fc_opts
+ "
+ ;;
+ commit-diff,--*)
+ __gitcomp "--message= --file= --revision= $cmt_opts"
+ ;;
+ info,--*)
+ __gitcomp "--url"
+ ;;
+ branch,--*)
+ __gitcomp "--dry-run --message --tag"
+ ;;
+ tag,--*)
+ __gitcomp "--dry-run --message"
+ ;;
+ blame,--*)
+ __gitcomp "--git-format"
+ ;;
+ migrate,--*)
+ __gitcomp "
+ --config-dir= --ignore-paths= --minimize
+ --no-auth-cache --username=
+ "
+ ;;
+ reset,--*)
+ __gitcomp "--revision= --parent"
+ ;;
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ fi
+}
+
+_git_tag ()
+{
+ local i c=1 f=0
+ while [ $c -lt $cword ]; do
+ i="${words[c]}"
+ case "$i" in
+ -d|-v)
+ __gitcomp_nl "$(__git_tags)"
+ return
+ ;;
+ -f)
+ f=1
+ ;;
+ esac
+ ((c++))
+ done
+
+ case "$prev" in
+ -m|-F)
+ COMPREPLY=()
+ ;;
+ -*|tag)
+ if [ $f = 1 ]; then
+ __gitcomp_nl "$(__git_tags)"
+ else
+ COMPREPLY=()
+ fi
+ ;;
+ *)
+ __gitcomp_nl "$(__git_refs)"
+ ;;
+ esac
+}
+
+_git_whatchanged ()
+{
+ _git_log
+}
+
+__git_main ()
+{
+ local i c=1 command __git_dir
+
+ while [ $c -lt $cword ]; do
+ i="${words[c]}"
+ case "$i" in
+ --git-dir=*) __git_dir="${i#--git-dir=}" ;;
+ --bare) __git_dir="." ;;
+ --help) command="help"; break ;;
+ -c) c=$((++c)) ;;
+ -*) ;;
+ *) command="$i"; break ;;
+ esac
+ ((c++))
+ done
+
+ if [ -z "$command" ]; then
+ case "$cur" in
+ --*) __gitcomp "
+ --paginate
+ --no-pager
+ --git-dir=
+ --bare
+ --version
+ --exec-path
+ --exec-path=
+ --html-path
+ --info-path
+ --work-tree=
+ --namespace=
+ --no-replace-objects
+ --help
+ "
+ ;;
+ *) __git_compute_porcelain_commands
+ __gitcomp "$__git_porcelain_commands $(__git_aliases)" ;;
+ esac
+ return
+ fi
+
+ local completion_func="_git_${command//-/_}"
+ declare -f $completion_func >/dev/null && $completion_func && return
+
+ local expansion=$(__git_aliased_command "$command")
+ if [ -n "$expansion" ]; then
+ completion_func="_git_${expansion//-/_}"
+ declare -f $completion_func >/dev/null && $completion_func
+ fi
+}
+
+__gitk_main ()
+{
+ __git_has_doubledash && return
+
+ local g="$(__gitdir)"
+ local merge=""
+ if [ -f "$g/MERGE_HEAD" ]; then
+ merge="--merge"
+ fi
+ case "$cur" in
+ --*)
+ __gitcomp "
+ $__git_log_common_options
+ $__git_log_gitk_options
+ $merge
+ "
+ return
+ ;;
+ esac
+ __git_complete_revlist
+}
+
+__git_func_wrap ()
+{
+ if [[ -n ${ZSH_VERSION-} ]]; then
+ emulate -L bash
+ setopt KSH_TYPESET
+
+ # workaround zsh's bug that leaves 'words' as a special
+ # variable in versions < 4.3.12
+ typeset -h words
+
+ # workaround zsh's bug that quotes spaces in the COMPREPLY
+ # array if IFS doesn't contain spaces.
+ typeset -h IFS
+ fi
+ local cur words cword prev
+ _get_comp_words_by_ref -n =: cur words cword prev
+ $1
+}
+
+# Setup completion for certain functions defined above by setting common
+# variables and workarounds.
+# This is NOT a public function; use at your own risk.
+__git_complete ()
+{
+ local wrapper="__git_wrap${2}"
+ eval "$wrapper () { __git_func_wrap $2 ; }"
+ complete -o bashdefault -o default -o nospace -F $wrapper $1 2>/dev/null \
+ || complete -o default -o nospace -F $wrapper $1
+}
+
+# wrapper for backwards compatibility
+_git ()
+{
+ __git_wrap__git_main
+}
+
+# wrapper for backwards compatibility
+_gitk ()
+{
+ __git_wrap__gitk_main
+}
+
+__git_complete git __git_main
+__git_complete gitk __gitk_main
+
+# The following are necessary only for Cygwin, and only are needed
+# when the user has tab-completed the executable name and consequently
+# included the '.exe' suffix.
+#
+if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
+__git_complete git.exe __git_main
+fi
diff --git a/plugins/gitfast/git-prompt.sh b/plugins/gitfast/git-prompt.sh
new file mode 100644
index 000000000..bf20491ec
--- /dev/null
+++ b/plugins/gitfast/git-prompt.sh
@@ -0,0 +1,290 @@
+# bash/zsh git prompt support
+#
+# Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org>
+# Distributed under the GNU General Public License, version 2.0.
+#
+# This script allows you to see the current branch in your prompt.
+#
+# To enable:
+#
+# 1) Copy this file to somewhere (e.g. ~/.git-prompt.sh).
+# 2) Add the following line to your .bashrc/.zshrc:
+# source ~/.git-prompt.sh
+# 3) Change your PS1 to also show the current branch:
+# Bash: PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
+# ZSH: PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ '
+#
+# The argument to __git_ps1 will be displayed only if you are currently
+# in a git repository. The %s token will be the name of the current
+# branch.
+#
+# In addition, if you set GIT_PS1_SHOWDIRTYSTATE to a nonempty value,
+# unstaged (*) and staged (+) changes will be shown next to the branch
+# name. You can configure this per-repository with the
+# bash.showDirtyState variable, which defaults to true once
+# GIT_PS1_SHOWDIRTYSTATE is enabled.
+#
+# You can also see if currently something is stashed, by setting
+# GIT_PS1_SHOWSTASHSTATE to a nonempty value. If something is stashed,
+# then a '$' will be shown next to the branch name.
+#
+# If you would like to see if there're untracked files, then you can set
+# GIT_PS1_SHOWUNTRACKEDFILES to a nonempty value. If there're untracked
+# files, then a '%' will be shown next to the branch name.
+#
+# If you would like to see the difference between HEAD and its upstream,
+# set GIT_PS1_SHOWUPSTREAM="auto". A "<" indicates you are behind, ">"
+# indicates you are ahead, "<>" indicates you have diverged and "="
+# indicates that there is no difference. You can further control
+# behaviour by setting GIT_PS1_SHOWUPSTREAM to a space-separated list
+# of values:
+#
+# verbose show number of commits ahead/behind (+/-) upstream
+# legacy don't use the '--count' option available in recent
+# versions of git-rev-list
+# git always compare HEAD to @{upstream}
+# svn always compare HEAD to your SVN upstream
+#
+# By default, __git_ps1 will compare HEAD to your SVN upstream if it can
+# find one, or @{upstream} otherwise. Once you have set
+# GIT_PS1_SHOWUPSTREAM, you can override it on a per-repository basis by
+# setting the bash.showUpstream config variable.
+
+# __gitdir accepts 0 or 1 arguments (i.e., location)
+# returns location of .git repo
+__gitdir ()
+{
+ # Note: this function is duplicated in git-completion.bash
+ # When updating it, make sure you update the other one to match.
+ if [ -z "${1-}" ]; then
+ if [ -n "${__git_dir-}" ]; then
+ echo "$__git_dir"
+ elif [ -n "${GIT_DIR-}" ]; then
+ test -d "${GIT_DIR-}" || return 1
+ echo "$GIT_DIR"
+ elif [ -d .git ]; then
+ echo .git
+ else
+ git rev-parse --git-dir 2>/dev/null
+ fi
+ elif [ -d "$1/.git" ]; then
+ echo "$1/.git"
+ else
+ echo "$1"
+ fi
+}
+
+# stores the divergence from upstream in $p
+# used by GIT_PS1_SHOWUPSTREAM
+__git_ps1_show_upstream ()
+{
+ local key value
+ local svn_remote svn_url_pattern count n
+ local upstream=git legacy="" verbose=""
+
+ svn_remote=()
+ # get some config options from git-config
+ local output="$(git config -z --get-regexp '^(svn-remote\..*\.url|bash\.showupstream)$' 2>/dev/null | tr '\0\n' '\n ')"
+ while read -r key value; do
+ case "$key" in
+ bash.showupstream)
+ GIT_PS1_SHOWUPSTREAM="$value"
+ if [[ -z "${GIT_PS1_SHOWUPSTREAM}" ]]; then
+ p=""
+ return
+ fi
+ ;;
+ svn-remote.*.url)
+ svn_remote[ $((${#svn_remote[@]} + 1)) ]="$value"
+ svn_url_pattern+="\\|$value"
+ upstream=svn+git # default upstream is SVN if available, else git
+ ;;
+ esac
+ done <<< "$output"
+
+ # parse configuration values
+ for option in ${GIT_PS1_SHOWUPSTREAM}; do
+ case "$option" in
+ git|svn) upstream="$option" ;;
+ verbose) verbose=1 ;;
+ legacy) legacy=1 ;;
+ esac
+ done
+
+ # Find our upstream
+ case "$upstream" in
+ git) upstream="@{upstream}" ;;
+ svn*)
+ # get the upstream from the "git-svn-id: ..." in a commit message
+ # (git-svn uses essentially the same procedure internally)
+ local svn_upstream=($(git log --first-parent -1 \
+ --grep="^git-svn-id: \(${svn_url_pattern#??}\)" 2>/dev/null))
+ if [[ 0 -ne ${#svn_upstream[@]} ]]; then
+ svn_upstream=${svn_upstream[ ${#svn_upstream[@]} - 2 ]}
+ svn_upstream=${svn_upstream%@*}
+ local n_stop="${#svn_remote[@]}"
+ for ((n=1; n <= n_stop; n++)); do
+ svn_upstream=${svn_upstream#${svn_remote[$n]}}
+ done
+
+ if [[ -z "$svn_upstream" ]]; then
+ # default branch name for checkouts with no layout:
+ upstream=${GIT_SVN_ID:-git-svn}
+ else
+ upstream=${svn_upstream#/}
+ fi
+ elif [[ "svn+git" = "$upstream" ]]; then
+ upstream="@{upstream}"
+ fi
+ ;;
+ esac
+
+ # Find how many commits we are ahead/behind our upstream
+ if [[ -z "$legacy" ]]; then
+ count="$(git rev-list --count --left-right \
+ "$upstream"...HEAD 2>/dev/null)"
+ else
+ # produce equivalent output to --count for older versions of git
+ local commits
+ if commits="$(git rev-list --left-right "$upstream"...HEAD 2>/dev/null)"
+ then
+ local commit behind=0 ahead=0
+ for commit in $commits
+ do
+ case "$commit" in
+ "<"*) ((behind++)) ;;
+ *) ((ahead++)) ;;
+ esac
+ done
+ count="$behind $ahead"
+ else
+ count=""
+ fi
+ fi
+
+ # calculate the result
+ if [[ -z "$verbose" ]]; then
+ case "$count" in
+ "") # no upstream
+ p="" ;;
+ "0 0") # equal to upstream
+ p="=" ;;
+ "0 "*) # ahead of upstream
+ p=">" ;;
+ *" 0") # behind upstream
+ p="<" ;;
+ *) # diverged from upstream
+ p="<>" ;;
+ esac
+ else
+ case "$count" in
+ "") # no upstream
+ p="" ;;
+ "0 0") # equal to upstream
+ p=" u=" ;;
+ "0 "*) # ahead of upstream
+ p=" u+${count#0 }" ;;
+ *" 0") # behind upstream
+ p=" u-${count% 0}" ;;
+ *) # diverged from upstream
+ p=" u+${count#* }-${count% *}" ;;
+ esac
+ fi
+
+}
+
+
+# __git_ps1 accepts 0 or 1 arguments (i.e., format string)
+# returns text to add to bash PS1 prompt (includes branch name)
+__git_ps1 ()
+{
+ local g="$(__gitdir)"
+ if [ -n "$g" ]; then
+ local r=""
+ local b=""
+ if [ -f "$g/rebase-merge/interactive" ]; then
+ r="|REBASE-i"
+ b="$(cat "$g/rebase-merge/head-name")"
+ elif [ -d "$g/rebase-merge" ]; then
+ r="|REBASE-m"
+ b="$(cat "$g/rebase-merge/head-name")"
+ else
+ if [ -d "$g/rebase-apply" ]; then
+ if [ -f "$g/rebase-apply/rebasing" ]; then
+ r="|REBASE"
+ elif [ -f "$g/rebase-apply/applying" ]; then
+ r="|AM"
+ else
+ r="|AM/REBASE"
+ fi
+ elif [ -f "$g/MERGE_HEAD" ]; then
+ r="|MERGING"
+ elif [ -f "$g/CHERRY_PICK_HEAD" ]; then
+ r="|CHERRY-PICKING"
+ elif [ -f "$g/BISECT_LOG" ]; then
+ r="|BISECTING"
+ fi
+
+ b="$(git symbolic-ref HEAD 2>/dev/null)" || {
+
+ b="$(
+ case "${GIT_PS1_DESCRIBE_STYLE-}" in
+ (contains)
+ git describe --contains HEAD ;;
+ (branch)
+ git describe --contains --all HEAD ;;
+ (describe)
+ git describe HEAD ;;
+ (* | default)
+ git describe --tags --exact-match HEAD ;;
+ esac 2>/dev/null)" ||
+
+ b="$(cut -c1-7 "$g/HEAD" 2>/dev/null)..." ||
+ b="unknown"
+ b="($b)"
+ }
+ fi
+
+ local w=""
+ local i=""
+ local s=""
+ local u=""
+ local c=""
+ local p=""
+
+ if [ "true" = "$(git rev-parse --is-inside-git-dir 2>/dev/null)" ]; then
+ if [ "true" = "$(git rev-parse --is-bare-repository 2>/dev/null)" ]; then
+ c="BARE:"
+ else
+ b="GIT_DIR!"
+ fi
+ elif [ "true" = "$(git rev-parse --is-inside-work-tree 2>/dev/null)" ]; then
+ if [ -n "${GIT_PS1_SHOWDIRTYSTATE-}" ]; then
+ if [ "$(git config --bool bash.showDirtyState)" != "false" ]; then
+ git diff --no-ext-diff --quiet --exit-code || w="*"
+ if git rev-parse --quiet --verify HEAD >/dev/null; then
+ git diff-index --cached --quiet HEAD -- || i="+"
+ else
+ i="#"
+ fi
+ fi
+ fi
+ if [ -n "${GIT_PS1_SHOWSTASHSTATE-}" ]; then
+ git rev-parse --verify refs/stash >/dev/null 2>&1 && s="$"
+ fi
+
+ if [ -n "${GIT_PS1_SHOWUNTRACKEDFILES-}" ]; then
+ if [ -n "$(git ls-files --others --exclude-standard)" ]; then
+ u="%"
+ fi
+ fi
+
+ if [ -n "${GIT_PS1_SHOWUPSTREAM-}" ]; then
+ __git_ps1_show_upstream
+ fi
+ fi
+
+ local f="$w$i$s$u"
+ printf -- "${1:- (%s)}" "$c${b##refs/heads/}${f:+ $f}$r$p"
+ fi
+}
diff --git a/plugins/gitfast/gitfast.plugin.zsh b/plugins/gitfast/gitfast.plugin.zsh
new file mode 100644
index 000000000..7e50cf721
--- /dev/null
+++ b/plugins/gitfast/gitfast.plugin.zsh
@@ -0,0 +1,7 @@
+dir=$(dirname $0)
+source $dir/../git/git.plugin.zsh
+source $dir/git-prompt.sh
+
+function git_prompt_info() {
+ __git_ps1 "${ZSH_THEME_GIT_PROMPT_PREFIX//\%/%%}%s${ZSH_THEME_GIT_PROMPT_SUFFIX//\%/%%}"
+}
diff --git a/plugins/github/github.plugin.zsh b/plugins/github/github.plugin.zsh
index 197e86a48..598b059c1 100644
--- a/plugins/github/github.plugin.zsh
+++ b/plugins/github/github.plugin.zsh
@@ -61,6 +61,7 @@ exist_gh() { # [DIRECTORY]
cd "$1"
name=$( git config user.name )
ghuser=$( git config github.user )
+ repo=$1
git remote add origin git@github.com:${ghuser}/${repo}.git
git push -u origin master
diff --git a/plugins/heroku/_heroku b/plugins/heroku/_heroku
index dc899e2b2..a95c38647 100644
--- a/plugins/heroku/_heroku
+++ b/plugins/heroku/_heroku
@@ -154,5 +154,6 @@ case "$words[1]" in
_arguments \
$_command_args \
'(--app)--app[the app name]' \
+ '(--remote)--remote[the remote name]' \
&& return 0
diff --git a/plugins/history/history.plugin.zsh b/plugins/history/history.plugin.zsh
new file mode 100644
index 000000000..0f4aa4b10
--- /dev/null
+++ b/plugins/history/history.plugin.zsh
@@ -0,0 +1,8 @@
+alias h='history'
+
+function hs
+{
+ history | grep $*
+}
+
+alias hsi='hs -i'
diff --git a/plugins/jira/jira.plugin.zsh b/plugins/jira/jira.plugin.zsh
new file mode 100644
index 000000000..b91f93c95
--- /dev/null
+++ b/plugins/jira/jira.plugin.zsh
@@ -0,0 +1,38 @@
+# To use: add a .jira-url file in the base of your project
+# You can also set JIRA_URL in your .zshrc or put .jira-url in your home directory
+# .jira-url in the current directory takes precedence
+#
+# If you use Rapid Board, set:
+#JIRA_RAPID_BOARD="yes"
+# in you .zshrc
+#
+# Setup: cd to/my/project
+# echo "https://name.jira.com" >> .jira-url
+# Usage: jira # opens a new issue
+# jira ABC-123 # Opens an existing issue
+open_jira_issue () {
+ if [ -f .jira-url ]; then
+ jira_url=$(cat .jira-url)
+ elif [ -f ~/.jira-url ]; then
+ jira_url=$(cat ~/.jira-url)
+ elif [[ "x$JIRA_URL" != "x" ]]; then
+ jira_url=$JIRA_URL
+ else
+ echo "JIRA url is not specified anywhere."
+ return 0
+ fi
+
+ if [ -z "$1" ]; then
+ echo "Opening new issue"
+ `open $jira_url/secure/CreateIssue!default.jspa`
+ else
+ echo "Opening issue #$1"
+ if [[ "x$JIRA_RAPID_BOARD" = "yes" ]]; then
+ `open $jira_url/issues/$1`
+ else
+ `open $jira_url/browse/$1`
+ fi
+ fi
+}
+
+alias jira='open_jira_issue'
diff --git a/plugins/jruby/jruby.plugin.zsh b/plugins/jruby/jruby.plugin.zsh
new file mode 100755
index 000000000..bb7975b10
--- /dev/null
+++ b/plugins/jruby/jruby.plugin.zsh
@@ -0,0 +1,4 @@
+# Aliases
+alias jrspec='jruby --debug -S rspec --debug'
+alias jprofile='jruby --profile.api -S rspec'
+alias jexec='jruby -S'
diff --git a/plugins/knife/_knife b/plugins/knife/_knife
index 8453af5be..dec491257 100644
--- a/plugins/knife/_knife
+++ b/plugins/knife/_knife
@@ -170,7 +170,11 @@ _chef_environments_remote() {
# The chef_x_local functions use the knife config to find the paths of relevant objects x to be uploaded to the server
_chef_cookbooks_local() {
- (for i in $( grep cookbook_path $HOME/.chef/knife.rb | awk 'BEGIN {FS = "[" }; {print $2}' | sed 's/\,//g' | sed "s/'//g" | sed 's/\(.*\)]/\1/' ); do ls $i; done)
+ local knife_rb="$HOME/.chef/knife.rb"
+ if [ -f ./.chef/knife.rb ]; then
+ knife_rb="./.chef/knife.rb"
+ fi
+ (for i in $( grep cookbook_path $knife_rb | awk 'BEGIN {FS = "[" }; {print $2}' | sed 's/\,//g' | sed "s/'//g" | sed 's/\(.*\)]/\1/' ); do ls $i; done)
}
# This function extracts the available cookbook versions on the chef server
diff --git a/plugins/laravel/_artisan b/plugins/laravel/_artisan
new file mode 100644
index 000000000..8637514cf
--- /dev/null
+++ b/plugins/laravel/_artisan
@@ -0,0 +1,40 @@
+#compdef artisan
+
+# Laravel autocompletion
+# Author: John Hamelink <john@johnhamelink.com>
+#
+# This plugin does the following:
+# - Adds aliases and autocompletion for artisan
+# - Adds aliases and autocompletion for bob
+
+local curcontext="$curcontext" state line _opts _bundles ret=1
+_arguments -C \
+ '1: :->cmds' \
+ '*:: :->args' && ret=0
+
+case $state in
+ cmds)
+
+ _values "Artisan command" \
+ 'session\:install[Create a session table]' \
+ 'migrate[Manage Migrations]' \
+ 'test[Run a test]' \
+ 'route\:\:call[Call a route in the CLI]' \
+ 'key\:\:generate[Generate a key]'
+ ret=0
+ ;;
+ args)
+ case $line[1] in
+ migrate)
+ _values \
+ 'install[Create the Laravel migration table' \
+ 'make[Create a migration]' \
+ 'rollback[Roll back to the last migration operation]' \
+ 'reset[Roll back all migrations that have ever run]'
+ ret=0
+ ;;
+ esac
+ ;;
+esac
+
+return ret
diff --git a/plugins/laravel/laravel.plugin.zsh b/plugins/laravel/laravel.plugin.zsh
new file mode 100644
index 000000000..ed932ee89
--- /dev/null
+++ b/plugins/laravel/laravel.plugin.zsh
@@ -0,0 +1,3 @@
+#!zsh
+alias artisan='php artisan'
+alias bob='php artisan bob::build'
diff --git a/plugins/last-working-dir/last-working-dir.plugin.zsh b/plugins/last-working-dir/last-working-dir.plugin.zsh
new file mode 100644
index 000000000..190bc279d
--- /dev/null
+++ b/plugins/last-working-dir/last-working-dir.plugin.zsh
@@ -0,0 +1,24 @@
+#!/usr/bin/env zsh
+# Keeps track of the last used working directory and automatically jumps
+# into it for new shells.
+
+# Flag indicating if we've previously jumped to last directory.
+typeset -g ZSH_LAST_WORKING_DIRECTORY
+mkdir -p "$ZSH/cache"
+local cache_file="$ZSH/cache/last-working-dir"
+
+# Updates the last directory once directory is changed.
+function chpwd() {
+ echo "$PWD" > "$cache_file"
+}
+
+# Changes directory to the last working directory.
+function lwd() {
+ [[ ! -r "$cache_file" ]] || cd `cat "$cache_file"`
+}
+
+# Automatically jump to last working directory unless this isn't the first time
+# this plugin has been loaded.
+if [[ -z "$ZSH_LAST_WORKING_DIRECTORY" ]]; then
+ lwd 2>/dev/null && ZSH_LAST_WORKING_DIRECTORY=1 || true
+fi
diff --git a/plugins/lol/lol.plugin.zsh b/plugins/lol/lol.plugin.zsh
index e53688763..ae065c12f 100644
--- a/plugins/lol/lol.plugin.zsh
+++ b/plugins/lol/lol.plugin.zsh
@@ -30,7 +30,7 @@ alias iminurbase='finger'
alias btw='nice'
alias obtw='nohup'
-alias nomz='ps -aux'
+alias nomz='ps aux'
alias nomnom='killall'
alias byes='exit'
diff --git a/plugins/mercurial/mercurial.plugin.zsh b/plugins/mercurial/mercurial.plugin.zsh
index caf0d9efc..a3a6ff8b6 100644
--- a/plugins/mercurial/mercurial.plugin.zsh
+++ b/plugins/mercurial/mercurial.plugin.zsh
@@ -12,3 +12,9 @@ alias hgp='hg push'
alias hgs='hg status'
# this is the 'git commit --amend' equivalent
alias hgca='hg qimport -r tip ; hg qrefresh -e ; hg qfinish tip'
+
+function hg_current_branch() {
+ if [ -d .hg ]; then
+ echo hg:$(hg branch)
+ fi
+} \ No newline at end of file
diff --git a/plugins/mvn/mvn.plugin.zsh b/plugins/mvn/mvn.plugin.zsh
new file mode 100644
index 000000000..da29b4f0a
--- /dev/null
+++ b/plugins/mvn/mvn.plugin.zsh
@@ -0,0 +1,170 @@
+# mvn-color based on https://gist.github.com/1027800
+export BOLD=`tput bold`
+export UNDERLINE_ON=`tput smul`
+export UNDERLINE_OFF=`tput rmul`
+export TEXT_BLACK=`tput setaf 0`
+export TEXT_RED=`tput setaf 1`
+export TEXT_GREEN=`tput setaf 2`
+export TEXT_YELLOW=`tput setaf 3`
+export TEXT_BLUE=`tput setaf 4`
+export TEXT_MAGENTA=`tput setaf 5`
+export TEXT_CYAN=`tput setaf 6`
+export TEXT_WHITE=`tput setaf 7`
+export BACKGROUND_BLACK=`tput setab 0`
+export BACKGROUND_RED=`tput setab 1`
+export BACKGROUND_GREEN=`tput setab 2`
+export BACKGROUND_YELLOW=`tput setab 3`
+export BACKGROUND_BLUE=`tput setab 4`
+export BACKGROUND_MAGENTA=`tput setab 5`
+export BACKGROUND_CYAN=`tput setab 6`
+export BACKGROUND_WHITE=`tput setab 7`
+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" \
+ -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/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.
+#alias mvn="mvn-color"
+
+# aliases
+alias mvncie='mvn clean install eclipse:eclipse'
+alias mvnci='mvn clean install'
+alias mvne='mvn eclipse:eclipse'
+alias mvnce='mvn clean eclipse:clean eclipse:eclipse'
+alias mvnd='mvn deploy'
+alias mvnp='mvn package'
+alias mvnc='mvn clean'
+alias mvncom='mvn compile'
+alias mvnt='mvn test'
+alias mvnag='mvn archetype:generate'
+
+function listMavenCompletions {
+ reply=(
+ # common lifecycle
+ clean process-resources compile process-test-resources test-compile test package verify install deploy site
+
+ # common plugins
+ deploy failsafe install site surefire checkstyle javadoc jxr pmd ant antrun archetype assembly dependency enforcer gpg help release repository source eclipse idea jetty cargo jboss tomcat tomcat6 tomcat7 exec versions war ear ejb android scm buildnumber nexus repository sonar license hibernate3 liquibase flyway gwt
+
+ # deploy
+ deploy:deploy-file
+ # failsafe
+ failsafe:integration-test failsafe:verify
+ # install
+ install:install-file
+ # site
+ site:site site:deploy site:run site:stage site:stage-deploy
+ # surefire
+ surefire:test
+
+ # checkstyle
+ checkstyle:checkstyle checkstyle:check
+ # javadoc
+ javadoc:javadoc javadoc:jar javadoc:aggregate
+ # jxr
+ jxr:jxr
+ # pmd
+ pmd:pmd pmd:cpd pmd:check pmd:cpd-check
+
+ # ant
+ ant:ant ant:clean
+ # antrun
+ antrun:run
+ # archetype
+ archetype:generate archetype:create-from-project archetype:crawl
+ # assembly
+ assembly:single assembly:assembly
+ # dependency
+ dependency:analyze dependency:analyze-dep-mgt dependency:analyze-only dependency:analyze-report dependency:build-classpath dependency:copy dependency:copy-dependencies dependency:get dependency:go-offline dependency:list dependency:purge-local-repository dependency:resolve dependency:resolve-plugins dependency:sources dependency:tree dependency:unpack dependency:unpack-dependencies
+ # enforcer
+ enforcer:enforce
+ # gpg
+ gpg:sign gpg:sign-and-deploy-file
+ # help
+ help:active-profiles help:all-profiles help:describe help:effective-pom help:effective-settings help:evaluate help:expressions help:system
+ # release
+ release:clean release:prepare release:rollback release:perform release:stage release:branch release:update-versions
+ # repository
+ repository:bundle-create repository:bundle-pack
+ # source
+ source:aggregate source:jar source:jar-no-fork
+
+ # eclipse
+ eclipse:clean eclipse:eclipse
+ # idea
+ idea:clean idea:idea
+
+ # jetty
+ jetty:run jetty:run-exploded
+ # cargo
+ cargo:start cargo:run cargo:stop cargo:deploy cargo:undeploy cargo:help
+ # jboss
+ jboss:start jboss:stop jboss:deploy jboss:undeploy jboss:redeploy
+ # tomcat
+ tomcat:start tomcat:stop tomcat:deploy tomcat:undeploy tomcat:undeploy
+ # tomcat6
+ tomcat6:run tomcat6:run-war tomcat6:run-war-only tomcat6:stop tomcat6:deploy tomcat6:undeploy
+ # tomcat7
+ tomcat7:run tomcat7:run-war tomcat7:run-war-only tomcat7:deploy
+ # exec
+ exec:exec exec:java
+ # versions
+ versions:display-dependency-updates versions:display-plugin-updates versions:display-property-updates versions:update-parent versions:update-properties versions:update-child-modules versions:lock-snapshots versions:unlock-snapshots versions:resolve-ranges versions:set versions:use-releases versions:use-next-releases versions:use-latest-releases versions:use-next-snapshots versions:use-latest-snapshots versions:use-next-versions versions:use-latest-versions versions:commit versions:revert
+ # scm
+ scm:add scm:checkin scm:checkout scm:update scm:status
+ # buildnumber
+ buildnumber:create buildnumber:create-timestamp buildnumber:help buildnumber:hgchangeset
+
+ # war
+ war:war war:exploded war:inplace war:manifest
+ # ear
+ ear:ear ear:generate-application-xml
+ # ejb
+ ejb:ejb
+ # android
+ android:apk android:apklib android:deploy android:deploy-dependencies android:dex android:emulator-start android:emulator-stop android:emulator-stop-all android:generate-sources android:help android:instrument android:manifest-update android:pull android:push android:redeploy android:run android:undeploy android:unpack android:version-update android:zipalign android:devices
+ # nexus
+ nexus:staging-list nexus:staging-close nexus:staging-drop nexus:staging-release nexus:staging-build-promotion nexus:staging-profiles-list nexus:settings-download
+ # repository
+ repository:bundle-create repository:bundle-pack repository:help
+
+ # sonar
+ sonar:sonar
+ # license
+ license:format license:check
+ # hibernate3
+ hibernate3:hbm2ddl hibernate3:help
+ # liquibase
+ liquibase:changelogSync liquibase:changelogSyncSQL liquibase:clearCheckSums liquibase:dbDoc liquibase:diff liquibase:dropAll liquibase:help liquibase:migrate liquibase:listLocks liquibase:migrateSQL liquibase:releaseLocks liquibase:rollback liquibase:rollbackSQL liquibase:status liquibase:tag liquibase:update liquibase:updateSQL liquibase:updateTestingRollback
+ # flyway
+ flyway:clean flyway:history flyway:init flyway:migrate flyway:status flyway:validate
+ # gwt
+ gwt:browser gwt:clean gwt:compile gwt:compile-report gwt:css gwt:debug gwt:eclipse gwt:eclipseTest gwt:generateAsync gwt:help gwt:i18n gwt:mergewebxml gwt:resources gwt:run gwt:sdkInstall gwt:source-jar gwt:soyc gwt:test
+
+ # options
+ -Dmaven.test.skip=true -DskipTests -Dmaven.surefire.debug -DenableCiProfile -Dpmd.skip=true -Dcheckstyle.skip=true -Dtycho.mode=maven
+
+ # arguments
+ -am -amd -B -C -c -cpu -D -e -emp -ep -f -fae -ff -fn -gs -h -l -N -npr -npu -nsu -o -P -pl -q -rf -s -T -t -U -up -V -v -X
+
+ cli:execute cli:execute-phase
+ archetype:generate generate-sources
+ cobertura:cobertura
+ -Dtest= `if [ -d ./src ] ; then find ./src/test/java -type f -name '*.java' | grep -v svn | sed 's?.*/\([^/]*\)\..*?-Dtest=\1?' ; fi`
+ );
+}
+
+compctl -K listMavenCompletions mvn
diff --git a/plugins/nanoc/_nanoc b/plugins/nanoc/_nanoc
new file mode 100644
index 000000000..fde07c3fc
--- /dev/null
+++ b/plugins/nanoc/_nanoc
@@ -0,0 +1,44 @@
+#compdef nanoc
+#autoload
+
+# nanoc zsh completion - based on the homebrew zsh completion
+# requires the 'nanoc' gem to be installed
+
+local -a _1st_arguments
+_1st_arguments=(
+ 'autocompile:start the autocompiler'
+ 'compile:compile items of this site'
+ 'create-item:create an item'
+ 'create-layout:create a layout'
+ 'create-site:create a site'
+ 'deploy:deploy the compiled site'
+ 'help:show help'
+ 'prune:remove files not managed by nanoc from the output directory'
+ 'show-data:show data in this site'
+ 'show-plugins:show all available plugins'
+ 'show-rules:describe the rules for each item'
+ 'update:update the data stored by the data source to a newer version'
+ 'validate-css:validate the site’s CSS'
+ 'validate-html:validate the site’s HTML'
+ 'validate-links:validate links in site'
+ 'view:start the web server that serves static files'
+ 'watch:start the watcher'
+)
+
+local expl
+local -a pkgs installed_pkgs
+
+_arguments \
+ '(--color)--color[enable color]' \
+ '(--debug)--debug[enable debugging]' \
+ '(--help)--help[show the help message and quit]' \
+ '(--no-color)--no-color[disable color]' \
+ '(--verbose)--verbose[make nanoc output more detailed]' \
+ '(--version)--version[show version information and quit]' \
+ '(--warn)--warn[enable warnings]' \
+ '*:: :->subcmds' && return 0
+
+if (( CURRENT == 1 )); then
+ _describe -t commands "nanoc subcommand" _1st_arguments
+ return
+fi
diff --git a/plugins/nanoc/nanoc.plugin.zsh b/plugins/nanoc/nanoc.plugin.zsh
new file mode 100644
index 000000000..5a5064613
--- /dev/null
+++ b/plugins/nanoc/nanoc.plugin.zsh
@@ -0,0 +1,9 @@
+alias n='nanoc'
+alias na='nanoc autocompile'
+alias nco='nanoc compile'
+alias nci='nanoc create_item'
+alias ncl='nanoc create_layout'
+alias ncs='nanoc create_site'
+alias nd='nanoc deploy'
+alias nv='nanoc view'
+alias nw='nanoc watch'
diff --git a/plugins/node/node.plugin.zsh b/plugins/node/node.plugin.zsh
index 519bc18da..3bbed6f04 100644
--- a/plugins/node/node.plugin.zsh
+++ b/plugins/node/node.plugin.zsh
@@ -1,5 +1,5 @@
# 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#$1"
+ open "http://nodejs.org/docs/$(node --version)/api/all.html#all_$1"
}
diff --git a/plugins/osx/osx.plugin.zsh b/plugins/osx/osx.plugin.zsh
index 682bb2667..f278d4f8d 100644
--- a/plugins/osx/osx.plugin.zsh
+++ b/plugins/osx/osx.plugin.zsh
@@ -2,10 +2,9 @@
# FILE: osx.plugin.zsh
# DESCRIPTION: oh-my-zsh plugin file.
# AUTHOR: Sorin Ionescu (sorin.ionescu@gmail.com)
-# VERSION: 1.0.1
+# VERSION: 1.1.0
# ------------------------------------------------------------------------------
-
function tab() {
local command="cd \\\"$PWD\\\""
(( $# > 0 )) && command="${command}; $*"
@@ -35,9 +34,67 @@ EOF
launch session "Default Session"
set current_session to current session
tell current_session
- write text "${command}"
+ write text "${command}; clear;"
+ end tell
+ end tell
+ end tell
+EOF
+ }
+}
+
+function vsplit_tab() {
+ local command="cd \\\"$PWD\\\""
+ (( $# > 0 )) && command="${command}; $*"
+
+ the_app=$(
+ osascript 2>/dev/null <<EOF
+ tell application "System Events"
+ name of first item of (every process whose frontmost is true)
+ end tell
+EOF
+ )
+
+ [[ "$the_app" == 'iTerm' ]] && {
+ osascript 2>/dev/null <<EOF
+ tell application "iTerm" to activate
+
+ tell application "System Events"
+ tell process "iTerm"
+ tell menu item "Split Vertically With Current Profile" of menu "Shell" of menu bar item "Shell" of menu bar 1
+ click
+ end tell
+ end tell
+ keystroke "${command}; clear;"
+ keystroke return
+ end tell
+EOF
+ }
+}
+
+function split_tab() {
+ local command="cd \\\"$PWD\\\""
+ (( $# > 0 )) && command="${command}; $*"
+
+ the_app=$(
+ osascript 2>/dev/null <<EOF
+ tell application "System Events"
+ name of first item of (every process whose frontmost is true)
+ end tell
+EOF
+ )
+
+ [[ "$the_app" == 'iTerm' ]] && {
+ osascript 2>/dev/null <<EOF
+ tell application "iTerm" to activate
+
+ tell application "System Events"
+ tell process "iTerm"
+ tell menu item "Split Horizontally With Current Profile" of menu "Shell" of menu bar item "Shell" of menu bar 1
+ click
end tell
end tell
+ keystroke "${command}; clear;"
+ keystroke return
end tell
EOF
}
diff --git a/plugins/pass/_pass b/plugins/pass/_pass
new file mode 100644
index 000000000..f6c1a6c4b
--- /dev/null
+++ b/plugins/pass/_pass
@@ -0,0 +1,119 @@
+#compdef pass
+#autoload
+
+# Copyright (C) 2012:
+# Johan Venant <jvenant@invicem.pro>
+# Brian Mattern <rephorm@rephorm.com>
+# Jason A. Donenfeld <Jason@zx2c4.com>.
+# Santiago Borrazás <sanbor@gmail.com>
+# All Rights Reserved.
+# This file is licensed under the GPLv2+. Please see COPYING for more information.
+
+
+_pass () {
+ local cmd
+ if (( CURRENT > 2)); then
+ cmd=${words[2]}
+ # Set the context for the subcommand.
+ curcontext="${curcontext%:*:*}:pass-$cmd"
+ # Narrow the range of words we are looking at to exclude `pass'
+ (( CURRENT-- ))
+ shift words
+ # Run the completion for the subcommand
+ case "${cmd}" in
+ init)
+ _arguments : \
+ "-r[re-encrypt existing passwords]" \
+ "--reencrypt[re-encrypt existing passwords]"
+ _pass_complete_keys
+ ;;
+ ls|list|edit)
+ _pass_complete_entries_with_subdirs
+ ;;
+ insert)
+ _arguments : \
+ "-e[echo password to console]" \
+ "--echo[echo password to console]" \
+ "-m[multiline]" \
+ "--multiline[multiline]"
+ _pass_complete_entries_with_subdirs
+ ;;
+ generate)
+ _arguments : \
+ "-n[don't include symbols in password]" \
+ "--no-symbols[don't include symbols in password]" \
+ "-c[copy password to the clipboard]" \
+ "--clip[copy password to the clipboard]"
+ _pass_complete_entries_with_subdirs
+ ;;
+ rm)
+ _arguments : \
+ "-f[force deletion]" \
+ "--force[force deletion]" \
+ "-r[recursively delete]" \
+ "--recursive[recursively delete]"
+ _pass_complete_entries_with_subdirs
+ ;;
+ git)
+ local -a subcommands
+ subcommands=(
+ "init:Initialize git repository"
+ "push:Push to remote repository"
+ "pull:Pull from remote repository"
+ "config:Show git config"
+ "log:Show git log"
+ "reflog:Show git reflog"
+ )
+ _describe -t commands 'pass git' subcommands
+ ;;
+ show|*)
+ _pass_cmd_show
+ ;;
+ esac
+ else
+ local -a subcommands
+ subcommands=(
+ "init:Initialize new password storage"
+ "ls:List passwords"
+ "show:Decrypt and print a password"
+ "insert:Insert a new password"
+ "generate:Generate a new password using pwgen"
+ "edit:Edit a password with \$EDITOR"
+ "rm:Remove the password"
+ "git:Call git on the password store"
+ "version:Output version information"
+ "help:Output help message"
+ )
+ _describe -t commands 'pass' subcommands
+ _arguments : \
+ "--version[Output version information]" \
+ "--help[Output help message]"
+ _pass_cmd_show
+ fi
+}
+
+_pass_cmd_show () {
+ _arguments : \
+ "-c[put it on the clipboard]" \
+ "--clip[put it on the clipboard]"
+ _pass_complete_entries
+}
+_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)
+}
+
+_pass_complete_entries_with_subdirs () {
+ _pass_complete_entries_helper
+}
+
+_pass_complete_entries () {
+ _pass_complete_entries_helper -type f
+}
+
+_pass_complete_keys () {
+ local IFS=$'\n'
+ # Extract names and email addresses from gpg --list-keys
+ _values 'gpg keys' $(gpg2 --list-secret-keys --with-colons | cut -d : -f 10 | sort -u | sed '/^$/d')
+}
diff --git a/plugins/per-directory-history/per-directory-history.plugin.zsh b/plugins/per-directory-history/per-directory-history.plugin.zsh
new file mode 100644
index 000000000..61e8b5a62
--- /dev/null
+++ b/plugins/per-directory-history/per-directory-history.plugin.zsh
@@ -0,0 +1,149 @@
+#!/usr/bin/env zsh
+#
+# This is a implementation of per directory history for zsh, some
+# implementations of which exist in bash[1,2]. It also implements
+# a per-directory-history-toggle-history function to change from using the
+# directory history to using the global history. In both cases the history is
+# always saved to both the global history and the directory history, so the
+# toggle state will not effect the saved histories. Being able to switch
+# between global and directory histories on the fly is a novel feature as far
+# as I am aware.
+#
+#-------------------------------------------------------------------------------
+# Configuration
+#-------------------------------------------------------------------------------
+#
+# HISTORY_BASE a global variable that defines the base directory in which the
+# directory histories are stored
+#
+#-------------------------------------------------------------------------------
+# History
+#-------------------------------------------------------------------------------
+#
+# The idea/inspiration for a per directory history is from Stewart MacArthur[1]
+# and Dieter[2], the implementation idea is from Bart Schaefer on the the zsh
+# mailing list[3]. The implementation is by Jim Hester in September 2012.
+#
+# [1]: http://www.compbiome.com/2010/07/bash-per-directory-bash-history.html
+# [2]: http://dieter.plaetinck.be/per_directory_bash
+# [3]: http://www.zsh.org/mla/users/1997/msg00226.html
+#
+################################################################################
+#
+# Copyright (c) 2012 Jim Hester
+#
+# This software is provided 'as-is', without any express or implied warranty.
+# In no event will the authors be held liable for any damages arising from the
+# use of this software.
+#
+# Permission is granted to anyone to use this software for any purpose,
+# including commercial applications, and to alter it and redistribute it
+# freely, subject to the following restrictions:
+#
+# 1. The origin of this software must not be misrepresented; you must not claim
+# that you wrote the original software. If you use this software in a product,
+# an acknowledgment in the product documentation would be appreciated but is
+# not required.
+#
+# 2. Altered source versions must be plainly marked as such, and must not be
+# misrepresented as being the original software.
+#
+# 3. This notice may not be removed or altered from any source distribution..
+#
+################################################################################
+
+#-------------------------------------------------------------------------------
+# configuration, the base under which the directory histories are stored
+#-------------------------------------------------------------------------------
+
+[[ -z $HISTORY_BASE ]] && HISTORY_BASE="$HOME/.directory_history"
+
+#-------------------------------------------------------------------------------
+# toggle global/directory history used for searching - ctrl-G by default
+#-------------------------------------------------------------------------------
+
+function per-directory-history-toggle-history() {
+ if [[ $_per_directory_history_is_global == true ]]; then
+ _per-directory-history-set-directory-history
+ print "\nusing local history\n"
+ else
+ _per-directory-history-set-global-history
+ print "\nusing global history\n"
+ fi
+ zle .push-line
+ zle .accept-line
+}
+
+autoload per-directory-history-toggle-history
+zle -N per-directory-history-toggle-history
+bindkey '^G' per-directory-history-toggle-history
+
+#-------------------------------------------------------------------------------
+# implementation details
+#-------------------------------------------------------------------------------
+
+_per_directory_history_directory="$HISTORY_BASE${PWD:A}/history"
+
+function _per-directory-history-change-directory() {
+ _per_directory_history_directory="$HISTORY_BASE${PWD:A}/history"
+ mkdir -p ${_per_directory_history_directory:h}
+ if [[ $_per_directory_history_is_global == false ]]; then
+ #save to the global history
+ fc -AI $HISTFILE
+ #save history to previous file
+ local prev="$HISTORY_BASE${OLDPWD:A}/history"
+ mkdir -p ${prev:h}
+ fc -AI $prev
+
+ #discard previous directory's history
+ local original_histsize=$HISTSIZE
+ HISTSIZE=0
+ HISTSIZE=$original_histsize
+
+ #read history in new file
+ if [[ -e $_per_directory_history_directory ]]; then
+ fc -R $_per_directory_history_directory
+ fi
+ fi
+}
+
+function _per-directory-history-addhistory() {
+ print -sr -- ${1%%$'\n'}
+ fc -p $_per_directory_history_directory
+}
+
+
+function _per-directory-history-set-directory-history() {
+ if [[ $_per_directory_history_is_global == true ]]; then
+ fc -AI $HISTFILE
+ local original_histsize=$HISTSIZE
+ HISTSIZE=0
+ HISTSIZE=$original_histsize
+ if [[ -e "$_per_directory_history_directory" ]]; then
+ fc -R "$_per_directory_history_directory"
+ fi
+ fi
+ _per_directory_history_is_global=false
+}
+function _per-directory-history-set-global-history() {
+ if [[ $_per_directory_history_is_global == false ]]; then
+ fc -AI $_per_directory_history_directory
+ local original_histsize=$HISTSIZE
+ HISTSIZE=0
+ HISTSIZE=$original_histsize
+ if [[ -e "$HISTFILE" ]]; then
+ fc -R "$HISTFILE"
+ fi
+ fi
+ _per_directory_history_is_global=true
+}
+
+
+#add functions to the exec list for chpwd and zshaddhistory
+chpwd_functions=(${chpwd_functions[@]} "_per-directory-history-change-directory")
+zshaddhistory_functions=(${zshaddhistory_functions[@]} "_per-directory-history-addhistory")
+
+#start in directory mode
+mkdir -p ${_per_directory_history_directory:h}
+_per_directory_history_is_global=true
+_per-directory-history-set-directory-history
diff --git a/plugins/python/python.plugin.zsh b/plugins/python/python.plugin.zsh
index 3ea34d718..852c8b919 100644
--- a/plugins/python/python.plugin.zsh
+++ b/plugins/python/python.plugin.zsh
@@ -1,5 +1,12 @@
# Find python file
alias pyfind='find . -name "*.py"'
-# Remove python compiled byte-code
-alias pyclean='find . -type f -name "*.py[co]" -exec rm -f \{\} \;'
+# Remove python compiled byte-code in either current directory or in a
+# list of specified directories
+function pyclean() {
+ ZSH_PYCLEAN_PLACES=${*:-'.'}
+ find ${ZSH_PYCLEAN_PLACES} -type f -name "*.py[co]" -delete
+}
+
+# Grep among .py files
+alias pygrep='grep --include="*.py"'
diff --git a/plugins/rails/rails.plugin.zsh b/plugins/rails/rails.plugin.zsh
index 4aa7a05d6..d3849b4f4 100644
--- a/plugins/rails/rails.plugin.zsh
+++ b/plugins/rails/rails.plugin.zsh
@@ -5,6 +5,8 @@ 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'
diff --git a/plugins/rails3/rails3.plugin.zsh b/plugins/rails3/rails3.plugin.zsh
index d4c7df654..237d0594b 100644
--- a/plugins/rails3/rails3.plugin.zsh
+++ b/plugins/rails3/rails3.plugin.zsh
@@ -13,6 +13,7 @@ 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'
diff --git a/plugins/rbenv/rbenv.plugin.zsh b/plugins/rbenv/rbenv.plugin.zsh
index ae37404cd..d855c2445 100644
--- a/plugins/rbenv/rbenv.plugin.zsh
+++ b/plugins/rbenv/rbenv.plugin.zsh
@@ -1,10 +1,23 @@
+_homebrew-installed() {
+ type brew &> /dev/null
+}
+
+_rbenv-from-homebrew-installed() {
+ brew --prefix rbenv &> /dev/null
+}
+
FOUND_RBENV=0
-for rbenvdir in "$HOME/.rbenv" "/usr/local/rbenv" "/opt/rbenv" ; do
+rbenvdirs=("$HOME/.rbenv" "/usr/local/rbenv" "/opt/rbenv")
+if _homebrew-installed && _rbenv-from-homebrew-installed ; then
+ rbenvdirs=($(brew --prefix rbenv) "${rbenvdirs[@]}")
+fi
+
+for rbenvdir in "${rbenvdirs[@]}" ; do
if [ -d $rbenvdir/bin -a $FOUND_RBENV -eq 0 ] ; then
FOUND_RBENV=1
export RBENV_ROOT=$rbenvdir
export PATH=${rbenvdir}/bin:$PATH
- eval "$(rbenv init -)"
+ eval "$(rbenv init - zsh)"
alias rubies="rbenv versions"
alias gemsets="rbenv gemset list"
diff --git a/plugins/rbfu/rbfu.plugin.zsh b/plugins/rbfu/rbfu.plugin.zsh
new file mode 100644
index 000000000..008485205
--- /dev/null
+++ b/plugins/rbfu/rbfu.plugin.zsh
@@ -0,0 +1,42 @@
+# Enables rbfu with --auto option, if available.
+#
+# Also provides a command to list all installed/available
+# rubies. To ensure compatibility with themes, creates the
+# rvm_prompt_info function to return the $RBFU_RUBY_VERSION
+# version.
+
+command -v rbfu &>/dev/null
+
+if [[ $? -eq 0 ]]; then
+ eval "$(rbfu --init --auto)"
+
+ # Internal: Print ruby version details, if it's currently
+ # active etc.
+ function _rbfu_rubies_print() {
+ local rb rb_out
+ rb=$(basename $1)
+ rb_out="$rb"
+ [[ -h $1 ]] && rb_out="$rb_out${fg[green]}@${reset_color}"
+ [[ "x$rb" == "x$2" ]] && rb_out="${fg[red]}$rb_out ${fg[red]}*${reset_color}"
+ echo $rb_out
+ }
+
+ # Public: Provide a list with all available rubies, this basically depends
+ # on `ls -1` and .rfbu/rubies. Highlights the currently active ruby version
+ # and aliases.
+ function rbfu-rubies() {
+ local rbfu_dir active_rb
+ rbfu_dir=$RBFU_RUBIES
+ active_rb=$RBFU_RUBY_VERSION
+ [[ -z "$rbfu_dir" ]] && rbfu_dir="${HOME}/.rbfu/rubies"
+ [[ -z "$active_rb" ]] && active_rb="system"
+ _rbfu_rubies_print "${rbfu_dir}/system" $active_rb
+ for rb in $(ls -1 $rbfu_dir); do
+ _rbfu_rubies_print "${rbfu_dir}/${rb}" $active_rb
+ done
+ }
+
+ # Public: Create rvm_prompt_info command for themes compatibility, unless
+ # it has already been defined.
+ [ ! -x rvm_prompt_info ] && function rvm_prompt_info() { echo "${RBFU_RUBY_VERSION:=system}" }
+fi
diff --git a/plugins/rsync/rsync.plugin.zsh b/plugins/rsync/rsync.plugin.zsh
new file mode 100644
index 000000000..33a31a5c1
--- /dev/null
+++ b/plugins/rsync/rsync.plugin.zsh
@@ -0,0 +1,4 @@
+alias rsync-copy="rsync -av --progress -h"
+alias rsync-move="rsync -av --progress -h --remove-source-files"
+alias rsync-update="rsync -avu --progress -h"
+alias rsync-synchronize="rsync -avu --delete --progress -h"
diff --git a/plugins/rvm/_rvm b/plugins/rvm/_rvm
deleted file mode 100644
index bba5304a0..000000000
--- a/plugins/rvm/_rvm
+++ /dev/null
@@ -1,147 +0,0 @@
-#compdef rvm
-
-local curcontext="$curcontext" state line cmds ret=1
-
-_arguments -C \
- '(- 1 *)'{-v,--version}'[display version information]' \
- '(-l|--level)'{-l,--level}'+[patch level to use with rvm use / install]:number' \
- '(--prefix)--prefix[path for all rvm files (~/.rvm/), with trailing slash!]:path:_files' \
- '(--bin)--bin[path for binaries to be placed (~/.rvm/bin/)]:path:_files' \
- '(--source)--source[src directory to use (~/.rvm/src/)]:path:_files' \
- '(--archives)--archives[directory for downladed files (~/.rvm/archives/)]:path:_files' \
- '-S[Specify a script file to attempt to load and run (rubydo)]:file:_files' \
- '-e[Execute code from the command line]:code' \
- '(-G)-G[root gem path to use]:path:_files' \
- '(--gems)--gems[Used to set the gems_flag, use with remove to remove gems]' \
- '(--archive)--archive[Used to set the archive_flag, use with remove to remove archive]' \
- '(--patch)--patch[With MRI Rubies you may specify one or more full paths to patches]' \
- '(-C|--configure)'{-C,--configure}'=[custom configure options]' \
- '(--nice)--nice[process niceness (for slow computers, default 0)]:number' \
- '(--ree)--ree-options[Options passed directly to ree ./installer on the command line]:options' \
- '(--head)--head[with update, updates rvm to git head version]' \
- '(--rubygems)--rubygems[with update, updates rubygems for selected ruby]' \
- '(--default)--default[with ruby select, sets a default ruby for new shells]' \
- '(--debug)--debug[Toggle debug mode on for very verbose output]' \
- '(--trace)--trace[Toggle trace mode on to see EVERYTHING rvm is doing]' \
- '(--force)--force[Force install, removes old install & source before install]' \
- '(--summary)--summary[Used with rubydo to print out a summary of the commands run]' \
- '(--latest)--latest[with gemset --dump skips version strings for latest gem]' \
- '(--gems)--gems[with uninstall/remove removes gems with the interpreter]' \
- '(--docs)--docs[with install, attempt to generate ri after installation]' \
- '(--reconfigure)--reconfigure[Force ./configure on install even if Makefile already exists]' \
- '1: :->cmds' \
- '*: :->args' && ret=0
-
-case $state in
- cmds)
- cmds=(
- "version:show the rvm version installed in rvm_path"
- "use:setup current shell to use a specific ruby version"
- "reload:reload rvm source itself (useful after changing rvm source)"
- "implode:(seppuku) removes the rvm installation completely. This means everything in $rvm_path (~/.rvm)."
- "update:upgrades rvm to the latest version."
- "reset:remove current and stored default & system settings."
- "info :show the *current* environment information for current ruby"
- "current:print the *current* ruby version and the name of any gemset being used."
- "debug:show info plus additional information for common issues"
- "install:install one or many ruby versions"
- "uninstall:uninstall one or many ruby versions, leaves their sources"
- "remove:uninstall one or many ruby versions and remove their sources"
- "migrate:Lets you migrate all gemsets from one ruby to another."
- "upgrade:Lets you upgrade from one version of a ruby to another, including migrating your gemsets semi-automatically."
- "wrapper:generates a set of wrapper executables for a given ruby with the specified ruby and gemset combination. Used under the hood for passenger support and the like."
- "cleanup:Lets you remove stale source folders / archives and other miscellaneous data associated with rvm."
- "repair:Lets you repair parts of your environment e.g. wrappers, env files and and similar files (e.g. general maintenance)."
- "snapshot:Lets your backup / restore an rvm installation in a lightweight manner."
- "disk-usage:Tells you how much disk space rvm install is using."
- "tools:Provides general information about the ruby environment, primarily useful when scripting rvm."
- "docs:Tools to make installing ri and rdoc documentation easier."
- "rvmrc:Tools related to managing rvmrc trust and loading."
- "exec:runs an arbitrary command as a set operation."
- "ruby:runs a named ruby file against specified and/or all rubies"
- "gem:runs a gem command using selected ruby's 'gem'"
- "rake:runs a rake task against specified and/or all rubies"
- "tests:runs 'rake test' across selected ruby versions"
- "specs:runs 'rake spec' across selected ruby versions"
- "monitor:Monitor cwd for testing, run rake {spec,test} on changes."
- "gemset:gemsets: http://rvm.beginrescueend.com/gemsets/"
- "rubygems:Switches the installed version of rubygems for the current ruby."
- "gemdir:display the path to the current gem directory (GEM_HOME)."
- "srcdir:display the path to rvm source directory (may be yanked)"
- "fetch:Performs an archive / src fetch only of the selected ruby."
- "list:show currently installed rubies, interactive output."
- "package:Install a dependency package {readline,iconv,zlib,openssl}"
- "notes:Display notes, with operating system specifics."
- "export:Temporarily set an environment variable in the current shell."
- "unexport:Undo changes made to the environment by 'rvm export'."
- )
- _describe -t commands 'rvm command' cmds && ret=0
- ;;
- args)
- case $line[1] in
- (use|uninstall|remove|list)
- _values -S , 'rubies' $(rvm list strings | sed -e 's/ruby-\([^) ]*\)-\([^) ]*\)/ruby-\1-\2 \1-\2 \1/g') default system && ret=0
- ;;
- (install|fetch)
- _values -S , 'rubies' $(rvm list known_strings) && ret=0
- ;;
- gemset)
- if (( CURRENT == 3 )); then
- _values 'gemset_commands' \
- 'import' \
- 'export' \
- 'create' \
- 'copy' \
- 'rename' \
- 'empty' \
- 'delete' \
- 'name' \
- 'dir' \
- 'list' \
- 'list_all' \
- 'gemdir' \
- 'install' \
- 'pristine' \
- 'clear' \
- 'use' \
- 'update' \
- 'unpack' \
- 'globalcache'
- else
- _values -S , 'gemsets' $(rvm gemset list | grep -v gemset 2>/dev/null)
- fi
- ret=0
- ;;
- package)
- if (( CURRENT == 3 )); then
- _values 'package_commands' \
- 'install' \
- 'uninstall'
- else
- _values 'packages' \
- 'readline' \
- 'iconv' \
- 'curl' \
- 'openssl' \
- 'zlib' \
- 'autoconf' \
- 'ncurses' \
- 'pkgconfig' \
- 'gettext' \
- 'glib' \
- 'mono' \
- 'llvm' \
- 'libxml2' \
- 'libxslt' \
- 'libyaml'
- fi
- ret=0
- ;;
- *)
- (( ret )) && _message 'no more arguments'
- ;;
- esac
- ;;
-esac
-
-return ret
diff --git a/plugins/rvm/rvm.plugin.zsh b/plugins/rvm/rvm.plugin.zsh
index 604c00713..1ab800b0f 100644
--- a/plugins/rvm/rvm.plugin.zsh
+++ b/plugins/rvm/rvm.plugin.zsh
@@ -1,8 +1,10 @@
+fpath=($rvm_path/scripts/zsh/Completion $fpath)
+
alias rubies='rvm list rubies'
alias gemsets='rvm gemset list'
local ruby18='ruby-1.8.7-p334'
-local ruby19='ruby-1.9.2-p180'
+local ruby19='ruby-1.9.3-p194'
function rb18 {
if [ -z "$1" ]; then
@@ -42,3 +44,8 @@ function gems {
-Ee "s/$current_ruby@global/$fg[yellow]&$reset_color/g" \
-Ee "s/$current_ruby$current_gemset$/$fg[green]&$reset_color/g"
}
+
+function _rvm_completion {
+ source $rvm_path"/scripts/zsh/Completion/_rvm"
+}
+compdef _rvm_completion rvm
diff --git a/plugins/screen/screen.plugin.zsh b/plugins/screen/screen.plugin.zsh
new file mode 100644
index 000000000..7009e7a91
--- /dev/null
+++ b/plugins/screen/screen.plugin.zsh
@@ -0,0 +1,54 @@
+# if using GNU screen, let the zsh tell screen what the title and hardstatus
+# of the tab window should be.
+if [[ "$TERM" == screen* ]]; then
+ if [[ $_GET_PATH == '' ]]; then
+ _GET_PATH='echo $PWD | sed "s/^\/Users\//~/;s/^\/home\//~/;s/^~$USER/~/"'
+ fi
+ if [[ $_GET_HOST == '' ]]; then
+ _GET_HOST='echo $HOST | sed "s/\..*//"'
+ fi
+
+ # use the current user as the prefix of the current tab title
+ TAB_TITLE_PREFIX='"`'$_GET_HOST'`:`'$_GET_PATH' | sed "s:..*/::"`$PROMPT_CHAR"'
+ # when at the shell prompt, show a truncated version of the current path (with
+ # standard ~ replacement) as the rest of the title.
+ TAB_TITLE_PROMPT='$SHELL:t'
+ # when running a command, show the title of the command as the rest of the
+ # title (truncate to drop the path to the command)
+ TAB_TITLE_EXEC='$cmd[1]:t'
+
+ # use the current path (with standard ~ replacement) in square brackets as the
+ # prefix of the tab window hardstatus.
+ TAB_HARDSTATUS_PREFIX='"[`'$_GET_PATH'`] "'
+ # when at the shell prompt, use the shell name (truncated to remove the path to
+ # the shell) as the rest of the title
+ TAB_HARDSTATUS_PROMPT='$SHELL:t'
+ # when running a command, show the command name and arguments as the rest of
+ # the title
+ TAB_HARDSTATUS_EXEC='$cmd'
+
+ # tell GNU screen what the tab window title ($1) and the hardstatus($2) should be
+ function screen_set()
+ {
+ # set the tab window title (%t) for screen
+ print -nR $'\033k'$1$'\033'\\\
+
+ # set hardstatus of tab window (%h) for screen
+ print -nR $'\033]0;'$2$'\a'
+ }
+ # called by zsh before executing a command
+ function preexec()
+ {
+ local -a cmd; cmd=(${(z)1}) # the command string
+ eval "tab_title=$TAB_TITLE_PREFIX:$TAB_TITLE_EXEC"
+ eval "tab_hardstatus=$TAB_HARDSTATUS_PREFIX:$TAB_HARDSTATUS_EXEC"
+ screen_set $tab_title $tab_hardstatus
+ }
+ # called by zsh before showing the prompt
+ function precmd()
+ {
+ eval "tab_title=$TAB_TITLE_PREFIX:$TAB_TITLE_PROMPT"
+ eval "tab_hardstatus=$TAB_HARDSTATUS_PREFIX:$TAB_HARDSTATUS_PROMPT"
+ screen_set $tab_title $tab_hardstatus
+ }
+fi \ No newline at end of file
diff --git a/plugins/sublime/sublime.plugin.zsh b/plugins/sublime/sublime.plugin.zsh
new file mode 100755
index 000000000..1b2cbcdce
--- /dev/null
+++ b/plugins/sublime/sublime.plugin.zsh
@@ -0,0 +1,21 @@
+# Sublime Text 2 Aliases
+#unamestr = 'uname'
+
+local _sublime_darwin_subl=/Applications/Sublime\ Text\ 2.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
+elif [[ $('uname') == 'Darwin' ]]; then
+ # Check if Sublime is installed in user's home application directory
+ if [[ -a $HOME/${_sublime_darwin_subl} ]]; then
+ alias st='$HOME/${_sublime_darwin_subl}'
+ else
+ alias st='${_sublime_darwin_subl}'
+ fi
+fi
+alias stt='st .'
diff --git a/plugins/supervisor/_supervisorctl b/plugins/supervisor/_supervisorctl
new file mode 100644
index 000000000..d159f20e0
--- /dev/null
+++ b/plugins/supervisor/_supervisorctl
@@ -0,0 +1,136 @@
+#compdef supervisorctl
+
+typeset -A opt_args
+local context state line
+
+_supervisorctl() {
+ _arguments -s -S \
+ {--configuration,-c}"[configuration file path (default /etc/supervisor.conf)]:FILENAME:_files" \
+ {--help,-h}"[print usage message and exit]:" \
+ {--interactive,-i}"[start an interactive shell after executing commands]" \
+ {--serverurl,-s}"[URL on which supervisord server is listening (default "http://localhost:9001").]" \
+ {--username,-u}"[username to use for authentication with server]:USERNAME:_users" \
+ {--password,-p}"[password to use for authentication with server]:PASSWORD:" \
+ {--history-file,-r}"[keep a readline history (if readline is available)]:FILENAME:_files" \
+ "*::supervisorctl commands:_supervisorctl_command"
+}
+
+(( $+functions[_supervisorctl_command] )) ||
+_supervisorctl_command() {
+ local cmd ret=1
+
+ (( $+supervisorctl_cmds )) || _supervisorctl_cmds=(
+ "add:Activates any updates in config for process/group" \
+ "avail:Display all configured processes" \
+ "clear:Clear process/multiple-process/all-process log files" \
+ "exit:Exit the supervisor shell." \
+ "fg:Connect to a process in foreground mode" \
+ "maintail:tail of supervisor main log file" \
+ "open:Connect to a remote supervisord process. (for UNIX domain socket, use unix:///socket/path)" \
+ "pid:Get the PID of supervisord." \
+ "quit:Exit the supervisor shell." \
+ "reload:Restart the remote supervisord." \
+ "remove:Removes process/group from active config" \
+ "reread:Reload the daemon's configuration files" \
+ "restart:Restart process or group." \
+ "shutdown:Shut the remote supervisord down." \
+ "start:Start process or groups." \
+ "status:Get process status info." \
+ "stop:Stop process or group." \
+ "tail:tail of process stdout" \
+ "update:Reload config and add/remove as necessary" \
+ "version:Show the version of the remote supervisord process" \
+ "help:Show help" \
+ )
+
+ if (( CURRENT == 1 )); then
+ _describe -t commands 'supervisorctl subcommand' _supervisorctl_cmds \
+ || compadd "$@" - ${(s.:.)${(j.:.)_supervisorctl_syns}}
+ else
+ local curcontext="$curcontext"
+
+ cmd="${${_supervisorctl_cmds[(r)$words[1]:*]%%:*}:-${(k)_supervisorctl_syns[(r)(*:|)$words[1](:*|)]}}"
+ if (( $#cmd )); then
+ curcontext="${curcontext%:*:*}:supervisorctl-${cmd}:"
+ _call_function ret _supervisorctl_$cmd || _message 'no more arguments'
+ else
+ _message "unknown supervisorctl command: $words[1]"
+ fi
+ return ret
+ fi
+}
+
+# get supervisor contoroll processes
+(( $+functions[_get_supervisor_procs] )) ||
+_get_supervisor_procs() {
+ local cache_policy
+ zstyle -s ":completion:${curcontext}:" cache-policy cache_policy
+ if [[ -z "$cache_policy" ]]; then
+ zstyle ":completion:${curcontext}:" cache-policy _supervisor_procs_caching_policy
+ fi
+
+ if ( [[ ${+_supervisor_procs} -eq 0 ]] || _cache_invalid supervisor_procs ) \
+ && ! _retrieve_cache supervisor_procs; then
+
+ _supervisor_procs=(${${(f)"$(supervisorctl status >/dev/null 2>&1 | awk -F' ' '{print $1}')"}})
+ _store_cache supervisor_procs _supervisor_procs
+ fi
+
+ local expl
+ _wanted supervisor_procs expl 'supervisor processes' compadd -a _supervisor_procs
+}
+
+_supervisor_procs_caching_policy() {
+ local -a oldp
+ oldp=( "$1"(Nmw+1) )
+ (( $#oldp ))
+}
+
+(( $+functions[_supervisorctl_add] )) ||
+_supervisorctl_add() {
+ _arguments -s \
+ "--help[use help system]" \
+ "*::supervisorctl commands:_supervisorctl"
+}
+
+(( $+functions[_supervisorctl_help] )) ||
+_supervisorctl_help() {
+ _arguments -s \
+ "*:supervisorctl commands:_supervisorctl"
+}
+
+(( $+functions[_supervisorctl_maintail] )) ||
+_supervisorctl_maintail() {
+ _arguments -s \
+ '-f[Continuous tail of supervisor main log file (Ctrl-C to exit)]'
+}
+
+(( $+functions[_supervisorctl_start] )) ||
+_supervisorctl_start() {
+ # TODO: add 'all'
+ _arguments -s \
+ '*::supvervisor process:_get_supervisor_procs'
+}
+
+(( $+functions[_supervisorctl_status] )) ||
+_supervisorctl_status() {
+ _arguments \
+ '*::supvervisor process:_get_supervisor_procs'
+}
+
+(( $+functions[_supervisorctl_stop] )) ||
+_supervisorctl_stop() {
+ # TODO: add 'all'
+ _arguments -s \
+ '*::supvervisor process:_get_supervisor_procs'
+}
+
+(( $+functions[_supervisorctl_tail] )) ||
+_supervisorctl_tail() {
+ # TODO: add 'stderr'
+ _arguments -s \
+ '-f[Continuous tail of named process stdout Ctrl-C to exit.]' \
+ '*::supvervisor process:_get_supervisor_procs'
+}
+
+_supervisorctl "$@"
diff --git a/plugins/supervisor/_supervisord b/plugins/supervisor/_supervisord
new file mode 100644
index 000000000..34d27805d
--- /dev/null
+++ b/plugins/supervisor/_supervisord
@@ -0,0 +1,32 @@
+#compdef supervisord
+
+typeset -A opt_args
+local context state line
+
+_arguments \
+ {--configuration,-c}"[configuration file]:FILENAME:_files" \
+ {--nodaemon,-n}"[run in the foreground (same as 'nodaemon true' in config file)]" \
+ {--help,-h}"[print this usage message and exit]:" \
+ {--user,-u}"[run supervisord as this user]:USER:_users" \
+ {--umask,-m}"[use this umask for daemon subprocess (default is 022)]" \
+ {--directory,-d}"[directory to chdir to when daemonized]" \
+ {--logfile,-l}"[use FILENAME as logfile path]:FILENAME:_files" \
+ {--logfile_maxbytes,-y}"[use BYTES to limit the max size of logfile]" \
+ {--logfile_backups,-z}"[number of backups to keep when max bytes reached]" \
+ {--loglevel,-e}"[use LEVEL as log level (debug,info,warn,error,critical)]:level:->levels" \
+ {--pidfile,-j}"[write a pid file for the daemon process to FILENAME]:FILENAME:_files" \
+ {--identifier,-i}"[identifier used for this instance of supervisord]" \
+ {--childlogdir,-q}"[the log directory for child process logs]:child log directory:_files -/" \
+ {--nocleanup,-k}"[prevent the process from performing cleanup (removal of old automatic child log files) at startup.]" \
+ {--minfds,-a}"[the minimum number of file descriptors for start success]" \
+ {--strip_ansi,-t}"[strip ansi escape codes from process output]" \
+ "--minprocs[the minimum number of processes available for start success]" \
+ "--profile_options[run supervisord under profiler and output results based on OPTIONS, which is a comma-sep'd list of 'cumulative', 'calls', and/or 'callers', e.g. 'cumulative,callers')]" \
+ "*::args:_gnu_generic"
+
+case $state in
+levels)
+ levels=("debug" "info" "warn" "error" "critical")
+ _describe -t levels 'supervisord levels' levels && return 0
+ ;;
+esac
diff --git a/plugins/supervisor/supervisor.plugin.zsh b/plugins/supervisor/supervisor.plugin.zsh
new file mode 100644
index 000000000..cf1997c5b
--- /dev/null
+++ b/plugins/supervisor/supervisor.plugin.zsh
@@ -0,0 +1 @@
+# DECLARION: This plugin was created by hhatto. What I did is just making a portal from https://bitbucket.org/hhatto/zshcompfunc4supervisor.
diff --git a/plugins/suse/suse.plugin.zsh b/plugins/suse/suse.plugin.zsh
new file mode 100644
index 000000000..d46286948
--- /dev/null
+++ b/plugins/suse/suse.plugin.zsh
@@ -0,0 +1,7 @@
+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'
diff --git a/plugins/svn/svn.plugin.zsh b/plugins/svn/svn.plugin.zsh
index e2cf96ca3..e38e8920b 100644
--- a/plugins/svn/svn.plugin.zsh
+++ b/plugins/svn/svn.plugin.zsh
@@ -1,7 +1,15 @@
+
function svn_prompt_info {
if [ $(in_svn) ]; then
+ if [ "x$SVN_SHOW_BRANCH" = "xtrue" ]; then
+ unset SVN_SHOW_BRANCH
+ _DISPLAY=$(svn_get_branch_name)
+ else
+ _DISPLAY=$(svn_get_repo_name)
+ fi
echo "$ZSH_PROMPT_BASE_COLOR$ZSH_THEME_SVN_PROMPT_PREFIX\
-$ZSH_THEME_REPO_NAME_COLOR$(svn_get_repo_name)$ZSH_PROMPT_BASE_COLOR$ZSH_THEME_SVN_PROMPT_SUFFIX$ZSH_PROMPT_BASE_COLOR$(svn_dirty)$ZSH_PROMPT_BASE_COLOR"
+$ZSH_THEME_REPO_NAME_COLOR$_DISPLAY$ZSH_PROMPT_BASE_COLOR$ZSH_THEME_SVN_PROMPT_SUFFIX$ZSH_PROMPT_BASE_COLOR$(svn_dirty)$ZSH_PROMPT_BASE_COLOR"
+ unset _DISPLAY
fi
}
@@ -15,9 +23,19 @@ function in_svn() {
function svn_get_repo_name {
if [ $(in_svn) ]; then
svn info | sed -n 's/Repository\ Root:\ .*\///p' | read SVN_ROOT
-
- svn info | sed -n "s/URL:\ .*$SVN_ROOT\///p" | sed "s/\/.*$//"
+
+ svn info | sed -n "s/URL:\ .*$SVN_ROOT\///p"
+ fi
+}
+
+function svn_get_branch_name {
+ _DISPLAY=$(svn info 2> /dev/null | awk -F/ '/^URL:/ { for (i=0; i<=NF; i++) { if ($i == "branches" || $i == "tags" ) { print $(i+1); break }; if ($i == "trunk") { print $i; break } } }')
+ if [ "x$_DISPLAY" = "x" ]; then
+ svn_get_repo_name
+ else
+ echo $_DISPLAY
fi
+ unset _DISPLAY
}
function svn_get_rev_nr {
@@ -28,10 +46,12 @@ function svn_get_rev_nr {
function svn_dirty_choose {
if [ $(in_svn) ]; then
- s=$(svn status|grep -E '^\s*[ACDIM!?L]' 2>/dev/null)
- if [ $s ]; then
+ svn 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
+ else
+ # Otherwise, no lines were found, or an error occurred. Return clean.
echo $2
fi
fi
diff --git a/plugins/symfony/symfony.plugin.zsh b/plugins/symfony/symfony.plugin.zsh
new file mode 100644
index 000000000..9de767548
--- /dev/null
+++ b/plugins/symfony/symfony.plugin.zsh
@@ -0,0 +1,13 @@
+# symfony basic command completion
+
+_symfony_get_command_list () {
+ ./symfony | sed "1,/Available tasks/d" | awk 'BEGIN { cat=null; } /^[A-Za-z]+$/ { cat = $1; } /^ :[a-z]+/ { print cat $1; }'
+}
+
+_symfony () {
+ if [ -f symfony ]; then
+ compadd `_symfony_get_command_list`
+ fi
+}
+
+compdef _symfony symfony
diff --git a/plugins/symfony2/symfony2.plugin.zsh b/plugins/symfony2/symfony2.plugin.zsh
index 644266841..cc9ffebc0 100644
--- a/plugins/symfony2/symfony2.plugin.zsh
+++ b/plugins/symfony2/symfony2.plugin.zsh
@@ -10,4 +10,10 @@ _symfony2 () {
fi
}
-compdef _symfony2 app/console \ No newline at end of file
+compdef _symfony2 app/console
+compdef _symfony2 sf
+
+#Alias
+alias sf2='php app/console'
+alias sf2clear='php app/console cache:clear'
+
diff --git a/plugins/systemd/systemd.plugin.zsh b/plugins/systemd/systemd.plugin.zsh
new file mode 100644
index 000000000..7d3db0f8e
--- /dev/null
+++ b/plugins/systemd/systemd.plugin.zsh
@@ -0,0 +1,11 @@
+user_commands=(
+ list-units is-active status show help list-unit-files
+ is-enabled list-jobs show-environment)
+
+sudo_commands=(
+ start stop reload restart try-restart isolate kill
+ reset-failed enable disable reenable preset mask unmask
+ link load cancel set-environment unset-environment)
+
+for c in $user_commands; do; alias sc-$c="systemctl $c"; done
+for c in $sudo_commands; do; alias sc-$c="sudo systemctl $c"; done
diff --git a/plugins/terminalapp/terminalapp.plugin.zsh b/plugins/terminalapp/terminalapp.plugin.zsh
index 4695ad055..2249b1e2f 100644
--- a/plugins/terminalapp/terminalapp.plugin.zsh
+++ b/plugins/terminalapp/terminalapp.plugin.zsh
@@ -1,11 +1,39 @@
# Set Apple Terminal.app resume directory
# based on this answer: http://superuser.com/a/315029
+# 2012-10-26: (javageek) Changed code using the updated answer
-function chpwd {
- local SEARCH=' '
- local REPLACE='%20'
- local PWD_URL="file://$HOSTNAME${PWD//$SEARCH/$REPLACE}"
- printf '\e]7;%s\a' "$PWD_URL"
-}
+# Tell the terminal about the working directory whenever it changes.
+if [[ "$TERM_PROGRAM" == "Apple_Terminal" ]] && [[ -z "$INSIDE_EMACS" ]]; then
+ update_terminal_cwd() {
+ # Identify the directory using a "file:" scheme URL, including
+ # the host name to disambiguate local vs. remote paths.
-chpwd \ No newline at end of file
+ # Percent-encode the pathname.
+ local URL_PATH=''
+ {
+ # Use LANG=C to process text byte-by-byte.
+ local i ch hexch LANG=C
+ for ((i = 1; i <= ${#PWD}; ++i)); do
+ ch="$PWD[i]"
+ if [[ "$ch" =~ [/._~A-Za-z0-9-] ]]; then
+ URL_PATH+="$ch"
+ else
+ hexch=$(printf "%02X" "'$ch")
+ URL_PATH+="%$hexch"
+ fi
+ done
+ }
+
+ local PWD_URL="file://$HOST$URL_PATH"
+ #echo "$PWD_URL" # testing
+ printf '\e]7;%s\a' "$PWD_URL"
+ }
+
+ # Register the function so it is called whenever the working
+ # directory changes.
+ autoload add-zsh-hook
+ add-zsh-hook chpwd update_terminal_cwd
+
+ # Tell the terminal about the initial directory.
+ update_terminal_cwd
+fi
diff --git a/plugins/themes/_theme b/plugins/themes/_theme
new file mode 100644
index 000000000..8214ddb0d
--- /dev/null
+++ b/plugins/themes/_theme
@@ -0,0 +1,3 @@
+#compdef theme
+
+_arguments "1: :($(lstheme | tr "\n" " "))"
diff --git a/plugins/themes/themes.plugin.zsh b/plugins/themes/themes.plugin.zsh
new file mode 100644
index 000000000..8bab257ea
--- /dev/null
+++ b/plugins/themes/themes.plugin.zsh
@@ -0,0 +1,24 @@
+function theme
+{
+ if [ "$1" = "random" ]; then
+ themes=($ZSH/themes/*zsh-theme)
+ N=${#themes[@]}
+ ((N=(RANDOM%N)+1))
+ RANDOM_THEME=${themes[$N]}
+ source "$RANDOM_THEME"
+ echo "[oh-my-zsh] Random theme '$RANDOM_THEME' loaded..."
+ else
+ if [ -f "$ZSH_CUSTOM/$1.zsh-theme" ]
+ then
+ source "$ZSH_CUSTOM/$1.zsh-theme"
+ else
+ source "$ZSH/themes/$1.zsh-theme"
+ fi
+ fi
+}
+
+function lstheme
+{
+ cd $ZSH/themes
+ ls *zsh-theme | sed 's,\.zsh-theme$,,'
+}
diff --git a/plugins/urltools/urltools.plugin.zsh b/plugins/urltools/urltools.plugin.zsh
new file mode 100644
index 000000000..4ddfff8ce
--- /dev/null
+++ b/plugins/urltools/urltools.plugin.zsh
@@ -0,0 +1,36 @@
+# URL Tools
+# Adds handy command line aliases useful for dealing with URLs
+#
+# Taken from:
+# http://ruslanspivak.com/2010/06/02/urlencode-and-urldecode-from-a-command-line/
+
+if [[ $(whence $URLTOOLS_METHOD) = "" ]]; then
+ URLTOOLS_METHOD=""
+fi
+
+if [[ $(whence node) != "" && ( "x$URLTOOLS_METHOD" = "x" || "x$URLTOOLS_METHOD" = "xnode" ) ]]; then
+ alias urlencode='node -e "console.log(encodeURIComponent(process.argv[1]))"'
+ alias urldecode='node -e "console.log(decodeURIComponent(process.argv[1]))"'
+elif [[ $(whence python) != "" && ( "x$URLTOOLS_METHOD" = "x" || "x$URLTOOLS_METHOD" = "xpython" ) ]]; then
+ alias urlencode='python -c "import sys, urllib as ul; print ul.quote_plus(sys.argv[1])"'
+ alias urldecode='python -c "import sys, urllib as ul; print ul.unquote_plus(sys.argv[1])"'
+elif [[ $(whence ruby) != "" && ( "x$URLTOOLS_METHOD" = "x" || "x$URLTOOLS_METHOD" = "xruby" ) ]]; then
+ alias urlencode='ruby -r cgi -e "puts CGI.escape(ARGV[0])"'
+ alias urldecode='ruby -r cgi -e "puts CGI.unescape(ARGV[0])"'
+elif [[ $(whence php) != "" && ( "x$URLTOOLS_METHOD" = "x" || "x$URLTOOLS_METHOD" = "xphp" ) ]]; then
+ alias urlencode='php -r "echo rawurlencode(\$argv[1]); echo \"\n\";"'
+ alias urldecode='php -r "echo rawurldecode(\$argv[1]); echo \"\\n\";"'
+elif [[ $(whence perl) != "" && ( "x$URLTOOLS_METHOD" = "x" || "x$URLTOOLS_METHOD" = "xperl" ) ]]; then
+ if perl -MURI::Encode -e 1&> /dev/null; then
+ alias urlencode='perl -MURI::Encode -ep "uri_encode($ARGV[0]);"'
+ alias urldecode='perl -MURI::Encode -ep "uri_decode($ARGV[0]);"'
+ elif perl -MURI::Escape -e 1 &> /dev/null; then
+ alias urlencode='perl -MURI::Escape -ep "uri_escape($ARGV[0]);"'
+ alias urldecode='perl -MURI::Escape -ep "uri_unescape($ARGV[0]);"'
+ else
+ alias urlencode="perl -e '\$new=\$ARGV[0]; \$new =~ s/([^A-Za-z0-9])/sprintf(\"%%%02X\", ord(\$1))/seg; print \"\$new\n\";'"
+ alias urldecode="perl -e '\$new=\$ARGV[0]; \$new =~ s/\%([A-Fa-f0-9]{2})/pack(\"C\", hex(\$1))/seg; print \"\$new\n\";'"
+ fi
+fi
+
+unset URLTOOLS_METHOD \ No newline at end of file
diff --git a/plugins/vagrant/_vagrant b/plugins/vagrant/_vagrant
index 483b29c53..9bed1e3c6 100644
--- a/plugins/vagrant/_vagrant
+++ b/plugins/vagrant/_vagrant
@@ -46,6 +46,11 @@ __box_list ()
_wanted application expl 'command' compadd $(command ls -1 $HOME/.vagrant/boxes 2>/dev/null| sed -e 's/ /\\ /g')
}
+__vm_list ()
+{
+ _wanted application expl 'command' compadd $(command grep Vagrantfile -oe '^[^#]*\.vm\.define *:\([a-zA-Z0-9]\+\)' 2>/dev/null | cut -d: -f2)
+}
+
__vagrant-box ()
{
local curcontext="$curcontext" state line
@@ -99,6 +104,8 @@ case $state in
(box)
__vagrant-box
;;
+ (up|provision|package|destroy|reload|ssh|halt|resume|status)
+ _arguments ':feature:__vm_list'
esac
;;
esac
diff --git a/plugins/vi-mode/vi-mode.plugin.zsh b/plugins/vi-mode/vi-mode.plugin.zsh
index c47ab7211..f91be70e4 100644
--- a/plugins/vi-mode/vi-mode.plugin.zsh
+++ b/plugins/vi-mode/vi-mode.plugin.zsh
@@ -1,8 +1,26 @@
-function zle-line-init zle-keymap-select {
+# Ensures that $terminfo values are valid and updates editor information when
+# the keymap changes.
+function zle-keymap-select zle-line-init zle-line-finish {
+ # The terminal must be in application mode when ZLE is active for $terminfo
+ # values to be valid.
+ if (( $+terminfo[smkx] && $+terminfo[rmkx] )); then
+ case "$0" in
+ (zle-line-init)
+ # Enable terminal application mode.
+ echoti smkx
+ ;;
+ (zle-line-finish)
+ # Disable terminal application mode.
+ echoti rmkx
+ ;;
+ esac
+ fi
zle reset-prompt
+ zle -R
}
zle -N zle-line-init
+zle -N zle-line-finish
zle -N zle-keymap-select
bindkey -v
diff --git a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh
new file mode 100644
index 000000000..0ed2565b4
--- /dev/null
+++ b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh
@@ -0,0 +1,40 @@
+wrapsource=`which virtualenvwrapper_lazy.sh`
+
+if [[ -f "$wrapsource" ]]; then
+ source $wrapsource
+
+ if [[ ! $DISABLE_VENV_CD -eq 1 ]]; then
+ # Automatically activate Git projects' 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 {
+ # Check that this is a Git repo
+ PROJECT_ROOT=`git rev-parse --show-toplevel 2> /dev/null`
+ if (( $? == 0 )); then
+ # Check for virtualenv name override
+ ENV_NAME=`basename "$PROJECT_ROOT"`
+ if [[ -f "$PROJECT_ROOT/.venv" ]]; then
+ ENV_NAME=`cat "$PROJECT_ROOT/.venv"`
+ 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"
+ 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
+ unset PROJECT_ROOT
+ }
+
+ # New cd function that does the virtualenv magic
+ function cd {
+ builtin cd "$@" && workon_cwd
+ }
+ fi
+else
+ print "zsh virtualenvwrapper plugin: Cannot find virtualenvwrapper_lazy.sh. Please install with \`pip install virtualenvwrapper\`."
+fi
diff --git a/plugins/yum/yum.plugin.zsh b/plugins/yum/yum.plugin.zsh
index d6ba7ed62..69abfc4ce 100644
--- a/plugins/yum/yum.plugin.zsh
+++ b/plugins/yum/yum.plugin.zsh
@@ -3,10 +3,14 @@
alias ys="yum search" # search package
alias yp="yum info" # show package info
alias yl="yum list" # list packages
+alias ygl="yum grouplist" # list package groups
alias yli="yum list installed" # print all installed packages
+alias ymc="yum makecache" # rebuilds the yum package list
alias yu="sudo yum update" # upgrate packages
alias yi="sudo yum install" # install package
+alias ygi="sudo yum groupinstall" # install package group
alias yr="sudo yum remove" # remove package
+alias ygr="sudo yum groupremove" # remove pagage group
alias yrl="sudo yum remove --remove-leaves" # remove package and leaves
-alias yc="sudo yum clean all" # clean cache
+alias yc="sudo yum clean all" # clean cache \ No newline at end of file
diff --git a/plugins/zeus/README.md b/plugins/zeus/README.md
new file mode 100644
index 000000000..4409943fe
--- /dev/null
+++ b/plugins/zeus/README.md
@@ -0,0 +1,41 @@
+## zeus
+**Maintainer:** [b4mboo](https://github.com/b4mboo)
+
+* `zi` aliases `zeus init`
+* `zinit` aliases `zeus init`
+
+* `zs` aliases `zeus start`
+* `ztart` aliases `zeus start`
+
+* `zc` aliases `zeus console`
+* `zonsole` aliases `zeus console`
+
+* `zsr` aliases `zeus server`
+* `zerver` aliases `zeus server`
+
+* `zr` aliases `zeus rake`
+* `zake` aliases `zeus rake`
+
+* `zg` aliases `zeus generate`
+* `zenerate` aliases `zeus generate`
+
+* `zrn` aliases `zeus runner`
+* `zunner` aliases `zeus runner`
+
+* `zcu` aliases `zeus cucumber`
+* `zucumber` aliases `zeus cucumber`
+
+* `zt` aliases `zeus test`
+* `zest` aliases `zeus test`
+
+* `zu` aliases `zeus test test/unit/*`
+* `zunits` aliases `zeus test test/unit/*`
+
+* `zf` aliases `zeus test test/functional/*`
+* `zunctional` aliases `zeus test test/functional/*`
+
+* `za` aliases `zeus test test/unit/*; zeus test test/functional/; zeus cucumber`
+* `zall` aliases `zeus test test/unit/*; zeus test test/functional/; zeus cucumber`
+
+* `zsw` aliases `rm .zeus.sock`
+* `zweep` aliases `rm .zeus.sock`
diff --git a/plugins/zeus/zeus.plugin.zsh b/plugins/zeus/zeus.plugin.zsh
new file mode 100644
index 000000000..2fc7e1ebf
--- /dev/null
+++ b/plugins/zeus/zeus.plugin.zsh
@@ -0,0 +1,58 @@
+# Some aliases for zeus. (See: https://github.com/burke/zeus)
+# Zeus preloads your Rails environment and forks that process whenever
+# needed. This effectively speeds up Rails' boot process to under 1 sec.
+
+# Always use bundler.
+# Rails depends on bundler, so we can be pretty sure, that there are no
+# problems with this command. For all the other aliases I provided an
+# alternative, in case people have conflicts with other plugins (e.g. suse).
+alias zeus='bundle exec zeus'
+
+# Init
+alias zi='zeus init'
+alias zinit='zeus init'
+
+# Start
+alias zs='zeus start'
+alias ztart='zeus start'
+
+# Console
+alias zc='zeus console'
+alias zonsole='zeus console'
+
+# Server
+alias zsr='zeus server'
+alias zerver='zeus server'
+
+# Rake
+alias zr='zeus rake'
+alias zake='zeus rake'
+
+# Generate
+alias zg='zeus generate'
+alias zenerate='zeus generate'
+
+# Runner
+alias zrn='zeus runner'
+alias zunner='zeus runner'
+
+# Cucumber
+alias zcu='zeus cucumber'
+alias zucumber='zeus cucumber'
+
+# Test
+alias zt='zeus test'
+alias zest='zeus test'
+
+alias zu='zeus test test/unit/*'
+alias zunits='zeus test test/unit/*'
+
+alias zf='zeus test test/functional/*'
+alias zunctional='zeus test test/functional/*'
+
+alias za='zeus test test/unit/*; zeus test test/functional/; zeus cucumber'
+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'
diff --git a/templates/zshrc.zsh-template b/templates/zshrc.zsh-template
index e52553241..2ea9934af 100644
--- a/templates/zshrc.zsh-template
+++ b/templates/zshrc.zsh-template
@@ -14,9 +14,12 @@ ZSH_THEME="robbyrussell"
# Set to this to use case-sensitive completion
# CASE_SENSITIVE="true"
-# Comment this out to disable weekly auto-update checks
+# Comment this out to disable bi-weekly auto-update checks
# DISABLE_AUTO_UPDATE="true"
+# Uncomment to change how many often would you like to wait before auto-updates occur? (in days)
+# export UPDATE_ZSH_DAYS=13
+
# Uncomment following line if you want to disable colors in ls
# DISABLE_LS_COLORS="true"
diff --git a/themes/3den.zsh-theme b/themes/3den.zsh-theme
new file mode 100644
index 000000000..1d2c7db7f
--- /dev/null
+++ b/themes/3den.zsh-theme
@@ -0,0 +1,7 @@
+PROMPT=$'%{$fg[white]%}$(~/.rvm/bin/rvm-prompt) %{$fg_bold[cyan]%}%~%{$reset_color%}$(git_prompt_info) %{$fg[cyan]%}%D{[%I:%M:%S]}\
+%{$fg_bold[green]%}%n$%{$reset_color%} '
+
+ZSH_THEME_GIT_PROMPT_PREFIX=" %{$fg[white]%}("
+ZSH_THEME_GIT_PROMPT_SUFFIX=")%{$reset_color%}"
+ZSH_THEME_GIT_PROMPT_DIRTY="*"
+ZSH_THEME_GIT_PROMPT_CLEAN=""
diff --git a/themes/adben.zsh-theme b/themes/adben.zsh-theme
new file mode 100644
index 000000000..9f777e847
--- /dev/null
+++ b/themes/adben.zsh-theme
@@ -0,0 +1,26 @@
+#!/usr/bin/env zsh
+local USER_HOST='%{$terminfo[bold]$fg[yellow]%}%n@%m%{$reset_color%}'
+local RETURN_CODE="%(?..%{$fg[red]%}%? ↵%{$reset_color%})"
+local GIT_BRANCH='%{$terminfo[bold]$fg[red]%}$(git_prompt_info)%{$reset_color%}'
+local CURRENT_DIR='%{$terminfo[bold]$fg[green]%} %~%{$reset_color%}'
+local RUBY_RVM='%{$fg[gray]%}‹$(rvm-prompt i v g)›%{$reset_color%}'
+local COMMAND_TIP='%{$terminfo[bold]$fg[blue]%}$(wget -qO - http://www.commandlinefu.com/commands/random/plaintext | sed 1d | sed '/^$/d' | sed 's/^/║/g')%{$reset_color%}'
+######### PROMPT #########
+PROMPT="%{$terminfo[bold]$fg[blue]%}╔═ %{$reset_color%}${USER_HOST} ${CURRENT_DIR} ${RUBY_RVM} ${GIT_BRANCH}
+${COMMAND_TIP}
+%{$terminfo[bold]$fg[blue]%}╚═ %{$reset_color%}%B%{$terminfo[bold]$fg[white]%}$%b%{$reset_color%} "
+RPS1='${RETURN_CODE}'
+RPROMPT='%{$fg[green]%}[%*]%{$reset_color%}'
+######### PROMPT #########
+########## GIT ###########
+ZSH_THEME_GIT_PROMPT_PREFIX="‹"
+ZSH_THEME_GIT_PROMPT_SUFFIX="%{$GIT_PROMPT_INFO%}›"
+ZSH_THEME_GIT_PROMPT_DIRTY=" %{$GIT_DIRTY_COLOR%}✘"
+ZSH_THEME_GIT_PROMPT_CLEAN=" %{$GIT_CLEAN_COLOR%}✔"
+ZSH_THEME_GIT_PROMPT_ADDED="%{$FG[082]%}✚%{$reset_color%}"
+ZSH_THEME_GIT_PROMPT_MODIFIED="%{$FG[166]%}✹%{$reset_color%}"
+ZSH_THEME_GIT_PROMPT_DELETED="%{$FG[160]%}✖%{$reset_color%}"
+ZSH_THEME_GIT_PROMPT_RENAMED="%{$FG[220]%}➜%{$reset_color%}"
+ZSH_THEME_GIT_PROMPT_UNMERGED="%{$FG[082]%}═%{$reset_color%}"
+ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$FG[190]%}✭%{$reset_color%}"
+########## GIT ###########
diff --git a/themes/af-magic.zsh-theme b/themes/af-magic.zsh-theme
new file mode 100644
index 000000000..c1b00c62b
--- /dev/null
+++ b/themes/af-magic.zsh-theme
@@ -0,0 +1,36 @@
+# af-magic.zsh-theme
+#
+# Author: Andy Fleming
+# URL: http://andyfleming.com/
+# Repo: https://github.com/andyfleming/oh-my-zsh
+# Direct Link: https://github.com/andyfleming/oh-my-zsh/blob/master/themes/af-magic.zsh-theme
+#
+# Created on: June 19, 2012
+# Last modified on: June 20, 2012
+
+
+
+if [ $UID -eq 0 ]; then NCOLOR="red"; else NCOLOR="green"; fi
+local return_code="%(?..%{$fg[red]%}%? ↵%{$reset_color%})"
+
+# primary prompt
+PROMPT='$FG[237]------------------------------------------------------------%{$reset_color%}
+$FG[032]%~\
+$(git_prompt_info) \
+$FG[105]%(!.#.»)%{$reset_color%} '
+PROMPT2='%{$fg[red]%}\ %{$reset_color%}'
+RPS1='${return_code}'
+
+
+# color vars
+eval my_gray='$FG[237]'
+eval my_orange='$FG[214]'
+
+# right prompt
+RPROMPT='$my_gray%n@%m%{$reset_color%}%'
+
+# git settings
+ZSH_THEME_GIT_PROMPT_PREFIX="$FG[075](branch:"
+ZSH_THEME_GIT_PROMPT_CLEAN=""
+ZSH_THEME_GIT_PROMPT_DIRTY="$my_orange*%{$reset_color%}"
+ZSH_THEME_GIT_PROMPT_SUFFIX="$FG[075])%{$reset_color%}"
diff --git a/themes/agnoster.zsh-theme b/themes/agnoster.zsh-theme
new file mode 100644
index 000000000..bd6f1a6a2
--- /dev/null
+++ b/themes/agnoster.zsh-theme
@@ -0,0 +1,115 @@
+# vim:ft=zsh ts=2 sw=2 sts=2
+#
+# agnoster's Theme - https://gist.github.com/3712874
+# A Powerline-inspired theme for ZSH
+#
+# # README
+#
+# In order for this theme to render correctly, you will need a
+# [Powerline-patched font](https://gist.github.com/1595572).
+#
+# In addition, I recommend the
+# [Solarized theme](https://github.com/altercation/solarized/) and, if you're
+# using it on Mac OS X, [iTerm 2](http://www.iterm2.com/) over Terminal.app -
+# it has significantly better color fidelity.
+#
+# # Goals
+#
+# The aim of this theme is to only show you *relevant* information. Like most
+# prompts, it will only show git information when in a git working directory.
+# However, it goes a step further: everything from the current user and
+# hostname to whether the last call exited with an error to whether background
+# jobs are running in this shell will all be displayed automatically when
+# appropriate.
+
+### Segment drawing
+# A few utility functions to make it easy and re-usable to draw segmented prompts
+
+CURRENT_BG='NONE'
+SEGMENT_SEPARATOR='⮀'
+
+# Begin a segment
+# Takes two arguments, background and foreground. Both can be omitted,
+# rendering default background/foreground.
+prompt_segment() {
+ local bg fg
+ [[ -n $1 ]] && bg="%K{$1}" || bg="%k"
+ [[ -n $2 ]] && fg="%F{$2}" || fg="%f"
+ if [[ $CURRENT_BG != 'NONE' && $1 != $CURRENT_BG ]]; then
+ echo -n " %{$bg%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR%{$fg%} "
+ else
+ echo -n "%{$bg%}%{$fg%} "
+ fi
+ CURRENT_BG=$1
+ [[ -n $3 ]] && echo -n $3
+}
+
+# End the prompt, closing any open segments
+prompt_end() {
+ if [[ -n $CURRENT_BG ]]; then
+ echo -n " %{%k%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR"
+ else
+ echo -n "%{%k%}"
+ fi
+ echo -n "%{%f%}"
+ CURRENT_BG=''
+}
+
+### Prompt components
+# Each component will draw itself, and hide itself if no information needs to be shown
+
+# Context: user@hostname (who am I and where am I)
+prompt_context() {
+ local user=`whoami`
+
+ if [[ "$user" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then
+ prompt_segment black default "%(!.%{%F{yellow}%}.)$user@%m"
+ fi
+}
+
+# Git: branch/detached head, dirty status
+prompt_git() {
+ local ref dirty
+ if $(git rev-parse --is-inside-work-tree >/dev/null 2>&1); then
+ ZSH_THEME_GIT_PROMPT_DIRTY='±'
+ dirty=$(parse_git_dirty)
+ ref=$(git symbolic-ref HEAD 2> /dev/null) || ref="➦ $(git show-ref --head -s --abbrev |head -n1 2> /dev/null)"
+ if [[ -n $dirty ]]; then
+ prompt_segment yellow black
+ else
+ prompt_segment green black
+ fi
+ echo -n "${ref/refs\/heads\//⭠ }$dirty"
+ fi
+}
+
+# Dir: current working directory
+prompt_dir() {
+ prompt_segment blue black '%~'
+}
+
+# Status:
+# - was there an error
+# - am I root
+# - are there background jobs?
+prompt_status() {
+ local symbols
+ symbols=()
+ [[ $RETVAL -ne 0 ]] && symbols+="%{%F{red}%}$RETVAL"
+ [[ $UID -eq 0 ]] && symbols+="%{%F{yellow}%}⚡"
+ [[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{cyan}%}⚙"
+
+ [[ -n "$symbols" ]] && prompt_segment black default "$symbols"
+}
+
+## Main prompt
+build_prompt() {
+ RETVAL=$?
+ prompt_status
+ prompt_context
+ prompt_dir
+ prompt_git
+ prompt_end
+}
+
+PROMPT='%{%f%b%k%}$(build_prompt) '
diff --git a/themes/candy-kingdom.zsh-theme b/themes/candy-kingdom.zsh-theme
new file mode 100644
index 000000000..25aeb6597
--- /dev/null
+++ b/themes/candy-kingdom.zsh-theme
@@ -0,0 +1,37 @@
+# neuralsanwich.zsh-theme
+#
+# Author: Sean Jones
+# URL: http://www.neuralsandwich.com
+# Repo:
+# Direct link:
+# Create:
+# Modified:
+
+if [ "x$OH_MY_ZSH_HG" = "x" ]; then
+ OH_MY_ZSH_HG="hg"
+fi
+
+function hg_prompt_info {
+ $OH_MY_ZSH_HG prompt --angle-brackets "\
+< on %{$fg[magenta]%}<branch>%{$reset_color%}>\
+< at %{$fg[yellow]%}<tags|%{$reset_color%}, %{$fg[yellow]%}>%{$reset_color%}>\
+%{$fg[green]%}<status|modified|unknown><update>%{$reset_color%}<
+patches: <patches|join( → )|pre_applied(%{$fg[yellow]%})|post_applied(%{$reset_color%})|pre_unapplied(%{$fg_bold[black]%})|post_unapplied(%{$reset_color%})>>" 2>/dev/null
+}
+
+function box_name {
+ [ -f ~/.box-name ] && cat ~/.box-name || hostname -s
+}
+
+PROMPT='
+%{$fg[magenta]%}%n%{$reset_color%}@%{$fg[yellow]%}$(box_name)%{$reset_color%}:%{$fg_bold[green]%}${PWD/#$HOME/~}%{$reset_color%}$(hg_prompt_info)$(git_prompt_info)
+%(?,,%{${fg_bold[white]}%}[%?]%{$reset_color%} )$ '
+
+ZSH_THEME_GIT_PROMPT_PREFIX=" (%{$fg[magenta]%}branch: "
+ZSH_THEME_GIT_PROMPT_CLEAN=""
+ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[red]%}?"
+ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[orange]%}!"
+ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%})"
+
+local return_status="%{$fg[red]%}%(?..✘)%{$reset_color%}"
+RPROMPT='${return_status}$(battery_time_remaining) $(battery_pct_prompt)%{$reset_color%}'
diff --git a/themes/cloud.zsh-theme b/themes/cloud.zsh-theme
index ad5e2834b..4efbf9776 100644
--- a/themes/cloud.zsh-theme
+++ b/themes/cloud.zsh-theme
@@ -1,4 +1,8 @@
-PROMPT='%{$fg_bold[cyan]%}☁ %{$fg_bold[green]%}%p %{$fg[green]%}%c %{$fg_bold[cyan]%}$(git_prompt_info)%{$fg_bold[blue]%} % %{$reset_color%}'
+if [[ -z $ZSH_THEME_CLOUD_PREFIX ]]; then
+ ZSH_THEME_CLOUD_PREFIX='☁'
+fi
+
+PROMPT='%{$fg_bold[cyan]%}$ZSH_THEME_CLOUD_PREFIX %{$fg_bold[green]%}%p %{$fg[green]%}%c %{$fg_bold[cyan]%}$(git_prompt_info)%{$fg_bold[blue]%} % %{$reset_color%}'
ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[green]%}[%{$fg[cyan]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
diff --git a/themes/fino-time.zsh-theme b/themes/fino-time.zsh-theme
new file mode 100644
index 000000000..7154e09f1
--- /dev/null
+++ b/themes/fino-time.zsh-theme
@@ -0,0 +1,39 @@
+# Fino-time theme by Aexander Berezovsky (http://berezovsky.me) based on Fino by Max Masnick (http://max.masnick.me)
+
+# Use with a dark background and 256-color terminal!
+# Meant for people with RVM and git. Tested only on OS X 10.7.
+
+# You can set your computer name in the ~/.box-name file if you want.
+
+# Borrowing shamelessly from these oh-my-zsh themes:
+# bira
+# robbyrussell
+#
+# Also borrowing from http://stevelosh.com/blog/2010/02/my-extravagant-zsh-prompt/
+
+function virtualenv_info {
+ [ $VIRTUAL_ENV ] && echo '('`basename $VIRTUAL_ENV`') '
+}
+
+function prompt_char {
+ git branch >/dev/null 2>/dev/null && echo '⠠⠵' && return
+ echo '○'
+}
+
+function box_name {
+ [ -f ~/.box-name ] && cat ~/.box-name || hostname -s
+}
+
+
+local rvm_ruby='‹$(rvm-prompt i v g)›%{$reset_color%}'
+local current_dir='${PWD/#$HOME/~}'
+local git_info='$(git_prompt_info)'
+
+
+PROMPT="╭─%{$FG[040]%}%n%{$reset_color%} %{$FG[239]%}at%{$reset_color%} %{$FG[033]%}$(box_name)%{$reset_color%} %{$FG[239]%}in%{$reset_color%} %{$terminfo[bold]$FG[226]%}${current_dir}%{$reset_color%}${git_info} %{$FG[239]%}using%{$FG[243]%} ${rvm_ruby} %D - %*
+╰─$(virtualenv_info)$(prompt_char) "
+
+ZSH_THEME_GIT_PROMPT_PREFIX=" %{$FG[239]%}on%{$reset_color%} %{$fg[255]%}"
+ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
+ZSH_THEME_GIT_PROMPT_DIRTY="%{$FG[202]%}✘✘✘"
+ZSH_THEME_GIT_PROMPT_CLEAN="%{$FG[040]%}✔"
diff --git a/themes/fishy.zsh-theme b/themes/fishy.zsh-theme
index f9e506cae..e9f78a54e 100644
--- a/themes/fishy.zsh-theme
+++ b/themes/fishy.zsh-theme
@@ -1,7 +1,11 @@
# ZSH Theme emulating the Fish shell's default prompt.
+_fishy_collapsed_wd() {
+ echo $(pwd | perl -pe "s|^$HOME|~|g; s|/([^/])[^/]*(?=/)|/\$1|g")
+}
+
local user_color='green'; [ $UID -eq 0 ] && user_color='red'
-PROMPT='%n@%m %{$fg[$user_color]%}%~%{$reset_color%}%(!.#.>) '
+PROMPT='%n@%m %{$fg[$user_color]%}$(_fishy_collapsed_wd)%{$reset_color%}%(!.#.>) '
PROMPT2='%{$fg[red]%}\ %{$reset_color%}'
local return_status="%{$fg_bold[red]%}%(?..%?)%{$reset_color%}"
diff --git a/themes/frisk.zsh-theme b/themes/frisk.zsh-theme
index f181aec90..2c999a6a6 100644
--- a/themes/frisk.zsh-theme
+++ b/themes/frisk.zsh-theme
@@ -1,10 +1,22 @@
PROMPT=$'
-%{$fg[blue]%}%/%{$reset_color%} $(git_prompt_info)%{$fg[white]%}[%n@%m]%{$reset_color%} %{$fg[white]%}[%T]%{$reset_color%}
+%{$fg[blue]%}%/%{$reset_color%} $(git_prompt_info)$(bzr_prompt_info)%{$fg[white]%}[%n@%m]%{$reset_color%} %{$fg[white]%}[%T]%{$reset_color%}
%{$fg_bold[black]%}>%{$reset_color%} '
PROMPT2="%{$fg_blod[black]%}%_> %{$reset_color%}"
-ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[green]%}["
+GIT_CB="git::"
+ZSH_THEME_SCM_PROMPT_PREFIX="%{$fg[green]%}["
+ZSH_THEME_GIT_PROMPT_PREFIX=$ZSH_THEME_SCM_PROMPT_PREFIX$GIT_CB
ZSH_THEME_GIT_PROMPT_SUFFIX="]%{$reset_color%} "
ZSH_THEME_GIT_PROMPT_DIRTY=" %{$fg[red]%}*%{$fg[green]%}"
ZSH_THEME_GIT_PROMPT_CLEAN=""
+
+## Bazaar integration
+bzr_prompt_info() {
+ BZR_CB=`bzr nick 2> /dev/null | grep -v "ERROR" | cut -d ":" -f2 | awk -F / '{print "bzr::"$1}'`
+ if [ -n "$BZR_CB" ]; then
+ BZR_DIRTY=""
+ [[ -n `bzr status` ]] && BZR_DIRTY="%{$fg[red]%} *%{$reset_color%}"
+ echo "$ZSH_THEME_SCM_PROMPT_PREFIX$BZR_CB$BZR_DIRTY$ZSH_THEME_GIT_PROMPT_SUFFIX"
+ fi
+}
diff --git a/themes/frontcube.zsh-theme b/themes/frontcube.zsh-theme
new file mode 100644
index 000000000..d9f5b6d9c
--- /dev/null
+++ b/themes/frontcube.zsh-theme
@@ -0,0 +1,12 @@
+local rvm="%{$fg[green]%}[$(rvm-prompt i v g)]%{$reset_color%}"
+
+PROMPT='
+%{$fg_bold[gray]%}%~%{$fg_bold[blue]%}%{$fg_bold[blue]%} % %{$reset_color%}
+%{$fg[green]%}➞ %{$reset_color%'
+
+RPROMPT='$(git_prompt_info) $(rvm)'
+
+ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg_bold[blue]%}[git:"
+ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
+ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}] %{$fg[red]%}✖ %{$reset_color%}"
+ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[blue]%}] %{$fg[green]%}✔%{$reset_color%}"
diff --git a/themes/gentoo.zsh-theme b/themes/gentoo.zsh-theme
index cba143d42..ee205d248 100644
--- a/themes/gentoo.zsh-theme
+++ b/themes/gentoo.zsh-theme
@@ -1,4 +1,8 @@
-PROMPT='%(!.%{$fg_bold[red]%}.%{$fg_bold[green]%}%n@)%m %{$fg_bold[blue]%}%(!.%1~.%~) $(git_prompt_info)%#%{$reset_color%} '
+function prompt_char {
+ if [ $UID -eq 0 ]; then echo "#"; else echo $; fi
+}
+
+PROMPT='%(!.%{$fg_bold[red]%}.%{$fg_bold[green]%}%n@)%m %{$fg_bold[blue]%}%(!.%1~.%~) $(git_prompt_info)%_$(prompt_char)%{$reset_color%} '
ZSH_THEME_GIT_PROMPT_PREFIX="("
ZSH_THEME_GIT_PROMPT_SUFFIX=") "
diff --git a/themes/intheloop.zsh-theme b/themes/intheloop.zsh-theme
new file mode 100644
index 000000000..85b4a4d95
--- /dev/null
+++ b/themes/intheloop.zsh-theme
@@ -0,0 +1,24 @@
+# ZSH theme by James Smith (http://loopj.com)
+# A multiline prompt with username, hostname, full path, return status, git branch, git dirty status, git remote status
+
+local return_status="%{$fg[red]%}%(?..⏎)%{$reset_color%}"
+
+local host_color="green"
+if [ -n "$SSH_CLIENT" ]; then
+ local host_color="red"
+fi
+
+PROMPT='
+%{$fg_bold[grey]%}[%{$reset_color%}%{$fg_bold[${host_color}]%}%n@%m%{$reset_color%}%{$fg_bold[grey]%}]%{$reset_color%} %{$fg_bold[blue]%}%10c%{$reset_color%} $(git_prompt_info) $(git_remote_status)
+%{$fg_bold[cyan]%}❯%{$reset_color%} '
+
+
+RPROMPT='${return_status}%{$reset_color%}'
+
+ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[grey]%}(%{$fg[red]%}"
+ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
+ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[grey]%}) %{$fg[yellow]%}⚡%{$reset_color%}"
+ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[grey]%})"
+ZSH_THEME_GIT_PROMPT_BEHIND_REMOTE="%{$fg_bold[magenta]%}↓%{$reset_color%}"
+ZSH_THEME_GIT_PROMPT_AHEAD_REMOTE="%{$fg_bold[magenta]%}↑%{$reset_color%}"
+ZSH_THEME_GIT_PROMPT_DIVERGED_REMOTE="%{$fg_bold[magenta]%}↕%{$reset_color%}" \ No newline at end of file
diff --git a/themes/jnrowe.zsh-theme b/themes/jnrowe.zsh-theme
index 7c8a7082e..bae88f7ab 100644
--- a/themes/jnrowe.zsh-theme
+++ b/themes/jnrowe.zsh-theme
@@ -2,15 +2,14 @@ autoload -U add-zsh-hook
autoload -Uz vcs_info
zstyle ':vcs_info:*' actionformats \
- '%F{5}(%f%s%F{5})%F{3}-%F{5}[%F{2}%b%F{3}|%F{1}%a%F{5}]%f '
-zstyle ':vcs_info:*' formats \
- '%F{2}%s%F{7}:%F{2}(%F{1}%b%F{2})%f '
+ '%F{5}(%f%s%F{5})%F{3}-%F{5}[%F{2}%b%F{3}|%F{1}%a%F{5}]%f '
+zstyle ':vcs_info:*' formats '%F{2}%s%F{7}:%F{2}(%F{1}%b%F{2})%f '
zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat '%b%F{1}:%F{3}%r'
zstyle ':vcs_info:*' enable git
-add-zsh-hook precmd prompt_jnrowe_precmd
+add-zsh-hook precmd prompt_vcs
-prompt_jnrowe_precmd () {
+prompt_vcs () {
vcs_info
if [ "${vcs_info_msg_0_}" = "" ]; then
@@ -24,8 +23,16 @@ prompt_jnrowe_precmd () {
fi
}
+function {
+ if [[ -n "$SSH_CLIENT" ]]; then
+ PROMPT_HOST=" ($HOST)"
+ else
+ PROMPT_HOST=''
+ fi
+}
+
local ret_status="%(?:%{$fg_bold[green]%}Ξ:%{$fg_bold[red]%}%S↑%s%?)"
-PROMPT='${ret_status}%{$fg_bold[green]%}%p %{$fg_bold[yellow]%}%2~ ${vcs_info_msg_0_}${dir_status}%{$reset_color%} '
+PROMPT='${ret_status}%{$fg[blue]%}${PROMPT_HOST}%{$fg_bold[green]%}%p %{$fg_bold[yellow]%}%2~ ${vcs_info_msg_0_}${dir_status}%{$reset_color%} '
# vim: set ft=zsh ts=4 sw=4 et:
diff --git a/themes/jonathan.zsh-theme b/themes/jonathan.zsh-theme
index 2f0c4b917..9f0f30271 100644
--- a/themes/jonathan.zsh-theme
+++ b/themes/jonathan.zsh-theme
@@ -1,3 +1,5 @@
+functions rbenv_prompt_info >& /dev/null || rbenv_prompt_info(){}
+
function theme_precmd {
local TERMWIDTH
(( TERMWIDTH = ${COLUMNS} - 1 ))
diff --git a/themes/junkfood.zsh-theme b/themes/junkfood.zsh-theme
new file mode 100644
index 000000000..57b4070dc
--- /dev/null
+++ b/themes/junkfood.zsh-theme
@@ -0,0 +1,34 @@
+# ------------------------------------------------------------------------
+# Tyler Cipriani
+# oh-my-zsh theme
+# Totally ripped off Dallas theme
+# ------------------------------------------------------------------------
+
+# Grab the current date (%W) and time (%t):
+JUNKFOOD_TIME_="%{$fg_bold[red]%}#%{$fg_bold[white]%}( %{$fg_bold[yellow]%}%W%{$reset_color%}@%{$fg_bold[white]%}%t )( %{$reset_color%}"
+
+# Grab the current machine name
+JUNKFOOD_MACHINE_="%{$fg_bold[blue]%}%m%{$fg[white]%} ):%{$reset_color%}"
+
+# Grab the current username
+JUNKFOOD_CURRENT_USER_="%{$fg_bold[green]%}%n%{$reset_color%}"
+
+# Grab the current filepath, use shortcuts: ~/Desktop
+# Append the current git branch, if in a git repository: ~aw@master
+JUNKFOOD_LOCA_="%{$fg[cyan]%}%~\$(git_prompt_info)%{$reset_color%}"
+
+# For the git prompt, use a white @ and blue text for the branch name
+ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[white]%}@%{$fg_bold[white]%}"
+
+# Close it all off by resetting the color and styles.
+ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
+
+# Do nothing if the branch is clean (no changes).
+ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg_bold[green]%}✔"
+
+# Add 3 cyan ✗s if this branch is diiirrrty! Dirty branch!
+ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg_bold[red]%}✗✗✗"
+
+# Put it all together!
+PROMPT="$JUNKFOOD_TIME_$JUNKFOOD_CURRENT_USER_@$JUNKFOOD_MACHINE_$JUNKFOOD_LOCA_
+ "
diff --git a/themes/kafeitu.zsh-theme b/themes/kafeitu.zsh-theme
new file mode 100644
index 000000000..c4720b24d
--- /dev/null
+++ b/themes/kafeitu.zsh-theme
@@ -0,0 +1,6 @@
+PROMPT='%{$fg_bold[red]%}➜ %{$fg_bold[green]%}%n%{$fg[cyan]%}@%{$fg_bold[green]%}%m %{$fg_bold[green]%}%p %{$fg[cyan]%}%~ %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%} % %{$reset_color%}'
+
+ZSH_THEME_GIT_PROMPT_PREFIX="git:(%{$fg[red]%}"
+ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
+ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}) %{$fg[yellow]%}✗%{$reset_color%}"
+ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[blue]%})"
diff --git a/themes/minimal.zsh-theme b/themes/minimal.zsh-theme
index ee3ab6b22..a2a16031f 100644
--- a/themes/minimal.zsh-theme
+++ b/themes/minimal.zsh-theme
@@ -1,15 +1,18 @@
ZSH_THEME_GIT_PROMPT_PREFIX="%{$reset_color%}%{$fg[white]%}["
-ZSH_THEME_GIT_PROMPT_SUFFIX="]%{$reset_color%}"
-ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[red]%}●%{$reset_color%}"
-ZSH_THEME_GIT_PROMPT_CLEAN=""
+ZSH_THEME_GIT_PROMPT_SUFFIX=""
+ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[red]%}●%{$reset_color%}]%{$reset_color%} "
+ZSH_THEME_GIT_PROMPT_CLEAN="]%{$reset_color%} "
+ZSH_THEME_SVN_PROMPT_PREFIX=$ZSH_THEME_GIT_PROMPT_PREFIX
+ZSH_THEME_SVN_PROMPT_SUFFIX=$ZSH_THEME_GIT_PROMPT_SUFFIX
+ZSH_THEME_SVN_PROMPT_DIRTY=$ZSH_THEME_GIT_PROMPT_DIRTY
+ZSH_THEME_SVN_PROMPT_CLEAN=$ZSH_THEME_GIT_PROMPT_CLEAN
-#Customized git status, oh-my-zsh currently does not allow render dirty status before branch
-git_custom_status() {
- local cb=$(current_branch)
- if [ -n "$cb" ]; then
- echo "- $ZSH_THEME_GIT_PROMPT_PREFIX$(current_branch)$(parse_git_dirty)$ZSH_THEME_GIT_PROMPT_SUFFIX"
- fi
+vcs_status() {
+ if [[ ( $(whence in_svn) != "" ) && ( $(in_svn) == 1 ) ]]; then
+ svn_prompt_info
+ else
+ git_prompt_info
+ fi
}
-
-PROMPT='%2~ $(git_custom_status) »%b ' \ No newline at end of file
+PROMPT='%2~ $(vcs_status)»%b ' \ No newline at end of file
diff --git a/themes/mortalscumbag.zsh-theme b/themes/mortalscumbag.zsh-theme
index 7e25b149f..5dbf2e4f6 100644
--- a/themes/mortalscumbag.zsh-theme
+++ b/themes/mortalscumbag.zsh-theme
@@ -46,7 +46,8 @@ function ssh_connection() {
fi
}
-PROMPT=$'\n$(ssh_connection)%{$fg_bold[green]%}%n@%m%{$reset_color%}$(my_git_prompt) : %~\n%# '
+local ret_status="%(?:%{$fg_bold[green]%}:%{$fg_bold[red]%})%?%{$reset_color%}"
+PROMPT=$'\n$(ssh_connection)%{$fg_bold[green]%}%n@%m%{$reset_color%}$(my_git_prompt) : %~\n[${ret_status}] %# '
ZSH_THEME_PROMPT_RETURNCODE_PREFIX="%{$fg_bold[red]%}"
ZSH_THEME_GIT_PROMPT_PREFIX=" $fg[white]‹ %{$fg_bold[yellow]%}"
diff --git a/themes/nebirhos.zsh-theme b/themes/nebirhos.zsh-theme
index c5864d9b8..a5a226b69 100644
--- a/themes/nebirhos.zsh-theme
+++ b/themes/nebirhos.zsh-theme
@@ -6,7 +6,7 @@ if [ -e ~/.rvm/bin/rvm-prompt ]; then
RUBY_PROMPT_="%{$fg_bold[blue]%}rvm:(%{$fg[green]%}\$(~/.rvm/bin/rvm-prompt s i v g)%{$fg_bold[blue]%})%{$reset_color%} "
else
if which rbenv &> /dev/null; then
- RUBY_PROMPT_="%{$fg_bold[blue]%}rvm:(%{$fg[green]%}\$(rbenv version | sed -e 's/ (set.*$//')%{$fg_bold[blue]%})%{$reset_color%} "
+ RUBY_PROMPT_="%{$fg_bold[blue]%}rbenv:(%{$fg[green]%}\$(rbenv version | sed -e 's/ (set.*$//')%{$fg_bold[blue]%})%{$reset_color%} "
fi
fi
diff --git a/themes/norm.zsh-theme b/themes/norm.zsh-theme
index 5f0ad03ee..13077ccf5 100644
--- a/themes/norm.zsh-theme
+++ b/themes/norm.zsh-theme
@@ -1,4 +1,4 @@
-PROMPT='%{$fg[yellow]%}λ %{$fg[green]%}%c %{$fg[yellow]%}→ $(git_prompt_info)%{$reset_color%}'
+PROMPT='%{$fg[yellow]%}λ %m %{$fg[green]%}%c %{$fg[yellow]%}→ $(git_prompt_info)%{$reset_color%}'
ZSH_THEME_GIT_PROMPT_PREFIX="λ %{$fg[blue]%}git %{$fg[red]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$fg[yellow]%} → %{$reset_color%}"
diff --git a/themes/simonoff.zsh-theme b/themes/simonoff.zsh-theme
new file mode 100644
index 000000000..fb4d32e24
--- /dev/null
+++ b/themes/simonoff.zsh-theme
@@ -0,0 +1,141 @@
+# Prompt
+#
+# Below are the color init strings for the basic file types. A color init
+# string consists of one or more of the following numeric codes:
+# Attribute codes:
+# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
+# Text color codes:
+# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
+# Background color codes:
+# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
+function precmd {
+
+ local TERMWIDTH
+ (( TERMWIDTH = ${COLUMNS} - 1 ))
+
+
+ ###
+ # Truncate the path if it's too long.
+
+ PR_FILLBAR=""
+ PR_PWDLEN=""
+
+ local promptsize=${#${(%):---(%n@%M:%l)---()}}
+ local pwdsize=${#${(%):-%~}}
+ local gitbranch="$(git_prompt_info)"
+ local rvmprompt="$(rvm_prompt_info)"
+ local gitbranchsize=${#${gitbranch:-''}}
+ local rvmpromptsize=${#${rvmprompt:-''}}
+
+ if [[ "$promptsize + $pwdsize + $rvmpromptsize + $gitbranchsize" -gt $TERMWIDTH ]]; then
+ ((PR_PWDLEN=$TERMWIDTH - $promptsize))
+ else
+ PR_FILLBAR="\${(l.(($TERMWIDTH - ($promptsize + $pwdsize + $rvmpromptsize + $gitbranchsize)))..${PR_SPACE}.)}"
+ fi
+}
+
+
+setopt extended_glob
+
+preexec () {
+ if [[ "$TERM" == "screen" ]]; then
+ local CMD=${1[(wr)^(*=*|sudo|-*)]}
+ echo -n "\ek$CMD\e\\"
+ fi
+
+ if [[ "$TERM" == "xterm" ]]; then
+ print -Pn "\e]0;$1\a"
+ fi
+
+ if [[ "$TERM" == "rxvt" ]]; then
+ print -Pn "\e]0;$1\a"
+ fi
+
+}
+
+setprompt () {
+###
+# Need this so the prompt will work.
+
+ setopt prompt_subst
+
+
+###
+# See if we can use colors.
+
+ autoload colors zsh/terminfo
+ if [[ "$terminfo[colors]" -ge 8 ]]; then
+ colors
+ fi
+ for color in RED GREEN YELLOW BLUE MAGENTA CYAN WHITE; do
+ eval PR_$color='%{$terminfo[bold]$fg[${(L)color}]%}'
+ eval PR_LIGHT_$color='%{$fg[${(L)color}]%}'
+ (( count = $count + 1 ))
+ done
+ PR_NO_COLOUR="%{$terminfo[sgr0]%}"
+
+
+###
+# See if we can use extended characters to look nicer.
+
+ typeset -A altchar
+# set -A altchar "${(s..)terminfo[acsc]}"
+ PR_SET_CHARSET="%{$terminfo[enacs]%}"
+ PR_HBAR=${altchar[q]:--}
+ PR_ULCORNER=${altchar[l]:--}
+ PR_LLCORNER=${altchar[m]:--}
+ PR_LRCORNER=${altchar[j]:--}
+ PR_URCORNER=${altchar[k]:--}
+
+ ###
+ # Modify Git prompt
+ ZSH_THEME_GIT_PROMPT_PREFIX=" ["
+ ZSH_THEME_GIT_PROMPT_SUFFIX="]"
+ ###
+ # Modify RVM prompt
+ ZSH_THEME_RVM_PROMPT_PREFIX=" ["
+ ZSH_THEME_RVM_PROMPT_SUFFIX="]"
+
+
+###
+# Decide if we need to set titlebar text.
+
+ case $TERM in
+ xterm*|*rxvt*)
+ PR_TITLEBAR=$'%{\e]0;%(!.-=*[ROOT]*=- | .)%n@%M:%~ $(git_prompt_info) $(rvm_prompt_info) | ${COLUMNS}x${LINES} | %y\a%}'
+ ;;
+ screen)
+ PR_TITLEBAR=$'%{\e_screen \005 (\005t) | %(!.-=[ROOT]=- | .)%n@%m:%~ | ${COLUMNS}x${LINES} | %y\e\\%}'
+ ;;
+ *)
+ PR_TITLEBAR=''
+ ;;
+ esac
+
+
+###
+# Decide whether to set a screen title
+ if [[ "$TERM" == "screen" ]]; then
+ PR_STITLE=$'%{\ekzsh\e\\%}'
+ else
+ PR_STITLE=''
+ fi
+
+###
+# Finally, the prompt.
+#
+ PROMPT='$PR_SET_CHARSET$PR_STITLE${(e)PR_TITLEBAR}\
+$PR_RED$PR_HBAR<\
+$PR_BLUE%(!.$PR_RED%SROOT%s.%n)$PR_GREEN@$PR_BLUE%M:$PR_GREEN%$PR_PWDLEN<...<%~$PR_CYAN$(git_prompt_info)$(rvm_prompt_info)\
+$PR_RED>$PR_HBAR$PR_SPACE${(e)PR_FILLBAR}\
+$PR_RED$PR_HBAR<\
+$PR_GREEN%l$PR_RED>$PR_HBAR\
+
+$PR_RED$PR_HBAR<\
+%(?..$PR_LIGHT_RED%?$PR_BLUE:)\
+$PR_LIGHT_BLUE%(!.$PR_RED.$PR_WHITE)%#$PR_RED>$PR_HBAR\
+$PR_NO_COLOUR '
+
+}
+
+setprompt
diff --git a/themes/steeef.zsh-theme b/themes/steeef.zsh-theme
index a2583b028..312229e9f 100644
--- a/themes/steeef.zsh-theme
+++ b/themes/steeef.zsh-theme
@@ -81,7 +81,7 @@ add-zsh-hook chpwd steeef_chpwd
function steeef_precmd {
if [[ -n "$PR_GIT_UPDATE" ]] ; then
# check for untracked files or updated submodules, since vcs_info doesn't
- if [[ ! -z $(git ls-files --other --exclude-standard 2> /dev/null) ]]; then
+ if git ls-files --other --exclude-standard --directory 2> /dev/null | grep -q "."; then
PR_GIT_UPDATE=1
FMT_BRANCH="(%{$turquoise%}%b%u%c%{$hotpink%}●${PR_RST})"
else
diff --git a/themes/terminalparty.zsh-theme b/themes/terminalparty.zsh-theme
index 73653aca8..216ce37eb 100644
--- a/themes/terminalparty.zsh-theme
+++ b/themes/terminalparty.zsh-theme
@@ -2,7 +2,7 @@ PROMPT='%{$fg[green]%} %% '
# RPS1='%{$fg[blue]%}%~%{$reset_color%} '
RPS1='%{$fg[white]%}%2~$(git_prompt_info) %{$fg_bold[blue]%}%m%{$reset_color%}'
-ZSH_THEME_GIT_PROMPT_PREFIX=" (%{$fg[yellow]%}"
+ZSH_THEME_GIT_PROMPT_PREFIX=" %{$fg[yellow]%}("
ZSH_THEME_GIT_PROMPT_SUFFIX=")%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_CLEAN=""
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[red]%} ⚡%{$fg[yellow]%}"
diff --git a/themes/tjkirch_mod.zsh-theme b/themes/tjkirch_mod.zsh-theme
new file mode 100644
index 000000000..1b206a7e1
--- /dev/null
+++ b/themes/tjkirch_mod.zsh-theme
@@ -0,0 +1,13 @@
+ZSH_THEME_GIT_PROMPT_PREFIX=" %{$fg[green]%}"
+ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
+ZSH_THEME_GIT_PROMPT_DIRTY=" %{$fg[red]%}⚡"
+ZSH_THEME_GIT_PROMPT_CLEAN=""
+
+function prompt_char {
+ if [ $UID -eq 0 ]; then echo "%{$fg[red]%}#%{$reset_color%}"; else echo $; fi
+}
+
+PROMPT='%(?,,%{$fg[red]%}FAIL: $?%{$reset_color%}
+)%{$fg[magenta]%}%n%{$reset_color%}@%{$fg[yellow]%}%m%{$reset_color%}: %{$fg_bold[blue]%}%~%{$reset_color%}$(git_prompt_info) %_$(prompt_char) '
+
+RPROMPT='%{$fg[green]%}[%*]%{$reset_color%}'
diff --git a/tools/check_for_upgrade.sh b/tools/check_for_upgrade.sh
index 524aa509d..581f03a07 100644
--- a/tools/check_for_upgrade.sh
+++ b/tools/check_for_upgrade.sh
@@ -14,6 +14,12 @@ function _upgrade_zsh() {
_update_zsh_update
}
+epoch_target=$UPDATE_ZSH_DAYS
+if [[ -z "$epoch_target" ]]; then
+ # Default to old behavior
+ epoch_target=13
+fi
+
if [ -f ~/.zsh-update ]
then
. ~/.zsh-update
@@ -23,7 +29,7 @@ then
fi
epoch_diff=$(($(_current_epoch) - $LAST_EPOCH))
- if [ $epoch_diff -gt 6 ]
+ if [ $epoch_diff -gt $epoch_target ]
then
if [ "$DISABLE_UPDATE_PROMPT" = "true" ]
then
@@ -32,9 +38,10 @@ then
echo "[Oh My Zsh] Would you like to check for updates?"
echo "Type Y to update oh-my-zsh: \c"
read line
- if [ "$line" = Y ] || [ "$line" = y ]
- then
+ if [ "$line" = Y ] || [ "$line" = y ]; then
_upgrade_zsh
+ else
+ _update_zsh_update
fi
fi
fi
diff --git a/tools/install.sh b/tools/install.sh
index aedb706da..41f83e354 100755
--- a/tools/install.sh
+++ b/tools/install.sh
@@ -5,14 +5,16 @@ then
fi
echo "\033[0;34mCloning Oh My Zsh...\033[0m"
-/usr/bin/env git clone https://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
+hash git >/dev/null && /usr/bin/env git clone https://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh || {
+ echo "git not installed"
+ exit
+}
echo "\033[0;34mLooking for an existing zsh config...\033[0m"
if [ -f ~/.zshrc ] || [ -h ~/.zshrc ]
then
- echo "\033[0;33mFound ~/.zshrc.\033[0m \033[0;32]Backing up to ~/.zshrc.pre-oh-my-zsh\033[0m";
- cp ~/.zshrc ~/.zshrc.pre-oh-my-zsh;
- rm ~/.zshrc;
+ echo "\033[0;33mFound ~/.zshrc.\033[0m \033[0;32mBacking up to ~/.zshrc.pre-oh-my-zsh\033[0m";
+ mv ~/.zshrc ~/.zshrc.pre-oh-my-zsh;
fi
echo "\033[0;34mUsing the Oh My Zsh template file and adding it to ~/.zshrc\033[0m"
diff --git a/tools/uninstall.sh b/tools/uninstall.sh
index 8ff583322..41d601576 100644
--- a/tools/uninstall.sh
+++ b/tools/uninstall.sh
@@ -4,12 +4,20 @@ then
rm -rf ~/.oh-my-zsh
fi
-echo "Looking for an existing zsh config..."
+echo "Looking for original zsh config..."
if [ -f ~/.zshrc.pre-oh-my-zsh ] || [ -h ~/.zshrc.pre-oh-my-zsh ]
then
- echo "Found ~/.zshrc. Backing up to ~/.zshrc.pre-oh-my-zsh";
- rm ~/.zshrc;
- cp ~/.zshrc.pre-oh-my-zsh ~/.zshrc;
+ echo "Found ~/.zshrc.pre-oh-my-zsh -- Restoring to ~/.zshrc";
+
+ if [ -f ~/.zshrc ] || [ -h ~/.zshrc ]
+ then
+ ZSHRC_SAVE=".zshrc.omz-uninstalled-`date +%Y%m%d%H%M%S`";
+ echo "Found ~/.zshrc -- Renaming to ~/${ZSHRC_SAVE}";
+ mv ~/.zshrc ~/${ZSHRC_SAVE};
+ fi
+
+ mv ~/.zshrc.pre-oh-my-zsh ~/.zshrc;
+
source ~/.zshrc;
else
echo "Switching back to bash"
@@ -17,4 +25,4 @@ else
source /etc/profile
fi
-echo "Thanks for trying out Oh My Zsh. It's been uninstalled." \ No newline at end of file
+echo "Thanks for trying out Oh My Zsh. It's been uninstalled."