如何使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转义序列?

7 Solutions collect form web for “如何使win32控制台识别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.execmd.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 。

https://github.com/mattn/ansicolor-w32.c

为了给cmd着色,你需要windows.h并使用SetConsoleTextAttribute(),更多的细节可以在http://msdn.microsoft.com/en-us/library/windows/desktop/ms686047%28v=vs.85%29find&#x3002; 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

  • 在macOS中从terminal打开崇高的文本
  • 当业力已经安装时,没有findkarma命令
  • 保持SSH会话活着
  • 如何在terminal中执行bash脚本?
  • 控制台窗口的替代字体?
  • brew医生说“错误:/ usr / bin出现在/ usr / local / bin之前”如何解决?
  • 如何将命令的输出直接复制到我的剪贴板?
  • 在新的terminal窗口中执行python的terminal命令?
  • 将ANSI转义(terminal格式/颜色代码)转换为HTML的库
  • 在纯文本文件中计数字符的出现次数
  • 用最快的方法在terminal命令行上移动光标?