Como consertar meu prompt de terminal estando fora por um caractere? [duplicado]

0

Meu prompt de terminal é definido usando a seguinte configuração no meu arquivo .profile :

# Prompt
GREEN=$(tput setaf 2)
LIME_YELLOW=$(tput setaf 190)
MAGENTA=$(tput setaf 5)
WHITE=$(tput setaf 7)
NORMAL=$(tput sgr0)
PS1="\[${WHITE}${MAGENTA}\]\u\[${WHITE}@${GREEN}\]\h \[${LIME_YELLOW}\]\W \[${WHITE}${NORMAL}\]$ "

De um modo geral funciona bem, mas às vezes acabo com um erro off-by-one. Depois de executar alguns comandos e acessar o histórico usando a tecla up , alguns caracteres parecem estar distorcidos. Por exemplo:

matt@laptop ~ $ git log

torna-se

matt@laptop ~ $ gitlog

ou:

matt@laptop ~ $ ssh desktop

torna-se

matt@laptop ~ $ssh desktop

O comando exibido incorretamente é executado normalmente e aparece no histórico normalmente também.

    
por Matthew 01.01.2016 / 17:14

1 resposta

2

Os marcadores \[ e \] são usados para circundar o texto que, quando exibido na tela, ocupará zero largura, como seqüências de controle que definem cores. O @ e qualquer outro texto comum deve estar fora dos marcadores.

Então, em vez de

PS1="\[${WHITE}${MAGENTA}\]\u\[${WHITE}@${GREEN}\]\h \[${LIME_YELLOW}\]\W \[${WHITE}${NORMAL}\]$ "

use isso

PS1="\[${WHITE}${MAGENTA}\]\u\[${WHITE}\]@\[${GREEN}\]\h \[${LIME_YELLOW}\]\W \[${WHITE}${NORMAL}\]$ "

Mais informações em Bash FAQ 053 .

    
por 01.01.2016 / 17:28

Tags