Git pager es menor, pero ¿qué está causando el color de salida?


18

lessen sí mismo no es capaz de resaltar la sintaxis, de acuerdo con este hilo .

Sin embargo, git diffmuestra muy bien la salida en color en menos, su buscapersonas predeterminado. Cuando redirijo la salida git diffa un archivo, no se ven secuencias de escape de color.

¿ git diffSabe a dónde se envía y formatea la salida en consecuencia? ¿Cómo haría uno eso?


Acabo de notar que git colorea la diffsalida (por ejemplo git diff), sin embargo, no sabe cómo resaltar la sintaxis en general. p.ej

git show 415fec6:log.tex

no habilita ninguna sintaxis similar a TeX.


Leyendo las gitfuentes, encontré las siguientes pistas

en diff.h:

int use_color;

Anteriormente me refería al resaltado de sintaxis , pero eso no era correcto. Lo que quiero decir es salida de color, ver por ejemplo

salida de color de ejemplo


1
¿Tiene resaltado de sintaxis real o solo el color rojo y verde para las líneas eliminadas y agregadas?
Paŭlo Ebermann

Por cierto: para obtener coloración git en menos: git diff --color=always | less -r (o less -Rpara ANSI). Por cierto: para otros comandos que no paginan por defecto (lo git diffhace), puede git -p some_git_command
activarlo

Respuestas:


18

Git usa isatty()para verificar si stdout es un tty: esto se usa para ver si se debe usar un localizador ( pager.c ) así como colores ( color.c ).


buen momento, también lo encontré!
Sebastian

11

Corriendo:

git diff --color=always > output

Muestra los escapes de color.

Maldición lo encontré en gitel color.carchivo de:

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;                                                                 
}  

3

lesspuede soportar color con -r --raw-control-charsy-R --RAW-CONTROL-CHARS

Puede usar Pythons pygmentizepara resaltar y canalizarlo.

Para combinarlo todo, configure un filtro menos como se describe en el superusuario


El enlace es realmente interesante, gracias. ¿Sabes si gitrealmente está usando pygmentize? Porque no aparece como una dependencia.
Sebastian

por cierto, cuando ejecuto git diffel lessproceso hijo no se agrega ninguna opción (ni -Rtampoco -r). Sin embargo, no sé si git lo llama de una manera especial y, por lo tanto, los argumentos no son visibles htop.
Sebastian

gitgenera el código de escape de color por sí mismo. También está escrito, por clo que agregar Python sería una gran dependencia. Podría ser capaz de controlar a lesstravés del medio ambiente
Matt

1
tal vez a través de la LESSenv var?
Matt

3
Sí, LESS = FRX se agrega al entorno (ver pager.c ).
ysdx
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.