예 를 들어 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
?
답변1
내 생각에 당신이 놓친 것은 form 입니다 interactive
. 이것이 Emacs가 다른 함수에 의해 호출되도록 설계된 함수와 사용자가 직접 호출하도록 설계된 함수를 구별하는 방법입니다. Emacs Lisp 소개를 참조하세요.마디
이제 정의를 읽어보면 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))
답변2
다음 솔루션을 사용하면 ANSI 색상 시퀀스가 포함된 파일을 읽을 수 있지만 저장할 수는 없습니다. 파일 이름에는 .txt
확장자가 있어야 합니다.
도서관을 놔두다tty 형식~/.emacs.d/site-lisp/
init 파일 에 다음 행을 추가 하십시오 ~/.emacs
.
(add-to-list 'load-path "~/.emacs.d/site-lisp/")
(require 'tty-format)
(add-hook 'find-file-hooks 'tty-format-guess)
답변3
솔루션을 제공해 주신 @enzotib에게 큰 감사를 드립니다!
솔루션을 보완하기 위해 사용자가 명시적으로 호출할 수 있도록 하는 방법은 다음과 같습니다.
;; M-x display-ansi-colors to explicitly decode ANSI color escape sequences
(defun display-ansi-colors ()
(interactive)
(format-decode-buffer 'ansi-colors))
*.txt 또는 README 이외의 파일의 경우 자동으로 실행됩니다.
;; decode ANSI color escape sequences for .log files
(add-to-list 'auto-mode-alist '("\\.log\\'" . display-ansi-colors))
이렇게 하면 를 사용하는 것과 달리 원본 파일을 변경하지 않고 이스케이프 시퀀스를 색상으로 바꿀 수 있습니다 ansi-color-apply-on-region
.