如何在 emacs 中為文本著色?
我想在 emacs 中查看(和/或編輯)彩色文本,例如由
ls -l --color=always
,tree...
或其他輸出。我引用的文本存在於文件中。當我在 emacs 中打開該文件時,我希望能夠看到它是彩色的,或者切換它以顯示 ANSI (SGR) 轉義序列。
ansi-color.el
似乎是我需要的,但我無法讓它對 ANSI 轉義序列進行任何著色,但我確實看到各個控製字節(例如^A
和^[
)的藍色粗體……我不是確定這是否是 的一個功能ansi-color
,但我認為是。根據ansi-color.el 評論,它可以與字元串和區域一起使用,但即使這樣似乎也不起作用。例如,該函式
ansi-color-apply-on-region
無法辨識M-x
。它說,“不匹配”我已經添加
(require 'ansi-color)
到我的*.emacs*文件甚至(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
. 當 emacs 啟動時,我沒有收到任何錯誤或警告,所以我被卡住了。如何使標準功能正常工作,並且可以在打開名稱後綴為 的文件時自動應用
.col
?
我認為您缺少的部分是
interactive
表格。這就是 Emacs 區分設計為由其他函式呼叫的函式和設計為由使用者直接呼叫的函式的方式。請參閱 Emacs Lisp Intro節點現在,如果您閱讀 的定義
ansi-color-apply-on-region
,您會發現它不是為互動式使用而設計的。“ansi-color”旨在過濾comint輸出。然而,為它製作一個互動式包裝器很容易。(defun ansi-color-apply-on-region-int (beg end) "interactive version of func" (interactive "r") (ansi-color-apply-on-region beg end))
下一點是您要為 .col 副檔名打開 ansi 顏色。您可以將掛鉤函式添加到要用於編輯這些文件的任何主要模式。每當您打開主要模式時,該功能都會執行,因此您必須添加對正確文件後綴的檢查。
或者,您可以破解基於“基本”模式的快速派生模式。
(define-derived-mode fundamental-ansi-mode fundamental-mode "fundamental ansi" "Fundamental mode that understands ansi colors." (require 'ansi-color) (ansi-color-apply-on-region (point-min) (point-max)))
並將其與該副檔名相關聯。
(setq auto-mode-alist (cons '("\\.col\\'" . fundamental-ansi-mode) auto-mode-alist))