emacs ansi

¿Cómo muestro los códigos de color ANSI en emacs para cualquier modo?



(3)

Función definida por el usuario:

(defun my-ansi-color (&optional beg end) "Interpret ANSI color esacape sequence by colorifying cotent. Operate on selected region on whole buffer." (interactive (if (use-region-p) (list (region-beginning) (region-end)) (list (point-min) (point-max)))) (ansi-color-apply-on-region beg end))

Para los buffers que usan comint / compilation use filter:

(ignore-errors (require ''ansi-color) (defun my-colorize-compilation-buffer () (when (eq major-mode ''compilation-mode) (ansi-color-apply-on-region compilation-filter-start (point-max)))) (add-hook ''compilation-filter-hook ''my-colorize-compilation-buffer))

Tengo un archivo de registro que utiliza códigos de color de escape ANSI para formatear el texto. El modo es fundamental . Hay otras preguntas respondidas que abordan este problema, pero no estoy seguro de cómo aplicarlo a este modo o cualquier otro modo. Sé que la solución tiene algo que ver con la configuración de ansi-color de alguna manera.


Las soluciones de Gavenkoa y Juaneonon funcionaron para mí, pero no fueron satisfactorias, ya que estaban modificando el contenido del archivo que estaba leyendo.

Para colorear sin modificar el contenido del archivo, descargue tty-format.el y agregue lo siguiente a su .emacs:

(add-to-list ''load-path "path/to/your/tty-format.el/") (require ''tty-format) ;; M-x display-ansi-colors to explicitly decode ANSI color escape sequences (defun display-ansi-colors () (interactive) (format-decode-buffer ''ansi-colors)) ;; decode ANSI color escape sequences for *.txt or README files (add-hook ''find-file-hooks ''tty-format-guess) ;; decode ANSI color escape sequences for .log files (add-to-list ''auto-mode-alist ''("//.log//'" . display-ansi-colors))

tty-format se basa en ansi-color.el, que solo se envía de forma nativa con versiones recientes de emacs.


Podrías usar el código de abajo

(require ''ansi-color) (defun display-ansi-colors () (interactive) (ansi-color-apply-on-region (point-min) (point-max)))

Luego puede ejecutar display-ansi-colors mediante Mx, mediante un enlace de teclas de su elección o mediante alguna condición programática (tal vez sus archivos de registro tengan una extensión o nombre que coincida con alguna expresión regular)

Si desea hacer esto con búferes de solo lectura (archivos de registro, resultados de grep), puede usar la inhibit-read-only , por lo que la función será:

(defun display-ansi-colors () (interactive) (let ((inhibit-read-only t)) (ansi-color-apply-on-region (point-min) (point-max))))