Tại sao * biên dịch * bộ đệm hiển thị các ký tự điều khiển?


9

Tôi đang sử dụng *compilation*bộ đệm để xây dựng ứng dụng C ++ trên Centos 5 và Centos 6. Bộ đệm hiển thị bản dựng và bao gồm các tham chiếu đến các tệp là một phần của bản dựng. Tuy nhiên, tôi nhận được các ký tự điều khiển như ^[xuất hiện ở đầu ra và thật khó để đọc và emacs đang bị hỏng tên tệp khi bạn nhấp vào một trong đầu ra. Tôi nghĩ những ký tự này là một số loại tô màu hoặc chú thích khác trên đầu ra của trình biên dịch nhưng tôi không biết chúng đến từ đâu. Đây là đầu ra mẫu:

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

Làm thế nào tôi có thể thoát khỏi đầu ra phi văn bản trong bộ đệm biên dịch của tôi?


1
Chúng trông giống như màu VT100 và định dạng thoát. Bạn có thể thử tắt màu bằng cách chuyển -fdiagnostics-color=neverđến gcc(giả sử đó gcclà của bạn cc)
PythonNut

ansi-color-apply-on-regioncó thể chậm, tôi đã viết đoạn trích này vài tuần trước: de-ansi.el . Tôi không có ý định nó là một gói và vì vậy nó có sự phụ thuộc vào gói hợp âm phím và trên chế độ tạm thời tạm thời temp-mode.el của tôi . Bạn cũng cần có mặt trên emacs 24.4 trở lên để có tính năng thông báo tệp.
Kaushal Modi

Câu trả lời:


14

Đây thực sự là các chuỗi thoát mà thiết bị đầu cuối sẽ hiểu là các lệnh thay đổi màu văn bản. Thông thường chúng không nên được sử dụng khi trình biên dịch được gọi từ Emacs (loại thiết bị đầu cuối nên được đặt thành dumb, điều này sẽ khiến trình biên dịch không sử dụng bất kỳ chuỗi thoát nào). Có thể có điều gì đó không đúng trong cấu hình của bạn khiến màu sắc được sử dụng khi không nên sử dụng. Nhưng bạn có thể làm cho Emacs nhận ra các chuỗi thoát với gói màu ansi .

Một cái gì đó như thế này sẽ làm cho bộ đệm biên dịch xử lý các chuỗi thoát ANSI thay vì hiển thị chúng dưới dạng các chuỗi thô.

(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
Vô cùng hữu ích. Hoạt động trong Emacs 26.1.
Lalylulelo

1
Điều này tô màu lại toàn bộ bộ đệm mỗi lần nó chạy (và kết quả là tô màu tất cả văn bản thành màu nền trước cuối cùng cho tôi). Móc này đặt "biên dịch-bộ lọc-bắt đầu" vào đầu khu vực được chèn với điểm được di chuyển đến cuối. Vì vậy, tôi sẽ sử dụng chúng thay vì (điểm tối thiểu) và (điểm tối đa).
gct
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.