less
por si só não é capaz de destacar 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 redireciono a saída de git diff
para um arquivo, nenhuma sequência de escape de cores é visível.
Será que git diff
sabe onde ele está sendo enviado, e formata a saída em conformidade? Como alguém faria isso?
Acabei de notar que o git colore a diff
saída (por exemplo git diff
), no entanto, ele não sabe como destacar a sintaxe em geral. por exemplo
git show 415fec6:log.tex
não habilita nenhuma sintaxe semelhante ao TeX.
Lendo as git
fontes, encontrei as seguintes dicas
em diff.h
:
int use_color;
Anteriormente, eu estava me referindo ao realce da sintaxe , mas isso não estava correto. O que quero dizer é corante de saída, veja por exemplo
git diff --color=always | less -r
(ouless -R
para ANSI). BTW: para outros comandos que não paginam por padrão (git diff
faz), você podegit -p some_git_command
Respostas:
O Git usa
isatty()
para verificar se stdout é um tty: é usado para verificar se um pager deve ser usado ( pager.c ) e também cores ( color.c ).fonte
Corrida:
mostra a cor que sai.
Nada eu encontrei-o em
git
'scolor.c
arquivo:fonte
less
pode suportar cores com-r
--raw-control-chars
e-R
--RAW-CONTROL-CHARS
Você pode usar o Pythons
pygmentize
para realçar e inserir.Para combinar tudo, configure um filtro menos conforme descrito no superusuário
fonte
git
está realmente usando pycementize? Porque não está listado como uma dependência.git diff
oless
processo filho não é anexado por nenhuma opção (nem-R
nem-r
). No entanto, não sei se o git o chama de uma maneira especial e, portanto, os argumentos não são visíveishtop
.git
gera o código de escape de cores em si mesmo. Também está escrito,c
portanto, adicionar o Python seria uma enorme dependência. Ele pode ser capaz de controlarless
através do ambienteLESS
env var?