#!/usr/bin/env bash # Source a .rvmrc file in a directory after changing to it, if it exists. To # disable this feature, set rvm_project_rvmrc=0 in /etc/rvmrc or $HOME/.rvmrc case "${rvm_project_rvmrc:-1}" in 1|cd) # cloned from git@github.com:mpapis/bash_zsh_support.git source "$rvm_scripts_path/extras/bash_zsh_support/chpwd/function.sh" # not using default loading to support older Zsh [[ -n "${ZSH_VERSION:-}" ]] && __rvm_version_compare "$ZSH_VERSION" -gt 4.3.4 || { function cd() { __zsh_like_cd cd "$@" ; } function popd() { __zsh_like_cd popd "$@" ; } function pushd() { __zsh_like_cd pushd "$@" ; } } __rvm_after_cd() { \typeset rvm_hook rvm_hook="after_cd" if [[ -n "${rvm_scripts_path:-}" || -n "${rvm_path:-}" ]] then source "${rvm_scripts_path:-$rvm_path/scripts}/hook" fi } __rvm_cd_functions_set() { __rvm_do_with_env_before if [[ -n "${rvm_current_rvmrc:-""}" && "$OLDPWD" == "$PWD" ]] then rvm_current_rvmrc="" fi __rvm_project_rvmrc >&2 || true __rvm_after_cd || true __rvm_do_with_env_after return 0 } [[ " ${chpwd_functions[*]} " == *" __rvm_cd_functions_set "* ]] || chpwd_functions=( "${chpwd_functions[@]}" __rvm_cd_functions_set ) # This functionality is opt-in by setting rvm_cd_complete_flag=1 in ~/.rvmrc # Generic bash cd completion seems to work great for most, so this is only # for those that have some issues with that. if (( ${rvm_cd_complete_flag:-0} == 1 )) then # If $CDPATH is set, bash should tab-complete based on directories in those paths, # but with the cd function above, the built-in tab-complete ignores $CDPATH. This # function returns that functionality. _rvm_cd_complete () { \typeset directory current matches item index sep sep="${IFS}" export IFS IFS=$'\n' COMPREPLY=() current="${COMP_WORDS[COMP_CWORD]}" if [[ -n "$CDPATH" && ${current:0:1} != "/" ]] ; then index=0 # The change to IFS above means that the \command \tr below should replace ':' # with a newline rather than a space. A space would be ignored, breaking # TAB completion based on CDPATH again for directory in $(printf "%b" "$CDPATH" | \command \tr -s ':' '\n') ; do for item in $( compgen -d "$directory/$current" ) ; do COMPREPLY[index++]=${item#$directory/} done done else COMPREPLY=( $(compgen -d ${current}) ) fi IFS="${sep}"; } complete -o bashdefault -o default -o filenames -o dirnames -o nospace -F _rvm_cd_complete cd fi ;; 2|prompt) if [[ -n "${ZSH_VERSION:-}" ]] then precmd_functions+=(__rvm_do_with_env_before __rvm_project_rvmrc __rvm_do_with_env_after) else PROMPT_COMMAND="${PROMPT_COMMAND%% }" PROMPT_COMMAND="${PROMPT_COMMAND%%;}" PROMPT_COMMAND="${PROMPT_COMMAND:-}${PROMPT_COMMAND:+; }__rvm_do_with_env_before; __rvm_project_rvmrc; __rvm_do_with_env_after" fi ;; esac