diff --git a/.bashrc b/.bashrc index 40bf8a4..3c614e8 100644 --- a/.bashrc +++ b/.bashrc @@ -52,76 +52,113 @@ if [ -n "$force_color_prompt" ]; then fi fi +###################################################################################### +# Customize BASH PS1 prompt to show current GIT repository and branch. +# Found in http://mediadoneright.com/content/ultimate-git-ps1-bash-prompt +# By Mike Stewart - http://MediaDoneRight.com +###################################################################################### -#Show git branch in prompt -# git branch 2> /dev/null | sed "s/^\* \([^ ]*\)/\1/;tm;d;:m" -function parse_git_branch { - git rev-parse --git-dir > /dev/null 2>&1 - if [ $? -eq 0 ]; then - git_status="$(git status 2> /dev/null)" - branch_pattern="^# On branch ([^${IFS}]*)" - detached_branch_pattern="# Not currently on any branch" - remote_pattern="# Your branch is (.*) of" - diverge_pattern="# Your branch and (.*) have diverged" - untracked_pattern="# Untracked files:" - new_pattern="new file:" - not_staged_pattern="Changes not staged for commit" - - #files not staged for commit - if [[ ${git_status}} =~ ${not_staged_pattern} ]]; then - state="✔" - fi - # add an else if or two here if you want to get more specific - # show if we're ahead or behind HEAD - if [[ ${git_status} =~ ${remote_pattern} ]]; then - if [[ ${BASH_REMATCH[1]} == "ahead" ]]; then - remote="↑" - else - remote="↓" - fi - fi - #new files - if [[ ${git_status} =~ ${new_pattern} ]]; then - remote="+" - fi - #untracked files - if [[ ${git_status} =~ ${untracked_pattern} ]]; then - remote="✖" - fi - #diverged branch - if [[ ${git_status} =~ ${diverge_pattern} ]]; then - remote="↕" - fi - #branch name - if [[ ${git_status} =~ ${branch_pattern} ]]; then - branch=${BASH_REMATCH[1]} - #detached branch - elif [[ ${git_status} =~ ${detached_branch_pattern} ]]; then - branch="NO BRANCH" - fi - - echo "(${branch}${state}${remote})" - fi - return -} - -if [ "$color_prompt" = yes ]; then - PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' -else - # Old config with full path: PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' - PS1='${debian_chroot:+($debian_chroot)}\u@\h:\W $(parse_git_branch)\$ ' -fi -unset color_prompt force_color_prompt - -# If this is an xterm set the title to user@host:dir -case "$TERM" in -xterm*|rxvt*) - # Old config with full path: PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" - PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" - ;; -*) - ;; -esac +# Reset +Color_Off="\[\033[0m\]" # Text Reset + +# Regular Colors +Black="\[\033[0;30m\]" # Black +Red="\[\033[0;31m\]" # Red +Green="\[\033[0;32m\]" # Green +Yellow="\[\033[0;33m\]" # Yellow +Blue="\[\033[0;34m\]" # Blue +Purple="\[\033[0;35m\]" # Purple +Cyan="\[\033[0;36m\]" # Cyan +White="\[\033[0;37m\]" # White + +# Bold +BBlack="\[\033[1;30m\]" # Black +BRed="\[\033[1;31m\]" # Red +BGreen="\[\033[1;32m\]" # Green +BYellow="\[\033[1;33m\]" # Yellow +BBlue="\[\033[1;34m\]" # Blue +BPurple="\[\033[1;35m\]" # Purple +BCyan="\[\033[1;36m\]" # Cyan +BWhite="\[\033[1;37m\]" # White + +# Underline +UBlack="\[\033[4;30m\]" # Black +URed="\[\033[4;31m\]" # Red +UGreen="\[\033[4;32m\]" # Green +UYellow="\[\033[4;33m\]" # Yellow +UBlue="\[\033[4;34m\]" # Blue +UPurple="\[\033[4;35m\]" # Purple +UCyan="\[\033[4;36m\]" # Cyan +UWhite="\[\033[4;37m\]" # White + +# Background +On_Black="\[\033[40m\]" # Black +On_Red="\[\033[41m\]" # Red +On_Green="\[\033[42m\]" # Green +On_Yellow="\[\033[43m\]" # Yellow +On_Blue="\[\033[44m\]" # Blue +On_Purple="\[\033[45m\]" # Purple +On_Cyan="\[\033[46m\]" # Cyan +On_White="\[\033[47m\]" # White + +# High Intensty +IBlack="\[\033[0;90m\]" # Black +IRed="\[\033[0;91m\]" # Red +IGreen="\[\033[0;92m\]" # Green +IYellow="\[\033[0;93m\]" # Yellow +IBlue="\[\033[0;94m\]" # Blue +IPurple="\[\033[0;95m\]" # Purple +ICyan="\[\033[0;96m\]" # Cyan +IWhite="\[\033[0;97m\]" # White + +# Bold High Intensty +BIBlack="\[\033[1;90m\]" # Black +BIRed="\[\033[1;91m\]" # Red +BIGreen="\[\033[1;92m\]" # Green +BIYellow="\[\033[1;93m\]" # Yellow +BIBlue="\[\033[1;94m\]" # Blue +BIPurple="\[\033[1;95m\]" # Purple +BICyan="\[\033[1;96m\]" # Cyan +BIWhite="\[\033[1;97m\]" # White + +# High Intensty backgrounds +On_IBlack="\[\033[0;100m\]" # Black +On_IRed="\[\033[0;101m\]" # Red +On_IGreen="\[\033[0;102m\]" # Green +On_IYellow="\[\033[0;103m\]" # Yellow +On_IBlue="\[\033[0;104m\]" # Blue +On_IPurple="\[\033[10;95m\]" # Purple +On_ICyan="\[\033[0;106m\]" # Cyan +On_IWhite="\[\033[0;107m\]" # White + +# Various variables you might want for your PS1 prompt instead +Time12h="\T" +Time12a="\@" +PathShort="\w" +PathFull="\W" +NewLine="\n" +Jobs="\j" + +# This PS1 snippet was adopted from code for MAC/BSD I saw from: http://allancraig.net/index.php?option=com_content&view=article&id=108:ps1-export-command-for-git&catid=45:general&Itemid=96 +# I tweaked it to work on UBUNTU 11.04 & 11.10 plus made it mo' better + +export PS1=\ +$IWhite$Time12h$Color_Off\ +`if [ $? = 0 ]; then echo "\[\033[01;32m\] ツ"; else echo "\[\033[01;31m\] ✗"; fi`\ +'$(git branch &>/dev/null;\ +if [ $? -eq 0 ]; then \ + echo "$(echo `git status` | grep "nothing to commit" > /dev/null 2>&1; \ + if [ "$?" -eq "0" ]; then \ + # @4 - Clean repository - nothing to commit + echo "'$Green'"$(__git_ps1 " (%s)"); \ + else \ + # @5 - Changes to working tree + echo "'$IRed'"$(__git_ps1 " {%s}"); \ + fi) '$BYellow$PathShort$Color_Off'\$ "; \ +else \ + # @2 - Prompt when not in GIT repo + echo " '$Yellow$PathShort$Color_Off'\$ "; \ +fi)' # Git branch ######################################################################################