Long lines overlap in Bash PS1 customized prompt

I have configured a fancy two-line PS1 bash prompt, with server name, time, user name and other useful variables.

PS1="\n\[\033[1;34m\]\342\226\210\342\226\210 \u @ $SERVER_NAME""$BBlue"" \w""$Color_Off  \n\[\033[0;36m\]\342\226\210\342\226\210 \d \t $ \[\033[0;39m\]"

enter image description here

Full Github source here.

The problem is that long lines are often wrapped around themselves, meaning that the new line overlaps the previous one.

The problem is inconsistent: some lines are wrapped correctly, some are not.

Any idea how to fix this?


Here is my fancy two-line PS1 for bash prompt.

PS1

\[\e[1;32m\]\H\[\e[0m\] :: \[\e[1;30m\]\d\[\e[0m\] \@ :: \[\e[1;33m\]\w\n\[\e[1;34m\]\u $ \[\033[0m\]

So here is what I did. If this was my color:

\e[1;32m

I changed it to:

\[\e[1;32m\]

Essentially you need to enclose it in:

\[$mycolor\]

Checkout this answer.


Found this solution online, which suggested a closing brackets to color variables:

Change this:

Black='\e[0;30m'        # Black
Red='\e[0;31m'          # Red
Green='\e[0;32m'        # Green

to:

Black='\e[0;30m\]'        # Black
Red='\e[0;31m\]'          # Red
Green='\e[0;32m\]'        # Green

I've committed the change - hope it works as expected.


My preferred solution to the issue of long lines overlap in bash PS1 is to have a \n at the end of PS1 prompt line(s).

e.g.

enter image description here

If you want all my other stuff - time, user, host, directory and git branch(!) you can use this (mac or linux):

https://unix.stackexchange.com/a/124012/10043