summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--oh-my-zsh.sh15
-rw-r--r--plugins/chruby/chruby.plugin.zsh99
-rw-r--r--plugins/heroku/_heroku6
-rw-r--r--plugins/pass/_pass2
-rw-r--r--plugins/pip/_pip4
-rw-r--r--plugins/pip/pip.plugin.zsh78
-rw-r--r--plugins/pod/_pod16
-rw-r--r--plugins/pyenv/pyenv.plugin.zsh31
-rw-r--r--plugins/terminalapp/terminalapp.plugin.zsh2
-rwxr-xr-xplugins/wd2/wd2/wd.plugin.zsh9
-rwxr-xr-xplugins/wd2/wd2/wd.sh201
-rw-r--r--themes/agnoster.zsh-theme64
12 files changed, 475 insertions, 52 deletions
diff --git a/oh-my-zsh.sh b/oh-my-zsh.sh
index 15c1dce44..2ae07668c 100644
--- a/oh-my-zsh.sh
+++ b/oh-my-zsh.sh
@@ -1,6 +1,5 @@
# Check for updates on initial load...
-if [ "$DISABLE_AUTO_UPDATE" != "true" ]
-then
+if [ "$DISABLE_AUTO_UPDATE" != "true" ]; then
/usr/bin/env ZSH=$ZSH DISABLE_UPDATE_PROMPT=$DISABLE_UPDATE_PROMPT zsh $ZSH/tools/check_for_upgrade.sh
fi
@@ -69,8 +68,7 @@ done
unset config_file
# Load the theme
-if [ "$ZSH_THEME" = "random" ]
-then
+if [ "$ZSH_THEME" = "random" ]; then
themes=($ZSH/themes/*zsh-theme)
N=${#themes[@]}
((N=(RANDOM%N)+1))
@@ -78,13 +76,10 @@ then
source "$RANDOM_THEME"
echo "[oh-my-zsh] Random theme '$RANDOM_THEME' loaded..."
else
- if [ ! "$ZSH_THEME" = "" ]
- then
- if [ -f "$ZSH_CUSTOM/$ZSH_THEME.zsh-theme" ]
- then
+ if [ ! "$ZSH_THEME" = "" ]; then
+ if [ -f "$ZSH_CUSTOM/$ZSH_THEME.zsh-theme" ]; then
source "$ZSH_CUSTOM/$ZSH_THEME.zsh-theme"
- elif [ -f "$ZSH_CUSTOM/themes/$ZSH_THEME.zsh-theme" ]
- then
+ elif [ -f "$ZSH_CUSTOM/themes/$ZSH_THEME.zsh-theme" ]; then
source "$ZSH_CUSTOM/themes/$ZSH_THEME.zsh-theme"
else
source "$ZSH/themes/$ZSH_THEME.zsh-theme"
diff --git a/plugins/chruby/chruby.plugin.zsh b/plugins/chruby/chruby.plugin.zsh
new file mode 100644
index 000000000..2a2c80cf6
--- /dev/null
+++ b/plugins/chruby/chruby.plugin.zsh
@@ -0,0 +1,99 @@
+#
+# INSTRUCTIONS
+#
+# With either a manual or brew installed chruby things should just work.
+#
+# If you'd prefer to specify an explicit path to load chruby from
+# you can set variables like so:
+#
+# zstyle :omz:plugins:chruby path /local/path/to/chruby.sh
+# zstyle :omz:plugins:chruby auto /local/path/to/auto.sh
+#
+# TODO
+# - autodetermine correct source path on non OS X systems
+# - completion if ruby-install exists
+
+# rvm and rbenv plugins also provide this alias
+alias rubies='chruby'
+
+local _chruby_path
+local _chruby_auto
+
+_homebrew-installed() {
+ whence brew &> /dev/null
+}
+
+_chruby-from-homebrew-installed() {
+ brew --prefix chruby &> /dev/null
+}
+
+_ruby-build_installed() {
+ whence ruby-build &> /dev/null
+}
+
+_ruby-install-installed() {
+ whence ruby-install &> /dev/null
+}
+
+# Simple definition completer for ruby-build
+if _ruby-build_installed; then
+ _ruby-build() { compadd $(ruby-build --definitions) }
+ compdef _ruby-build ruby-build
+fi
+
+_source_from_omz_settings() {
+ zstyle -s :omz:plugins:chruby path _chruby_path
+ zstyle -s :omz:plugins:chruby auto _chruby_auto
+
+ if _chruby_path && [[ -r _chruby_path ]]; then
+ source ${_chruby_path}
+ fi
+
+ if _chruby_auto && [[ -r _chruby_auto ]]; then
+ source ${_chruby_auto}
+ fi
+}
+
+_chruby_dirs() {
+ chrubydirs=($HOME/.rubies/ $PREFIX/opt/rubies)
+ for dir in chrubydirs; do
+ if [[ -d $dir ]]; then
+ RUBIES+=$dir
+ fi
+ done
+}
+
+if _homebrew-installed && _chruby-from-homebrew-installed ; then
+ source $(brew --prefix chruby)/share/chruby/chruby.sh
+ source $(brew --prefix chruby)/share/chruby/auto.sh
+ _chruby_dirs
+elif [[ -r "/usr/local/share/chruby/chruby.sh" ]] ; then
+ source /usr/local/share/chruby/chruby.sh
+ source /usr/local/share/chruby/auto.sh
+ _chruby_dirs
+else
+ _source_from_omz_settings
+ _chruby_dirs
+fi
+
+function ensure_chruby() {
+ $(whence chruby)
+}
+
+function current_ruby() {
+ local _ruby
+ _ruby="$(chruby |grep \* |tr -d '* ')"
+ if [[ $(chruby |grep -c \*) -eq 1 ]]; then
+ echo ${_ruby}
+ else
+ echo "system"
+ fi
+}
+
+function chruby_prompt_info() {
+ echo "$(current_ruby)"
+}
+
+# complete on installed rubies
+_chruby() { compadd $(chruby | tr -d '* ') }
+compdef _chruby chruby
diff --git a/plugins/heroku/_heroku b/plugins/heroku/_heroku
index a95c38647..46663303a 100644
--- a/plugins/heroku/_heroku
+++ b/plugins/heroku/_heroku
@@ -23,8 +23,10 @@ _1st_arguments=(
"auth\:login":"log in with your heroku credentials"
"auth\:logout":"clear local authentication credentials"
"config":"display the config vars for an app"
- "config\:add":"add one or more config vars"
- "config\:remove":"remove a config var"
+ "config\:pull":"pull heroku config vars down to the local environment"
+ "config\:push":"push local config vars to heroku"
+ "config\:set":"set one or more config vars"
+ "config\:unset":"unset one or more config vars"
"db\:push":"push local data up to your app"
"db\:pull":"pull heroku data down into your local database"
"domains":"list custom domains for an app"
diff --git a/plugins/pass/_pass b/plugins/pass/_pass
index f6c1a6c4b..d8ec38828 100644
--- a/plugins/pass/_pass
+++ b/plugins/pass/_pass
@@ -101,7 +101,7 @@ _pass_cmd_show () {
_pass_complete_entries_helper () {
local IFS=$'\n'
local prefix="${PASSWORD_STORE_DIR:-$HOME/.password-store}"
- _values -C 'passwords' $(find "$prefix" \( -name .git -o -name .gpg-id \) -prune -o $@ -print | sed -e "s#${prefix}.##" -e 's#\.gpg##' | sort)
+ _values -C 'passwords' $(find -L "$prefix" \( -name .git -o -name .gpg-id \) -prune -o $@ -print | sed -e "s#${prefix}.##" -e 's#\.gpg##' | sort)
}
_pass_complete_entries_with_subdirs () {
diff --git a/plugins/pip/_pip b/plugins/pip/_pip
index fb8765c7e..967da48ca 100644
--- a/plugins/pip/_pip
+++ b/plugins/pip/_pip
@@ -6,8 +6,8 @@
_pip_all() {
# we cache the list of packages (originally from the macports plugin)
if (( ! $+piplist )); then
- echo -n " (caching package index...)"
- piplist=($(pip search * | cut -d ' ' -f 1 | tr '[A-Z]' '[a-z]'))
+ zsh-pip-cache-packages
+ piplist=($(cat $ZSH_PIP_CACHE_FILE))
fi
}
diff --git a/plugins/pip/pip.plugin.zsh b/plugins/pip/pip.plugin.zsh
new file mode 100644
index 000000000..b5433ae9d
--- /dev/null
+++ b/plugins/pip/pip.plugin.zsh
@@ -0,0 +1,78 @@
+# Usage:
+# Just add pip to your installed plugins.
+
+# If you would like to change the cheeseshops used for autocomplete set
+# ZSH_PIP_INDEXES in your zshrc. If one of your indexes are bogus you won't get
+# any kind of error message, pip will just not autocomplete from them. Double
+# check!
+#
+# If you would like to clear your cache, go ahead and do a
+# "zsh-pip-clear-cache".
+
+ZSH_PIP_CACHE_FILE=~/.pip/zsh-cache
+ZSH_PIP_INDEXES=(https://pypi.python.org/simple/)
+
+zsh-pip-clear-cache() {
+ rm $ZSH_PIP_CACHE_FILE
+ unset piplist
+}
+
+zsh-pip-clean-packages() {
+ sed -n '/<a href/ s/.*>\([^<]\{1,\}\).*/\1/p'
+}
+
+zsh-pip-cache-packages() {
+ if [[ ! -d ${ZSH_PIP_CACHE_FILE:h} ]]; then
+ mkdir -p ${ZSH_PIP_CACHE_FILE:h}
+ fi
+
+ if [[ ! -f $ZSH_PIP_CACHE_FILE ]]; then
+ echo -n "(...caching package index...)"
+ tmp_cache=/tmp/zsh_tmp_cache
+ for index in $ZSH_PIP_INDEXES ; do
+ # well... I've already got two problems
+ curl $index 2>/dev/null | \
+ zsh-pip-clean-packages \
+ >> $tmp_cache
+ done
+ sort $tmp_cache | uniq | tr '\n' ' ' > $ZSH_PIP_CACHE_FILE
+ rm $tmp_cache
+ fi
+}
+
+# A test function that validates the regex against known forms of the simple
+# index. If you modify the regex to make it work for you, you should add a test
+# case in here and make sure that your changes don't break things for someone
+# else.
+zsh-pip-test-clean-packages() {
+ local expected
+ local actual
+ expected="0x10c-asm
+1009558_nester"
+
+ actual=$(echo -n "<html><head><title>Simple Index</title><meta name=\"api-version\" value=\"2\" /></head><body>
+<a href='0x10c-asm'>0x10c-asm</a><br/>
+<a href='1009558_nester'>1009558_nester</a><br/>
+</body></html>" | zsh-pip-clean-packages)
+
+ if [[ $actual != $expected ]] ; then
+ echo -e "python's simple index is broken:\n$actual\n !=\n$expected"
+ else
+ echo "python's simple index is fine"
+ fi
+
+ actual=$(echo -n '<html>
+ <head>
+ <title>Simple Package Index</title>
+ </head>
+ <body>
+ <a href="0x10c-asm">0x10c-asm</a><br/>
+ <a href="1009558_nester">1009558_nester</a><br/>
+</body></html>' | zsh-pip-clean-packages)
+
+ if [[ $actual != $expected ]] ; then
+ echo -e "the djangopypi2 index is broken:\n$actual\n !=\n$expected"
+ else
+ echo "the djangopypi2 index is fine"
+ fi
+}
diff --git a/plugins/pod/_pod b/plugins/pod/_pod
index 563fa5e66..8c0f4460f 100644
--- a/plugins/pod/_pod
+++ b/plugins/pod/_pod
@@ -3,18 +3,19 @@
# -----------------------------------------------------------------------------
# FILE: _pod
-# DESCRIPTION: Cocoapods autocomplete plugin for Oh-My-Zsh
+# DESCRIPTION: Cocoapods (0.27.1) autocomplete plugin for Oh-My-Zsh
# http://cocoapods.org
# AUTHOR: Alexandre Joly (alexandre.joly@mekanics.ch)
# GITHUB: https://github.com/mekanics
# TWITTER: @jolyAlexandre
-# VERSION: 0.0.1
+# VERSION: 0.0.3
# LICENSE: MIT
# -----------------------------------------------------------------------------
local -a _1st_arguments
_1st_arguments=(
- 'help:Show help for the given command.'
+ 'help:Show help for the given command'
+ 'init:Generate a Podfile for the current directory'
'install:Install project dependencies'
'ipc:Inter-process communication'
'list:List pods'
@@ -32,6 +33,7 @@ local -a _repo_arguments
_repo_arguments=(
'add:Add a spec repo'
'lint:Validates all specs in a repo'
+ 'remove:Remove a spec repo.'
'update:Update a spec repo'
)
@@ -158,7 +160,7 @@ __first_command_list ()
}
__repo_list() {
- _wanted application expl 'repo' compadd $(command ls -1 ~/.cocoapods 2>/dev/null | sed -e 's/ /\\ /g')
+ _wanted application expl 'repo' compadd $(command ls -1 ~/.cocoapods/repos 2>/dev/null | sed -e 's/ /\\ /g')
}
__pod-repo() {
@@ -193,6 +195,12 @@ __pod-repo() {
(add)
_arguments \
$_inherited_options
+
+ (remove)
+ _arguments \
+ $_inherited_options \
+ ':feature:__repo_list'
+ ;;
esac
;;
esac
diff --git a/plugins/pyenv/pyenv.plugin.zsh b/plugins/pyenv/pyenv.plugin.zsh
new file mode 100644
index 000000000..b3dc7aa17
--- /dev/null
+++ b/plugins/pyenv/pyenv.plugin.zsh
@@ -0,0 +1,31 @@
+_homebrew-installed() {
+ type brew &> /dev/null
+}
+
+_pyenv-from-homebrew-installed() {
+ brew --prefix pyenv &> /dev/null
+}
+
+FOUND_PYENV=0
+pyenvdirs=("$HOME/.pyenv" "/usr/local/pyenv" "/opt/pyenv")
+if _homebrew-installed && _pyenv-from-homebrew-installed ; then
+ pyenvdirs=($(brew --prefix pyenv) "${pyenvdirs[@]}")
+fi
+
+for pyenvdir in "${pyenvdirs[@]}" ; do
+ if [ -d $pyenvdir/bin -a $FOUND_PYENV -eq 0 ] ; then
+ FOUND_PYENV=1
+ export PYENV_ROOT=$pyenvdir
+ export PATH=${pyenvdir}/bin:$PATH
+ eval "$(pyenv init --no-rehash - zsh)"
+
+ function pyenv_prompt_info() {
+ echo "$(pyenv version-name)"
+ }
+ fi
+done
+unset pyenvdir
+
+if [ $FOUND_PYENV -eq 0 ] ; then
+ function pyenv_prompt_info() { echo "system: $(python -V 2>&1 | cut -f 2 -d ' ')" }
+fi
diff --git a/plugins/terminalapp/terminalapp.plugin.zsh b/plugins/terminalapp/terminalapp.plugin.zsh
index 2249b1e2f..6e47ee188 100644
--- a/plugins/terminalapp/terminalapp.plugin.zsh
+++ b/plugins/terminalapp/terminalapp.plugin.zsh
@@ -32,7 +32,7 @@ if [[ "$TERM_PROGRAM" == "Apple_Terminal" ]] && [[ -z "$INSIDE_EMACS" ]]; then
# Register the function so it is called whenever the working
# directory changes.
autoload add-zsh-hook
- add-zsh-hook chpwd update_terminal_cwd
+ add-zsh-hook precmd update_terminal_cwd
# Tell the terminal about the initial directory.
update_terminal_cwd
diff --git a/plugins/wd2/wd2/wd.plugin.zsh b/plugins/wd2/wd2/wd.plugin.zsh
new file mode 100755
index 000000000..e0846ffd9
--- /dev/null
+++ b/plugins/wd2/wd2/wd.plugin.zsh
@@ -0,0 +1,9 @@
+#!/bin/zsh
+
+# WARP
+# ====
+# oh-my-zsh plugin
+#
+# @github.com/mfaerevaag/wd
+
+alias wd='. ~/.oh-my-zsh/plugins/wd/wd.sh'
diff --git a/plugins/wd2/wd2/wd.sh b/plugins/wd2/wd2/wd.sh
new file mode 100755
index 000000000..7852028c0
--- /dev/null
+++ b/plugins/wd2/wd2/wd.sh
@@ -0,0 +1,201 @@
+#!/bin/zsh
+
+# WARP
+# ====
+# Jump to custom directories in terminal
+# because `cd` takes too long...
+#
+# @github.com/mfaerevaag/wd
+
+
+## variables
+CONFIG=$HOME/.warprc
+
+## colors
+BLUE="\033[96m"
+GREEN="\033[92m"
+YELLOW="\033[93m"
+RED="\033[91m"
+NOC="\033[m"
+
+
+## load warp points
+typeset -A points
+while read line
+do
+ arr=(${(s,:,)line})
+ key=${arr[1]}
+ val=${arr[2]}
+
+ points[$key]=$val
+done < $CONFIG
+
+
+## functions
+# prepended wd_ to not conflict with your environment (no sub shell)
+
+wd_warp()
+{
+ if [[ $1 =~ "^\.+$" ]]
+ then
+ if [[ $#1 < 2 ]]
+ then
+ wd_print_msg $YELLOW "Warping to current directory?"
+ else
+ (( n = $#1 - 1 ))
+ wd_print_msg $BLUE "Warping..."
+ cd -$n > /dev/null
+ fi
+ elif [[ ${points[$1]} != "" ]]
+ then
+ wd_print_msg $BLUE "Warping..."
+ cd ${points[$1]}
+ else
+ wd_print_msg $RED "Unkown warp point '$1'"
+ fi
+}
+
+wd_add()
+{
+ if [[ $1 =~ "^\.+$" ]]
+ then
+ wd_print_msg $RED "Illeagal warp point (see README)."
+ elif [[ ${points[$1]} == "" ]] || $2
+ then
+ wd_remove $1 > /dev/null
+ print "$1:$PWD" >> $CONFIG
+ wd_print_msg $GREEN "Warp point added"
+ else
+ wd_print_msg $YELLOW "Warp point '$1' alredy exists. Use 'add!' to overwrite."
+ fi
+}
+
+wd_remove()
+{
+ if [[ ${points[$1]} != "" ]]
+ then
+ if wd_tmp=`sed "/^$1:/d" $CONFIG`
+ then
+ echo $wd_tmp > $CONFIG
+ wd_print_msg $GREEN "Warp point removed"
+ else
+ wd_print_msg $RED "Warp point unsuccessfully removed. Sorry!"
+ fi
+ else
+ wd_print_msg $RED "Warp point was not found"
+ fi
+}
+
+wd_show()
+{
+ wd_print_msg $BLUE "Warp points to current directory:"
+ wd_list_all | grep $PWD$
+}
+
+wd_list_all()
+{
+ wd_print_msg $BLUE "All warp points:"
+ while read line
+ do
+ if [[ $line != "" ]]
+ then
+ arr=(${(s,:,)line})
+ key=${arr[1]}
+ val=${arr[2]}
+
+ print "\t" $key "\t -> \t" $val
+ fi
+ done < $CONFIG
+}
+
+wd_print_msg()
+{
+ if [[ $1 == "" || $2 == "" ]]
+ then
+ print " $RED*$NOC Could not print message. Sorry!"
+ else
+ print " $1*$NOC $2"
+ fi
+}
+
+wd_print_usage()
+{
+ print "Usage: wd [add|-a|--add] [rm|-r|--remove] [ls|-l|--list] <point>"
+ print "\nCommands:"
+ print "\t add \t Adds the current working directory to your warp points"
+ print "\t add! \t Overwrites existing warp point"
+ print "\t remove Removes the given warp point"
+ print "\t list \t Outputs all stored warp points"
+ print "\t help \t Show this extremely helpful text"
+}
+
+
+## run
+
+# get opts
+args=`getopt -o a:r:lhs -l add:,remove:,list,help,show -- $*`
+
+if [[ $? -ne 0 || $#* -eq 0 ]]
+then
+ wd_print_usage
+else
+ # can't exit, as this would exit the excecuting shell
+ # e.i. your terminal
+
+ #set -- $args # WTF
+
+ for i
+ do
+ case "$i"
+ in
+ -a|--add|add)
+ wd_add $2 false
+ shift
+ shift
+ break
+ ;;
+ -a!|--add!|add!)
+ wd_add $2 true
+ shift
+ shift
+ break
+ ;;
+ -r|--remove|rm)
+ wd_remove $2
+ shift
+ shift
+ break
+ ;;
+ -l|--list|ls)
+ wd_list_all
+ shift
+ break
+ ;;
+ -h|--help|help)
+ wd_print_usage
+ shift
+ break
+ ;;
+ -s|--show|show)
+ wd_show
+ shift
+ break
+ ;;
+ *)
+ wd_warp $i
+ shift
+ break
+ ;;
+ --)
+ shift; break;;
+ esac
+ done
+fi
+
+
+## garbage collection
+# if not, next time warp will pick up variables from this run
+# remember, there's no sub shell
+points=""
+args=""
+unhash -d val &> /dev/null # fixes issue #1
diff --git a/themes/agnoster.zsh-theme b/themes/agnoster.zsh-theme
index 762f63c5b..01cdc80e5 100644
--- a/themes/agnoster.zsh-theme
+++ b/themes/agnoster.zsh-theme
@@ -95,38 +95,38 @@ prompt_git() {
}
prompt_hg() {
- local rev status
- if $(hg id >/dev/null 2>&1); then
- if $(hg prompt >/dev/null 2>&1); then
- if [[ $(hg prompt "{status|unknown}") = "?" ]]; then
- # if files are not added
- prompt_segment red white
- st='±'
- elif [[ -n $(hg prompt "{status|modified}") ]]; then
- # if any modification
- prompt_segment yellow black
- st='±'
- else
- # if working copy is clean
- prompt_segment green black
- fi
- echo -n $(hg prompt "☿ {rev}@{branch}") $st
- else
- st=""
- rev=$(hg id -n 2>/dev/null | sed 's/[^-0-9]//g')
- branch=$(hg id -b 2>/dev/null)
- if `hg st | grep -Eq "^\?"`; then
- prompt_segment red black
- st='±'
- elif `hg st | grep -Eq "^(M|A)"`; then
- prompt_segment yellow black
- st='±'
- else
- prompt_segment green black
- fi
- echo -n "☿ $rev@$branch" $st
- fi
- fi
+ local rev status
+ if $(hg id >/dev/null 2>&1); then
+ if $(hg prompt >/dev/null 2>&1); then
+ if [[ $(hg prompt "{status|unknown}") = "?" ]]; then
+ # if files are not added
+ prompt_segment red white
+ st='±'
+ elif [[ -n $(hg prompt "{status|modified}") ]]; then
+ # if any modification
+ prompt_segment yellow black
+ st='±'
+ else
+ # if working copy is clean
+ prompt_segment green black
+ fi
+ echo -n $(hg prompt "☿ {rev}@{branch}") $st
+ else
+ st=""
+ rev=$(hg id -n 2>/dev/null | sed 's/[^-0-9]//g')
+ branch=$(hg id -b 2>/dev/null)
+ if `hg st | grep -Eq "^\?"`; then
+ prompt_segment red black
+ st='±'
+ elif `hg st | grep -Eq "^(M|A)"`; then
+ prompt_segment yellow black
+ st='±'
+ else
+ prompt_segment green black
+ fi
+ echo -n "☿ $rev@$branch" $st
+ fi
+ fi
}
# Dir: current working directory