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


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 ).


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

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.