Terminal: 向 Windows 控制台添加表情符号支持

创建于 2018-05-23  ·  68评论  ·  资料来源: microsoft/terminal

请在 Windows 控制台中支持表情符号。

当您为初创公司编写vim时事通讯或按表情符号分类时非常有用。

Area-Rendering Issue-Feature Product-Conhost

最有用的评论

已经在积压中:)

所有68条评论

已经在积压中:)

甜的! 另一个用例:我有一个命令行应用程序,它使用 ⚠ 输出警告。

@zadjii-msft 这将包括对非拉丁 unicode 字符的支持吗? 即在当前部署的控制台字体中找不到的阿拉伯语或日语字符可以用不同的字体显示吗?

假设,是的。

阿拉伯语有点像它自己的问题——我们几乎不可能很快实现从左到右的语言支持,但字符可能能够正确呈现。

如果有更多要分享的内容, @adiviness可以就该主题进行更多讨论。

由于双向文本和连字需要额外的支持,所以阿拉伯语是一种困难的语言。 据我所知,目前没有多少终端模拟器支持它。

在当前字体没有字形的情况下,控制台能够呈现表情符号和支持字体回退之间也存在差异。 它们都是我们积压工作中的项目。

+1 我们的构建和 CI 脚本具有用于成功 ✔️、警告 ⚠ 和错误 ❌ 的表情符号,以便快速、高效地查看日志。

我们可以不 +1 问题吗? 请使用反应或订阅通知。

@miniksa ,我不会被 +1 分心。 你可以完全忽略它。 输入它的主要目的是阐明用例。 据推测,平台/产品所有者应该对客户用例非常感兴趣......在这种情况下认为这并不太奢侈。

@SidShetye - 感谢您的评论 - 您的用例并不罕见,但

一般来说,我们要求人们不要 +1,因为我们希望避免人们 +1(特别是没有进一步评论),这只会导致噪音,并使线程更难以解析和管理。

分享额外的评论、背景、观察、问题等比 +1 更有价值;)

奇怪的是没有人提到它,但是 Yarn 包管理器使用了表情符号,而且它们只显示为正方形有点烦人:/

感谢@破坏性龙 - 有许多工具包含/发出表情符号,但控制台尚无法呈现它们。

@bitcrazed在这个关于 conpty 版本的 twitter 线程中提到我们仍然需要等待一个新的缓冲区和一个新的渲染器 (DirectWrite)。 就剩下这两个主要的阻滞剂了吗?

@kavdev基本上,是的。 要显示表情符号字形,我们首先必须能够为每个字形(例如 Ninjacats)存储(可能是复合的)Unicode 代码点,但我们还必须能够渲染它们,这需要字体回退,而 GDI 没有支持。

我们将致力于改进控制台的文本缓冲区实现,以及未来版本中的渲染器。

@bitcrazed
许多表情符号是复合的,即有多个代码点连接在一起(使用 ZWJ 或 VS 或其他),并且在大多数情况下它们不适合一个控制台单元格。 所以你的问题不是“1个单元格到n个字符”而是“m个单元格到n个字符”......

image

FWIW,我的终端模拟器和 iTerm2 都通过将表情符号基本上视为“全宽”(2 个单元格)CJK 样式字符来呈现表情符号。 我不知道 iTerm2,但我没有尝试支持 emoji 或任何其他字符上的 unicode“修饰符”。 每个字符必须是一个 unicode 代码点,尽管它可以是正常宽度或全宽。

@sedwards2009
最终的解决方案应该是 Unicode 或任何规范,告诉我们如何处理字符网格上的复杂脚本。

最接近的想法可能是应用对齐中的一些概念(例如在东亚字符之间插入空格,以及在将阿拉伯字符放入网格时插入 Kashida),但是对齐实现是一团糟。 AFAIK DWRITE 到目前为止做得最好,但一些实现(如 Kashida)仍然非常笨拙。

只是一个可能有用的评论 - 某些表情符号和 unicode 符号曾经起作用,我会在我的 WSL 登录横幅上显示一些,例如🍰 (U+1F370),自 1809 年更新以来,它们不再显示在任何终端中(WSL bash,超级,VS 代码)
然而,有些符号在 1809 年确实有效,例如 ☕ (U+2615) 但我认为它们在 Unicode 频谱的不同部分,即低得多的代码点

十月更新似乎在这方面带来了倒退而不是进步。 我以前能够使用我在 VS Code 集成终端(使用 powershell)中测试过的所有 unicode 符号,但是在 10 月更新后,所有表情符号和某些外语字符都无法正确呈现。

这实际上似乎是一个半系统范围的字体问题,因为即使是像 ConEmu 这样的控制台模拟器现在也无法正确渲染表情符号。

@Ben-Hope @noxabellus在这里

我将 Windows 10 更新到 1809 并且表情符号消失了(PowerShell 和 Visual Studio Code;集成终端)。

vue-cli 的命令vue ui为例:
🚀 启动图形界面...

是的,我在启动 vue-cli 时想念那个小火箭😢

@bitcrazed @zadjii-msft 跟踪 1809 年发现的回归是否存在问题? 我不是在谈论全面的表情符号支持,只是恢复以前版本支持的基本外语/Unicode 字形。 您知道该问题在以后的 Beta 版本中是否仍然存在吗?

同样在这里。 几天前我将我的 Win10 从 1803 更新到 1809,现在所有字符 >= U+10000(4 个字节或更多字节的 UTF-8)不再显示。 我也试过最新的内幕版本(Windows 10 Insider Preview 18358.1 (19h1_release)),不幸的是,这个bug仍然存在。

由于19H1即将发布,您能否修复它,或者因为它可能是其他项目中的错误而报告?

一样=(

表情符号渲染似乎有所改进。

我尝试了CascadiaPackage (Windows; x64) 的最新版本并得到了这个(见图):

terminal

运行 Windows 10,内部版本 1903。

选择禁用彩色字体表情符号有什么好处吗?

那么使用字体颜色设置的任何表情符号都是单色的吗?

@mdtuak是的,事实上这是一个设置@miniksa ,我之前讨论过添加。 我刚刚提交了 #956 来跟踪这项工作:)

@MartinMa这与现有的 conhost.exe 完全不同,如果您尝试运行 OpenConsolePackage(即 OSS conhost),您仍然应该遇到问题。

@MartinMa这与现有的 conhost.exe 完全不同,如果您尝试运行 OpenConsolePackage(即 OSS conhost),您仍然应该遇到问题。

不要那么肯定! Windows 终端中使用的 DirectWrite 渲染器 _也是 OpenConsole 的一部分!_ 您只需要在使用它之前设置一个注册表项 ( HKCU\Console\UseDx = DWORD(1) )。

@DHowett-MSFT 粘贴表情符号字符串时,控制台会抛出异常。
它在这里。
https://github.com/microsoft/terminal/blob/2fdcb679ab1f1f1edc542e3b86327dacea78f7ac/src/buffer/out/CharRowCellReference.cpp#L15

@DHowett-MSFT Dustin Howett FTE 粘贴表情符号字符串时控制台抛出异常。
它在这里。
https://github.com/microsoft/terminal/blob/2fdcb679ab1f1f1edc542e3b86327dacea78f7ac/src/buffer/out/CharRowCellReference.cpp#L15

我 80-90% 确定@adiviness或我有一个错误覆盖已经在这里的某个地方。

是的,我在/dev/austdi/NewCookedRead上所做的工作可能会影响那里的崩溃。 我们尚不支持在所有 shell 中粘贴(或输入)表情符号。

@MartinMa这与现有的 conhost.exe 完全不同,如果您尝试运行 OpenConsolePackage(即 OSS conhost),您仍然应该遇到问题。

不要那么肯定! Windows 终端中使用的 DirectWrite 渲染器 _也是 OpenConsole 的一部分!_ 您只需要在使用它之前设置一个注册表项 ( HKCU\Console\UseDx = DWORD(1) )。

我什至不知道。 我晚上回家试试。 但是这个注册表会影响默认的 conhost.exe 吗?

更新 2019-07-19 20:47 UTC+8

虽然 OpenConsole 可以用HKCU\Console\UseDx开启 DirectWrite 渲染,但似乎还是无法显示 emoji。

屏幕截图(5)

屏幕截图(6)

可能与https://github.com/microsoft/terminal/issues/2053有关

是的,这几乎可以肯定是因为#2053。

@DHowett-MSFT 我的提交修复是否合适,如果没有问题,我将创建一个 PR。

https://github.com/fcharlie/terminal/commit/4c6280ca35fff9eac0041c94385574bedc5f2a27

我在 @cinnamon-msft 上看到了这个Youtube 视频。 她展示了表情符号的支持。 这是固定的吗? 😄

@innovoix那是Windows 终端,这是关于Windows 控制台

@ExE-Boss 啊好吧,我的错。

image

当我 10 年来第一次设置 Windows 工作站时,现在非常习惯 OSX,我非常不安,因为失去了心爱的和非常有用的表情符号。 有点有趣,这还不是很久以前的默认设置。

UnfundedPillow2ShutUpCon说的是什么? 我们现在永远不会知道😢😢

也大喊大叫iTerm 。 愿我们很快在这个平台上找到您和您的伟大之处。 没有拆分窗格? 好痛😱😱

@jasonhargrove感谢您的反馈。 您可能想查看 _Windows Terminal_,它(顺便说一下)也是从这个存储库中构建的。 它确实支持您正在寻找的东西。

image

@jasonhargrove我们确实计划在未来将 Windows 终端和 Windows 控制台底层的核心引擎的许多改进集成到 Windows 控制台中。 这些区域包括内部文本缓冲区、文本渲染引擎等——通常不会影响向后兼容性的东西。

为什么“向后兼容”警告? Windows 控制台的工作(连同 Cmd)是尽可能保持向后兼容。 因此,将有许多功能(例如选项卡、拆分窗格等)仅在 Windows 终端中可用,并且永远不会返回到控制台。

我们强烈建议用户开始评估和测试 Windows 终端,在此处提交任何意外问题,以便我们在将终端推向 v1.0(2020 年第二季度)的过程中尽快分类和修复它们。

FWIW,从 v0.7 开始,Windows Terminal 确实支持拆分窗格,以及多个选项卡、UTF-8、表情符号、GPU 加速文本渲染、大量配置选项、多项选择/复制和粘贴改进等。

让我发疯的一件事是无法在 Windows 终端中进行 Shift+Insert 粘贴。

@jsilvermist您可以在终端设置中添加shift+ins作为键绑定。

@jsilvermist礼貌请求 - 请将问题保留到相关线程。 您描述的问题与键绑定有关,而不是表情符号;)

@bitcrazed是的,我的错! 另外,感谢@DHowett-MSFT!

编辑:忘记了必须的表情符号:眨眼:

@jsilvermist没问题 - 我们都一次又一次地这样做 - 非常感谢😜👍

在 Windows 终端中演示表情符号和窗格:

image

好的圣诞节来得早! 这是一个很好的开始,这是一次重大的飞跃,恭喜。 也谢谢你让我知道这件事📈

Capture

如果我粘贴表情​​符号,看到??是否正常。 请确认。 提前致谢。

@AmericanY是的,这是 PowerShell 5.1 的问题。

@DHowett-MSFT 发生在 CMD、PowerShell 和 windows 新终端上。

我的 WSL 在呈现 unicode 字符串后打印了一些不寻常的字符。 我试图构建一个交互式游戏,因此无法显示角色。 看起来我必须将自己限制为 128 位 ASCII
image

我只想说,抱歉,这看起来很有趣。

fmt_test.exe 的 src 代码在某处可用吗? ( @fcharlie在本主题前面的截图)我很难复制结果。

谢谢!

你好,
添加@AmericanY的评论,当在Windows 终端中粘贴一个表情符号(比如来自预先存在的输出)时,它在输入中被破坏并在输出中正确。
另外,如果在后面做一个向上箭头,那么这次输入是正确的。

这是预期的吗?

image

视窗终端
Powershell 核心 6.2.1
用于电力线的 Meslo LG M

@AmericanY是的,这是 PowerShell 5.1 的问题。

除了那个,两个表情符号之间的空格在 posh 5.1 中被转换为换行符,但在 ash、bash 等其他 shell 中不会:

@remidebette你会想看#1503

@zadjii-msft ,这看起来很难,但一旦你破解它就会非常好。
挂在那里!

我已经在 Windows 终端(版本:0.11.1191.0)下的几个 shell 上测试了表情符号,结果如下:

  • 指令
    image
  • 电源外壳
    image
  • 指挥官
    image
  • 带有 ZSH 的 WSL
    image
  • 带有 ZSH 的 Cygwin
    image

看起来到目前为止唯一完美运行的 shell 是 WSL(bash 和 zsh)...

我正在处理一组旧的信息,但至少曾经是控制台将提示行存储在与输出缓冲区不同的缓冲区中,并且它不支持超过 ucs2 的编码。 WSL 可以工作,因为它是用 utf8 编码的。 我曾经在一个分支上工作,解决了这个问题,如果我这个周末有时间,我会看一眼。 唔

编辑:如果 WSL 不像其他人那样使用熟读,WSL 也可能有效,我不记得是否有效。

我该如何修复表情符号?

我遇到了同样的问题; 似乎没有最新的解决方案afaik。

image

甜的! 另一个用例:我有一个命令行应用程序,它使用 ⚠ 输出警告。

根据我的经验,表情符号的输出效果很好。

所以可以确定问题是输入字符在windows终端中没有正确呈现。 我已经尝试过 Git Bash(一种 fo shell),它与 Git Bash GUI 一起工作得很好,但不能像其他人提到的错误一样与 Windows 终端一起工作。

  1. Git Bash 图形用户界面
    pic08-27-12-45-00
  2. 带有 Windows 终端的 Git Bash
    pic08-27-12-46-35

我的 windows 终端版本是 1.1.2233.0。
希望能尽快修复! 👍 还有大概的时间表吗?

请为此问题提交一个单独的错误,并包括您的 Windows 终端设置文件的内容。

请为此问题提交一个单独的错误,并包括您的 Windows 终端设置文件的内容。

我有同样的问题:
{ "guid": "{00000000-0000-0000-ba54-000000000002}", "acrylicOpacity": 0.75, "closeOnExit": true, "colorScheme": "Campbell", "commandline": "\"%PROGRAMFILES%\\git\\usr\\bin\\bash.exe\" -i -l", "cursorColor": "#FFFFFF", "cursorShape": "bar", "fontFace": "Consolas", "fontSize": 10, "historySize": 9001, "icon": "%PROGRAMFILES%\\Git\\mingw64\\share\\git\\git-for-windows.ico", "name": "Bash", "padding": "10, 0", "snapOnInput": true, "startingDirectory": "%USERPROFILE%", "useAcrylic": true },
Windows 终端:v1.3.2651.0
Git:v2.16.2.windows.1

此页面是否有帮助?
0 / 5 - 0 等级