詳解Windows的全新終端- Windows Terminal
Windows Terminal是一個全新的、流行的、功能強大的命令行終端工具。包含很多來社區呼聲很高的特性,例如:多Tab支持、富文本、多語言支持、可配置、主題和样式,支持emoji和基於GPU運算的文本渲染等等。同時該終端依然符合我們的目標和要求,以確保它保持快速、高效,並且不會消耗大量內存和電源。
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 目錄下提供了一組常用的腳本可以幫助自動化處理構建和運行測試的過程。
項目包含: