Prompt problema de customização com cláusula if

0

Eu recentemente ajustei um pouco meu PS1. O código da seguinte forma:

PS1='$(if [[ $? != 0 ]]; then echo " \e[91m\e[0m"; fi) \u $(assemble_prompt)$ '

O caractere ausente é de nerd-fonts e não importa em minha pergunta (assim como assemble_prompt função).

O problema que encontrei é uma PS1 quebrada quando reduzo o tamanho da janela de terminal para o tamanho de um prompt (aprox.). Então, parece ignorar a configuração do PS1 e define o PS1 como $ chars apenas (veja a captura de tela). Note que quando eu começar a digitar, simplesmente sobrescreve meu prompt personalizado nesta ocasião.

Eureduzioproblemaparaumacláusulaifqueadiciona"fail" char se o comando anterior não foi bem-sucedido. Se eu remover essa parte, tudo funciona como esperado.

Existe uma maneira de manter a parte da cláusula if , mas corrigir o problema com a redefinição do PS1 quando o tamanho da janela é muito pequeno?

P.S. Eu uso rxvt-unicode como meu terminal, mas o problema também persiste em todos os outros terminais (testado xterm , st ).

    
por ddnomad 09.04.2017 / 18:22

1 resposta

3

Você provavelmente deseja incluir os códigos de controle do terminal em \[...\] para informar ao Bash que eles não estão imprimindo caracteres. Caso contrário, eles irão confundir o shell quando tentarem contar a largura do prompt.

Portanto, use "\[\e[91m\]xxx\[\e[0m\]" .

No manual :

\[  Begin a sequence of non-printing characters. 
    This could be used to embed a terminal control sequence into the prompt.
\]  End a sequence of non-printing characters.
    
por 09.04.2017 / 18:46