emacs 启动进程输出缓冲区中的 ANSI 着色

Ste*_*mer 5 emacs

我正在 emacs 中运行一个进程,该进程在其输出中使用 ANSI 颜色代码。

我正在start-process用来创建进程,并为进程的输出提供了一个自定义缓冲区名称

(start-process "foo" "*Foo*" foo-command foo-args)
Run Code Online (Sandbox Code Playgroud)

如果我打开*Foo*缓冲区,ANSI 颜色代码以其原始格式打印到缓冲区

^[[36msome output message^[[m
^[[1;35msome output message^[[m
^[[1;34msome output message^[[m
Run Code Online (Sandbox Code Playgroud)

我在这个 SO answer 中看到可以向缓冲区添加着色;但是我不确定如何使用创建的缓冲区来做到这一点start-process

是否可以将这些 ANSI 颜色代码转换为*Foo*缓冲区中的彩色输出?

pic*_*ick 3

链接的答案似乎没有任何不涉及的解决方案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))))))
Run Code Online (Sandbox Code Playgroud)