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.

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.

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.

incrazyboyy commented Jul 4, 2017

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

@osipxd

This comment has been minimized.

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.

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}"'\$ '

@juhp

This comment has been minimized.

juhp commented Oct 26, 2018

or one can just quote the backslash before the last $: "...\n${RESET}\\$ "

@juhp

This comment has been minimized.

juhp commented Nov 2, 2018

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