less
en sí mismo no es capaz de resaltar la sintaxis, de acuerdo con este hilo .
Sin embargo, git diff
muestra muy bien la salida en color en menos, su buscapersonas predeterminado. Cuando redirijo la salida git diff
a un archivo, no se ven secuencias de escape de color.
¿ git diff
Sabe 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 diff
salida (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 git
fuentes, 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
git diff --color=always | less -r
(oless -R
para ANSI). Por cierto: para otros comandos que no paginan por defecto (logit diff
hace), puedegit -p some_git_command
Respuestas:
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 ).fuente
Corriendo:
Muestra los escapes de color.
Maldición lo encontré en
git
elcolor.c
archivo de:fuente
less
puede soportar color con-r
--raw-control-chars
y-R
--RAW-CONTROL-CHARS
Puede usar Pythons
pygmentize
para resaltar y canalizarlo.Para combinarlo todo, configure un filtro menos como se describe en el superusuario
fuente
git
realmente está usando pygmentize? Porque no aparece como una dependencia.git diff
elless
proceso hijo no se agrega ninguna opción (ni-R
tampoco-r
). Sin embargo, no sé si git lo llama de una manera especial y, por lo tanto, los argumentos no son visibleshtop
.git
genera el código de escape de color por sí mismo. También está escrito, porc
lo que agregar Python sería una gran dependencia. Podría ser capaz de controlar aless
través del medio ambienteLESS
env var?