__vcs_dir() { local vcs base_dir sub_dir ref sub_dir() { local sub_dir sub_dir=$(readlink "${PWD}") sub_dir=${sub_dir#$1} echo ${sub_dir#/} } git_dir() { base_dir=$(git-rev-parse --show-cdup 2>/dev/null) || return 1 base_dir=$(readlink "$base_dir/..") sub_dir=$(git-rev-parse --show-prefix) sub_dir=${sub_dir%/} ref=$(git-symbolic-ref -q HEAD || git-name-rev --name-only HEAD 2>/dev/null) ref=${ref#refs/heads/} vcs="git" } svn_dir() { [ -d ".svn" ] || return 1 base_dir="." while [ -d "$base_dir/../.svn" ]; do base_dir="$base_dir/.."; done base_dir=$(readlink "$base_dir") sub_dir=$(sub_dir "${base_dir}") ref=$(svn info "$base_dir" | awk '/^URL/ { sub(".*/","",$0); r=$0 } /^Revision/ { sub("[^0-9]*","",$0); print r":"$0 }') vcs="svn" } svn_dir || git_dir || base_dir="$PWD" if [ -n "$vcs" ]; then __vcs_prefix="($vcs)" __vcs_base_dir="${base_dir/$HOME/~}" __vcs_ref="($ref)" # __vcs_sub_dir="${sub_dir}" else __vcs_prefix='' __vcs_base_dir='' __vcs_ref='' # __vcs_sub_dir='' fi } PROMPT_COMMAND=__vcs_dir export PS1='\[\033k\033\\\]\[\e[0;36m\][\u \w]${__vcs_base_dir}${__vcs_ref}\$\[\e[0;39m\] '