Pager Git jest mniejszy, ale co powoduje kolorowanie wydruku?

18

lesszgodnie z tym wątkiem sam nie jest w stanie wykonać podświetlania składni .

Jednak git diffładnie pokazuje kolorowe wydruki w mniejszej ilości, domyślny pager. Kiedy przekierowuję dane wyjściowe git diffdo pliku, sekwencje specjalne kolorów nie są widoczne.

Czy git diffwie, gdzie jest wysyłany i odpowiednio formatuje dane wyjściowe? Jak by to zrobić?


Właśnie zauważyłem, że git zabarwia dane diffwyjściowe (np. git diff), Jednak ogólnie nie wie, jak podświetlić składnię. na przykład

git show 415fec6:log.tex

nie włącza żadnej składni podobnej do TeX-a.


Czytając gitźródła, znalazłem następujące wskazówki

w diff.h:

int use_color;

Wcześniej mówiłem o podświetlaniu składni , ale to nie było poprawne. Chodzi mi o kolorowanie wyjściowe, patrz np

przykładowy wydruk w kolorze

Sebastian
źródło
1
Czy masz jakieś prawdziwe wyróżnianie składni, czy tylko czerwony i zielony kolor dla usuniętych i dodanych linii?
Paŭlo Ebermann
BTW: aby zmienić kolor gita na mniej: git diff --color=always | less -r (lub less -Rdla ANSI). BTW: w przypadku innych poleceń, które domyślnie git diffnie git -p some_git_command
dzielą się

Odpowiedzi:

18

Git isatty()sprawdza, czy stdout jest tty: służy do sprawdzenia, czy należy użyć pager ( pager.c ), a także kolorów ( color.c ).

ysdx
źródło
świetny czas, ja też go znalazłem!
Sebastian
11

Bieganie:

git diff --color=always > output

pokazuje kolor ucieka.

Cholera znalazłem go w git„s color.cpliku:

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
źródło
3

lessmoże obsługiwać kolory za pomocą -r --raw-control-charsi-R --RAW-CONTROL-CHARS

Możesz użyć Pythonów, pygmentizeaby zrobić wyróżnienie i wprowadzić go do potoku.

Aby to wszystko połączyć, skonfiguruj mniej filtrów zgodnie z opisem w superużytkowniku

Matt
źródło
link jest naprawdę interesujący, dzięki. Czy wiesz, czy gitfaktycznie używa pygmentacji? Ponieważ nie ma go na liście zależności.
Sebastian
btw, kiedy uruchamiam proces git diffpotomny lessnie jest dołączany przez żadną opcję (ani -Rani -r). Nie wiem jednak, czy git wywołuje go w specjalny sposób, dlatego argumenty nie są widoczne htop.
Sebastian
gitwyświetla kod ucieczki koloru, który jest sam. Jest również napisane, cwięc dodanie Pythona byłoby ogromną zależnością. Może być w stanie kontrolować lessza pośrednictwem środowiska
Matt
1
może przez LESSenv var?
Matt
3
Tak, LESS = FRX jest dodawany do środowiska (patrz pager.c ).
ysdx