欢迎来到 Windows 终端、控制台和命令行仓库
本仓库包含以下项目的源代码:
- Windows 终端
- Windows 终端预览版
- Windows 控制台主机 (
conhost.exe
) - 两个项目之间共享的组件
- ColorTool
- 示例项目,展示如何使用 Windows 控制台 API
相关仓库包括:
安装和运行 Windows 终端
[!注意] Windows 终端需要 Windows 10 2004 (版本 19041) 或更高版本
Microsoft Store [推荐]
从 [Microsoft Store 安装 Windows 终端][store-install-link]。 这样可以在我们发布新版本时自动升级,始终保持最新版本。
这是我们推荐的方法。
其他安装方法
通过 GitHub
对于无法从 Microsoft Store 安装 Windows 终端的用户, 可以从本仓库的发布页面手动下载已发布的版本。
从资源部分下载 Microsoft.WindowsTerminal_<版本号>.msixbundle
文件。要安装应用程序,只需双击 .msixbundle
文件,应用安装程序应该会自动运行。如果由于任何原因失败,可以在 PowerShell 提示符下尝试以下命令:
# 注意:如果使用 PowerShell 7+,请在使用 Add-AppxPackage 之前运行
# Import-Module Appx -UseWindowsPowerShell
Add-AppxPackage Microsoft.WindowsTerminal_<版本号>.msixbundle
[!注意] 如果手动安装终端:
- 可能需要安装 VC++ v14 桌面框架包。 这通常只在较旧的 Windows 10 版本上需要,并且仅当出现缺少框架包的错误时才需要。
- 终端不会在发布新版本时自动更新,因此需要定期安装最新的终端版本以获取所有最新的修复和改进!
通过 Windows 包管理器 CLI(又名 winget)
winget 用户可以通过安装 Microsoft.WindowsTerminal
包来下载和安装最新的终端版本:
winget install --id Microsoft.WindowsTerminal -e
[!注意] 依赖支持在 WinGet 版本 1.6.2631 或更高版本中可用。要安装终端稳定版 1.18 或更高版本,请确保您已更新 WinGet 客户端。
通过 Chocolatey(非官方)
Chocolatey 用户可以通过安装 microsoft-windows-terminal
包来下载和安装最新的终端版本:
choco install microsoft-windows-terminal
要使用 Chocolatey 升级 Windows 终端,请运行以下命令:
choco upgrade microsoft-windows-terminal
如果在安装/升级包时遇到任何问题,请访问 Windows 终端包页面并按照 Chocolatey 分类流程进行操作
通过 Scoop(非官方)
Scoop 用户可以通过安装 windows-terminal
包来下载和安装最新的终端版本:
scoop bucket add extras
scoop install windows-terminal
要使用 Scoop 更新 Windows 终端,请运行以下命令:
scoop update windows-terminal
如果在安装/更新包时遇到任何问题,请在 Scoop Extras bucket 仓库的问题页面上搜索或报告相同问题。
安装 Windows 终端 Canary 版
Windows 终端 Canary 版是 Windows 终端的每日构建版本。这个版本包含我们 main
分支的最新代码,让您有机会在功能正式进入 Windows 终端预览版之前就能尝试。
Windows 终端 Canary 版是我们最不稳定的版本,因此您可能会在我们发现之前就发现一些 bug。
Windows 终端 Canary 版提供 App Installer 分发版和便携式 ZIP 分发版。
App Installer 分发版支持自动更新。由于平台限制,此安装程序仅适用于 Windows 11。
便携式 ZIP 分发版是一个便携式应用程序。它不会自动更新,也不会自动检查更新。这个便携式 ZIP 分发版适用于 Windows 10(19041+)和 Windows 11。
了解更多关于 Windows 终端分发版类型 的信息。
Windows 终端路线图
Windows 终端的计划在此描述, 并将随项目进展更新。
终端和控制台概述
在深入代码之前,请花几分钟阅读以下概述:
Windows 终端
Windows 终端是一个全新的、现代化的、功能丰富的、高效的终端应用程序,面向命令行用户。它包含了 Windows 命令行社区最常请求的许多功能,包括支持标签、富文本、全球化、可配置性、主题和样式等。
终端还需要满足我们的目标和指标,以确保它保持快速和高效,不会消耗大量内存或电力。
Windows 控制台主机
Windows Console主机conhost.exe是Windows原始的命令行用户体验。它还承载Windows的命令行基础设施和Windows Console API服务器、输入引擎、渲染引擎、用户偏好设置等。本仓库中的控制台主机代码是构建Windows自身conhost.exe的实际源代码。
自2014年接管Windows命令行以来,团队为Console添加了几项新功能,包括背景透明度、基于行的选择、对ANSI/虚拟终端序列的支持、24位色彩、伪控制台("ConPTY")等。
然而,由于Windows Console的主要目标是保持向后兼容性,我们无法添加社区(和团队)在过去几年一直想要的许多功能,包括标签、Unicode文本和表情符号。
这些限制促使我们创建了新的Windows Terminal。
你可以在命令行团队博客上的这一系列相关博文中阅读更多关于命令行的演变,特别是Windows命令行的演变。
共享组件
在改造Windows Console的过程中,我们大大现代化了其代码库,将逻辑实体清晰地分离到模块和类中,引入了一些关键的可扩展点,用更安全、更高效的STL容器替换了几个旧的、自制的集合和容器,并通过使用Microsoft的Windows实现库(WIL)使代码更简单、更安全。
这次改造使Console的几个关键组件可以在Windows上的任何终端实现中重复使用。这些组件包括新的基于DirectWrite的文本布局和渲染引擎、能够存储UTF-16和UTF-8的文本缓冲区、VT解析器/发射器等。
创建新的Windows Terminal
当我们开始规划新的Windows Terminal应用程序时,我们探索和评估了几种方法和技术栈。我们最终决定,继续投资我们的C++代码库最能满足我们的目标,这将允许我们在现有的Console和新的Terminal中重用上述几个现代化的组件。此外,我们意识到这将允许我们将Terminal的核心本身构建为一个可重用的UI控件,其他人可以将其合并到自己的应用程序中。
这项工作的结果包含在这个仓库中,并作为Windows Terminal应用程序交付,你可以从Microsoft Store下载,或直接从这个仓库的发布页面下载。
资源
关于Windows Terminal的更多信息,你可能会发现以下一些资源有用且有趣:
- 命令行博客
- 命令行背景博客系列
- Windows Terminal发布:"Terminal宣传视频"
- Windows Terminal发布:Build 2019会议
- Run As Radio:第645期 - 与Richard Turner讨论Windows Terminal
- Azure Devops播客:第54集 - Kayla Cinnamon和Rich Turner谈Windows Terminal团队的DevOps
- Microsoft Ignite 2019会议:现代Windows命令行:Windows Terminal - BRK3321
常见问题
我构建并运行了新的Terminal,但它看起来就像旧的控制台
原因:你在Visual Studio中启动了错误的解决方案。
解决方案:确保你在Visual Studio中构建和部署CascadiaPackage项目。
注意:OpenConsole.exe只是本地构建的conhost.exe,即经典的Windows Console,用于托管Windows的命令行基础设施。Windows Terminal使用OpenConsole连接并与命令行应用程序通信(通过ConPty)。
文档
所有项目文档都位于aka.ms/terminal-docs。如果你想为文档做出贡献,请在Windows Terminal文档仓库提交拉取请求。
贡献
我们很高兴能与你们这些了不起的社区一起工作,共同构建和增强Windows Terminal!
在开始功能/修复工作之前,请阅读并遵循我们的贡献者指南,以帮助避免任何浪费或重复的工作。
与团队沟通
与团队沟通的最简单方式是通过GitHub问题。
请提交新的问题、功能请求和建议,但在创建新问题之前请搜索类似的开放/已关闭的现有问题。
如果你想提出一个你认为(还)不值得提出问题的问题,请通过Twitter联系我们:
- Christopher Nguyen,产品经理:@nguyen_dows
- Dustin Howett,工程主管:@dhowett
- Mike Griese,高级开发人员:@zadjii@mastodon.social
- Carlos Zamora,开发人员:@cazamor_msft
- Pankaj Bhojwani,开发人员
- Leonard Hecker,开发人员:@LeonardHecker
开发者指南
先决条件
- 运行 Windows Terminal 需要 Windows 10 2004 (版本号 >= 10.0.19041.0) 或更高版本
- 要在本地安装和运行 Windows Terminal,必须在 Windows 设置应用中启用开发者模式
- 必须安装 PowerShell 7 或更高版本
- 必须安装 Windows 11 (10.0.22621.0) SDK
- 至少需要安装 VS 2022
- 必须通过 VS 安装程序安装以下工作负载。注意:在 VS 2022 中打开解决方案会自动提示安装缺失组件:
- 使用 C++ 的桌面开发
- 通用 Windows 平台开发
- 以下单个组件
- C++ (v143) 通用 Windows 平台工具
- 必须安装 .NET Framework 目标包以构建测试项目
构建代码
本仓库使用 git 子模块管理一些依赖项。为确保子模块得到恢复或更新,请在构建之前运行以下命令:
git submodule update --init --recursive
可以在 Visual Studio 内部或使用 /tools 目录中的一组便捷脚本和工具从命令行构建 OpenConsole.sln:
在 PowerShell 中构建
Import-Module .\tools\OpenConsole.psm1
Set-MsBuildDevEnvironment
Invoke-OpenConsoleBuild
在 Cmd 中构建
.\tools\razzle.cmd
bcz
运行和调试
要在 VS 中调试 Windows Terminal,右键单击解决方案资源管理器中的 CascadiaPackage
,进入属性。在调试菜单中,将"应用程序进程"和"后台任务进程"更改为"仅限本机"。
然后,您应该能够通过按 F5 键构建和调试 Terminal 项目。确保选择"x64"或"x86"平台 - Terminal 不支持"任意 CPU"构建(因为 Terminal 是 C++ 应用程序,而不是 C# 应用程序)。
👉 您将无法通过直接运行 WindowsTerminal.exe 来启动 Terminal。有关原因的详细信息,请参阅 #926、#4043
编码指南
请查看以下关于我们编码实践的简要文档。
👉 如果您发现这些文档中缺少什么,欢迎在仓库中的任何文档文件中贡献内容(或编写一些新的文档)!
这是一项正在进行的工作,我们正在学习需要为人们提供什么,以便他们能成为我们项目的有效贡献者。
- 编码风格
- 代码组织
- 我们遗留代码库中的异常
- 在 WIL 中与 Windows 交互的有用智能指针和宏
行为准则
本项目采用了 Microsoft 开源行为准则。有关更多信息,请参阅行为准则常见问题解答或联系 opencode@microsoft.com 提出任何其他问题或意见。