Git pager là ít, nhưng điều gì gây ra màu đầu ra?


18

lesstheo chủ đề này , nó không có khả năng làm nổi bật cú pháp .

Tuy nhiên, git diffđộc đáo hiển thị đầu ra màu trong ít hơn, máy nhắn tin mặc định của nó. Khi tôi chuyển hướng đầu ra git diffthành một tập tin, không có chuỗi thoát màu nào được nhìn thấy.

Bạn có git diffbiết nó được gửi ở đâu và định dạng đầu ra tương ứng không? Làm thế nào một người sẽ làm điều đó?


Tôi chỉ nhận thấy rằng git tô màu diffđầu ra (ví dụ git diff), tuy nhiên, nó không biết cách đánh dấu cú pháp nói chung. ví dụ

git show 415fec6:log.tex

không kích hoạt bất kỳ cú pháp giống như TeX.


Đọc các gitnguồn, tôi tìm thấy những gợi ý sau

trong diff.h:

int use_color;

Trước đây tôi đã đề cập đến đánh dấu cú pháp , nhưng điều đó không chính xác. Ý tôi là màu đầu ra, xem ví dụ

ví dụ màu đầu ra


1
Bạn có bất kỳ cú pháp tô sáng thực sự, hoặc chỉ màu đỏ và màu xanh lá cây cho các dòng bị loại bỏ và thêm vào?
Paŭlo Ebermann

BTW: để có được màu git thành ít hơn: git diff --color=always | less -r (hoặc less -Rcho ANSI). BTW: đối với các lệnh khác không phân trang theo mặc định ( git diffkhông), bạn có thể bật nó:git -p some_git_command
hyperpallium

Câu trả lời:


18

Git sử dụng isatty()để kiểm tra xem thiết bị xuất chuẩn có phải là tty hay không: điều này được sử dụng để xem liệu máy nhắn tin phải được sử dụng ( pager.c ) cũng như màu sắc ( color.c ).


thời gian tuyệt vời, tôi cũng chỉ tìm thấy nó!
Sebastian

11

Đang chạy:

git diff --color=always > output

cho thấy màu thoát.

Chết tiệt tôi đã tìm thấy nó trong git 's color.cfile:

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 có thể hỗ trợ màu sắc với -r --raw-control-chars-R --RAW-CONTROL-CHARS

Bạn có thể sử dụng Pythons pygmentizeđể làm nổi bật và đưa nó vào.

Để kết hợp, tất cả cấu hình một bộ lọc ít hơn như được mô tả trên superuser


liên kết thực sự thú vị, cảm ơn. Bạn có biết nếu gitthực sự sử dụng pyributionize? Bởi vì nó không được liệt kê như là một phụ thuộc.
Sebastian

btw, khi tôi chạy tiến trình git diffcon lesskhông được thêm vào bởi bất kỳ tùy chọn nào (không phải -Rcũng không -r). Tuy nhiên, tôi không biết nếu git gọi nó theo một cách đặc biệt và do đó không thể thấy được các đối số htop.
Sebastian

gitxuất mã thoát màu tự nó. Nó cũng được viết bằng ccách thêm Python sẽ là một sự phụ thuộc rất lớn. Nó có thể có thể kiểm soát lessthông qua môi trường
Matt

1
có thể thông qua LESSvar env?
Matt

3
Có, LESS = FRX được thêm vào môi trường (xem pager.c ).
ysdx
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.