เพจเจอร์ Git น้อยลง แต่สิ่งที่ทำให้สีออกมา?


18

lessตัวเองไม่สามารถทำการเน้นไวยากรณ์ได้ตามเธรดนี้

อย่างไรก็ตามgit diffอย่างดีแสดงสีออกในน้อยเพจเจอร์เริ่มต้น เมื่อฉันเปลี่ยนเส้นทางการส่งออกgit diffไปยังไฟล์จะไม่มีลำดับการหลีกเลี่ยงสีปรากฏให้เห็น

git diffทราบหรือไม่ว่ามันถูกส่งไปที่ใดและจัดรูปแบบผลลัพธ์ตามนั้น เราจะทำอย่างนั้นได้อย่างไร?


ฉันเพิ่งสังเกตเห็นว่าคอมไพล์สี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 -Rสำหรับ ANSI) BTW: สำหรับคำสั่งอื่น ๆ ที่ไม่มีการแบ่งหน้าตามปกติgit diffคุณสามารถเปิดได้:git -p some_git_command
hyperpallium

คำตอบ:


18

Git ใช้isatty()เพื่อตรวจสอบว่า stdout เป็น tty หรือไม่: ใช้เพื่อดูว่าจะต้องใช้เพจเจอร์ ( pager.c ) รวมทั้งสี ( color.c ) หรือไม่


ช่วงเวลาที่ยอดเยี่ยมฉันเพิ่งพบมัน!
เซบาสเตียน

11

วิ่ง:

git diff --color=always > output

แสดงให้เห็นถึงการหลบหนีสี

ประณามฉันพบในgit's color.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

คุณสามารถใช้ Pythons pygmentizeเพื่อทำการไฮไลต์และต่อท่อเข้าไป

เพื่อรวมมันทั้งหมดกำหนดค่าตัวกรองน้อยตามที่อธิบายไว้ใน superuser


ลิงค์น่าสนใจจริงๆขอบคุณ คุณรู้หรือไม่ว่าgitใช้ pyrideize จริง ๆ ? เพราะมันไม่ได้ระบุว่าเป็นการพึ่งพา
เซบาสเตียน

btw เมื่อฉันเรียกใช้กระบวนการgit diffลูกlessไม่ได้ต่อท้ายด้วยตัวเลือกใด ๆ (ไม่ใช่-Rหรือ-r) แต่ผมไม่ทราบว่าถ้าคอมไพล์เรียกมันในวิธีพิเศษและทำให้ args htopไม่ได้อยู่ในที่มองเห็นได้
เซบาสเตียน

gitเอาต์พุตรหัส escape สีเป็นของตัวเอง มันเขียนด้วยcดังนั้นการเพิ่ม Python จะเป็นการพึ่งพาอย่างมาก อาจควบคุมlessผ่านสภาพแวดล้อมได้
แมตต์

1
อาจจะผ่านLESSenv var?
แมตต์

3
ใช่ LESS = FRX ถูกเพิ่มเข้ากับสภาพแวดล้อม (ดูpager.c )
ysdx
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.