Git pager è inferiore, ma cosa sta causando la colorazione dell'output?


18

lessdi per sé non è in grado di eseguire l'evidenziazione della sintassi, secondo questo thread .

Tuttavia, git diffmostra bene l'output colorato in meno, il suo cercapersone predefinito. Quando reindirizzo l'output di git diffin un file, non sono visibili sequenze di escape colore.

Sa git diffdove viene inviato e formatta l'output di conseguenza? Come si farebbe?


Ho appena notato che git colora l' diffoutput (ad es. git diff), Tuttavia, non sa come evidenziare la sintassi in generale. per esempio

git show 415fec6:log.tex

non abilita alcuna sintassi simile a TeX.


Leggendo le gitfonti, ho trovato i seguenti suggerimenti

in diff.h:

int use_color;

In precedenza mi riferivo all'evidenziazione della sintassi , ma ciò non era corretto. Ciò che intendo è la colorazione in uscita, vedi ad es

esempio di output a colori


1
Hai qualche evidenziazione della sintassi reale o solo il colore rosso e verde per le linee rimosse e aggiunte?
Paŭlo Ebermann,

A proposito: per ottenere colorazione git in meno: git diff --color=always | less -r (o less -Rper ANSI). A proposito: per altri comandi che non impaginano di default (lo git difffa) puoi git -p some_git_command
attivarlo

Risposte:


18

Git usa isatty()per verificare se stdout è un tty: questo è usato per vedere se un cercapersone deve essere usato ( pager.c ) così come i colori ( color.c ).


ottimo tempismo, l'ho appena trovato!
Sebastian,

11

In esecuzione:

git diff --color=always > output

mostra le fughe di colore.

Damn Ho trovato in git's color.cdi file:

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

lesspuò supportare il colore con -r --raw-control-charse-R --RAW-CONTROL-CHARS

Puoi usare Pythons pygmentizeper fare l'evidenziazione e inserirla.

Per combinare tutto, configura un filtro in meno come descritto sul superutente


il link è davvero interessante, grazie. Sai se gitsta effettivamente usando pygmentize? Perché non è elencato come dipendenza.
Sebastian,

a proposito, quando eseguo git diffil lessprocesso figlio non è aggiunto da nessuna opzione (né -R-r). Tuttavia, non so se git lo chiama in un modo speciale e quindi gli argomenti non sono visibili in htop.
Sebastian,

gitemette il codice di escape colore è di per sé. È anche scritto in cmodo che l'aggiunta di Python sarebbe un'enorme dipendenza. Potrebbe essere in grado di controllare lesstramite l'ambiente
Matt,

1
forse via LESSenv var?
Matt,

3
Sì, LESS = FRX viene aggiunto all'ambiente (vedere pager.c ).
ysdx,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.