Я думаю часть, которую Вы пропускаете, interactive
форма. Это - как Emacs различает функцию, разработанную, чтобы быть названным другими функциями и функцией, разработанной, чтобы быть названным непосредственно пользователем. Посмотрите узел Введения Lisp Emacs
Теперь, если Вы читаете определение ansi-color-apply-on-region
, Вы будете видеть, что это не разработано для интерактивного использования. "ansi-цвет" разработан для фильтрации вывода comint. Однако легко сделать интерактивную обертку для него.
(defun ansi-color-apply-on-region-int (beg end)
"interactive version of func"
(interactive "r")
(ansi-color-apply-on-region beg end))
Следующий бит - Вы, хотят включить цвета ansi для .col расширения. Можно добавить функцию рычага к любому главному режиму, Вы хотите, чтобы использование отредактировало те файлы. Функция была бы выполнена каждый раз, когда Вы включаете главный режим, таким образом, необходимо будет добавить проверку на надлежащий суффикс файла.
Кроме того, можно взломать быстрый полученный режим на основе "фундаментального" режима.
(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. Имена файлов должны иметь a .txt
расширение.
Вставьте tty-формат библиотеки ~/.emacs.d/site-lisp/
, затем добавьте эти строки к Вашему ~/.emacs
файл init.
(add-to-list 'load-path "~/.emacs.d/site-lisp/")
(require 'tty-format)
(add-hook 'find-file-hooks 'tty-format-guess)
ansi-color
и берет его один шаг вперед к, как в Вашей ссылке говорится, "... Цель tty-format.el состоит в том, чтобы только сделать *такие файлы видимый. "*.. "такие файлы", являющиеся теми, которые содержат ANSI escape-последовательности SGR и возвращение..Спасибо..
– Peter.O
26.08.2011, 21:31
tty-format
. Это, кажется, превосходит мою функцию обертки или 3 полученных режима строки.:) Emacs нелегко иметь дело с большим количеством оверлейных программ, которое является, как ansi-цвет делает колоризацию. Существует возможность для дальнейшей оптимизации здесь, потому что нам не нужен к colorize целый буфер, просто отображаемая часть.
– event_jr
29.08.2011, 13:09
Большое спасибо @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))
Таким образом вы можете заменить escape последовательности с цветами без изменения исходного файла, в отличие от решений, использующих ansi-color-apply-on-region
.