Cor no prompt do bash atrapalha a saída do git

1

Mudei meu .bashrc para incluir export PS1="3[1;33m\u@\h: \w>3[0m" para que meu prompt de shell fosse colorido, mas parece que o 3 bagunça a saída git (log e diff, pelo menos). Eu vejo algo como: ESC[33mcommit long-commit-number ESC[m .

Eu também tentei \e[ em vez de 3[ , mas ainda vejo o ESC[33m . Existe uma maneira de evitar isso ainda manter a cor para o meu prompt de shell?

    
por undefinedvariable 23.04.2014 / 17:25

1 resposta

3

Sua configuração de prompt está incorreta, mas não está relacionada ao problema do git.

Para fazer a edição de linhas funcionar (ou seja, para saber onde o cursor está após a impressão do prompt), o bash precisa saber exatamente a largura do prompt. Ele não pode reconhecer todas as possíveis seqüências de escape específicas do terminal lá fora, portanto, é necessário informar explicitamente que certas partes do prompt são invisíveis; eles precisam estar cercados pelos códigos \[ e \] . Por exemplo:

PS1="\[3[1;33m\]\u@\h: \w>\[3[m\]"

Sem fazer isso, digitar um comando com mais de uma linha resultará na segunda linha substituindo a primeira e outras falhas.

No entanto, nada disso afeta o git. O motivo git log imprime ESC[33m porque o próprio git quer que a linha seja mostrada em amarelo - isso sempre acontece quando a opção de cor, color.ui , está ativada. A razão pela qual você a palavra "ESC" em vez de amarelo é porque seu $ PAGER não reconhece a sequência; acha que você está lendo um arquivo com dados binários (em oposição ao texto legível por humanos).

Se você estiver usando o pager less padrão como $ PAGER, pode ser que tenha adicionado algumas opções personalizadas à variável $LESS e tenha esquecido a que permite cores, -R . Normalmente git configura $LESS internamente ao executar um pager, mas se você definir essa variável você mesmo git não irá tocá-lo e você terá que adicionar -R a ele:

export LESS="R"

export LESS="e M q R F X z -3"

... ou algo nesse sentido.

    
por 23.04.2014 / 17:35