Xterm.js: Problema con emojis / unicode (¿se supone que son de doble ancho?)

Creado en 12 oct. 2017  ·  24Comentarios  ·  Fuente: xtermjs/xterm.js

En la versión 3 actual, los emojis parecen ocupar dos celdas. Usando las teclas de flecha, se saltan dos celdas en lugar de una. La eliminación también borra dos celdas.

kapture 2017-10-12 at 18 34 05

arerenderer duplicate typbug

Comentario más útil

VSCode 1.31.1 en Ubuntu 18.04 experimenta este problema.

Cuando se desplaza hacia arriba o hacia abajo en su historial de comandos con las teclas de flecha, los artefactos se recogen de tal manera que cuando llega a un comando que desea ejecutar, es probable que sea ilegible.

Además, después de recoger un artefacto, la edición del comando tiene errores, ya que lo que se muestra es diferente de lo que está en la memoria en xterm.

Pasos:

Agregué un emoji a mi mensaje:
screenshot from 2019-02-21 11-10-15
Presione la flecha hacia arriba una vez para llegar al comando npm i
screenshot from 2019-02-21 11-10-55

Observe el n pícaro que se agregó al indicador.

Elimina el emoji del mensaje en .bashrc y vuelve a cargar el término y el error desaparece.

Todos 24 comentarios

No puedo reproducir esto en macOS / bash. No esperaría que suceda a menos que intentemos ajustar con el ancho de emoji (que no sea 1). Sería útil obtener más detalles sobre los pasos de reproducción.

Reproducir (OSX, MacOS High Sierra)

  • iniciar demo v3
  • pegar 😀 varias veces
  • presione la tecla de flecha izquierda varias veces, vea cómo salta dos celdas cada vez y se encuentra con los límites de la celda.

¿Ya estás en MacOS High Sierra, porque yo lo estoy? Tal vez también esté relacionado con node-pty: puedo ver que al insertar un emoji en Terminal.app , automáticamente agrega un espacio después del emoji, y aún más, no puedo seleccionar ese espacio, es como si High Sierra amenazara como un carácter de doble ancho ...

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

¿Esto podría ser algo de la sierra alta donde intentaron mejorar los Emojis en la terminal? No puedo actualizar actualmente porque estropea el renderizado en las aplicaciones de Electron.

Odio decir que me actualicé y ahora estoy atrapado con toneladas de fallas de renderizado en todas esas aplicaciones basadas en cromo 😤

Sí, tuve cuidado de realizar un seguimiento de los comentarios antes de actualizar, ya que creo que sucedieron cosas similares con Sierra.

Me doy cuenta de que Terminal.app tiene una buena experiencia de emoji en la que se tratan como caracteres anchos adecuados, probablemente podamos hacerlo si pueden 😄

UAX # 11 East Asian Width, Revisión 31 modificó el emoji _East Asian Wide_ (doble ancho), y wcswidth en wchar.h devuelve el ancho de las cadenas. Supongo que macOS High Sierra habría admitido la actualización.
wcwidth in src/CharWidth.ts xterm.js aún no lo ha admitido.

@ mandel59 gracias por la información!

@ mandel59 Creo que este problema es específico de emoji, creo que los caracteres de CJK deben categorizarse correctamente como caracteres de doble ancho (algunos componentes pueden estar rotos, como https://github.com/xtermjs/xterm.js/issues/1387)

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

Aparentemente, la ejecución de aleteo demuestra este comportamiento

Aquí hay una pequeña reproducción de Dart para lo que estamos viendo que no requiere Flutter (aunque sí requiere 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);
}

Guárdelo como un archivo .dart y luego ejecútelo con dart xxx.dart . Este código aquí emite dos retrocesos para este carácter, que en un terminal macOS estándar elimina correctamente el carácter. Sin embargo, en el terminal VS Code retrocederá el emoji y luego otro personaje. Si el emoji estaba al principio de la línea, esto no hace nada, pero si no lo está, la representación se desplaza lentamente hacia la izquierda por un carácter (y deja la mitad derecha del icono después).

Si elimino el * _animation[0].length del retroceso para que siempre haga un retroceso único, funciona bien en el terminal VS Code, pero ya no retrocede lo suficiente en el terminal macOS (por lo que las lunas se deslizan hacia la derecha !).

También se aplica al hebreo / árabe como se menciona en https://github.com/Microsoft/vscode/issues/60470

VSCode 1.31.1 en Ubuntu 18.04 experimenta este problema.

Cuando se desplaza hacia arriba o hacia abajo en su historial de comandos con las teclas de flecha, los artefactos se recogen de tal manera que cuando llega a un comando que desea ejecutar, es probable que sea ilegible.

Además, después de recoger un artefacto, la edición del comando tiene errores, ya que lo que se muestra es diferente de lo que está en la memoria en xterm.

Pasos:

Agregué un emoji a mi mensaje:
screenshot from 2019-02-21 11-10-15
Presione la flecha hacia arriba una vez para llegar al comando npm i
screenshot from 2019-02-21 11-10-55

Observe el n pícaro que se agregó al indicador.

Elimina el emoji del mensaje en .bashrc y vuelve a cargar el término y el error desaparece.

Lo primero es lo primero, quería agradecerles a ustedes por su increíble trabajo.

VSCode 1.31.1 en macOS Mojave 10.14.3 experimenta lo mismo. La cosa n mencionada por @juliusecker también me sucede a mí, exactamente como él lo describió.

Tengo el mismo error mencionado por @juliusecker.
VSCode Versión 1.33.1 (1.33.1) 51b0b28134d51361cf996d2f0a1c698247aeabd8 2019-04-11T08: 14: 39.158Z
Versión del sistema: macOS 10.14.4 (18E226)
zsh 5.7.1 (x86_64-apple-darwin17.7.0)

Muy simple de reproducir en VSCode y Powershell.

emojiterminaltest.ps1

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

image

¿Hay algún recurso asignado a este artículo? Parece que hay muchas regresiones en otros programas (Hyper, etc.) como se ve en este hilo de problemas.

@Tyriar Sí, es solo un ejemplo en el que las personas probablemente lo enfrentarán - emojis: smile_cat:

Supongo que los mantendremos abiertos ya que esto describe bien el problema y el número 1709 analiza más la solución, además de que este tiene muchos votos a favor.

Es replicable en Windows 10, la siguiente versión:
image

image
Lo anterior es lo que veo en un terminal integrado de código VS,
image
lo anterior es lo que veo cuando se abre el mismo texto en un archivo de texto en código VS.

El problema ha durado casi dos años, ¿alguna actualización?

@jerch quiere llegar pronto, sin embargo, tiene un montón de cosas en el

Cerrando a favor de https://github.com/xtermjs/xterm.js/issues/1709 ya que son esencialmente lo mismo y queremos mantener nuestra cuenta atrás de problemas.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

7PH picture 7PH  ·  4Comentarios

kolbe picture kolbe  ·  3Comentarios

Mlocik97-issues picture Mlocik97-issues  ·  3Comentarios

jestapinski picture jestapinski  ·  3Comentarios

jerch picture jerch  ·  3Comentarios