Advertisement
CleverWebAdmin

Custom $PS1

Aug 14th, 2014
393
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.80 KB | None | 0 0
  1. function git_unpushed() {
  2.     brinfo=$(git branch -v)
  3.     if [[ $brinfo =~ ("[ahead "([[:digit:]]*)]) ]]
  4.     then
  5.         echo "Not Pushed: ${BASH_REMATCH[2]}"
  6.         return 1
  7.     fi
  8.     return 0
  9. }
  10.  
  11. function git_untracked() {
  12.     untracked=$(git clean --dry-run | wc -l)
  13.     if [ $untracked -gt 0 ]
  14.     then
  15.         echo "Untracked: "$untracked
  16.         return 1
  17.     fi
  18.     return 0
  19. }
  20.  
  21. function git_stat() {
  22.     status="$(git status --short)"
  23.     m="M:"$(echo "$status" | awk '/^[ ]*M/' | wc -l)    # Modified
  24.     a="A:"$(echo "$status" | awk '/^[ ]*A/' | wc -l)    # Added
  25.     d="D:"$(echo "$status" | awk '/^[ ]*D/' | wc -l)    # Deleted
  26.     r="R:"$(echo "$status" | awk '/^[ ]*R/' | wc -l)    # Renamed
  27.     c="C:"$(echo "$status" | awk '/^[ ]*C/' | wc -l)    # Copied
  28.     u="U:"$(echo "$status" | awk '/^[ ]*\?\?/' | wc -l) # Untracked
  29.    
  30.     echo "\[\e[97m\][$m $a $d $r $c \[\e[91m\]$u\[\e[97m\]]"
  31. }
  32.  
  33. function prompt_cmd() {
  34.     LAST_STATUS=$?
  35.     uid="$(id -u)"
  36.     host="\[\e[97m\]\H"
  37.     path="\[\e[94m\]\w"
  38.    
  39.     # If root
  40.     if [ "$uid" = "0" ];
  41.     then
  42.         user="\[\e[91m\]\u"
  43.         symbol="\[\e[97m\]#"
  44.     else
  45.         # If not root
  46.         user="\[\e[96m\]\u"
  47.         symbol="\[\e[97m\]\$"
  48.     fi
  49.    
  50.     # If Git Repo
  51.     if [ -d .git ] || git rev-parse --git-dir > /dev/null 2>&1;
  52.     then
  53.         unpushed=$(git_unpushed)
  54.         untracked=$(git_untracked)
  55.         branch=$(__git_ps1)
  56.         stat=$(git_stat)
  57.         git_name=$(basename $(git rev-parse --show-toplevel))
  58.         git_path="\[\e[94m\]/$git_name/"$(git rev-parse --show-prefix)
  59.        
  60.         # If Clean
  61.         if git diff-index --quiet HEAD --;
  62.         then
  63.             # If Untracked
  64.             if git_untracked &> /dev/null;
  65.             then
  66.                 status="\[\e[92m\]$branch" # clean
  67.             else
  68.                 status="\[\e[91m\]$branch" # clean w/ untracked
  69.             fi
  70.         else
  71.             # If Untracked
  72.             if git_untracked &> /dev/null;
  73.             then
  74.                 if [[ `git status` == *"not staged"* ]];
  75.                 then
  76.                     status="\[\e[91m\]$branch $stat" # unadded but clean
  77.                 else
  78.                     status="\[\e[93m\]$branch $stat" # added but clean
  79.                 fi
  80.             else
  81.                 status="\[\e[91m\]$branch $stat" # uncommited & untracked
  82.             fi
  83.            
  84.         fi
  85.        
  86.         # If Unpushed
  87.         if git_unpushed &> /dev/null;
  88.         then
  89.             pushed=""
  90.         else
  91.             pushed=$(git_unpushed)
  92.         fi
  93.        
  94.         second_line=" $git_path\n$status $pushed"
  95.     else
  96.         second_line="\n$path"
  97.     fi
  98.    
  99.     PS1="\[\e[1m\]$user\[\e[97m\]@$host$second_line\n $symbol \[\e[0m\]"
  100. }
  101.  
  102. export PROMPT_COMMAND=prompt_cmd
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement