Xterm.js: Problema com emojis / unicode (largura dupla assumida?)

Criado em 12 out. 2017  ·  24Comentários  ·  Fonte: xtermjs/xterm.js

Na v3 atual, os Emojis parecem ocupar duas células. Usando as teclas de seta, duas células são saltadas em vez de uma. A exclusão também limpa duas células.

kapture 2017-10-12 at 18 34 05

arerenderer duplicate typbug

Comentários muito úteis

O VSCode 1.31.1 no Ubuntu 18.04 apresenta esse problema.

Quando você rola para cima ou para baixo seu histórico de comandos com as teclas de seta, os artefatos são coletados de forma que, quando você chega a um comando que deseja executar, as chances são de que ele esteja ilegível.

Além disso, depois de selecionar um artefato, a edição do comando apresenta erros, pois o que é exibido é diferente do que está na memória no xterm.

Passos:

Adicionou um emoji ao meu prompt:
screenshot from 2019-02-21 11-10-15
Pressione a seta para cima uma vez para obter o comando npm i
screenshot from 2019-02-21 11-10-55

Observe o rogue n que foi adicionado ao prompt.

Remova o emoji do prompt em .bashrc e recarregue o termo e o bug vai embora.

Todos 24 comentários

Não consigo reproduzir isso no macOS / bash. Eu não esperava que isso acontecesse, a menos que tentássemos ajustar a largura do emoji (torná-lo diferente de 1). Mais detalhes sobre as etapas de reprodução seriam úteis.

Reproduza (OSX, MacOS High Sierra)

  • iniciar demonstração v3
  • colar 😀 várias vezes
  • aperte a tecla de seta para a esquerda várias vezes, veja como ele salta duas células de cada vez e atinge os limites da célula.

Você já está no MacOS High Sierra, porque eu estou? Talvez também esteja relacionado ao node-pty - posso ver que, ao inserir um emoji em Terminal.app ele adiciona automaticamente um espaço após o emoji e, mais ainda, não posso selecionar esse espaço, é como se High Sierra fosse uma ameaça como um caractere de largura dupla ...

Terminal.app no ​​MacOS High Sierra
kapture 2017-10-13 at 22 55 32

Isso pode ser uma coisa da alta serra, onde eles tentaram tornar o Emojis melhor no terminal? Não consigo atualizar atualmente, pois atrapalha a renderização em aplicativos Electron.

Odeio dizer que atualizei e agora estou preso a toneladas de falhas de renderização em todos aqueles aplicativos baseados em cromo

Sim, tive o cuidado de rastrear o feedback antes de atualizar, pois coisas semelhantes aconteceram com Sierra, eu acho.

Percebi que Terminal.app tem uma boa experiência de emojis, onde eles são tratados como caracteres largos adequados, provavelmente podemos fazer isso se eles puderem 😄

UAX # 11 East Asian Width, Revision 31 emoji alterado _East Asian Wide_ (largura dupla), e wcswidth em wchar.h retorna a largura das strings. Acho que o macOS High Sierra teria suportado a atualização.
wcwidth xterm.js em src/CharWidth.ts ainda não tem suporte.

@ mandel59 obrigado pela info!

@ mandel59 Acho que esse problema é específico do emoji, acho que os caracteres CJK devem ser categorizados corretamente como caracteres de largura dupla (alguns componentes podem estar corrompidos, como https://github.com/xtermjs/xterm.js/issues/1387)

Problema do código VS: https://github.com/Microsoft/vscode/issues/59145

Aparentemente, a corrida de flutter demonstra esse comportamento

Aqui está uma pequena reprodução do Dart para o que estamos vendo que não requer Flutter (mas requer 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);
}

Salve como um arquivo .dart e execute-o com dart xxx.dart . Este código aqui emite dois backspaces para este caractere, que em um terminal macOS padrão remove o caractere corretamente. No entanto, no terminal do VS Code, ele irá retroceder o emoji e, em seguida, outro caractere. Se o emoji estava no início da linha, isso não faz nada, mas se não estiver, a renderização rasteja lentamente para a esquerda por um caractere (e deixa a metade direita do ícone depois dele).

Se eu remover * _animation[0].length do backspace para que ele sempre faça um único backspace, ele funcionará bem no terminal do VS Code, mas não retrocederá mais o suficiente no Terminal do macOS (então as luas então se movem para a direita !).

Também se aplica a hebraico / árabe conforme mencionado em https://github.com/Microsoft/vscode/issues/60470

O VSCode 1.31.1 no Ubuntu 18.04 apresenta esse problema.

Quando você rola para cima ou para baixo seu histórico de comandos com as teclas de seta, os artefatos são coletados de forma que, quando você chega a um comando que deseja executar, as chances são de que ele esteja ilegível.

Além disso, depois de selecionar um artefato, a edição do comando apresenta erros, pois o que é exibido é diferente do que está na memória no xterm.

Passos:

Adicionou um emoji ao meu prompt:
screenshot from 2019-02-21 11-10-15
Pressione a seta para cima uma vez para obter o comando npm i
screenshot from 2019-02-21 11-10-55

Observe o rogue n que foi adicionado ao prompt.

Remova o emoji do prompt em .bashrc e recarregue o termo e o bug vai embora.

Em primeiro lugar, gostaria de agradecer a vocês por seu trabalho incrível.

O VSCode 1.31.1 no macOS Mojave 10.14.3 experimenta o mesmo. A coisa n mencionada por @juliusecker acontece comigo também, exatamente como ele descreveu.

Tenho o mesmo bug mencionado por @juliusecker.
VSCode Versão 1.33.1 (1.33.1) 51b0b28134d51361cf996d2f0a1c698247aea tough 2019-04-11T08: 14: 39.158Z
Versão do sistema: macOS 10.14.4 (18E226)
zsh 5.7.1 (x86_64-apple-darwin17.7.0)

Muito simples de reproduzir em VSCode e Powershell.

emojiterminaltest.ps1

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

image

Existem recursos atribuídos a este item? Parece muitas regressões em outros programas (Hyper, etc.), conforme visto neste tópico de problema.

@Tyriar Sim meio, é apenas um exemplo onde o ppl provavelmente vai enfrentar - emojis: smile_cat:

Acho que vamos mantê-los abertos, pois isso descreve bem o problema e # 1709 analisa mais a solução, além de que este tem um monte de votos positivos.

É replicável no Windows 10, a seguinte versão:
image

image
O acima é o que vejo em um terminal integrado de código VS,
image
o acima é o que vejo quando o mesmo texto em um arquivo de texto aberto no código do VS.

O problema já existe há quase dois anos, alguma atualização?

@jerch quer fazer isso logo, mas ele tem um monte de coisas acontecendo no caixa eletrônico. Um dos grandes bloqueadores para isso foi o novo sistema de addon que agora foi lançado.

Fechando em favor de https://github.com/xtermjs/xterm.js/issues/1709, pois eles são essencialmente a mesma coisa e queremos manter nossa contagem regressiva de problemas.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

goxr3plus picture goxr3plus  ·  3Comentários

Tyriar picture Tyriar  ·  4Comentários

zhangjie2012 picture zhangjie2012  ·  3Comentários

jestapinski picture jestapinski  ·  3Comentários

LB-J picture LB-J  ·  3Comentários