이맥스에서 텍스트를 색칠하는 방법? 그것이의 기능인지 확실

내가 원하는 출력입니다 같은보기 (및 / 또는 편집) 이맥스에서 색상 화 텍스트로 ls -l --color=always, tree...또는 무엇 이건.

내가 참조하는 텍스트는 파일에 있습니다. 이맥스에서 파일을 열면 파일이 색상으로 표시되거나 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))


답변

다음 솔루션을 사용하면 ANSI 색상 시퀀스가 ​​포함 된 파일을 읽고 저장할 수 있습니다. 파일 이름은 .txt확장자 를 가져야합니다 .

라이브러리 넣어 청각 장애 포맷 의를 ~/.emacs.d/site-lisp/당신에이 줄을 추가 한 후, ~/.emacsinit 파일.

(add-to-list 'load-path "~/.emacs.d/site-lisp/")
(require 'tty-format)
(add-hook 'find-file-hooks 'tty-format-guess)


답변

귀하의 솔루션에 대해 너무 많은 @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.


답변