Bash prompt linewrap with colors issues

So I’ve been fighting with trying to make a custom color prompt for a while now.

I’ve recently found out about tput to output color codes. That combined with local variables meant prompts became easier to read.

We started to create a custom prompt here for the team. Had all the info needed at a quick glance. Everything was good except long lines didn’t wrap properly. Ctrl+r would just get nutty.

So, after a lot of research and reading various forum posts, I found out that color codes should be wrapped in “\[...\]“. So example:

Note the \[ and \] wrapping the codes. This allows bash to properly figure out the length of the line. Note: I just grabbed random colors, I suspect this example looks bad.

I did find a slight exception

For the TITLEBAR (putty/xterm/screen) support:

case $TERM in
xterm*|rxvt*)
TITLEBAR="\[33]0;\[email protected]\h:\w07\]"
;;
screen*)
TITLEBAR="\[33k\u$\h\]"
;;
*)
TITLEBAR=''
;;
esac

The \[ and \] should wrap the entire block as everything inside is considered part of the control code.