3

我设置了我的 emacs,以便 shell 缓冲区中的颜色工作得很好。我还使用 compile 命令在我的 ruby​​ on rails 环境中运行单个测试文件但是当我这样做时,ror 测试功能会将大量 shell/终端转义字符放入我的编译缓冲区。有没有办法让这些东西以终端颜色显示?

顺便说一句:我四处搜索并尝试了一些东西,但它们没有用。

谢谢!

4

2 回答 2

4

这是我现在的 .emacs 文件中的内容。它直到最后都不起作用,但没关系。

;; This stuff is to ansi-colorize the compilation buffer after a rails test so the terminal colors come through.
(define-derived-mode ansi-compilation-mode compilation-mode "ansi compilation"
  "Compilation mode that understands ansi colors."
  (require 'ansi-color)
  (toggle-read-only 0)
  (ansi-color-apply-on-region (point-min) (point-max)))

(defun colorize-compilation (one two)
  "ansi colorize the compilation buffer."
  (ansi-compilation-mode))

(setq compilation-finish-function 'colorize-compilation)

编辑

我已经从使用编译模式切换到使用异步 shell 命令。这是代码:

(defun run-it ()
  "Run it on the current file."
  (interactive)
  (save-buffer)
  (shell-command
   (format "my_command %s &"
       (shell-quote-argument (buffer-name)))))
(global-set-key "\C-ct" 'run-it)

它首先保存缓冲区。这&使它实际上具有交互性,因此我可以在缓冲区中输入文本,命令将获得该输入。它会即时为命令输出着色,而我的编译缓冲区没有这样做。

于 2013-07-17T00:09:44.367 回答
1

支持 Alex Vorobiev 的评论,该评论提供了答案。

似乎您已经将 comint-mode 放在一边,并使用了 ansi-color-process-output 过滤器。

AFAIU 字体化是在每个缓冲区基础上完成的,从空闲计时器运行。由缓冲区更改触发。如果在输出 shell 中启用,Emacs 可能会挂起,因为很多更改可能会在短时间内发生。因此字体化通常在这里关闭。另一种方法:在 shell 缓冲区中 Mx MY-MODE。这可能需要对 shell 环境进行一些重置或重新启动。

于 2013-07-12T06:03:51.327 回答