Problema com o comando promp dando um ciclo ao usar cores e tentando colocar git ramos no prompt de comando

1

tl: dr: Eu quero que meu prompt de comando seja personalizável com qualquer cor que eu quiser e também exiba o branch git atual em que estou.

Estou ciente de que há pelo menos seis postagens diferentes fazendo uma pergunta extremamente semelhante. Eu li os que encontrei e ainda tenho meu prompt de comando dando um ciclo e tendo problemas mesmo com a sugestão deles quando insiro cores. Existem alguns detalhes que tornam minha pergunta diferente e que vale a pena, espero.

Atualmente, esta é a aparência da minha variável PS1:

PS1='\[\e[0;31m\u \W $(__git_ps1 "(%s)")\$ \e[m\]'

Como os outros posts sugeriram, inseri o seguinte:

\[...\]

Estou ciente de que:

ctrl + L 

limpa a tela, mas isso não resolve o problema, ou seja, o prompt de comando não deve estar agindo de forma estranha.

Um problema específico é que, depois de digitar algo e depois excluí-lo, o prompt de comando desaparece todos juntos. Quando tento olhar meu histórico de comandos, ele também substitui o prompt de comando pelo histórico. Acredito que os comandos são executados corretamente, mas não sei por que ele se comporta de maneira estranha.

Além disso, o __git_ps1 é uma função em um script de shell para o git que eu baixei em:

link

Não tenho certeza se essa função é o problema ou se é o tipo diferente de aspas. Eu tentei citações diferentes. Eu também tentei armazenar o valor do que __git_ps1 retorna e depois colocá-lo na string. Eu acho que tentei corretamente, mas se alguém tem algo que funcione, eu ficaria muito grato!

Além disso, estou usando o bash e um MAC com o Mavericks. Apenas no caso de isso ser útil.

    
por Charlie Parker 31.12.2013 / 19:24

1 resposta

1

Tente colocar os parênteses \[...\] ao redor das seqüências de escape de cores. Esses colchetes dizem bash que o conteúdo tem 0 caracteres de comprimento quando exibido assim se você colocar caracteres reais dentro então bash vai pensar que sua linha é menor do que realmente é.

Para endereçar seus comentários (e melhorar essa resposta), o prompt de trabalho:

'\[\e[0;31m\]\u \W $(__git_ps1 "(%s)")\$ \[\e[m\]'

difere do original pelo uso dos colchetes com escape \[ e \] . As sequências entre estas braçadeiras, e. \e[0;31m é uma sequência de escape que altera a cor do texto no seu prompt e \e[m é uma seqüência de escape que retorna a cor à cor padrão. Estas sequências não escrevem caracteres reais para o terminal, então você precisa dizer ao bash para não contá-los em relação ao tamanho do prompt; os colchetes são como comunicar isso ao bash.

Em seu prompt original, você tinha os colchetes ao redor do prompt inteiro, e isso informa ao bash que seu prompt tem 0 bytes de comprimento e, portanto, seu prompt será sobrescrito sob determinadas circunstâncias que você descobriu que antecederam o post. Se você não tivesse colchetes, você notaria o oposto e as coisas apareceriam alguns caracteres após o prompt, em vez de apenas alguns.

Meu comentário sobre o prompt do git foi apenas para garantir que o tamanho do prompt estava sendo rastreado corretamente. Se a cor não estiver mudando, é provável que você esteja bem. Uma regra básica para escrever seu prompt é colocar os códigos de cores (as seqüências \e...m ) dentro dos colchetes e nada mais.

    
por 31.12.2013 / 19:33

Tags