如何使用D语言在控制台中输出颜色?

9

我尝试使用writeln()函数的转义序列,也尝试将它们与从std.c.stdlib模块导入的printf()函数一起使用,但只会打印出一个空行。

printf("\0x1B[5;32;40m Blink Text");

printf("\e[5;32;40m Blink Text\e[m");

writeln("\0x1b\x5b1;31;40m\tColor");

这些都没有用。

我已经尝试了我所能想到的一切,有什么办法吗?

搜索D网站的库参考并没有帮助我。


编辑:解决方案

好的,所以我尝试导入SetConsoleTextAttribute函数,就像Mars友好地建议的那样:

extern (Windows) bool SetConsoleTextAttribute(void*, ushort);

我还导入了另一个函数(这只是我的猜测,因为我之前没有Win编程经验)

extern (Windows) void* GetStdHandle(uint);

并简单调用这两个函数。
auto handle  = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(handle, FOREGROUND_BLUE);
writeln("In Color");

这个完美地起作用了,非常感谢你们的时间和帮助。

3个回答

6

正如CyberShadow指出的那样,你必须使用\x1B或\033。只要你在Linux上,它应该可以正常工作。不过Windows不支持这些代码。在Windows上,你需要使用std.c.windows.windows中的API函数SetConsoleTextAttribute


3

您的字符串中有一个错别字:请使用\x1B而不是\0x1B

D语言不支持字符串中的\e转义代码,请使用\x1B代替。


复制粘贴您的writeln(),控制台给出了这个输出:"[1;31;40m 颜色" - Pavel Matuska
你是想在终端模拟器中运行它,对吗?(也就是说,不是在Windows控制台等中运行。) - Vladimir Panteleev

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接