function setPromt { if [ "$color_prompt" != yes ]; then PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' return fi case "$TERM" in xterm*|rxvt*) ;; *) PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' return ;; esac PROMPT_COMMAND=updatePromt PS2="|" } function updatePromt { local prev_exit="$?" # color_helper_>>color<< (Note: \[\]= escaping) local chR="\[\e[1;91m\]" #red local chW="\[\033[00m\]" #white local chG="\[\033[01;32m\]" #green local chB="\[\033[0;34m\]" #blue local chP="\[\033[0;35m\]" #purple local chY="\[\033[0;33m\]" #yellow PS1="" if [ $prev_exit == 0 ]; then PS1+="$chG✓ $chW" else PS1+="$chR✗ $chW" fi local jobs="$(jobs | wc -l)" if [ $jobs != 0 ]; then PS1+="${chY}≡$jobs$chW" fi PS1+="${debian_chroot:+($debian_chroot)}" PS1+=" At ${chG}\A${chW}" PS1+=" by ${chP}\u${chW}" if sudo -n true 2>/dev/null; then PS1+="${chR} (sudo)${chW}" fi PS1+=" in " if \git rev-parse --is-inside-work-tree >/dev/null 2>&1; then local branch="$(\git symbolic-ref -q HEAD)" PS1+="[${branch#refs/heads/}" local status="$(git for-each-ref --format='%(upstream:trackshort)' refs/heads | awk '!seen[$1]++ {printf $1}')" status+="$(git status --porcelain | awk '!seen[$1]++ {printf $1}')" if [ "$statua"s ]; then PS1+="|$chY$status$chW" fi PS1+="] " fi PS1+="${chB}\w${chW}" PS1+="\n:" history -a } setPromt unset color_prompt unset -f setPromt # vim: set filetype=sh tabstop=4 shiftwidth=4 textwidth=250 expandtab :