chruby.plugin.zsh 2.77 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#
# 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'

19

20
21
_homebrew-installed() {
    whence brew &> /dev/null
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
    _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
37
38
39
}

_chruby-from-homebrew-installed() {
40
  [ -r _brew_prefix ] &> /dev/null
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
}

_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() {
58
59
60
    local _chruby_path
    local _chruby_auto
    
61
62
63
    zstyle -s :omz:plugins:chruby path _chruby_path
    zstyle -s :omz:plugins:chruby auto _chruby_auto

64
    if [[ -r ${_chruby_path} ]]; then
65
66
67
        source ${_chruby_path}
    fi

68
    if [[ -r ${_chruby_auto} ]]; then
69
70
71
72
73
74
75
76
77
78
79
80
81
82
        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
83
84
    source $_brew_prefix/share/chruby/chruby.sh
    source $_brew_prefix/share/chruby/auto.sh
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
    _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
114
115
116
117
118
119
120
_chruby() {
    compadd $(chruby | tr -d '* ')
    local default_path='/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin'
    if PATH=${default_path} type ruby &> /dev/null; then
        compadd system
    fi
}
121
compdef _chruby chruby