How do I get my iTerm prompt to display differently when I'm in a Git branch?
Solution 1
I've just written a post about how to do all this. I've covered all the basics but had to guess a couple of things, e.g. how Paul uses the symbols etc. If you want to read it, check out http://digitalformula.net/articles/pimp-my-prompt-like-paul-irish.
There's also an article on digitalformula.net that shows a couple of other prompt examples - see http://digitalformula.net/articles/a-couple-more-bash-prompt-examples.
EDITED: The code part is as follows:
PATH=$PATH:~/Data/Scripts:~/Data/Utils/rar:~/_Applications:~/_Applications/lynx
# alias to quickly show if any Handbrake processes are running
alias hb='sudo ps -aef | grep HandBrakeCLI'
# alias for quick DNS cache flushing
alias fc='sudo dscacheutil -flushcache'
# enable the git bash completion commands
source ~/.git-completion
# enable git unstaged indicators - set to a non-empty value
GIT_PS1_SHOWDIRTYSTATE="."
# enable showing of untracked files - set to a non-empty value
GIT_PS1_SHOWUNTRACKEDFILES="."
# enable stash checking - set to a non-empty value
GIT_PS1_SHOWSTASHSTATE="."
# enable showing of HEAD vs its upstream
GIT_PS1_SHOWUPSTREAM="auto"
BLACK=$(tput setaf 0)
RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
YELLOW=$(tput setaf 3)
LIME_YELLOW=$(tput setaf 190)
POWDER_BLUE=$(tput setaf 153)
BLUE=$(tput setaf 4)
MAGENTA=$(tput setaf 5)
CYAN=$(tput setaf 6)
WHITE=$(tput setaf 7)
BRIGHT=$(tput bold)
NORMAL=$(tput sgr0)
BLINK=$(tput blink)
REVERSE=$(tput smso)
UNDERLINE=$(tput smul)
# set the prompt to show current working directory and git branch name, if it exists
# this prompt is a green username, black @ symbol, cyan host, magenta current working directory and white git branch (only shows if you're in a git branch)
# unstaged and untracked symbols are shown, too (see above)
# this prompt uses the short colour codes defined above
# PS1='${GREEN}\u${BLACK}@${CYAN}\h:${MAGENTA}\w${WHITE}`__git_ps1 " (%s)"`\$ '
# this is a cyan username, @ symbol and host, magenta current working directory and white git branch
# it uses the shorter , but visibly more complex, codes for text colours (shorter because the colour code definitions aren't needed)
# PS1='\[\033[0;36m\]\u@\h\[\033[01m\]:\[\033[0;35m\]\w\[\033[00m\]\[\033[1;30m\]\[\033[0;37m\]`__git_ps1 " (%s)"`\[\033[00m\]\[\033[0;37m\]\$ '
# return the prompt prefix for the second line
function set_prefix {
BRANCH=`__git_ps1`
if [[ -z $BRANCH ]]; then
echo "${NORMAL}o"
else
echo "${UNDERLINE}+"
fi
}
# and here's one similar to Paul Irish's famous prompt ... not sure if this is the way he does it, but it works :)
# \033[s = save cursor position
# \033[u = restore cursor position
PS1='${MAGENTA}\u${WHITE} in ${GREEN}\w${WHITE}${MAGENTA}`__git_ps1 " on %s"`${WHITE}\r\n`set_prefix`${NORMAL}${CYAN}\033[s\033[60C (`date "+%a, %b %d"`)\033[u${WHITE} '
Solution 2
I use git-aware-prompt.
A lot of solutions I had before only displayed the git branch if I were only in that directory when the terminal loaded. If I started iTerm in a non-git repo, then it wouldn't work when I cd
into directory with a git repo.
This github project solved that for me.
Solution 3
Rather than using archaic terminal codes, use tput
instead which makes the code much easier to read and a lot harder to mess up:
BLACK=$(tput setaf 0)
RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
YELLOW=$(tput setaf 3)
LIME_YELLOW=$(tput setaf 190)
POWDER_BLUE=$(tput setaf 153)
BLUE=$(tput setaf 4)
MAGENTA=$(tput setaf 5)
CYAN=$(tput setaf 6)
WHITE=$(tput setaf 7)
BRIGHT=$(tput bold)
NORMAL=$(tput sgr0)
BLINK=$(tput blink)
REVERSE=$(tput smso)
UNDERLINE=$(tput smul)
# Set Titlebar and Prompt
TITLEBAR='\e]0;\h: ${PWD/$HOME/~}\a'
PS1="${TITLEBAR}${WHITE}[${POWDER_BLUE}\u@\h${WHITE}]${NORMAL}$ "
Setting the titlebar is optional. Just be sure to use ${NORMAL}
at the end to turn off the color change.
Solution 4
Add this to your ~/.bashrc
or ~/.profile
PS1="\u@\h:\w on\e[0;35m$(__git_ps1)\e[m\$ "
Where,
$(__git_ps1)
is used for printing the branch name
\e
defines the start of the color scheme
[0;35m
represent the purple color
\e[m
defines the end of the scheme
Also, I fixed your current prompt:
PS1='\n\[\033[0;35m\]\u\[\033[0;32m\]\w\[\033[0m\]$(__git_ps1)\n\$\[\033[0m\] '
Solution 5
As mentioned above, I also use git-aware-prompt.
Run this to quickly install:
mkdir ~/.bash
cd ~/.bash
git clone git://github.com/jimeh/git-aware-prompt.git
Add this to the top of your ~/.bash_profile
:
export GITAWAREPROMPT=~/.bash/git-aware-prompt
source "${GITAWAREPROMPT}/main.sh"
In the same file ~/.bash_profile
here is the prompt I use:
export PS1="\n\[$txtpur\]\u\[$bldwht\]@\h\[$bldgrn\]:\[$bldblu\] \w \[$txtcyn\]\$git_branch\[$txtred\]\$git_dirty\[$txtrst\]\$ \[$txtwht\] "
export SUDO_PS1="\[$bakred\]\u@\h\[$txtrst\] \w\$ "
you can change the colors to your liking
Here is what some of the symbols in PS1 mean:
\u - username
@ - cool symbol
\h - hostname
: - cool symbol to separate things
\w - full path, use \W for short path
\git_branch - name of current branch
\git_dirty - show * when there is a change in branch
$ - cool symbol to signify, enter command
purinkle
I am an enthusiastic web developer specialising in Perl with first-hand experience of building outstanding website platforms using open source technologies. I have been working on websites for over 13 years and in that time I have gained experience in all aspects of web development all the way from the front-end to the back. I currently work for Barclays Bank as a Perl specialist, developing a global procurement web application as part of a small five-person production team. Before that I gained two years of academic-based PHP LAMP development experience whilst completing my Mathematics with Computer Applications degree. I am passionate about the web, and love spending time creating websites and web-based systems using the latest technologies and practices. Recently, this has involved me looking into Agile development methodologies and attending regular monthly Extreme Programming meetups.
Updated on March 22, 2020Comments
-
purinkle over 4 years
I'm trying to get my iTerm prompt set up the same way as Paul Irish
So far I have the following in
~/.profile
:# Add git branch name to prompt parse_git_branch() { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/*\(.*\)/ on \1/' } PS1='\n\[\033[0:35m\]\u\[\033[0;32m\]\w\[033[0m\]$(parse_git_branch)\n\$\[\033[0m\] '
I don't know how to make just the branch appear in a different colour and not the preceding "on"
As well as this there are other features such as:
- Displaying an "o" at the prompt when not in a git branch
- Displaying a "±" when in a branch
- Displaying the date at the end of the line
Any help would be appreciated
-
karlphillip over 13 yearsI recommend reading this page for coloring the prompt, since it can be applied to Mac too: cyberciti.biz/faq/…
-
karlphillip over 13 yearsIf you really like colors:
PS1="\[\033[01;32m\]\u\[\033[36m\]@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\e[1;35m$(__git_ps1)\e[m \$ "
-
digitalformula about 13 yearsI'm new to Stack Overflow so just wondering ... is it protocol to include code in a response instead of a link? I was hoping people would read the article instead of getting the code here as there are a couple of things you need to do before the code above will work.
-
pablasso almost 12 years@SiegeX care to mention the original source?
-
SiegeX almost 12 years@pablasso yea, me :) Looking back at this I have overreacted a bit. Still would have been nice to get a mention that the color codes were from me but the whole plagiarism is over the top and I take that back.
-
Simon over 11 yearsI had line wrapping issues with iTerm2 and the date at the end of the line so have shuffled it to after the directory/branch info
code
PS1='${MAGENTA}\u${WHITE} in ${GREEN}\w${WHITE}${MAGENTA}__git_ps1 " on %s"
${WHITE} (date "+%a, %b %d"
)\r\nset_prefix
${NORMAL}${CYAN}\033[s\033[60C \033[u${WHITE} 'code
-
Casper about 11 yearsThanks, this is by far the easiest way to go about it and should be higher up.
-
James M. Greene about 10 yearsHere's Paul Irish's actual configuration: github.com/paulirish/dotfiles/blob/master/.bash_prompt It is
source
d from his.bash_profile
: github.com/paulirish/dotfiles/blob/master/.bash_profile -
Flimm over 7 yearsI'm pretty sure you should be using single quotes here, not double quotes.
-
Joel Azevedo over 5 yearsHad some troubles using the other solutions, this is indeed the easiest one. Thanks
-
bill about 5 yearsi also had the issue where the prompt would not change when i changed branches within a repo, this fixed it. also, incredibly easy to setup/configure. thank you for sharing. bill