首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux中的PolyML彩色输出到终端

Linux中的PolyML彩色输出到终端
EN

Stack Overflow用户
提问于 2022-01-01 14:50:02
回答 2查看 141关注 0票数 0

理想情况下,这行PolyML代码应该提供所需的结果:

代码语言:javascript
复制
print "\033[31m RED \033[0m NORMAL \n";

但是\033实际上只是一个感叹号,而不是颜色编码的特殊符号。我使用了下面的“方法”方法,但是它不允许交互地做任何事情:我只使用我的程序的输出并对其着色。

代码语言:javascript
复制
echo "\\\\033[31m RED \\\\033[0m NORMAL \\\\n" | xargs echo -e

解决这一问题的可能办法是什么?是否有可能在标准PolyML仪器中解决这个问题?

补充:我检查了Ocaml是如何做同样的事情的

代码语言:javascript
复制
Printf.printf "\033[31m RED \033[0m NORMAL \n";;

--情况是一样的:没有颜色。

附注:这个问题并不是一成不变的,因为它是关于-e和ML语言中的打印的区别。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-02 12:29:20

\033是一个字符转义序列,它在bash和许多其他语言中被解释为具有与八进制数字33对应的ASCII代码的字符。

然而,在OCaml中,这个转义序列被解释为十进制。我们可以将数字从八进制(33)转换为小数(27)并继续使用这个语法,或者对八进制转义序列(\o027)使用正确的语法。或者我们甚至可以使用十六进制(\x1b),如果我们想要更冒险一点。

所有这些都将在OCaml中工作,可能还可以在PolyML中工作(当然,如果您用print代替Printf.printf ):

代码语言:javascript
复制
Printf.printf "\027[31m RED \027[0m NORMAL \n";;
Printf.printf "\o033[31m RED \o033[0m NORMAL \n";;
Printf.printf "\x1b[31m RED \x1b[0m NORMAL \n";;

来源:OCaml手册第9.1章:词汇约定

票数 3
EN

Stack Overflow用户

发布于 2022-01-02 11:56:11

多亏了这个问题:OCaml彩色控制台输出

正确的答案是在Ocaml和PolyML中使用代码\027而不是\033:

代码语言:javascript
复制
print "\027[31m RED \027[0m NORMAL \n";
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70549611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档