Pager git kurang, tapi apa yang menyebabkan pewarnaan output?

18

lessitu sendiri tidak mampu melakukan penyorotan sintaksis, menurut utas ini .

Namun, git diffdengan baik menunjukkan keluaran berwarna dalam lebih sedikit, pager defaultnya. Ketika saya mengarahkan output git diffke file, tidak ada urutan pelarian warna yang terlihat.

Apakah git difftahu ke mana ia dikirim, dan memformat output sesuai? Bagaimana seseorang melakukan itu?


Saya hanya memperhatikan bahwa git mewarnai diffoutput (mis. git diff), Namun, ia tidak tahu bagaimana cara syntax highlighting secara umum. misalnya

git show 415fec6:log.tex

tidak mengaktifkan sintaks seperti TeX.


Membaca gitsumber, saya menemukan petunjuk berikut

di diff.h:

int use_color;

Saya sebelumnya mengacu pada penyorotan sintaks , tapi itu tidak benar. Yang saya maksud adalah pewarnaan keluaran, lihat misalnya

contoh keluaran warna

Sebastian
sumber
1
Apakah Anda memiliki penyorotan sintaksis yang sebenarnya, atau hanya warna merah dan hijau untuk garis yang dihapus dan ditambahkan?
Paŭlo Ebermann
BTW: untuk membuat pewarnaan git menjadi lebih sedikit: git diff --color=always | less -r (atau less -Runtuk ANSI). BTW: untuk perintah lain yang tidak menggunakan paginasi secara default ( git difftidak), Anda dapat mengaktifkannya:git -p some_git_command
hyperpallium

Jawaban:

18

Git menggunakan isatty()untuk memeriksa apakah stdout adalah tty: ini digunakan untuk melihat apakah pager harus digunakan ( pager.c ) serta warna ( color.c ).

ysdx
sumber
waktu yang tepat, saya juga baru saja menemukannya!
Sebastian
11

Berlari:

git diff --color=always > output

menunjukkan warna lolos.

Sial saya menemukannya gitdi color.cfile:

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
sumber
3

lessdapat mendukung warna dengan -r --raw-control-charsdan-R --RAW-CONTROL-CHARS

Anda bisa menggunakan Python pygmentizeuntuk melakukan highlighting dan memasukkannya.

Untuk menggabungkannya semua konfigurasikan filter yang kurang seperti yang dijelaskan pada superuser

Mat
sumber
tautannya memang menarik, terima kasih. Apakah Anda tahu apakah gitbenar-benar menggunakan pycrizeize? Karena itu tidak terdaftar sebagai ketergantungan.
Sebastian
btw, ketika saya menjalankan proses git diffanak lesstidak ditambahkan oleh opsi apa pun (tidak -Rjuga -r). Namun, saya tidak tahu apakah git menyebutnya dengan cara khusus dan dengan demikian args tidak terlihat di htop.
Sebastian
gitmenampilkan kode pelarian warna itu sendiri. Ini juga ditulis dengan cmenambahkan Python akan menjadi ketergantungan besar. Mungkin dapat mengontrol lessmelalui lingkungan
Matt
1
mungkin via LESSenv var?
Matt
3
Ya, KURANG = FRX ditambahkan ke lingkungan (lihat pager.c ).
ysdx