微软正在推出一款名为Windows Terminal的新命令行终端工具。它被设计为访问PowerShell、Cmd和Windows Linux子系统(WSL)等环境。微软正在为想要调整终端工具的开发人员添加多个选项卡、分割窗口、快捷键支持,另外支持主题和自定义等等。微软这款新的Windows终端应用程序在Build 2019开发者大会上公布了。

Windows Terminal还支持表情符号和基于GPU的文本呈现。Windows Terminal新工具计划在6月中旬推出,这是微软在Windows 10上改进开发者环境的最新努力。

微软此前还将Linux命令行添加到Windows 10,同时将原生OpenSSH添加到Windows 10系统,甚至在Windows应用商店中发布了Ubuntu、SUSE Linux和Fedora。

Windows Terminal宣传视频:点此观看

Windows Terminal安装包下载,点此链接。支持x86、x64和arm64,最低要求Windows 10 Build 18382版本。

Windows 控制台主机

Windows 控制台主机程序 conhost.exe是 Windows 原生的命令行体验,它实现了 Windows 的命令行基础架构,同时提供 Windows Console API, 输入引擎、渲染引擎和用户配置信息。本项目中的控制台主机代码实际上是 Windows 中的 conhost.exe 的源码。

控制台的主要目的是对已有控制台应用保持向后兼容性。

自从 2014 年有了 Windows 命令行以来,开发团队已经给控制台增加了很多新特性,包括窗口透明化、基于行的选择以及支持 ANSI / 虚拟终端序列 Virtual Terminal sequences24-bit color, 以及一个 Pseudoconsole (“ConPTY”) 等等。

但是由于控制台主要的目标是维护向后兼容性,所以尽管这么多年社区一直希望我们能添加一些特性(例如 Tabs),但是我们不可能再增加这些特性。

诸多限制让我们决定开发一个全新的 Windows Terminal。

共享的组件

在对控制台进行大修的同时,我们对其代码库进行了大量的改进。主要是将逻辑实体清晰地划分为模块和类,引入了一些关键的扩展点,用更安全、更高效的STL容器替换了几个旧的、自制的集合和容器,并通过使用微软的 Wil header 库使代码更简单、更安全。

这项大修工作导致创建了几个对 Windows 上的任何终端实现都有用的关键组件,包括一个新的基于 DirectWrite 的文本布局和渲染引擎、一个能够存储 UTF-16 和 UTF-8 的文本缓冲区以及一个VT解析器/发射器。

构建一个全新终端

当开始构建全新终端应用程序时,我们探索并评估了几种方法和技术堆栈。最终决定继续使用 C++ 开发,并通过共享上述的现代化组件来实现我们的目标,并基于现代 Windows 应用程序平台和 UI 框架之上进行开发。

此外,我们意识到终端的渲染器和输入堆栈可以构建成可重用的 Windows UI 控件,方便其他人可以将其合并到其他应用程序中。

源码构建

该项目使用 git submodules 包含一些相关依赖,要确保子模块被更新,请在构建器使用如下命令检查:

git submodule update--init --recursive

OpenConsole.sln 需要在 Visual Studio 构建或者是使用 MSBuild 在命令行中构建。命令行构建的方法如下:

nugetrestoreOpenConsole.slnmsbuildOpenConsole.sln

我们还在 tools 目录下提供了一组常用的脚本可以帮助自动化处理构建和运行测试的过程。

项目包含:

  • Windows Terminal
  • Windows 控制台主机 (conhost.exe)
  • 上述两项目的共享组件
  • ColorTool
  • 示例项目 将展示如何使用 Windows Console APIs