Как к colorize тексту в emacs?

pigz является параллельной реализацией gzip, но может только действительно использовать несколько процессоров для сжатия, не распаковки.

11
27.08.2011, 01:03
3 ответа

Я думаю часть, которую Вы пропускаете, 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))
15
27.01.2020, 19:57
  • 1
    Фантастический.. как будто волшебством! Хорошо объясненный, и Ваш Делать Функциональную Интерактивную ссылку помог много. Я начинаю видеть общую структуру Emacs.Спасибо... –  Peter.O 27.08.2011, 00:31
  • 2
    Интересно, что я делаю неправильно. Я добавил весь текст, который Вы имеете выше в моем .emacs файле, но текст, который я выделяю, не делает, кажется, окрашен после вызова ansi-color-apply-on-region-int. –  SFbay007 15.12.2015, 03:48

Следующее решение позволяет читать (и не сохранять) файлы, содержащие последовательности цвета 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)
5
27.01.2020, 19:57
  • 1
    Это - полезная опция также. Это использует ansi-color и берет его один шаг вперед к, как в Вашей ссылке говорится, "... Цель tty-format.el состоит в том, чтобы только сделать *такие файлы видимый. "*.. "такие файлы", являющиеся теми, которые содержат ANSI escape-последовательности SGR и возвращение..Спасибо.. –  Peter.O 26.08.2011, 21:31
  • 2
    Если это имеет значение.. Этот метод по сравнению с полностью доступной для редактирования версией, как отправлено event_jr имеет быстрее непрерывную скорость подкачки страниц (на ~25%) с significanlty лучше (очень! лучше) частота обновления.. Тестовый файл имел 45 000 строк. Для доступной для редактирования версии экранная земля обновления для остановки приблизительно в 75% пути через файл, но полосе прокрутки все еще прокручивала.. Я подозреваю, что это из-за немного служебных из некоторого буфера отмены точки/метки в доступной для редактирования версии... Оба метода имеют свои преимущества... ("непрерывным", я означаю сохранять Page Up / Вниз ключ нажимаемый непрерывно), –  Peter.O 26.08.2011, 23:11
  • 3
    PS.. страницы tty-формата как гладко и с такой скоростью, как меньше делает в терминале (времена были в течение секунды или двух друг из друга; приблизительно 50 секунд от вершины-botton и нижней вершины). –  Peter.O 26.08.2011, 23:53
  • 4
    я не знал 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 .

0
27.01.2020, 19:57

Теги

Похожие вопросы