Instantly share code, notes, and snippets.

Embed
What would you like to do?
A two-line colored Bash prompt (PS1) with Git branch and a line decoration which adjusts automatically to the width of the terminal. Recognizes SVN, Git and Fossil version control systems and shows the current branch/revision.
# A two-line colored Bash prompt (PS1) with Git branch and a line decoration
# which adjusts automatically to the width of the terminal.
# Recognizes and shows Git, SVN and Fossil branch/revision.
# Screenshot: http://img194.imageshack.us/img194/2154/twolineprompt.png
# Michal Kottman, 2012
RESET="\[\033[0m\]"
RED="\[\033[0;31m\]"
GREEN="\[\033[01;32m\]"
BLUE="\[\033[01;34m\]"
YELLOW="\[\033[0;33m\]"
PS_LINE=`printf -- '- %.0s' {1..200}`
function parse_git_branch {
PS_BRANCH=''
PS_FILL=${PS_LINE:0:$COLUMNS}
if [ -d .svn ]; then
PS_BRANCH="(svn r$(svn info|awk '/Revision/{print $2}'))"
return
elif [ -f _FOSSIL_ -o -f .fslckout ]; then
PS_BRANCH="(fossil $(fossil status|awk '/tags/{print $2}')) "
return
fi
ref=$(git symbolic-ref HEAD 2> /dev/null) || return
PS_BRANCH="(git ${ref#refs/heads/}) "
}
PROMPT_COMMAND=parse_git_branch
PS_INFO="$GREEN\u@\h$RESET:$BLUE\w"
PS_GIT="$YELLOW\$PS_BRANCH"
PS_TIME="\[\033[\$((COLUMNS-10))G\] $RED[\t]"
export PS1="\${PS_FILL}\[\033[0G\]${PS_INFO} ${PS_GIT}${PS_TIME}\n${RESET}\$ "
@DrumMeister

This comment has been minimized.

Show comment
Hide comment
@DrumMeister

DrumMeister May 11, 2016

Hello,

  1. Thanks for this great prompt!
  2. You can add the following to support also Mercurial:
    23 elif [ -d .hg ]; then
    24 PS_BRANCH="(hg $(hg branch))"
    25 return
    26 fi
  3. I would rename PS_GIT to PS_VCS (Version Control System) which makes more sense ;)

KR
Sam

DrumMeister commented May 11, 2016

Hello,

  1. Thanks for this great prompt!
  2. You can add the following to support also Mercurial:
    23 elif [ -d .hg ]; then
    24 PS_BRANCH="(hg $(hg branch))"
    25 return
    26 fi
  3. I would rename PS_GIT to PS_VCS (Version Control System) which makes more sense ;)

KR
Sam

@edupo

This comment has been minimized.

Show comment
Hide comment
@edupo

edupo Jun 9, 2016

Hey, thanks! This is what I was looking for... Forked!
I add changes suggested by @DrumMeister and my own.

edupo commented Jun 9, 2016

Hey, thanks! This is what I was looking for... Forked!
I add changes suggested by @DrumMeister and my own.

@incrazyboyy

This comment has been minimized.

Show comment
Hide comment
@incrazyboyy

incrazyboyy Jul 4, 2017

The screenshot link is down, would love to see it before applying!

incrazyboyy commented Jul 4, 2017

The screenshot link is down, would love to see it before applying!

@osipxd

This comment has been minimized.

Show comment
Hide comment
@osipxd

osipxd Aug 1, 2017

@incrazyboyy
In Deepin Terminal with pali theme and default Terminal with dark theme:
image

osipxd commented Aug 1, 2017

@incrazyboyy
In Deepin Terminal with pali theme and default Terminal with dark theme:
image

@zaharcelac

This comment has been minimized.

Show comment
Hide comment
@zaharcelac

zaharcelac Aug 28, 2017

To have correct # vs $ while sudo -s, in the last line we had to use single quotes around $:
export PS1="\${PS_FILL}\[\033[0G\]${PS_INFO} ${PS_GIT}${PS_TIME}\n${RESET}"'\$ '

zaharcelac commented Aug 28, 2017

To have correct # vs $ while sudo -s, in the last line we had to use single quotes around $:
export PS1="\${PS_FILL}\[\033[0G\]${PS_INFO} ${PS_GIT}${PS_TIME}\n${RESET}"'\$ '

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment