O Git usa isatty() para checar se o stdout é um tty: isto é usado para ver se um pager deve ser usado ( pager.c ), bem como cores ( color.c ).
O less em si não é capaz de realçar a sintaxe, de acordo com este tópico .
No entanto, git diff mostra bem a saída colorida em menos, seu pager padrão. Quando eu redireciono a saída de git diff para um arquivo, nenhuma seqüência de escape de cores é visível.
O git diff sabe para onde está sendo enviado e formata a saída de acordo? Como alguém faria isso?
Acabei de notar que o git colore o diff output (por exemplo, git diff ), no entanto, ele não sabe como realçar a sintaxe em geral. por exemplo,
git show 415fec6:log.tex
não habilita nenhuma sintaxe parecida com o TeX.
Lendo as fontes git , encontrei as seguintes dicas
em diff.h :
int use_color;
Eu estava me referindo anteriormente ao destaque da sintaxe , mas isso não estava correto. O que quero dizer é a coloração de saída, veja por exemplo.
Em exibição:
git diff --color=always > output
mostra a cor escapa.
Porra eu encontrei no arquivo git color.c :
static int check_auto_color(void)
{
if (color_stdout_is_tty < 0)
color_stdout_is_tty = isatty(1);
if (color_stdout_is_tty || (pager_in_use() && pager_use_color)) {
char *term = getenv("TERM");
if (term && strcmp(term, "dumb"))
return 1;
}
return 0;
}
less pode suportar cor com -r --raw-control-chars e -R --RAW-CONTROL-CHARS
Você pode usar o Pythons pygmentize para fazer o realce e canalizá-lo.
Para combinar, configure um filtro conforme descrito no superusuário