mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2024-12-12 20:21:02 +01:00
style(chruby): fix plugin code style and loading process
This commit is contained in:
parent
7b12fa9799
commit
5c14474eb2
2 changed files with 83 additions and 109 deletions
|
@ -5,6 +5,7 @@ current Ruby version, and completion and a prompt function to display the Ruby v
|
||||||
Supports brew and manual installation of chruby.
|
Supports brew and manual installation of chruby.
|
||||||
|
|
||||||
To use it, add `chruby` to the plugins array in your zshrc file:
|
To use it, add `chruby` to the plugins array in your zshrc file:
|
||||||
|
|
||||||
```zsh
|
```zsh
|
||||||
plugins=(... chruby)
|
plugins=(... chruby)
|
||||||
```
|
```
|
||||||
|
@ -14,7 +15,7 @@ plugins=(... chruby)
|
||||||
If you'd prefer to specify an explicit path to load chruby from
|
If you'd prefer to specify an explicit path to load chruby from
|
||||||
you can set variables like so:
|
you can set variables like so:
|
||||||
|
|
||||||
```
|
```zsh
|
||||||
zstyle :omz:plugins:chruby path /local/path/to/chruby.sh
|
zstyle :omz:plugins:chruby path /local/path/to/chruby.sh
|
||||||
zstyle :omz:plugins:chruby auto /local/path/to/auto.sh
|
zstyle :omz:plugins:chruby auto /local/path/to/auto.sh
|
||||||
```
|
```
|
||||||
|
|
|
@ -1,121 +1,94 @@
|
||||||
#
|
## load chruby from different locations
|
||||||
# INSTRUCTIONS
|
|
||||||
#
|
_source-from-omz-settings() {
|
||||||
# With either a manual or brew installed chruby things should just work.
|
local _chruby_path _chruby_auto
|
||||||
#
|
|
||||||
# If you'd prefer to specify an explicit path to load chruby from
|
zstyle -s :omz:plugins:chruby path _chruby_path || return 1
|
||||||
# you can set variables like so:
|
zstyle -s :omz:plugins:chruby auto _chruby_auto || return 1
|
||||||
#
|
|
||||||
# zstyle :omz:plugins:chruby path /local/path/to/chruby.sh
|
if [[ -r ${_chruby_path} ]]; then
|
||||||
# zstyle :omz:plugins:chruby auto /local/path/to/auto.sh
|
source ${_chruby_path}
|
||||||
#
|
fi
|
||||||
# TODO
|
|
||||||
# - autodetermine correct source path on non OS X systems
|
if [[ -r ${_chruby_auto} ]]; then
|
||||||
# - completion if ruby-install exists
|
source ${_chruby_auto}
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_source-from-homebrew() {
|
||||||
|
(( $+commands[brew] )) || return 1
|
||||||
|
|
||||||
|
local _brew_prefix
|
||||||
|
# check default brew prefix
|
||||||
|
if [[ -h /usr/local/opt/chruby ]];then
|
||||||
|
_brew_prefix="/usr/local/opt/chruby"
|
||||||
|
else
|
||||||
|
# ok , it is not default prefix
|
||||||
|
# this call to brew is expensive ( about 400 ms ), so at least let's make it only once
|
||||||
|
_brew_prefix=$(brew --prefix chruby)
|
||||||
|
fi
|
||||||
|
|
||||||
|
[[ -r "$_brew_prefix" ]] || return 1
|
||||||
|
|
||||||
|
source $_brew_prefix/share/chruby/chruby.sh
|
||||||
|
source $_brew_prefix/share/chruby/auto.sh
|
||||||
|
}
|
||||||
|
|
||||||
|
_load-chruby-dirs() {
|
||||||
|
local dir
|
||||||
|
for dir in "$HOME/.rubies" "$PREFIX/opt/rubies"; do
|
||||||
|
if [[ -d "$dir" ]]; then
|
||||||
|
RUBIES+=("$dir")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Load chruby
|
||||||
|
if _source-from-omz-settings; then
|
||||||
|
_load-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
|
||||||
|
_load-chruby-dirs
|
||||||
|
elif _source-from-homebrew; then
|
||||||
|
_load-chruby-dirs
|
||||||
|
fi
|
||||||
|
|
||||||
|
unfunction _source-from-homebrew _source-from-omz-settings _load-chruby-dirs
|
||||||
|
|
||||||
|
|
||||||
|
## chruby utility functions and aliases
|
||||||
|
|
||||||
# rvm and rbenv plugins also provide this alias
|
# rvm and rbenv plugins also provide this alias
|
||||||
alias rubies='chruby'
|
alias rubies='chruby'
|
||||||
|
|
||||||
|
|
||||||
_homebrew-installed() {
|
|
||||||
whence brew &> /dev/null
|
|
||||||
_xit=$?
|
|
||||||
if [ $_xit -eq 0 ];then
|
|
||||||
# ok , we have brew installed
|
|
||||||
# speculatively we check default brew prefix
|
|
||||||
if [ -h /usr/local/opt/chruby ];then
|
|
||||||
_brew_prefix="/usr/local/opt/chruby"
|
|
||||||
else
|
|
||||||
# ok , it is not default prefix
|
|
||||||
# this call to brew is expensive ( about 400 ms ), so at least let's make it only once
|
|
||||||
_brew_prefix=$(brew --prefix chruby)
|
|
||||||
fi
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
return $_xit
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
_chruby-from-homebrew-installed() {
|
|
||||||
[ -r $_brew_prefix ] &> /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() {
|
|
||||||
local _chruby_path
|
|
||||||
local _chruby_auto
|
|
||||||
|
|
||||||
zstyle -s :omz:plugins:chruby path _chruby_path
|
|
||||||
zstyle -s :omz:plugins:chruby auto _chruby_auto
|
|
||||||
|
|
||||||
if [[ -r ${_chruby_path} ]]; then
|
|
||||||
source ${_chruby_path}
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -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/share/chruby/chruby.sh
|
|
||||||
source $_brew_prefix/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() {
|
function current_ruby() {
|
||||||
local _ruby
|
local ruby
|
||||||
_ruby="$(chruby |grep \* |tr -d '* ')"
|
ruby="$(chruby | grep \* | tr -d '* ')"
|
||||||
if [[ $(chruby |grep -c \*) -eq 1 ]]; then
|
if [[ $(chruby | grep -c \*) -eq 1 ]]; then
|
||||||
echo ${_ruby}
|
echo ${ruby}
|
||||||
else
|
else
|
||||||
echo "system"
|
echo "system"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function chruby_prompt_info() {
|
function chruby_prompt_info() {
|
||||||
echo "$(current_ruby)"
|
echo "$(current_ruby)"
|
||||||
}
|
}
|
||||||
|
|
||||||
# complete on installed rubies
|
# Complete chruby command with installed rubies
|
||||||
_chruby() {
|
_chruby() {
|
||||||
compadd $(chruby | tr -d '* ')
|
compadd $(chruby | tr -d '* ')
|
||||||
local default_path='/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin'
|
if PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" command ruby &>/dev/null; then
|
||||||
if PATH=${default_path} type ruby &> /dev/null; then
|
compadd system
|
||||||
compadd system
|
fi
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
compdef _chruby chruby
|
compdef _chruby chruby
|
||||||
|
|
||||||
|
|
||||||
|
# Simple definition completer for ruby-build
|
||||||
|
if command ruby-build &> /dev/null; then
|
||||||
|
_ruby-build() { compadd $(ruby-build --definitions) }
|
||||||
|
compdef _ruby-build ruby-build
|
||||||
|
fi
|
||||||
|
|
Loading…
Reference in a new issue