我正在构建一个ncurses库的轻量级版本。到目前为止,它与VT100兼容终端的效果非常好,但是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转义序列?
答案 0 :(得分:55)
[更新]有关最新的Windows 10,请阅读@ brainslugs83的有用贡献,就在下面的答案评论中。
对于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也适用于NT衍生系统,用于在NTVDM下执行的16位遗留程序。
Win32控制台根本不支持ANSI转义序列。然而,诸如Ansicon之类的软件可以作为标准Win32控制台的包装器,并添加对ANSI转义序列的支持。
所以我认为Jason Hood的 ANSICON 是你的解决方案。它是用C编写的,支持32位和64位版本的Windows,以及the source is available。
我还发现了一些其他类似的问题或帖子,最终已经回答使用ANSICON:
答案 1 :(得分:36)
从Windows 10 TH2(v1511)开始,conhost.exe
和cmd.exe
支持开箱即用的ANSI和VT100转义序列(尽管they have to be enabled)。
有关详细信息,请参阅my answer over at superuser。
答案 2 :(得分:13)
从Windows 10开始,您可以使用ENABLE_VIRTUAL_TERMINAL_PROCESSING
启用ANSI转义序列:
https://msdn.microsoft.com/en-us/library/windows/desktop/mt638032(v=vs.85).aspx
答案 3 :(得分:10)
对于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"
结果应为:
[35mcolor-test[39m test end
color-test test end
答案 4 :(得分:8)
如果ANSICON不可接受,因为它要求您在系统上安装某些东西,这是一个更轻量级的解决方案,可以将ANSI代码解析并转换为相关的Win32 API console functions,例如SetConsoleTextAttribute。
答案 5 :(得分:5)
要为cmd着色,您需要Windows.h
并使用SetConsoleTextAttribute()
更多详细信息,请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/ms686047%28v=vs.85%29.aspx
答案 6 :(得分:1)
答案 7 :(得分:1)
我个人喜欢clink。它不仅处理ANSI代码,还添加了许多其他功能,因此Windows控制台的行为类似于 bash (历史记录,反向历史记录搜索,键盘快捷键等):
- 编辑与Bash相同的行(来自GNU的Readline库)。
- 会话之间的历史持久性。
- 上下文敏感完成;
- 可执行文件(和别名)。
- 目录命令。
- 环境变量
- 第三方工具; Git,Mercurial,SVN,Go和P4。
- 新的键盘快捷键;
- 从剪贴板粘贴( Ctrl-V )。
- 增量历史记录搜索( Ctrl-R / Ctrl-S )。
- 强力完成( TAB )。
- 撤消( Ctrl-Z )。
- 自动“cd ..”( Ctrl-PgUp )。
- 环境变量扩展( Ctrl-Alt-E )。
- (按 Alt-H 以获取更多...)
- 使用Lua编写脚本。
- 彩色且可编写脚本的提示。
- 自动应答“终止批处理作业?”提示。
答案 8 :(得分:1)
Ansi.sys(在system32文件夹中)是作为Windows XP,2000和早期版本NT的一部分提供的“MSDOS驱动程序”。在2000和XP中,它位于system32文件夹中(我不记得早期版本的NT的结构)。在DOS子系统中运行并使用标准输出的程序可以使用ANSI.SYS,就像它们可以在MSDOS上运行一样。
要加载ansi.sys,必须在config中使用device =或devicehigh =命令,就像在MSDOS中一样。在Windows NT 5(2K和XP)上,DOS子系统的每个副本都可以在pif /快捷方式中给出一个单独的配置文件(使用“高级”按钮),并且有一个名为CONFIG.NT的默认文件(也是在system32文件夹中),如果pif /快捷方式未指定特殊配置文件,则使用该文件夹。
正确加载ansi.sys后,mem / d将报告已加载。在早期版本的NT上,您可以并且必须加载适当的DOS环境来加载ansi.sys,ansi art将在提示符下工作。在Win 2K和XP上,加载ansi.sys对你的“CMD提示”没有影响,因为CMD不是DOS程序:它是一个32位的Windows控制台程序。由于某种原因,我不明白,在WinXP上,即使你使用“command.com / p”加载command.com的固定副本,命令提示符也不会启用ansi:也许当你这样做时它只是模拟加载command.com?
在任何情况下,当您使用command.com的实际DOS版本时,ansi 在加载后启用:您可以使用这样的一些ansi艺术证明它的使用:
command /c type ansiart.ans
(这是一个例子:http://artscene.textfiles.com/ansi/artwork/beastie.ans)
CONFIG.NT(在system32文件夹中)包含加载设备驱动程序的语法示例。您需要成为管理员才能编辑该默认文件,或者您可以复制它。
在Win 2K和XP上,MSDOS的默认“快捷方式”是.PIF文件,而不是.LNK文件。如果您创建.lnk文件到CMD,您将无法设置特殊配置和autoexec文件,它将使用默认CONFIG.NT。如果要为一个DOS应用程序使用特殊配置文件,可以复制“MSDOS快捷方式”,也可以复制Windows文件夹中的“_default.pif”。
答案 9 :(得分:1)
在最新的win10中,可以通过public class PersonsController : AbpODataEntityController<Person>, ITransientDependency
{
public PersonsController(IRepository<Person> repository)
: base(repository)
{
}
[EnableQuery(MaxExpansionDepth = 10)]
public override IQueryable<Person> Get()
{
return base.Get();
}
}
完成。参见https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences#example
答案 10 :(得分:0)
我发现此工具可以正常工作。 Microsoft Color Tool from GitHub
解压缩压缩文件,然后在具有管理权限的情况下打开CMD。
转到在CMD中解压缩文件的文件夹。
然后执行此命令“ colortool -b scheme-name
”
方案名称需要替换为以下任何一个选项:
对于我来说,命令就像这样的“ colortool -b solarized_dark.itermcolors
”
在控制台窗口上单击鼠标右键,然后选择“属性”。
您无需更改任何值,只需单击“确定”即可保存设置。 (您会注意到您的字体已经包含颜色)。
然后重新启动您的cmd或powerShell。
应该启用ANSI颜色并使用您之前选择的配色方案。
答案 11 :(得分:0)
有同样的问题。我安装了ConEmu,就解决了我的问题。
答案 12 :(得分:0)
基于@ BrainSlugs83,您可以使用以下命令行通过注册在当前Windows 10版本上激活:
{{1}}