เหตุใดบัฟเฟอร์ * การคอมไพล์ * จึงแสดงอักขระควบคุม?


9

ฉันกำลังใช้*compilation*บัฟเฟอร์เพื่อสร้างแอปพลิเคชัน C ++ บน Centos 5 และ Centos 6 บัฟเฟอร์แสดงการสร้างและรวมถึงการอ้างอิงไปยังไฟล์ที่เป็นส่วนหนึ่งของการสร้าง อย่างไรก็ตามฉันได้รับตัวควบคุมเช่น^[ปรากฏในผลลัพธ์และมันยากที่จะอ่านและ emacs จะได้รับชื่อไฟล์ที่เสียหายเมื่อคุณคลิกที่หนึ่งในการส่งออก ฉันคิดว่าตัวละครเหล่านี้เป็นสีผสมหรือคำอธิบายประกอบอื่น ๆ ในคอมไพเลอร์เอาท์พุท แต่ฉันไม่รู้ว่าพวกมันมาจากไหน นี่คือตัวอย่างผลลัพธ์:

cc -c -g -I../machind -I. -DRELEASE_VERSION -g -O2 -m64 -D__BITS64 -pipe -DARCH_64 -DARCH_INTEL -DARCH_X86 -DARCH_X86_64 -DOS_LINUX -pthread -DLM_INTERNAL -DFLEXLM_KITBUILD -DFLEX_STATIC -DRELEASE_VERSION -DGPLATFORM=\\"x64_lsb\\" -DLINUX -DLSB3_0 -D__FD_SETSIZE=65535 -DGLIBC -DLINUX64 -DAMD64 -DREDHAT -DREL -DRHLINUX64 -DPLATFORM_AMD64_RHLINUX   -DNO_ACTIVATION_SUPPORT ../machind/lmcrypt.c
^[[01m^[[K../machind/lmcrypt.c:^[[m^[[K In function  ^[[01m^[[Kmain^[[m^[[K :
^[[01m^[[K../machind/lmcrypt.c:156:47:^[[m^[[K ^[[01;35m^[[Kwarning: ^[[m^[[Kcast to pointer from integer of different size [-Wint-to-pointer-cast]
     lc_set_attr(lm_job, LM_A_MAX_LICENSE_LEN, (LM_A_VAL_TYPE)max);
^[[01;32m^[[K                                               ^^[[m^[[K

ฉันจะกำจัดเอาต์พุตที่ไม่ใช่ข้อความในบัฟเฟอร์การคอมไพล์ได้อย่างไร?


1
ดูเหมือนว่า VT100 Color และการฟอร์แมตจะหนีออกมา คุณอาจลองปิดการใช้งานสีโดยส่งผ่าน-fdiagnostics-color=neverไปยังgcc(สมมติว่าgccเป็นของคุณcc)
PythonNut

ในฐานะที่เป็นansi-color-apply-on-regionอาจจะช้าฉันได้เขียนขึ้นนี้ snippet กี่สัปดาห์หลัง: de-ansi.el ฉันไม่ได้ตั้งใจให้มันเป็นแพคเกจและดังนั้นจึงมีการอ้างอิงในแพคเกจที่สำคัญคอร์ดและในโหมดย่อยชั่วคราวของฉันชั่วคราว mode.el คุณต้องอยู่ใน emacs 24.4 ขึ้นไปสำหรับคุณสมบัติแจ้งเตือนไฟล์
Kaushal Modi

คำตอบ:


14

นี่คือลำดับการหลีกเลี่ยงซึ่งเทอร์มินัลควรตีความว่าเป็นคำสั่งให้เปลี่ยนสีข้อความ โดยทั่วไปแล้วไม่ควรใช้เมื่อคอมไพเลอร์ถูกเรียกใช้จาก Emacs (ควรตั้งค่าประเภทเทอร์มินัลเป็นdumbซึ่งควรทำให้คอมไพเลอร์ละเว้นจากการใช้ลำดับการหลีกเลี่ยงใด ๆ ) อาจมีบางอย่างผิดปกติในการกำหนดค่าของคุณที่ทำให้สีถูกนำมาใช้เมื่อไม่ควรใช้ แต่คุณสามารถทำให้ Emacs จดจำลำดับการหลบหนีด้วยแพ็คเกจสี ansi

สิ่งนี้ควรทำให้บัฟเฟอร์การคอมไพล์จัดการกับลำดับ ANSI escape แทนที่จะแสดงเป็นสตริงดิบ

(require 'ansi-color)
(defun my/ansi-colorize-buffer ()
  (let ((buffer-read-only nil))
    (ansi-color-apply-on-region (point-min) (point-max))))
(add-hook 'compilation-filter-hook 'my/ansi-colorize-buffer)

1
มีประโยชน์อย่างยิ่ง ทำงานใน Emacs 26.1
Lalylulelo

1
สิ่งนี้จะเปลี่ยนสีบัฟเฟอร์ทั้งหมดในแต่ละครั้งที่มันทำงาน (และทำให้สีข้อความทั้งหมดเป็นสีพื้นหน้าสุดท้ายสำหรับฉัน) เบ็ดนี้ตั้งค่า "คอมไพล์ - ตัวกรอง - เริ่ม" เป็นจุดเริ่มต้นของภูมิภาคที่แทรกด้วยจุดที่ย้ายไปยังจุดสิ้นสุด ดังนั้นฉันจะใช้สิ่งเหล่านั้นแทน (จุด - นาที) และ (จุด - สูงสุด)
GCT
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.