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


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:



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;                                                                 
}  

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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.