scripts/cd in rvm-1.0.21 vs scripts/cd in rvm-1.0.22

- old
+ new

@@ -43,32 +43,43 @@ rvm_hook="after_cd" ; source "$rvm_path/scripts/hook" return $result } - # 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 () - { - local directory current matches item index sep - sep="${IFS}" - declare -x IFS=$'\n' - COMPREPLY=() - current="${COMP_WORDS[COMP_CWORD]}" - if [[ -n "$CDPATH" && ${current:0:1} != "/" ]] ; then - index=0 - for directory in $(printf "%s" "$CDPATH" | tr -s ':' ' ') ; do - for item in $( compgen -d "$directory/$current" ) ; do - COMPREPLY[index++]=${item#$directory/} + # 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} = 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 () + { + local directory current matches item index sep + sep="${IFS}" + declare -x 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 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 "%s" "$CDPATH" | tr -s ':' '\n') ; do + for item in $( compgen -d "$directory/$current" ) ; do + COMPREPLY[index++]=${item#$directory/} + done done - done - else - COMPREPLY=( $(compgen -d ${current}) ) - fi - declare -x IFS="${sep}"; - } - complete -o bashdefault -o default -o filenames -o dirnames -o nospace -F _rvm_cd_complete cd + else + COMPREPLY=( $(compgen -d ${current}) ) + fi + declare -x IFS="${sep}"; + } + + complete -o bashdefault -o default -o filenames -o dirnames -o nospace -F _rvm_cd_complete cd + + fi fi fi