Ho un file di registro che utilizza i codici colore di escape ANSI per formattare il testo. La modalità è fundamental
. Esistono altre risposte alle domande che risolvono questo problema, ma non sono sicuro di come applicarlo a questa modalità oa un'altra modalità. So che la soluzione ha qualcosa a che fare con la configurazione di ansi-color
in qualche modo.Come posso visualizzare codici colore ANSI in emacs per qualsiasi modalità?
risposta
Si potrebbe utilizzare il codice qui sotto
(require 'ansi-color)
(defun display-ansi-colors()
(interactive)
(ansi-color-apply-on-region (point-min) (point-max)))
Quindi è possibile eseguire display-ansi-colors
via Mx, tramite una chiave vincolante di tua scelta, o attraverso qualche programmatica condizione (forse i tuoi file di registro hanno un'estensione o un nome che corrisponde ad alcune regexp)
Se si vuole fare questo con tamponi di sola lettura (i file di log, i risultati grep), è possibile utilizzare inhibit-read-only
, quindi la funzione sarà: funzione definita
(defun display-ansi-colors()
(interactive)
(let ((inhibit-read-only t))
(ansi-color-apply-on-region (point-min) (point-max))))
È 'ansi-color' già incluso emacs 24+? – Avery
@Avvero, sì. Inoltre, se qualcun altro si chiede come farlo, aggiungendo questo al tuo .emacs si attiva la visualizzazione ansi-colore per tutti i file '.log' (scegli la tua estensione di file in modo appropriato):' (add-to-list 'auto- mode-alist '("\\. log \\'". display-ansi-colors)) ' – Avery
Sto provando questo per colorare i miei risultati ack (http://beyondgrep.com/). Il buffer dei risultati è di sola lettura e questa soluzione non funziona. – Gauthier
utente:
(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))
per i buffer che utilizza il filtro COMINT/uso di compilazione:
(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))
soluzioni Juanleon di Gavenkoa e ha lavorato per me, ma non sono stati soddisfacenti in quanto stavano modificando il contenuto del file che stavo leggendo.
per colorare senza modificare il contenuto del file, scaricare tty-format.el e aggiungere il seguente ai vostri .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-formato si basa su ANSI-color.El che viene fornito solo in modo nativo con i recenti versioni di emacs.
Questo ha funzionato per me, tuttavia, un avvertimento: non tentare questo su file di grandi dimensioni! Ho appena provato con un file di log da 9 mega e ha bloccato emacs – adamc
Non conosco la risposta alla tua domanda, ma è * codici colore ANSI *, non codici colore ASCII. – Chris
Grazie! Ho fatto il cambiamento. – Avery