Xterm.js: 表情符号/ unicode问题(假设是双倍宽度?)

创建于 2017-10-12  ·  24评论  ·  资料来源: xtermjs/xterm.js

在当前的v3中,表情符号似乎占用了两个单元格。 使用箭头键,两个单元格(而不是一个单元格)被跳转。 删除也会清除两个单元格。

kapture 2017-10-12 at 18 34 05

arerenderer duplicate typbug

最有用的评论

Ubuntu 18.04上的VSCode 1.31.1遇到此问题。

当您使用箭头键向上或向下滚动命令历史记录时,就会拾取工件,这样,当您找到要运行的命令时,该命令就难以辨认。

另外,在拾取工件后,编辑命令是有问题的,因为显示的内容与xterm中的内存不同。

脚步:

在我的提示中添加了表情符号:
screenshot from 2019-02-21 11-10-15
按下箭头一次即可进入命令npm i
screenshot from 2019-02-21 11-10-55

请注意已添加到提示中的流氓n

从提示中的.bashrc删除表情符号,然后重新加载该词,该错误将消失。

所有24条评论

我无法在macOS / bash上重现此内容。 我不希望它发生,除非我们尝试调整表情符号的宽度(使其不为1)。 有关复制步骤的更多详细信息将很有用。

复制(OSX,MacOS High Sierra)

  • 开始v3演示
  • 多次粘贴😀
  • 多次按左箭头键,查看每次如何跳两个单元格并进入单元格边界。

因为我在,您已经在MacOS High Sierra上了吗? 也许它也与node-pty有关-我可以看到,在Terminal.app插入表情符号时,它会在表情符号后自动添加一个空格,甚至更多,我无法选择该空格,就像High Sierra会威胁它是一个全角字符...

MacOS High Sierra上的Terminal.app
kapture 2017-10-13 at 22 55 32

这可能是一件大事,他们试图使终端机中的Emojis更好? 我目前无法更新,因为它弄乱了Electron应用程序中的渲染。

我讨厌说我已经升级,现在我在所有这些基于铬的应用程序中都遇到了很多渲染故障😤

是的,在更新之前,我很小心地跟踪反馈,因为我认为与Sierra相似。

我注意到Terminal.app具有很好的表情符号体验,可以将它们视为适当的宽字符,如果他们可以的话,我们可能会做到这一点😄

UAX#11东亚宽度,修订版31更改了表情符号_East Asian Wide_(double-width),wchar.h中的wcswidth返回字符串的宽度。 我想macOS High Sierra会支持此更新。
xterm.js的wcwidth中的src/CharWidth.ts尚不支持。

@ mandel59感谢您的信息!

@ mandel59我认为这个问题是特定于表情符号的,我认为CJK字符应正确地归类为全角字符(某些组件可能会被破坏,例如https://github.com/xtermjs/xterm.js/issues/1387)

参考: https :

VS代码问题: https :

显然,颤振运行证明了这种现象

这是一个小型的Dart复制程序,用于我们不需要Flutter的程序(不过需要Dart):

import 'dart:async';

import 'dart:io';

// Windows console font has a limited set of Unicode characters.
final _animation = Platform.isWindows
    ? <String>[r'-', r'\', r'|', r'/']
    : <String>['🌕', '🌖', '🌗', '🌘', '🌑', '🌒', '🌓', '🌔'];
final _backspace = '\b' * _animation[0].length;

main() {
  int ticks = 0;
  void update(Timer timer) {
    if (ticks % 50 == 0) {
      stdout.write('\nDoing thing... ');
    }
    stdout.write('$_backspace${_animation[ticks++ % _animation.length]}');
  }

  new Timer.periodic(const Duration(milliseconds: 100), update);
}

另存为.dart文件,然后使用dart xxx.dart运行它。 此处的这段代码为此字符发出两个退格键,在标准macOS终端中可以正确删除该字符。 但是,在VS Code终端中,它将对表情符号和其他字符进行退格。 如果表情符号在行的开头,则什么都不做,但是如果不是,则渲染缓慢地向左爬行一个字符(并在其后留图标的右半部分)。

如果我从退格中删除* _animation[0].length以便始终执行单个退格,则它在VS Code终端中可以正常工作,但在macOS终端中不再有足够的退格(因此,卫星随后向右爬行) !)。

也适用于https://github.com/Microsoft/vscode/issues/60470中提到的希伯来语/阿拉伯语

Ubuntu 18.04上的VSCode 1.31.1遇到此问题。

当您使用箭头键向上或向下滚动命令历史记录时,就会拾取工件,这样,当您找到要运行的命令时,该命令就难以辨认。

另外,在拾取工件后,编辑命令是有问题的,因为显示的内容与xterm中的内存不同。

脚步:

在我的提示中添加了表情符号:
screenshot from 2019-02-21 11-10-15
按下箭头一次即可进入命令npm i
screenshot from 2019-02-21 11-10-55

请注意已添加到提示中的流氓n

从提示中的.bashrc删除表情符号,然后重新加载该词,该错误将消失。

首先,我要感谢你们所做的出色工作。

macOS Mojave 10.14.3上的VSCode 1.31.1遇到了相同的情况。 @juliusecker提到的n事情也正好发生在我身上,正如他所描述的那样。

我有@juliusecker提到的错误。
VSCode版本1.33.1(1.33.1)51b0b28134d51361cf996d2f0a1c698247aeabd8 2019-04-11T08:14:39.158Z
系统版本:macOS 10.14.4(18E226)
zsh 5.7.1(x86_64-apple-darwin17.7.0)

在VSCode和Powershell中重现非常简单。

emojiterminaltest.ps1

"Emoji Normal"
"😊1😊2😊3😊4"
"Emoji with Padding Spaces - What it should look like"
"😊  1😊  2😊  3😊  4"

image

是否有任何资源分配给该项目? 在此问题线程上可以看到,其他程序(Hyper等)中的大量回归。

@Tyriar是的,这只是ppl最有可能面对它的一个示例-emojis:smile_cat:

我猜我们将它们都保持打开状态,因为这很好地描述了问题,并且#1709着眼于解决方案,此外,它还有很多支持。

它可以在Windows 10以下版本中复制:
image

image
以上是我在VS代码内置终端中看到的内容,
image
上面是在VS代码中打开文本文件中的相同文本时看到的内容。

问题已经有将近两年了,有没有更新?

@jerch想要尽快解决,尽管他在atm上有很多东西。 最大的阻碍因素之一是现已发布的新附加系统。

最后赞成https://github.com/xtermjs/xterm.js/issues/1709,因为它们本质上是同一件事,我们希望减少问题的发生。

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

相关问题

goxr3plus picture goxr3plus  ·  3评论

albinekb picture albinekb  ·  4评论

pfitzseb picture pfitzseb  ·  3评论

jerch picture jerch  ·  3评论

Tyriar picture Tyriar  ·  4评论