Windows Terminal
Windows Terminal概述
github项目地址https://github.com/microsoft/Terminal
在深入了解代码之前,请花几分钟时间查看下面的概述:
Windows终端
Windows Terminal是一个面向命令行用户的全新,现代,功能丰富,高效的终端应用程序。它包括Windows命令行社区最常请求的许多功能,包括对选项卡,富文本,全球化,可配置性,主题和样式等的支持。
终端还需要满足我们的目标和措施,以确保它保持快速,高效,并且不会消耗大量的内存或电力。
Windows控制台主机
Windows控制台主机conhost.exe是Windows的原始命令行用户体验。它实现了Windows的命令行基础结构,并负责托管Windows控制台API,输入引擎,呈现引擎和用户首选项。此存储库中的控制台主机代码conhost.exe是构建Windows本身的实际源代码。
控制台的主要目标是与现有控制台子系统应用程序保持向后兼容。
自2014年获得Windows命令行的所有权以来,该团队已向控制台添加了几项新功能,包括窗口透明度,基于行的选择,支持ANSI /虚拟终端序列,24位颜色,Pseudoconsole(“ConpTY”) “)等等。
但是,由于Console的主要目标是保持向后兼容性,因此我们无法添加社区一直要求的许多功能,以及我们过去几年一直希望添加的功能 - 比如标签!
这些限制促使我们创建了新的Windows终端。
共享组件
在对控制台进行大修时,我们对代码库进行了大规模的现代化改造。我们将逻辑实体完全分离为模块和类,引入了一些关键的可扩展点,用更安全,更高效的STL容器替换了几个旧的,自行开发的集合和容器,并通过使用Microsoft的WIL头库使代码更简单,更安全。
这项大修工作导致创建了几个关键组件,这些组件对Windows上的任何终端实现都很有用,包括一个新的基于DirectWrite的文本布局和渲染引擎,一个能够存储UTF-16和UTF-8的文本缓冲区,以及VT解析器/发射器。
建立一个新的终端
当我们开始构建新的终端应用程序时,我们探索并评估了几种方法和技术堆栈。我们最终决定通过坚持使用C ++并共享上述现代化组件,将它们置于现代Windows应用程序平台和UI框架之上来最好地实现我们的目标。
此外,我们意识到这将允许我们将终端的渲染器和输入堆栈构建为可重用的Windows UI控件,其他人可以将其合并到他们的应用程序中。
常问问题
我在哪里可以下载Windows终端?
目前还没有可下载的二进制文件。
Windows终端处于早期的 alpha阶段,尚未为普通大众做好准备。如果你想早点进入,你可以尝试从源头自己构建它。
否则,您需要等到6月中旬才能正式预览构建。
我建造并运行了新的终端,但它看起来就像旧的控制台!是什么赋予了?
首先,确保您CascadiaPackage在Visual Studio中构建和部署,而不是 Host.EXE。OpenConsole.exe只是conhost.exe,你知道和喜欢的旧控制台。opencon.cmd将推出openconsole.exe,不幸的openterm.cmd是,目前已经破产。
其次,尝试按Ctrl+ T。默认情况下,只有一个选项卡时,隐藏选项卡。在未来,用户界面将是显着不同,但就目前而言,缺省值应该看起来像控制台默认值。
我试过运行WindowsTerminal.exe它崩溃了!
不要尝试无包装运行它。确保CascadiaPackage从Visual Studio 构建和部署,并运行Windows终端(预览)应用程序。
确保您使用的是正确版本的Windows。您需要使用Insider的版本,或等待1903版本,因为Windows终端需要最新Windows版本的功能。
入门
先决条件
您必须运行Windows 1903(build> = 10.0.18362.0)或更高版本才能运行Windows Terminal
截至2019年5月,此版本仅可通过Windows Insider Program获得。您可以通过设备的系统设置注册和配置Insider Program。
您必须安装1903 SDK(build 10.0.18362.0)
您至少需要安装VS 2017
您需要在VS中安装以下两个软件包(Visual Studio Installer中的“工作负载”选项卡):
“使用C ++进行桌面开发”
“通用Windows平台开发”
如果你正在运行VS2019,你还需要安装“v141工具集”和“用于x86和x64的Visual C ++ ATL”
您还需要在“设置”应用中启用“开发者模式”,以启用安装终端应用以在本地运行。
调试
要在VS中进行调试,请右键单击CascadiaPackage(来自VS Solution Explorer)并转到属性,在“调试”菜单中,将“应用程序进程”和“后台任务进程”更改为“仅限本机”
特约
我们很高兴与您,我们的社区一起工作,构建和增强Windows终端!
我们要求您在开始处理您想要贡献的功能之前,请提交一份描述您提议的更改的问题:我们很乐意与您合作,找出最佳方法,在整个功能开发过程中提供指导和指导,以及帮助避免任何浪费或重复的努力。
👉 记得!您的贡献可能会合并到Windows的未来版本中!因此,所有拉取请求都将受到与我们内部贡献者相同的质量,编码标准,性能,全球化,可访问性和兼容性的严格审查。
⚠ 注意:命令行团队正在积极地使用此存储库,并将定期重新构建代码,以便更容易理解,导航,构建,测试和贡献,因此DO期望对代码布局进行重大更改定期。
与团队沟通
与团队沟通的最简单方法是通过GitHub问题。请提交新的问题,功能请求和建议,但DO会先搜索类似的打开/关闭预先存在的问题。
请帮助我们保持这个存储库的清洁,包容和乐趣!我们不会容忍任何侮辱,粗鲁,不尊重或不恰当的行为。阅读我们的行为准则了解更多详情。
如果您想提出一个您认为不存在问题的问题,请通过Twitter与我们联系:
Rich Turner,项目经理:@richturn_ms
Dustin Howett,工程主管:@dhowett
Michael Niksa,高级开发人员:@michaelniksa
Kayla Cinnamon,项目经理(尤其是UX问题):@cinnamon_msft
开发者指导
建立守则
此存储库使用git子模块来实现其某些依赖项。要确保子模块已恢复或更新,请确保在构建之前运行以下命令:
git submodule update --init --recursive
OpenConsole.sln可以在Visual Studio中构建,也可以使用MSBuild从命令行构建。要从命令行构建:
。\吨 ools \ r azzle.cmd
BCZ
我们在/ tools目录中提供了一组便捷脚本和README,以帮助自动化构建和运行测试的过程。
编码指导
请查看以下有关我们的编码标准等的简要文档。
👉 如果您发现这些文档中缺少某些内容,请随时为存储库中的任何文档文件做出贡献(或者创建一些新文档!)
这是一项正在进行中的工作,因为我们了解了为了成为项目的有效贡献者而需要提供的人员。
编码风格
代码组织
我们的遗留代码库中的例外情况
有用的智能指针和宏用于与WIL中的Windows连接
行为守则
该项目采用了Microsoft开源行为准则。有关更多信息,请参阅行为准则常见问题解答或联系opencode@microsoft.com以及任何其他问题或意见。