iTerm doesn't like setting bold/normal and colour change at the same
time. Trying to do so yields broken colour settings with blinking and
other strangeness.
Fix it by splitting bold information from the requested colour escape
sequence and setting both separately.
# Default __ps1_user to 1.
[ -z "$__ps1_user" ] && __ps1_user=1
- export PS1='$(__ps1_user $? \u@)\[\033[$(__ps1_col $? 2>/dev/null)m\]$(__ps1_user $? \h)\[\033[${GIT_COLOUR}m\]$(__ps1_git $? 2>/dev/null)\[\033[0m\]\[\033[${P4_COLOUR}m\]$(__ps1_p4 $? 2>/dev/null)\[\033[0m\]\[\033[${SVN_COLOUR}m\]$(__ps1_svn $? 2>/dev/null)\[\033[0m\]$(__ps1_ret $? 2>/dev/null):\w\$ '
+ export PS1='$(__ps1_user $? \u@)\[\033[$(__ps1_col $? 2>/dev/null)m\]$(__ps1_user $? \h)\[\033[$(__ps1_colour_escape $GIT_COLOUR)m\]$(__ps1_git $? 2>/dev/null)\[\033[0m\]\[\033[$(__ps1_colour_escape $P4_COLOUR)m\]$(__ps1_p4 $? 2>/dev/null)\[\033[0m\]\[\033[$(__ps1_colour_escape $SVN_COLOUR)m\]$(__ps1_svn $? 2>/dev/null)\[\033[0m\]$(__ps1_ret $? 2>/dev/null):\w\$ '
return 0
}
+# iTerm doesn't like it if you set bold and colour at the same time.
+function __ps1_colour_escape() {
+ local bold="${1%%;*}"
+ local colour="${1#*;}"
+
+ echo -en "${bold}m\033[$colour"
+}
+
function __ps1_col() {
- [ $1 -gt 0 ] && echo -n "$PROMPT_FAILED_COLOUR" || echo -n "$PROMPT_OK_COLOUR"
+ [ $1 -gt 0 ] && __ps1_colour_escape "$PROMPT_FAILED_COLOUR" || __ps1_colour_escape "$PROMPT_OK_COLOUR"
return $1
}