__truncate_left() { local str="$1" local maxlen="$2" local trunc_symbol="$3" local sep_symbol="$4" # get minimum length to not truncate a long name if [ -n "$sep_symbol" ] then local component=${1##*$sep_symbol} maxlen=$(( ( maxlen < ${#component} ) ? ${#component} : maxlen )) fi # truncation point local offset=$(( ${#str} - maxlen )) if [ ${offset} -gt "0" ] then #truncation is needed str=${str:$offset:$maxlen} #truncate str=${trunc_symbol}/${str#*/} #add symbol fi echo "$str" } __truncate_dir() { dir=${1/#$HOME/\~} #gain some place with '~' __truncate_left "$dir" 25 '…' '/' } __tpwd() { __truncate_dir "$PWD" } __bash_prompt_command() { local pwdmaxlen=25 local trunc_symbol="…" PROMPT_PWD=$(__tpwd) } __set_bash_ps1() { case $TERM in xterm*|rxvt*) local TITLEBAR='\[\033]0;\u:${NEW_PWD}\007\]' ;; *) local TITLEBAR="" ;; esac # load color vars source "$DOTFILES_BASH_DIR/ansi_colors" # colorized: PS1="${TITLEBAR} ${B}[${UC}\u@\h ${G}\${PROMPT_PWD}${B}]${UC}\\$ ${NONE}" # without colors: #PS1="${TITLEBAR}[\u@\h \${NEW_PWD}]\\$ " # extra backslash in front of \$ to make bash colorize the prompt } PROMPT_COMMAND=__bash_prompt_command __set_bash_ps1 unset __set_bash_ps1 # vim: ft=sh