¿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))))