setPrompt() { if [ "$color_prompt" != yes ]; then PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND}" 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="updatePrompt${PROMPT_COMMAND:+; $PROMPT_COMMAND}" PS2="|" } updatePrompt() { local prev_exit="$?" # color_helper_>>color<< (Note: \[\]= escaping) local chR="\[\033[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" -eq 0 ]; then PS1+="$chG✓ $chW" else PS1+="$chR✗ $chW" fi local jobs jobs="$(jobs -p | wc -w)" [ "$jobs" -ne 0 ] && \ PS1+="${chY}≡$jobs$chW" PS1+="${debian_chroot:+($debian_chroot)}" PS1+=" At ${chG}\A${chW}" PS1+=" by ${chP}\u${chW}" sudo -n true 2>/dev/null && \ PS1+="${chR} (sudo)${chW}" PS1+=" in " if \git rev-parse --is-inside-work-tree >/dev/null 2>&1; then local branch branch="$(\git symbolic-ref -q HEAD)" PS1+="[${branch#refs/heads/}" local status status="$(git for-each-ref --format='%(upstream:trackshort)' "$branch" 2>/dev/null | awk '!seen[$1]++ {printf $1}')" status+="$(git status --porcelain 2>/dev/null | awk '!seen[$1]++ {printf $1}')" [ "$status" != "" ] && \ PS1+="|$chY$status$chW" PS1+="] " fi PS1+="${chB}\w${chW}" PS1+="\n${PS1_jaaENV:-:}" } setPrompt unset color_prompt unset -f setPrompt PROMPT_COMMAND+='; history -a' §p() { # toggle promt if [[ "$1" == '--help' ]]; then \cat <<- "HELP" §p [--help] §p <…cmd> Toggle <…cmd> in $PROMPT_COMMAND - history v1: `history -a` - history v2: `history -n; history -w; history -c; history -r` HELP return 0 fi local cmd="$*" if [[ -z "$cmd" ]]; then declare -p PROMPT_COMMAND return 0 fi if [[ "$PROMPT_COMMAND" == *"; $cmd"* ]]; then PROMPT_COMMAND="${PROMPT_COMMAND/; $cmd}" else PROMPT_COMMAND+="; $cmd" fi } complete -A command -A variable §p # vim: set filetype=sh tabstop=4 shiftwidth=4 textwidth=250 :