Git pager 较少,但是是什么导致输出着色呢?

Git pager 较少,但是是什么导致输出着色呢?

less根据说法,它本身无法进行语法突出显示这个线程

然而,git diff它在 less 的默认分页器中很好地显示了彩色输出。当我将 的输出重定向git diff到文件中时,没有可见的颜色转义序列。

是否git diff知道它被发送到哪里,并相应地格式化输出?一个人会怎样做呢?


我刚刚注意到 git 对diff输出进行了着色(例如git diff),但是,它通常不知道如何进行语法突出显示。例如

git show 415fec6:log.tex

不启用任何类似 TeX 的语法。


阅读git来源,我发现了以下提示

diff.h

int use_color;

我之前提到过语法高亮,但这是不正确的。我的意思是输出着色,参见例如

颜色输出示例

答案1

Git 用于isatty()检查 stdout 是否为 tty:这用于查看是否必须使用寻呼机(寻呼机.c)以及颜色(颜色.c)。

答案2

跑步:

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

你可以使用Pythonpygmentize进行突出显示并将其输入。

要将其全部组合起来,请配置 less 过滤器如超级用户所述

相关内容