El localizador de Git es less, pero ¿qué está causando el color de salida?

less sí mismo no es capaz de hacer resaltado de syntax, de acuerdo con este hilo .

Sin embargo, git diff muestra muy bien la salida coloreada en less, su buscapersonas por defecto. Cuando networkingirijo la salida de git diff a un file, no hay secuencias de escape de color visibles.

¿ git diff sabe dónde se está enviando y formatea la salida en consecuencia? ¿Cómo podría uno hacer eso?


Me di count de que git colorea la salida de diff (por ejemplo, git diff ), sin embargo, no sabe cómo resaltar la syntax en general. p.ej

 git show 415fec6:log.tex 

no habilita ninguna syntax similar a TeX.


Al leer las fonts de git , encontré las siguientes pistas

en diff.h :

 int use_color; 

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

ejemplo de salida de color

Git usa isatty() para comprobar si stdout es un tty: esto se usa para ver si se debe usar un buscapersonas ( pager.c ) y colors ( color.c ).

Corriendo:

 git diff --color=always > output 

muestra el color escapa.

Maldición, lo encontré en el file color.c git :

 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 puede admitir el color con -r --raw-control-chars y -R --RAW-CONTROL-CHARS

Puedes usar Pythons pygmentize para resaltar y canalizarlo.

Para combinarlo, configure un filter less como se describe en superusuario

    Intereting Posts