web-dev-qa-db-ja.com

Gitページャーは少ないですが、出力の色付けの原因は何ですか?

this thread によると、less自体は構文の強調表示を行うことができません。

ただし、git diffは、デフォルトのページャーであるカラー出力を少ない色でうまく表示します。 git diffの出力をファイルにリダイレクトすると、カラーエスケープシーケンスが表示されません。

git diffは、送信先を知っており、それに応じて出力をフォーマットしますか?どうすればいいの?


Gitがdiffの出力(例:git diff)に色を付けることに気づきましたが、一般的に構文を強調表示する方法がわかりません。例えば.

git show 415fec6:log.tex

teXに似た構文を有効にしません。


gitソースを読んで、私は次のヒントを見つけました

diff.h

int use_color;

以前は構文の強調表示を参照していましたが、それは正しくありませんでした。私が意味することは、出力の色付けです。

example color output

19
Sebastian

Gitはisatty()を使用して、stdoutがttyであるかどうかを確認します。これは、ページャー( pager.c )および色( color .c )。

18
ysdx

ランニング:

git diff --color=always > output

エスケープを示します。

いまいましいgitcolor.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;                                                                 
}  
12
Sebastian

less-r--raw-control-charsおよび-R--RAW-CONTROL-CHARSで色をサポートできます

Python pygmentize を使用して強調表示を行い、それをパイプすることができます。

それをすべて組み合わせるには、より少ないフィルターを設定します スーパーユーザーで説明されているように

3
Matt