Git-Pager ist weniger, aber was verursacht die Ausgabe-Färbung?

18

lessselbst ist laut diesem Thread nicht in der Lage, Syntax-Hervorhebungen vorzunehmen .

Die git difffarbige Ausgabe wird jedoch in weniger als dem Standard-Pager angezeigt. Wenn ich die Ausgabe von git diffin eine Datei umleitung, sind keine Escape-Farbsequenzen sichtbar.

Weiß git diff, wohin es gesendet wird, und formatiert die Ausgabe entsprechend? Wie würde man das machen?


Ich habe gerade bemerkt, dass Git die diffAusgabe färbt (zB git diff), aber es weiß nicht, wie man im Allgemeinen Syntax-Hervorhebungen macht. z.B

git show 415fec6:log.tex

aktiviert keine TeX-ähnliche Syntax.


Beim Lesen der gitQuellen habe ich die folgenden Hinweise gefunden

in diff.h:

int use_color;

Ich bezog mich zuvor auf Syntaxhervorhebung , aber das war nicht korrekt. Was ich meine, ist Ausgabe Färbung, siehe z

Beispiel Farbausgabe

Sebastian
quelle
1
Haben Sie eine echte Syntaxhervorhebung oder nur die rote und grüne Farbe für entfernte und hinzugefügte Linien?
Paŭlo Ebermann
Übrigens: um Git-Farben in weniger zu bekommen: git diff --color=always | less -r (oder less -Rfür ANSI). Übrigens: Für andere Befehle, die nicht standardmäßig paginieren (tun git diff), können Sie Folgendes aktivieren :git -p some_git_command
Hyperpallium

Antworten:

18

Git isatty()prüft, ob stdout ein tty ist: Hiermit wird geprüft, ob sowohl ein Pager ( pager.c ) als auch Farben ( color.c ) verwendet werden müssen.

ysdx
quelle
tolles Timing, ich habe es auch gerade gefunden!
Sebastian
11

Laufen:

git diff --color=always > output

zeigt die Farbe entweicht.

Verdammt, ich habe es in gitder color.cDatei gefunden:

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;                                                                 
}  
Sebastian
quelle
3

lesskann Farbe mit -r --raw-control-charsund stützen-R --RAW-CONTROL-CHARS

Sie können Pythons verwenden pygmentize, um die Hervorhebung vorzunehmen und die Pipe einzuleiten.

Um alles zu kombinieren, konfigurieren Sie einen weniger Filter, wie im Superuser beschrieben

Matt
quelle
der link ist ja interessant, danke. Wissen Sie, ob gitPygementize tatsächlich verwendet wird? Weil es nicht als Abhängigkeit aufgeführt ist.
Sebastian
Übrigens wird beim Ausführen git diffdes untergeordneten lessProzesses keine Option (weder -Rnoch -r) angehängt . Ich weiß jedoch nicht, ob git es auf besondere Weise nennt und daher die Argumente in nicht sichtbar sind htop.
Sebastian
gitgibt den eigenen Farb-Escape-Code aus. Es ist auch so geschrieben, cdass das Hinzufügen von Python eine enorme Abhängigkeit darstellt. Es könnte in der Lage sein, lessüber die Umgebung zu steuern
Matt
1
vielleicht über die LESSenv var?
Matt
3
Ja, LESS = FRX wird zur Umgebung hinzugefügt (siehe pager.c ).
Ysdx