Fix prompt escape sequences for iTerm.
authorIain Patterson <me@iain.cx>
Mon, 26 Oct 2009 14:36:52 +0000 (14:36 +0000)
committerIain Patterson <me@iain.cx>
Mon, 26 Oct 2009 14:36:52 +0000 (14:36 +0000)
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.

.profile.d/ps1.bashrc

index 852c736..cf6f1e6 100644 (file)
@@ -73,12 +73,20 @@ function __ps1() {
   # 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
 }