2014-07-03 53 views
1

我試圖製作一個基於控制檯的程序,它使用ANSI轉義碼0123'。我似乎無法弄清楚如何去打印用ANSI轉義碼格式化的字符串對象。我試過以下。ANSI轉義代碼在GNU Smalltalk中

'\x1b[31mHi' displayNl 

這打印整個字符串,包括轉義代碼,沒有任何格式。我希望這會打印出紅色的「Hi」(然後是控制檯中的其他所有內容,因爲我沒有重置顏色)。

Google搜索了一下之後,我找到了幾個問題在郵件列表中,人們試圖使用「\ n」生成換行符等內容。大多數答案都使用了Transcript對象的cr方法,但我在textCollector類中找不到有關顏色的任何內容。

它看起來應該不是很難在C中創建我自己的模塊來實現此功能,但我想知道是否有更好的方法。

我知道ncurses的綁定,但我不確定這隻會讓程序中的某些文本變成有顏色的實用。那麼,在使用ANSI轉義序列的GNU Smalltalk中,是否有一種標準方式將彩色文本輸出到終端?

+0

它看起來像'expandMacrosWith'和用'asString'強制字符到字符串的組合可能有效。 – phs

回答

1

最終在GNU Smalltalk郵件列表中獲得答案。看起來你可以使用插值算子來實現這一點。

例如('%1[31mHi' % #($<16r1B>)) displayNl.會將顏色更改爲紅色,並且('%1[34mHi' % #($<16r1B>)) displayNl.會將顏色更改爲藍色。

基本上,%運算符查找一個看起來像「%(number)」的序列,並將它們替換爲數組中對象的右邊的運算符。在我們的例子中,數組有一個項目,它是十六進制的ascii轉義字符。因此,在「%1 31mHi」的「%1」被替換爲轉義字符,然後打印出來。

(這個答案是stolen幾乎是逐字從保羅的GNU Smalltalk的郵件列表。)