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