힘내 호출기는 적지 만 출력 색상을 일으키는 원인은 무엇입니까?


18

less이 스레드 에 따르면 자체는 구문 강조를 수행 할 수 없습니다 .

그러나 git diff기본 페이저 인 채색 출력을 멋지게 표시합니다. 출력을 git diff파일로 리디렉션하면 색상 이스케이프 시퀀스가 ​​표시되지 않습니다.

합니까는 git diff그것이 존재의 보낸 알고, 그에 따라 형식 출력을? 어떻게할까요?


방금 git이 diff출력 (예 :)의 색상을 지정하는 것을 보았지만 git diff일반적으로 구문 강조 표시 방법을 모릅니다. 예 :

git show 415fec6:log.tex

TeX와 유사한 구문을 사용하지 않습니다.


git소스를 읽으면서 다음 힌트를 찾았습니다.

에서 diff.h:

int use_color;

나는 이전에 구문 강조를 언급하고 있었지만 정확하지 않았다. 내 말은 출력 색상입니다. 예를 들어

컬러 출력 예


1
실제 구문 강조 표시가 있습니까, 아니면 제거 및 추가 된 행의 빨강 및 녹색 만 있습니까?
Paŭlo Ebermann

BTW : git 색상을 적게 : git diff --color=always | less -r (또는 less -RANSI의 경우) BTW : 기본적으로 페이지를 매기 지 않는 다른 명령의 경우 git diff스위치를 켤 수 있습니다.git -p some_git_command
hyperpallium

답변:


18

Git은 isatty()stdout이 tty인지 확인하기 위해 사용 합니다 : 이것은 호출기 ( pager.c )와 색상 ( color.c )을 사용 해야하는지 확인하는 데 사용됩니다 .


훌륭한 타이밍, 나는 또한 그것을 발견했다!
Sebastian

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

파이썬 pygmentize을 사용 하여 강조 표시를하고 파이프에 넣을 수 있습니다 .

이를 모두 결합하려면 수퍼 유저에 설명 된대로 적은 필터 구성하십시오


링크는 참으로 흥미 롭습니다. git실제로 피그먼트 화를 사용하고 있는지 알고 있습니까? 종속성으로 표시되지 않기 때문입니다.
Sebastian

btw, 내가 git diff자식 less프로세스를 실행할 때 어떤 옵션도 추가되지 -R않습니다 ( 또는 없음 -r). 그러나 git이 특별한 방식으로 호출하는지 알지 못하므로 args는에 표시되지 않습니다 htop.
Sebastian

git자체 색상 이스케이프 코드를 출력합니다. 또한 c파이썬을 추가하는 것은 큰 의존성이 될 것입니다. less환경을 통해 제어 할 수 있습니다.
Matt

1
아마도 LESSenv var 를 통해 ?
Matt

3
예, LESS = FRX가 환경에 추가됩니다 ( pager.c 참조 ).
ysdx
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.