Jay Taylor's notes

back to listing index

osx - How do I get my iTerm prompt to display differently when I'm in a Git branch? - Stack Overflow

[web search]
Original source (stackoverflow.com)
Tags: os-x iTerm iTerm2 git bash stackoverflow.com
Clipped on: 2012-09-19

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

asked Mar 31 '11 at 19:35
Image (Asset 1/4) alt= 178111

100% accept rate
  upvote
 flag
Just as a tip: there is github.com/djl/vcprompt to do the whole git parsing for you. It also supports different vcs systems. – Remco Wendt Jan 24 at 8:19
add comment

3 Answers

up vote 2 down vote accepted

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} '
answered May 8 '11 at 12:37
Image (Asset 2/4) alt= 442
  upvote
 flag
I'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. – digitalformula May 11 '11 at 3:30
1 upvote
 flag
It is bad form to steal others code as your own, especially without any mention of where it came from. Not only did you do this on SO but you plagiarized it in your article as well. And to top it off, you are spamming your article link, this is a no-no. – SiegeX May 11 '11 at 20:57
  upvote
 flag
@SiegeX care to mention the original source? – pablasso Sep 3 at 18:08
  upvote
 flag
@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. – SiegeX Sep 4 at 16:52
add comment

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\] '
answered Mar 31 '11 at 19:39
Image (Asset 3/4) alt= 26k53575
  upvote
 flag
I recommend reading this page for coloring the prompt, since it can be applied to Mac too: cyberciti.biz/faq/… – karlphillip Mar 31 '11 at 20:02
  upvote
 flag
If 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 \$ " – karlphillip Mar 31 '11 at 20:07
add comment

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.

answered Mar 31 '11 at 19:39
Image (Asset 4/4) alt= 17.6k1648
add comment

Your Answer

 
community wiki

Not the answer you're looking for? Browse other questions tagged or ask your own question.