Windows Terminal

Windows 全新终端
授权协议 MIT
开发语言 C/C++
所属分类 应用工具、 终端/远程登录
软件类型 开源软件
地区 不详
投 递 者 邹毅
操作系统 Windows
开源组织 微软
适用人群 未知
 软件概览

Windows Terminal 是一个全新的、流行的、功能强大的命令行终端工具。包含很多来社区呼声很高的特性,例如:多 Tab 支持、富文本、多语言支持、可配置、主题和样式,支持 emoji 和基于 GPU 运算的文本渲染等等。同时该终端依然符合我们的目标和要求,以确保它保持快速、高效,并且不会消耗大量内存和电源。

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。

本项目包含:

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

共享的组件

在对控制台进行大修的同时,我们对其代码库进行了大量的改进。主要是将逻辑实体清晰地划分为模块和类,引入了一些关键的扩展点,用更安全、更高效的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 在命令行中构建。命令行构建的方法如下:

nuget restore OpenConsole.sln
msbuild OpenConsole.sln

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

“Windows Terminal”的图片搜索结果

  • windows terminal ssh连接 1.在windows端生成rsa公私钥 进入目录 ~/.ssh cd ~/.ssh 使用 ssh-keygen 命令在 git-bash (或者Windows控制台,win10可在 设置->应用->应用和功能->可选功能->添加功能 安装OpenSSH客户端和服务端后使用)生成rsa公钥 id_rsa.pub 和私钥 id_rsa 默认rsa文件名为i

 相关资料
  • 问题内容: 即使经过了这一点,我仍然不清楚在以下代码中使用final如何导致安全发布。有人可以给出一个易于理解的解释吗? 问题答案: 编辑添加:关于Java和JSR-133 行为起源的 有趣观点。 有关如何在新JMM中正常工作的规范参考,以确保安全发布:http : //www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html#finalRigh

  • 问题内容: 从我有很多的用户输入和…此刻我总是写.. 我想知道您是否可以创建一个可以立即保护,转义和清理/ 数组的函数,因此您不必在每次使用用户输入等时都进行处理。 我在想一个功能,例如,和它里面,它应该做的,,,(我想这是所有做它的清洁与安全),然后返回。 那有可能吗?制作一个适用于和的函数,因此您只需执行以下操作: 因此,在以后的代码中,当您使用eg 或时,它们是否已固定,剥离等? 试了一下自

  • 问题内容: 为了线程安全,是否应该是故意不可变的Java类’final’的所有字段(包括超字段),还是没有修饰符方法就足够了? 假设我有一个带有非最终字段的POJO,其中所有字段都是某种不可变类的类型。这个POJO有getters- setters和一个设置一些初始值的构造函数。如果我通过敲除修饰符方法来扩展此POJO,从而使其不可变,那么扩展类是否是线程安全的? 问题答案: 为了以线程安全的方式

  • 问题内容: 这里的目标是在新的shell中运行新的python文件,并在现有的shell中运行现有的python文件。说我有两个文件,aaa.py和bbb.py。为了简单起见,aaa.py所做的只是… …并且可以说bbb.py确实是… 现在的目标是在终端1中运行aaa.py,并使其在终端2中启动bbb.py。我希望存在类似下面的命令,但无法弄清楚。 问题答案: 通常,无法从shell进行此操作。您

  • 所以我试着在我的Mac上的终端上运行这个。我的文件路径是/users/admin/documents/java/java24/com/java24hours 我尝试在java24hours目录“java saluton.java”中运行,并返回一个“error:Could not find或load main class saluton.java” 据我所知,这与包裹有关。我研究了包名,但不明白完

  • 捏麻麻的,泡池子11天挂了,不愧是你啊csig!还好哥们已经成了美团的形状了

  • 一、本功能说明 本节仅为更新缓存的作用,进行过某些模块的设置等操作或者感觉某些地方不正常的时候请更新缓存。 1).如何进入本功能 导航栏 选择扩展 -> 菜单栏 选择更新全站缓存

  • 我在苹果电脑上使用OSX优胜美地和内置终端。我有相当多的终端窗口大部分时间都在运行,很难在所有窗口中导航,因为它们看起来都很相似。所以我想做的是像往常一样运行我的命令,但是在一个新的终端窗口中运行一个选定的配置文件。 通常要在vim中打开my_script,我会在命令行中键入 但我想写下这样的东西: (和前面一样),然后一些命令说“在一个新的终端窗口中用profile=Homebrew打开它” 有