up vote 2 down vote favorite
share [g+] share [fb]

I use the following entry in ~/.bashrc file to colorize the prompt and display current branch of git repository:

PS1='\[\e[1;32m\]\[\u@\h\]\[\e[m\] \[\w\]\[\e[1;1m\]\[$(__git_ps1 " (%s)")\] \[\e[1;1m\]\[$\] \[\e[m\]'

This works almost fine, except when I use bash history (up arrow key few times), the command line becomes 'outdented' (just the first characters of the prompt remains untouched), and the visible is:

usemmand

when my username is user and the command is command.

link|improve this question

feedback

2 Answers

up vote 4 down vote accepted

\[ and \] should only be used around parts of the command prompt that do not advance the cursor, despite having actual text. if __git_ps1 produces any visible output then this will desynchronize your command line.

link|improve this answer
1  
Just to clarify, it should not be around \u@\h, \w or $ either. – Dennis Williamson Jun 4 '10 at 15:08
feedback

This is the correct version:

COLOR1="\[\e[1;32m\]"
COLOR2='\[\e[1;1m\]'
COLOR3='\[\e[m\]'
GIT_STATUS=$(__git_ps1 " %s")
PROMPT_CHAR="$"

PROMPT="${COLOR1}\u@\h${COLOR3} \w${COLOR2}${GIT_STATUS} ${COLOR2}${PROMPT_CHAR} ${COLOR3}"
PS1="$PROMPT"
export PS1
link|improve this answer
feedback

Your Answer

 
or
required, but never shown

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