Como corrigir meu prompt bash com linhas longas?

3

Eu tenho o seguinte prompt bash:

YELLOW="\[3[0;33m\]"
GREEN="\[3[0;32m\]"
RESET='\e[0m'

export PS1="$GREEN[\W]$YELLOW \$(__git_ps1 \"(%s) \")$RESET\$ "

Parece assim:

Qual é o que eu quero. No entanto, quando eu insiro uma linha longa, ela não quebra a linha, mas substitui a atual desde o início da linha. Quando isso acontece e eu bati no backspace, tudo nessa linha desaparecerá. Como posso consertar isso?

    
por Tamás Szelei 20.09.2011 / 15:57

2 respostas

3

Você esqueceu de quebrar o valor de $RESET .

RESET='\[\e[0m\]'

O Bash precisa saber quanto tempo o prompt está para que o quebra automática de palavras funcione corretamente e que tudo não entre \[ e \] seja contado.

    
por 20.09.2011 / 16:02
2

Mais portátil usando tput :

fgred="$(tput setaf 1)"
fggreen="$(tput setaf 2)"
fgyellow="$(tput setaf 3)"
fgblue="$(tput setaf 4)"
fgpurple="$(tput setaf 5)"
fgcyan="$(tput setaf 6)"
fgwhite="$(tput setaf 7)"

bgred="$(tput setab 1)"
bggreen="$(tput setab 2)"
bgyellow="$(tput setab 3)"
bgblue="$(tput setab 4)"
bgpurple="$(tput setab 5)"
bgcyan="$(tput setab 6)"
bgwhite="$(tput setab 7)"

bold="$(tput bold)"
underline="$(tput smul)"
reset="$(tput sgr0)"

export PS1="${fggreen}[\W]${fgyellow} \$(__git_ps1 \"(%s) \")${reset}\$ "
    
por 20.09.2011 / 16:20