O comentário de egmont conta sobre watch
não reconhecer ANSI 39 (redefinir somente a cor de primeiro plano). É ^[[39m
, conforme indicado por WJAndrea . Outros responderam que é um erro em procps-ng
.
Em outros comandos git, como diff
, é notório que cores strongs funcionam, mas qualquer texto não colorido que se segue mantém a cor anterior, até que uma nova cor em negrito apareça. A razão é que as cores strongs especificam '^ [[ 1;
## m'.
Então sabíamos onde nos concentrar.
Primeiro fiz um regex rápido com sed
para substituir todas as cores em negrito e estava funcionando bem. Exigia apenas uma cor em negrito principal, porque alguns comandos git não são iniciados em cores e havia um texto regular inicial até o primeiro código de cor.
Eu testei durante esta tarde, e aquele texto em negrito massivo estava chamando minha atenção.
% bl0ck_qu0te%
Outro problema é que codifiquei uma cor cinza claro em negrito para substituir o texto sem cor: as pessoas que usam outros esquemas de cores podem gritar comigo.
Para resolver tudo, mudei minha ideia inicial para algo mais simples. Em vez de negrito o texto, só preciso adicionar um 0
para tornar o código de cor válido para watch
. Mudou alguns personagens e voilà! As cores aparecem como esperado, os textos em negrito mantêm o significado e a janela fica mais bonita.
Testei o desempenho com um histórico de confirmação enorme (> 90k confirmações) e há um atraso considerável de alguns milissegundos, se você usar os --graph
ou --date-order
sinalizadores e talvez outros, mas --oneline
parece seguro. Mesmo pedindo para registrar apenas alguns commits, o Git precisa processar todo o histórico para gerar o gráfico.
Mas esse caso foi extremo. E você não precisa de uma atualização de 0,1s. 3 ou 4s parece ser bom. watch -n #
Meu código atual é o seguinte:
#!/bin/bash
git -c color.ui=always "$@" | sed -r $'s/3\[([[:digit:]][[:digit:]])m/3\[0;\1m/g; s/3\[m/3\[0m/g'
Eu salvei em ~/bin/git-colored
com permissão + x e ele pode ser usado com git colored <git command>
Resolvendo o post principal: watch -c 'git colored log --oneline --graph'
Eu criei um gist com esse arquivo, onde você pode ver o histórico de códigos.
TL; DR
Existe um bug em um pacote do Ubuntu. O código de uma linha acima é uma solução alternativa para quem não pode / não deseja atualizar o sistema, basicamente fazendo o que está em aqui .