GNU Smalltalk 中的 ANSI 转义码

问题描述 投票:0回答:1

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

'\x1b[31mHi' displayNl

这将打印整个字符串,包括转义码,不带任何格式。我原以为这会以红色打印“嗨”(然后是控制台中的其他所有内容,因为我没有重置颜色。)

谷歌搜索了一下后,我在邮件列表上找到了几个问题,人们试图使用“ ”。大多数答案都是使用 Transcript 对象的 cr 方法,但我没有在 textCollector 类中找到任何关于颜色的信息。

看起来在C中创建自己的模块来实现这个功能应该不难,但我想先知道是否有更好的方法。

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

smalltalk ansi-escape
1个回答
1
投票

最终在 GNU Smalltalk 邮件列表上得到了答案。看起来你可以使用插值运算符来实现这一点。

例如

('%1[31mHi' % #($<16r1B>)) displayNl.
会把颜色变成红色,
('%1[34mHi' % #($<16r1B>)) displayNl.
会把颜色变成蓝色。

基本上,% 运算符会查找看起来像“%(number)”的序列,并将它们替换为运算符右侧数组中的对象。在我们的例子中,数组有一项,即十六进制的 ascii 转义字符。所以"%1[31mHi'中的"%1"被替换为转义字符,然后打印出来。

(这个答案几乎是从 GNU Smalltalk 邮件列表上的 Paolo 被盗 的。)

© www.soinside.com 2019 - 2024. All rights reserved.