2017-06-03 72 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