2017-06-03 85 views
1

我正在emacs中运行一个进程,在其输出中使用ANSI颜色代码。emacs启动进程输出缓冲区中的ANSI着色

我使用start-process创建过程,以及过程中的输出

(start-process "foo" "*Foo*" foo-command foo-args) 

如果我打开*Foo*缓冲区,ANSI颜色代码印在他们的原始格式的缓冲区提供的自定义缓冲区名

^[[36msome output message^[[m 
^[[1;35msome output message^[[m 
^[[1;34msome output message^[[m 

我在this SO answer看到有可能给缓冲区添加着色;但是我不确知是否有可能与ANSI颜色代码colorised输出转换在我*Foo*缓冲如何使用start-process

创造了一个缓冲办呢?

+2

我投票关闭这个问题,因为[它也被张贴在Emacs.SE(https://emacs.stackexchange.com/questions/33269/ansi-coloring-in-emacs-start -Process - 输出 - 缓冲液)。 [请不要在多个网站上发布相同的问题](https://meta.stackexchange.com/questions/64068/is-cross-posting-a-question-on-multiple-posack-exchange-sites-permitted-如果最QU)。 – Gilles

回答

1

它看起来不像链接的答案有任何解决方案不涉及comint-mode。您可以使用ansi-color-apply-on-region为输出缓冲区着色,例如。

(set-process-sentinel 
(start-process "foo" "*Foo*" foo-command foo-args) 
(lambda (p _m) 
    (when (eq 0 (process-exit-status p)) 
    (with-current-buffer (process-buffer p) 
     (ansi-color-apply-on-region (point-min) (point-max)))))) 
+0

谢谢,这真棒,从字面上复制粘贴你的代码片段,它的工作! –

+0

嗯,不幸的是(很明显考虑到代码的机制)缓冲区将在进程执行时显示控制代码,并且只有在完成之后,才调用'ansi-color-apply-on-region'。你知道是否有可能在“即时”应用“ansi-color”转换? –

+0

@SteveLorimer我认为也许最简单的方法就是在'comint-mode'中启动缓冲区。否则,您可以创建一个“过程过滤器”并在过滤器中应用颜色。 – jenesaisquoi