Não há quebra de linha com ramificação git colorida no prompt bash [duplicado]

0

Eu adicionei uma função ao meu .bashrc para analisar a ramificação do git na qual estou trabalhando atualmente e exibi-la no meu bash-prompt de acordo com vários tutoriais sobre esse tópico. Meu snippet de código é assim:

parse_git_branch() { 
   BRANCH=$(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)//')
   if [ "$BRANCH" != "" ]; then
      echo -e "[\e[1;31m⎇ $BRANCH\e[1;37m]"
   else
      echo "╼"
   fi
}
if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[3[1;37m\]┌[\[3[1;32m\]\u\[3[1;37m\]@\[3[1;32m\]\H\[3[1;37m\]] [\w]\n└$(parse_git_branch) \[3[00m\]'

else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

Isto faz como esperado imprimir o ramo git atual em vermelho se houver um: captura de tela

No entanto, se o comando for muito longo, a linha não será mais interrompida: outra captura de tela

O problema desaparece se eu não usar o sinal -e para echo em parse_git_branch , mas preciso colorir o ramo vermelho.

Alguma idéia de como corrigir isso?

Todas as outras soluções que encontrei enquanto pesquisava isso apenas imprimem o ramo git colorido ou nada, então elas não funcionam bem para mim, já que eu quero imprimir o branch git se houver um e se não imprima esse -character em branco.

    
por rolly 19.03.2018 / 12:09

1 resposta

0

Embrulhe as sequências de cor na linha de leitura como segue:

echo -e "[
echo -e "[%pre%1\e[1;31m%pre%2⎇ $BRANCH%pre%1\e[1;37m%pre%2]"
1\e[1;31m%pre%2⎇ $BRANCH%pre%1\e[1;37m%pre%2]"

As saídas de linha de leitura são \[21 no início de uma seqüência de não impressão e \] no final. Estes são equivalentes a %code% e %code% , respectivamente, na string PS1.

Fonte: resposta do archemiro em bash prompt e ecoando cores dentro de uma função - Stack Overflow

    
por wjandrea 22.03.2018 / 01:31