# If you work with git, you've probably had that nagging sensation of not knowing what branch you are on. Worry no longer! | |
export PS1="\\w:\$(git branch 2>/dev/null | grep '^*' | colrm 1 2)\$ " | |
# This will change your prompt to display not only your working directory but also your current git branch, if you have one. Pretty nifty! | |
# ~/code/web:beta_directory$ git checkout master | |
# Switched to branch "master" | |
# ~/code/web:master$ git checkout beta_directory | |
# Switched to branch "beta_directory" | |
# ~/code/web:beta_directory$ |
I would like to see my python virtual environment (venv) as well, as it is usually the case when using MINGW64-git-bash.
So previously, the venv "projectname-venv" was shown in parentheses on the left, but after applying some fancy PS1-command to change the style, coloring and make the current git-branch appear on the right, the venv is missing afterwards.
(projectname-venv) andylu@hd1pcms0347:/mnt/c/Users/username/Projects/projectname$
PS1='\[\033[0;32m\]\u\[\033[0;36m\] @ \[\033[0;36m\]\h \w\[\033[0;32m\]$(__git_ps1)\n\[\033[0;32m\]└─\[\033[0;32m\] \$\[\033[0;32m\] ▶\[\033[0m\] '
andylu @ hd1pcms0347 /mnt/c/Users/username/Projects/projectname (feature/story-43052-dev)
└─ $ ▶ ls
I'd like to have a PS1-command including the venv.
@Lulalaby You need to set the terminal font to a nerd font (patched fonts that replace unused characters with different icons). You can get nerd fonts from https://www.nerdfonts.com/font-downloads. The one I'm using is FantasqueSansMono
thanks!
I just recently started using this and works perfectly.
git_branch() {
if [
git branch 2>/dev/null | grep '^*' | colrm 1 2 | wc -l
-eq 1 ];
then
echo -n "("
echo -ngit branch 2>/dev/null | grep '^*' | colrm 1 2
echo -n ")"
fi}
PS1='[\033[0;32m][\033[0m\033[0;32m]\u[\033[0;36m] @ [\033[0;36m]\h \w[\033[0;32m]
$(git_branch)\n[\033[0;32m]└─[\033[0m\033[0;32m] $ [\033[0m\033[0;32m] ▶[\033[0m] '
This will not have () if there is no branch found.
And it will write with a () if there is a branch.
Optimization wrt slow prompt rendering :
How to make the prompt display INSTANTLY, whatever the complexity of the git state computation ?
-> by NOT performing any git state computation, UNLESS the working directory has changed, OR git command was run.
PROMPT_COMMAND='history1=`history 1`;
if [[ $PREVIOUS_PWD != $PWD || ( $history1 == *" git "* && $history1 != $PREVIOUS_CMD ) ]];
then GITBRANCH=`__git_ps1`; # or whatever git state computation commands
fi;
PREVIOUS_PWD=$PWD; PREVIOUS_CMD=$history1;'
PS1='\[\033[32m\]\u@\h \[\033[33m\]\w\[\033[36m\]$GITBRANCH\[\033[0m\]\n$ '
# or whatever prompt rendering, as long as it embeds $GITBRANCH which has been conditionally computed above
Could any of you share the fonts you are using in your terminals? Especially the ones with the file and folder icons?
-> by NOT performing any git state computation, when the working directory has NOT changed.
But then the prompt doesn't change when you switch branches.
-> by NOT performing any git state computation, when the working directory has NOT changed.
But then the prompt doesn't change when you switch branches.
You're correct.
So let's improve & rephrase the optimization :
"-> by NOT performing any git state computation, UNLESS the working directory has changed, OR git command was run."
I updated my original proposed solution accordingly.
I created my own version for displaying the git branch in prompt starting from @vankasteelj reply (wrote on Mar 7, 2016).
It is a simple solution that includes branch status color. Take a look:
parse_git_bg() { if [[ $(git status -s 2> /dev/null) ]]; then echo -e "\033[0;31m" else echo -e "\033[0;32m" fi } PS1='\[\033[0;32m\]\[\033[0m\033[0;32m\]\u\[\033[0;34m\]@\[\033[0;34m\]\h \w\[$(parse_git_bg)\]$(__git_ps1)\n\[\033[0;32m\]\$\[\033[0m\]
Based. Thanks.
1 as True or correct command, and if it is 0, then it is false or wrong.
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}
export PS1="╭─╼[\[\e[1;36m\]\w\[\e[0m\]]-(\`if [ \$? = 0 ]; then echo \[\e[32m\]1\[\e[0m\]; else echo \[\e[31m\]0\[\e[0m\]; fi\`)-[\[\e[1;32m\]\h\[\e[0m\]]\n╰─ \u\$(if git rev-parse --git-dir > /dev/null 2>&1; then echo '@git:('; fi)\[\e[1;34m\]\$(parse_git_branch)\[\e[0m\]\$(if git rev-parse --git-dir > /dev/null 2>&1; then echo ')'; fi) >> "
PROMPT_DIRTRIM=2
Good job! Thank you a lot!
Thank you
Probably the most rich solution I found so far: https://github.com/diogocavilha/fancy-git