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.