如何使win32控制台识别ANSI/VT100转义序列?

2024-05-05 06:01:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建ncurses库的轻量级版本。到目前为止,它在VT100兼容终端上运行得非常好,但win32 console无法将\033代码识别为转义序列的开始:

# include <stdio.h>
# include "term.h"

int main(void) {
  puts(BOLD COLOR(FG, RED) "Bold text" NOT_BOLD " is cool!" CLEAR);
  return 0;
}

Screenshot

为了加载ANSI.SYS驱动程序并识别ANSI/VT100转义序列,需要在C代码级别执行哪些操作


Tags: 代码版本终端includemainconsoleintansi
3条回答

[更新]对于最新的Windows 10,请阅读@brainslaugs83的有用贡献,就在下面对这个答案的评论中

而对于Windows 10 Anniversary Update之前的版本:

ANSI.SYS有一个限制,即它只能在Windows 95 Vista下MS-DOS子系统的上下文中运行

Microsoft KB101875解释了如何在命令窗口中启用ANSI.SYS,但它不适用于Windows NT。根据文章:we all love colors,现代版本的Windows没有这种良好的ANSI支持

相反,Microsoft创建了许多函数,但这远远不是操作ANSI/VT100转义序列的需要

有关更详细的说明,请参见Wikipedia article

ANSI.SYS also works in NT-derived systems for 16-bit legacy programs executing under the NTVDM.

The Win32 console does not natively support ANSI escape sequences at all. Software such as Ansicon can however act as a wrapper around the standard Win32 console and add support for ANSI escape sequences.

因此,我认为Jason Hood的ANSICON是您的解决方案。它是用C编写的,支持32位和64位版本的Windows以及the source is available

此外,我还发现了一些其他类似的问题或帖子,这些问题或帖子最终都得到了ANSICON的回答:

从Windows10th2(v1511)开始,conhost.execmd.exe支持ANSI和VT100开箱即用的转义序列(尽管they have to be enabled

有关更多详细信息,请参见my answer over at superuser

从Windows 10开始,您可以使用ENABLE_VIRTUAL_TERMINAL_PROCESSING启用ANSI转义序列:

https://msdn.microsoft.com/en-us/library/windows/desktop/mt638032(v=vs.85).aspx

相关问题 更多 >