Colors

Git尋呼機少了,但是是什麼導致了輸出著色?

  • September 5, 2014

less根據這個執行緒,它本身不能進行語法高亮顯示。

但是,git diff它的預設尋呼機 less 很好地顯示了彩色輸出。當我將輸出重定向git diff到文件中時,看不到任何顏色轉義序列。

是否git diff知道它被發送到哪裡,並相應地格式化輸出?如何做到這一點?


我剛剛注意到 git 會為diff輸出著色(例如git diff),但是,它通常不知道如何進行語法高亮顯示。例如

git show 415fec6:log.tex

不啟用任何類似 TeX 的語法。


閱讀git資料,我發現了以下提示

diff.h

int use_color;

我之前指的是語法高亮,但那是不正確的。我的意思是輸出著色,參見例如

範例顏色輸出

Git 用於isatty()檢查 stdout 是否為 tty:這用於查看是否必須使用分頁器(pager.c)以及顏色(color.c)。

跑步:

git diff --color=always > output

顯示顏色轉義。

該死的,我在git’s 的color.c文件中找到了它:

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

引用自:https://unix.stackexchange.com/questions/153943