如何使win32控制台识别ANSI / VT100转义序列?
我正在构build一个ncurses库的轻量级版本。 到目前为止,在兼容VT100的terminal上运行得非常好,但win32控制台无法识别\033
代码作为转义序列的开始:
# include <stdio.h> # include "term.h" int main(void) { puts(BOLD COLOR(FG, RED) "Bold text" NOT_BOLD " is cool!" CLEAR); return 0; }
在C代码级上需要做些什么,以便加载ANSI.SYS驱动程序并识别ANSI / VT100转义序列?
[UPDADE]之前的Windows 10周年更新:
ANSI.SYS有一个限制,它只能在MS-DOS子系统的上下文中运行。
Microsoft KB101875说明如何在命令窗口中启用ANSI.SYS, 但它不适用于Windows NT 。 根据文章: 我们都喜欢的颜色 ,Windows的现代版本没有这个漂亮的ANSI支持。
相反,微软创造了很多function,但是这远不是你需要操作ANSI / VT100转义序列。
有关更详细的解释,请参阅Wikipedia文章 :
ANSI.SYS也适用于在NTVDM下执行的16位传统程序的NT衍生系统。
Win32控制台根本不支持ANSI转义序列。 像Ansicon这样的软件可以作为标准的Win32控制台的包装,并添加对ANSI转义序列的支持。
所以我认为Jason Hood的ANSICON就是你的解决scheme。 它是用C语言编写的,支持Windows的32位和64位版本,并且源代码可用 。
此外,我还发现了一些其他类似的问题或post,最终被答复使用ANSICON:
- 如何加载ANSI转义码或在WinXP cmd shell中获取彩色文件列表?
- 如何在Windows 7中使用ansi.sys
- 我怎样才能让cmd.exe显示ANSI颜色转义序列?
- 在Windows壳ansi颜色
- 在Windows命令提示符下启用ansi颜色
从Windows 10 TH2(v1511)开始, conhost.exe
和cmd.exe
支持ANSI和VT100转义序列(尽pipe它们必须启用 )。
以超级用户身份查看我的答案以获取更多详细信息
从Windows 10开始,您可以使用ENABLE_VIRTUAL_TERMINAL_PROCESSING
启用ANSI转义序列:
https://msdn.microsoft.com/en-us/library/windows/desktop/mt638032(v=vs.85).aspx
如果ANSICON是不可接受的,因为它要求你在系统上安装一些东西,这是一个更轻量级的解决scheme,它将ANSI代码parsing并转换成相关的Win32 API控制台函数,比如SetConsoleTextAttribute 。
为了给cmd着色,你需要windows.h并使用SetConsoleTextAttribute(),更多的细节可以在http://msdn.microsoft.com/en-us/library/windows/desktop/ms686047%28v=vs.85%29find。; ASPX
对于Python 2.7来说,WINDOWS 10(v1607)
import os print '\033[35m'+'color-test'+'\033[39m'+" test end" os.system('') #enable VT100 Escape Sequence for WINDOWS 10 Ver. 1607 print '\033[35m'+'color-test'+'\033[39m'+" test end"
结果应该是:
[35m颜色testing[39mtesting结束
颜色testingtesting结束
也许ANSICON可以帮助你
只要下载并提取文件,取决于你的Windows操作系统:32位或64位
安装它: ansicon -i