colorize hostname no prompt da linha de comando [duplicate]

2

Desejo definir uma cor personalizada para a parte do nome do host do prompt da linha de comando (no bash).

No meu arquivo .bashrc , o prompt da linha de comando padrão é:

PS1='[\u@\h \W]\$ '

Para colorir apenas o nome do host, criei este prompt:

PS1='[\u@\e[40;36m\h\e[0m \W]\$ '

Eu usei cores diferentes para cada host em que trabalho. A parte de colorização parece estar funcionando como esperado. No entanto, com o prompt acima, a navegação na linha de comando se torna disfuncional. Por exemplo, às vezes não consigo mover o cursor para o início ou o fim da linha. Se eu voltar ao prompt padrão, tudo funcionará corretamente novamente.

O que há de errado com o meu prompt colorido? Como posso especificar corretamente uma cor apenas para o nome do host?

Não importa para essa pergunta, mas estou executando o Arch Linux KDE e trabalho no Konsole.

    
por MountainX 08.05.2018 / 02:28

1 resposta

2

Antecedentes

Após a expansão ser feita para as sequências de prompt especiais, cada caractere restante no prompt é contado para calcular o tamanho do prompt.

Problema

Como você adicionou as sequências de cores, que na verdade não devem ser contadas para a duração de um prompt, bash agora acha que seu prompt é mais longo do que realmente é.
Por causa disso, bash não pode saber onde está o começo ou o fim da linha e isso cria disfunções mencionadas.

Solução

De bash manual:

\[    Begin a sequence of non-printing characters, which could be used to 
      embed a terminal control sequence into the prompt

\]    End a sequence of non-printing characters

Basta adicionar essas informações em torno das seqüências de escape de cores para que elas não sejam contadas para o tamanho do prompt.

    
por 08.05.2018 / 02:55