2010-06-18 6 views
35

Lorsque vous travaillez dans Emacs, j'utilise la commande de compilation (F12 par défaut) pour exécuter des programmes. Lorsque je lance Cucumber dans Emacs, Cucumber crache des couleurs ANSI que le mode de compilation d'Emacs n'interprète pas. Le résultat est laid et difficile à lire. Voici un extrait de la * compilation tampon * montrant le laid:Couleurs ANSI du concombre déconner tampon de compilation emacs

^[[31m(::) failed steps (::)^[[0m 

La commande J'utilise:

(cd ~/lab/rails/todolist && rake cucumber:all) 

Versions:

  • Emacs 23.1
  • concombre 0,8. 3
  • Cucumber-rails 0.3.2

Le monde serait le soleil et le chant des oiseaux si je pouvais:

  • Obtenir Emacs interpréter les codes couleurs ANSI dans sa mémoire tampon de compilation, ou
  • Obtenez concombre pour arrêter crachant des codes couleur ANSI

Des idées?

Répondre

62

Je l'utiliser pour activer ansi interprétation des couleurs dans ma mémoire tampon de compilation:

(require 'ansi-color) 
(defun colorize-compilation-buffer() 
    (let ((inhibit-read-only t)) 
    (ansi-color-apply-on-region (point-min) (point-max)))) 
(add-hook 'compilation-filter-hook 'colorize-compilation-buffer) 
+4

Voilà pourquoi je J'adore cet endroit. Excellente solution fonctionne comme un charme. Merci! –

+0

Exactement ce que je cherchais! Malheureusement, dans mon environnement (cygwin-xemacs) il kroek sur (buffer-read-only # ) avec "Erreur dans le filtre de processus", ce qui semble très étrange. Des idées? – thoni56

+0

Cela a aussi bien fonctionné pour moi. J'ai aussi ajouté '(linum-mode 0)' (et, à la première tentative '(line-number-mode 0)', qui n'a pas fonctionné, mais je suis parti de toute façon, et pourrait travailler pour quelqu'un d'autre), après ' (toggle-read-only) ', ce qui me rend encore plus heureux (un tas de lignes qui ne faisaient qu'emballer maintenant ne le font pas). – lindes

19

J'améliore le code de sorte qu'il ne pollue pas M-x grep comme les commandes et plus efficace:

(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)) 
+0

** Note ** Je ne teste ce code qu'avec Emacs 24.x, il peut ne pas fonctionner dans la version 23.x ou moins ... – gavenkoa

+0

Cela fonctionne très bien, pourquoi '(add-hook 'compilation-filter-hook' ansi -color-for-comint-mode-on) 'n'est pas? –

Questions connexes