Last active
July 19, 2023 06:53
-
-
Save mkottman/1936195 to your computer and use it in GitHub Desktop.
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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}\$ " |
I am now using https://github.com/juhp/configuration/blob/b6e03ca0b375ac82deedfd5ab86a83b98327b45e/bash/bashrc#L48
Are \[
and \]
explained somewhere?
Ho handle git unborn repo (newly created) and git detached HEAD, I replaced lines 24 and 25 with;
branches=$(git branch 2> /dev/null) || return
ref=$(echo "$branches" | grep "^*" | sed -e 's/^* //')
[ "x${ref}" = "x" ] && ref="unborn: $(git symbolic-ref HEAD | sed -e 's#refs/heads/##')"
PS_BRANCH="[git: ${ref}] "
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
or one can just quote the backslash before the last $:
"...\n${RESET}\\$ "