]> git.phdru.name Git - dotfiles.git/blobdiff - admin/prog/bash_prompt
Feat(bash_prompt): Improve `PS1` generation
[dotfiles.git] / admin / prog / bash_prompt
index eb152c933d7c369d68685166c8c5d26f5cf3da7d..02141e3581ab17bf4400720b642e256a7872159d 100644 (file)
@@ -69,6 +69,20 @@ prompt_git() {
                       git rev-parse --short HEAD 2> /dev/null || \
                       printf "(unknown)")"
 
+        up=`git rev-parse --abbrev-ref @{u} 2>/dev/null`
+        if [ -n "$up" -a "$up" != "@{u}" ]; then
+            local left right
+            set -- `git rev-list --count --left-right @{u}...HEAD`
+            left=$1
+            right=$2
+            if [ "$left" -gt 0 ]; then
+                s="$s-$left"
+            fi
+            if [ "$right" -gt 0 ]; then
+                s="$s+$right"
+            fi
+        fi
+
         [ -n "$s" ] && s=" $s"
         printf " (%s)" "$branchName$s"
     fi
@@ -89,15 +103,15 @@ prompt_git() {
 
 set_prompts() {
       OPS1=''
+      local _COMMON_PROMPT='${debian_chroot:+($debian_chroot)}\u@\h:\w'
       # display the user, host and current working directory
       # in the terminal title
       case "$TERM" in
          *rxvt*|screen*|*term*|vt100)
-            OPS1+="\[\033]0;${debian_chroot:+($debian_chroot)}\u@\h:\w\007\]"
+            OPS1+="\[\033]0;${_COMMON_PROMPT}\007\]"
             case "$TERM" in
                screen*)
-                  OPS1+="\[\033k${debian_chroot:+($debian_chroot)}"
-                  OPS1+="\u@\h:\w\033\\\\\]" # Set screen/tmux caption
+                  OPS1+="\[\033k${_COMMON_PROMPT}\033\\\\\]" # Set screen/tmux caption
                ;;
             esac
          ;;
@@ -107,17 +121,17 @@ set_prompts() {
          ;;
       esac
 
-   OPS1+="${debian_chroot:+($debian_chroot)}"
-   OPS1+="\`cgmem_which_prompt\`\u@\${HOSTNAME::5}:\`short_curdir\`"
+   OPS1+='${debian_chroot:+($debian_chroot)}'
+   OPS1+='`cgmem_which_prompt`\u@${HOSTNAME::5}:`short_curdir`'
    if test -x /usr/bin/git >/dev/null 2>&1; then
       #if [ "`type -t __git_ps1`" = function ]; then
-      #   OPS1+="\$(__git_ps1)"
+      #   OPS1+='$(__git_ps1)'
       #else
-         OPS1+="\$(prompt_git)"
+         OPS1+='$(prompt_git)'
       #fi
    fi
    # This is for .screenrc: shelltitle "\$ |$SHELL"
-   #OPS1+="\[\033k\033\\\\\]"
-   OPS1+=" \$SHLVL\\$ "
+   #OPS1+='\[\033k\033\\\]'
+   OPS1+=' $SHLVL\$ '
    export OPS1
 }