詳解 – Windows Terminal

[daodu]Windows Terminal 是一個全新的、流行的、功能強大的命令行終端工具。包含很多來社區呼聲很高的特性,例如:多 Tab 支持、富文本、多語言支持、可配置、主題和樣式,支持 emoji 和基於 GPU 運算的文本渲染等等。[/daodu]
同時該終端依然符合我們的目標和要求,以確保它保持快速、高效,並且不會消耗大量內存和電源。
Windows 控制檯主機

Windows 控制檯主機程序 conhost.exe是 Windows 原生的命令行體驗,它實現了 Windows 的命令行基礎架構,同時提供 Windows Console API, 輸入引擎、渲染引擎和用戶配置信息。本項目中的控制檯主機代碼實際上是 Windows 中的 conhost.exe 的源碼。
控制檯的主要目的是對已有控制檯應用保持向後兼容性。
自從 2014 年有了 Windows 命令行以來,開發團隊已經給控制檯增加了很多新特性,包括窗口透明化、基於行的選擇以及支持 ANSI / 虛擬終端序列 Virtual Terminal sequences, 24-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 目錄下提供了一組常用的腳本可以幫助自動化處理構建和運行測試的過程。
[yiji]項目包含:[/yiji]
Windows Terminal
Windows 控制檯主機 (conhost.exe)
上述兩項目的共享組件
ColorTool
示例項目 將展示如何使用 Windows Console APIs


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章