2014-04-30 13 views
16

Metni biçimlendirmek için ANSI çıkış renk kodlarını kullanan bir günlük dosyasına sahibim. Mod fundamental şeklindedir. Bu soruna hitap eden başka yanıtlanmış sorular var ancak bunu bu moda veya başka bir moda nasıl uygulayacağımı bilmiyorum. Çözümün bir şekilde ansi-color yapılandırmasıyla ilgili bir şey olduğunu biliyorum.Herhangi bir mod için ANSI renk kodlarını emacs olarak nasıl görüntülerim?

+0

Sorunuzun cevabını bilmiyorum, ancak * ANSI * renk kodları, ASCII renk kodları değil. – Chris

+0

Teşekkürler! Değişimi yaptım. – Avery

cevap

32

Bir seçtiğiniz anahtar bağlayıcı veya bazı programlı aracılığıyla aracılığıyla, Sonra Mx aracılığıyla display-ansi-colors yürütebileceği

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

aşağıdaki kodu kullanabilirsiniz koşul (belki günlük dosyalarınızın bir regexp ile eşleşen bir uzantısı veya adı var)

sen (grep sonuçları log dosyaları) kullanarak, inhibit-read-only kullanabilir, böylece fonksiyonu olacaktır salt okunur tampon ile bunu isterseniz:

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

“ansi-color” zaten 24+ emacs içeriyor mu? – Avery

+1

@Avery, evet. Ayrıca, başka biri bunu nasıl yapacağını merak ediyorsa, bunu .emac'lere eklemek, tüm '.log' dosyaları için ansi renkli ekranını açar (dosya uzantınızı uygun şekilde seçin):' (listeye ekle 'auto- mode-alist '("\\. log \\'". display-ansi-colors)) – Avery

+0

Bunu ack sonuçlarını boyamak için deniyorum (http://beyondgrep.com/). Sonuç arabelleği salt okunurdur ve bu çözüm çalışmaz. – Gauthier

1

Kullanıcı tanımlı fonksiyon:

(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)) 
comint/derleme kullanımı filtresi kullanır tamponlar için

: Gavenkoa en ve Juanleon çözümleri benim için çalıştı, ama onlar kadar tatmin edici değildi

(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)) 
3

okuduğum dosyanın içeriğini değiştiriyorlardı.

, dosyanın içeriğini değiştirmeden renklendirmek tty-format.el indirmek ve .emacs için aşağıdaki eklemek için:

(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 formatlı sadece son ile yerel olarak dağıtılmaktadır ansi-color.el dayanmaktadır emacs sürümleri.

+0

Bu benim için çalıştı, ancak, bir uyarı - bu büyük dosyalar üzerinde denemeyin! Sadece 9 meg kayıt dosyasıyla denedim ve emacları kilitledim – adamc

İlgili konular