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


18

lessこのスレッドによると、それ自体は構文の強調表示を行うことができません。

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

DOESは、git diffそれが送信され、それに応じて出力をフォーマットのWHERE知っていますか?どうすればいいですか?


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

git show 415fec6:log.tex

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


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

diff.h

int use_color;

以前は構文の強調表示について言及していましたが、それは正しくありませんでした。私が意味するのは、出力の色付けです。たとえば

カラー出力の例


1
実際の構文の強調表示、または削除および追加された行の赤と緑の色だけがありますか?
パエロエベルマン14

ところで:gitの色付けをlessに:(git diff --color=always | less -r またはless -RANSIの場合)。ところで:デフォルトでページネーションされない(git diffそうする)他のコマンドについては、それをオンに切り替えることができます:git -p some_git_command
hyperpallium

回答:


18

Gitはisatty()、stdoutがttyかどうかを確認するために使用します。これは、ページャーを使用する必要があるか(pager.c)、色(color.c)を確認するために使用します。


素晴らしいタイミング、私もそれを見つけました!
セバスチャン14

11

ランニング:

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

3

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

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

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


リンクは本当に興味深いです、ありがとう。git実際にpygmentizeを使用しているかどうか知っていますか?依存関係としてリストされていないためです。
セバスチャン14

ところで、私が子プロセスを実行するとgit difflessオプションが追加されませ-Rん(どちらも-r)。しかし、gitが特別な方法でgitを呼び出すかどうかはわかりませんhtop。したがって、引数はで表示されません。
セバスチャン14

gitカラーエスケープコードを出力します。またc、Pythonの追加が大きな依存関係になるように記述されています。less環境を介して制御できる場合があります
マット14

1
おそらくLESSenv var 経由?
マット14

3
はい、LESS = FRXが環境に追加されます(pager.cを参照)。
ysdx 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.