GNU Smalltalk中的ANSI转义码

时间:2014-07-03 23:57:55

标签: smalltalk ansi

我试图制作一个基于控制台的程序,该程序使用带有GNU Smalltalk的ANSI转义码。我似乎无法弄清楚如何打印使用ANSI转义码格式化的字符串对象。我尝试了以下内容。

'\x1b[31mHi' displayNl

这将打印整个字符串,包括转义码,而不进行任何格式化。我希望这可以打印出#34;嗨"红色(然后是控制台中的其他所有内容,因为我没有重置颜色。)

在谷歌搜索后,我能够在邮件列表上找到一些问题,人们试图使用" \ n"来生成新行等内容。大多数答案都是使用Transcript对象的cr方法,但我在textCollector类中找不到任何关于颜色的内容。

看起来在C中创建我自己的模块并不难以实现此功能,但我想先了解是否有更好的方法。

我知道ncurses绑定,但我不确定是否可以将程序中的某些文本着色。那么,是否有一种使用ANSI转义序列在GNU Smalltalk中向终端输出彩色文本的标准方法?

1 个答案:

答案 0 :(得分:1)

结束了在GNU Smalltalk邮件列表上的回答。看起来您可以使用插值运算符来实现此目的。

例如('%1[31mHi' % #($<16r1B>)) displayNl.会将颜色更改为红色,('%1[34mHi' % #($<16r1B>)) displayNl.会将颜色更改为蓝色。

基本上,%运算符会查找看起来像&#34;%(数字)&#34;的序列。并将它们替换为运算符右侧数组中的对象。在我们的例子中,数组有一个项目,它是十六进制的ascii转义字符。那么&#34;%1&#34; in&#34;%1 [31mHi&#39;正在用转义字符替换,然后打印。

(这个答案在GNU Smalltalk邮件列表中几乎逐字逐句保留Paolo。)