A linha terminal não está agrupando corretamente [duplicado]

2
Estou tendo um problema estranho com o meu terminal, e depois de ler on-line descobri que é provável por causa da minha configuração do PS1, no entanto, eu olhei para ele, e parece corresponder ao que as pessoas estão dizendo, então eu Não tenho certeza se estou ou não fazendo algo errado.

PS1='\[\e[1;36m\]\u\[\e[m\]\[\e[0;31m\]\a@\[\e[m\]\[\e[1;36m\]\aubuntu\[\e[m\]\[\e[1;31m\]\a:~>\[\e[m\]'

Alguém para identificar o que pode estar errado?

Uma maneira que eu tentei combater isso foi configurar stty colunas para 1000, mas isso fez muitas outras coisas piores (como ls e vim).

    
por Mallachar 11.03.2015 / 05:22

2 respostas

0

Editar para esclarecer: Eu já vi problemas como esse no passado devido ao escape incorreto de cores não impressas. No meu caso, foi devido a não ter \[ na frente de cada seqüência de escape, no seu caso, pode ser mais para não reconhecer '\ e', então eu recomendaria substituir \ e \ 033 certificando-se de que você sempre tem [\ 033 na frente de cada [x; yzm] para suas cores. Eu presumo \e[m\] é para desativar cores, eu usaria "\[3[0m\]" para isso (principalmente porque eu sei que funciona em todos os casos) Você pode considerar a configuração como uma variável da mesma maneira que eu tenho abaixo com PMT_Color_Off para arrumar seu prompt e facilitar a depuração. Eu mostrei exemplos do que faço abaixo.

Estou a fugir das minhas cores, como PMT_Red="\[3[0;31m\]" , em que, para não solicitar, é apenas Red="3[0;31m"

Para desativar a cor, uso PMT_Color_Off="\[3[0m\]" e Color_Off="3[0m" para não solicitar

uma cópia de trabalho do prompt em uma das minhas máquinas de desenvolvimento é

export PS1="\[3[01;33m\]$(ifconfig | grep "inet" | grep -v "127.0.0.1" | awk '{print $2}' | awk -F: '{print $2}') \[3[01;32m\]\u@\h \[3[01;34m\]\[3[01;33m\]\w #\[3[00m\] "
O

link também usa o escape \ 033 em vez de \ e

Eu testei o meu em vários emuladores de terminal, incluindo xterm, gnome-terminal, terminologia e o buffer de quadros

    
por 11.03.2015 / 06:01
1

Certifique-se de que todos os bytes não imprimíveis em seu PS1 estejam contidos em \[ \] . Isso ocorre porque o bash conta o comprimento deles no comprimento total do seu prompt, a menos que eles sejam "escapados" adequadamente. Bash, em seguida, usa o tamanho do prompt para determinar quando precisa quebrar a linha. Eu acho que isso é o que está causando o problema da quebra de linha estranha em comandos excessivamente longos.

Eu também consegui encontrar outra troca de pilha AQUI que pode ser de uso.

    
por 11.03.2015 / 06:05