O paginador Git é menor, mas o que está causando a coloração de saída?

15

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.

    
por Sebastian 05.09.2014 / 14:17

3 respostas

16

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 ).

    
por 05.09.2014 / 15:33
11

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;                                                                 
}  
    
por 05.09.2014 / 15:30
3

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

    
por 05.09.2014 / 14:35