Linux 中的 PolyML 彩色输出到终端
PolyML colored output to terminal in Linux
理想情况下,这行 PolyML 代码应提供所需的结果:
print "3[31m RED 3[0m NORMAL \n";
但是\033原来只是感叹号,并不是颜色编码的特殊符号。
我使用以下“迂回”方法,但它不允许以交互方式执行任何操作:我只是获取程序的输出并为其着色。
echo "\\033[31m RED \\033[0m NORMAL \\n" | xargs echo -e
这个问题有哪些可能的解决方案?是否可以在标准 PolyML 工具中解决它?
添加:我检查了 Ocaml 如何用
做同样的事情
Printf.printf "3[31m RED 3[0m NORMAL \n";;
-- 情况一样:没有得到颜色
p.s。这个问题不是重复的,因为它是关于 echo -e 和 print 在 ML 语言中的区别
感谢这个问题:
正确答案是在 Ocaml 和 PolyML 中都使用代码 \027 而不是 \033:
print "7[31m RED 7[0m NORMAL \n";
3
是一个字符转义序列,在bash和许多其他语言中被解释为八进制数33对应的ASCII码字符。
然而,在 OCaml 中,此转义序列被解释为十进制。我们可以将数字从八进制 (33) 转换为十进制 (27) 并继续使用此语法,或者使用正确的八进制转义序列语法 (\o027
)。或者我们甚至可以使用十六进制 (\x1b
) 如果我们想更大胆一些。
所有这些都将在 OCaml 中工作,也可能在 PolyML 中工作(当然,如果您将 Printf.printf
替换为 print
):
Printf.printf "7[31m RED 7[0m NORMAL \n";;
Printf.printf "\o033[31m RED \o033[0m NORMAL \n";;
Printf.printf "\x1b[31m RED \x1b[0m NORMAL \n";;
理想情况下,这行 PolyML 代码应提供所需的结果:
print "3[31m RED 3[0m NORMAL \n";
但是\033原来只是感叹号,并不是颜色编码的特殊符号。 我使用以下“迂回”方法,但它不允许以交互方式执行任何操作:我只是获取程序的输出并为其着色。
echo "\\033[31m RED \\033[0m NORMAL \\n" | xargs echo -e
这个问题有哪些可能的解决方案?是否可以在标准 PolyML 工具中解决它?
添加:我检查了 Ocaml 如何用
做同样的事情Printf.printf "3[31m RED 3[0m NORMAL \n";;
-- 情况一样:没有得到颜色
p.s。这个问题不是重复的,因为它是关于 echo -e 和 print 在 ML 语言中的区别
感谢这个问题:
正确答案是在 Ocaml 和 PolyML 中都使用代码 \027 而不是 \033:
print "7[31m RED 7[0m NORMAL \n";
3
是一个字符转义序列,在bash和许多其他语言中被解释为八进制数33对应的ASCII码字符。
然而,在 OCaml 中,此转义序列被解释为十进制。我们可以将数字从八进制 (33) 转换为十进制 (27) 并继续使用此语法,或者使用正确的八进制转义序列语法 (\o027
)。或者我们甚至可以使用十六进制 (\x1b
) 如果我们想更大胆一些。
所有这些都将在 OCaml 中工作,也可能在 PolyML 中工作(当然,如果您将 Printf.printf
替换为 print
):
Printf.printf "7[31m RED 7[0m NORMAL \n";;
Printf.printf "\o033[31m RED \o033[0m NORMAL \n";;
Printf.printf "\x1b[31m RED \x1b[0m NORMAL \n";;