Xterm.js: Masalah dengan emoji / unicode (diasumsikan lebar ganda?)

Dibuat pada 12 Okt 2017  ·  24Komentar  ·  Sumber: xtermjs/xterm.js

Di v3 saat ini, Emoji tampaknya menggunakan dua sel. Dengan menggunakan tombol panah, dua sel akan dilompati, bukan satu. Menghapus juga menghapus dua sel.

kapture 2017-10-12 at 18 34 05

arerenderer duplicate typbug

Komentar yang paling membantu

VSCode 1.31.1 di Ubuntu 18.04 mengalami masalah ini.

Saat Anda menggulir ke atas atau ke bawah riwayat perintah Anda dengan tombol panah, artefak diambil sedemikian rupa sehingga ketika Anda mendapatkan perintah yang ingin Anda jalankan, kemungkinannya tidak terbaca.

Selain itu, setelah Anda mengambil artefak, mengedit perintah menjadi bermasalah, karena apa yang ditampilkan berbeda dari apa yang ada di memori di xterm.

Langkah:

Menambahkan emoji ke prompt saya:
screenshot from 2019-02-21 11-10-15
Tekan panah ke atas sekali untuk mendapatkan perintah npm i
screenshot from 2019-02-21 11-10-55

Perhatikan bajingan n yang telah ditambahkan ke prompt.

Hapus emoji dari prompt di .bashrc dan muat ulang istilah tersebut dan bug hilang.

Semua 24 komentar

Saya tidak dapat mereproduksi ini di macOS / bash. Saya tidak berharap itu terjadi kecuali kami mencoba menyesuaikan dengan lebar emoji (menjadikannya non-1). Rincian lebih lanjut tentang langkah-langkah repro akan berguna.

Reproduksi (OSX, MacOS High Sierra)

  • mulai demo v3
  • tempel 😀 beberapa kali
  • tekan tombol panah kiri beberapa kali, lihat bagaimana itu melompati dua sel setiap kali dan berjalan ke batas sel.

Apakah Anda sudah menggunakan MacOS High Sierra, karena saya? Mungkin juga terkait dengan node-pty - Saya dapat melihat bahwa ketika memasukkan emoji di Terminal.app secara otomatis menambahkan spasi setelah emoji, dan bahkan lebih, saya tidak dapat memilih spasi itu, itu seperti High Sierra akan mengancam itu sebagai karakter berukuran ganda ...

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

Ini mungkin hal sierra tinggi di mana mereka mencoba membuat Emoji lebih baik di terminal? Saya tidak dapat memperbarui saat ini karena mengacaukan rendering di aplikasi Electron.

Saya benci mengatakan bahwa saya telah meningkatkan dan sekarang saya terjebak dengan banyak gangguan rendering di semua aplikasi berbasis kromium itu 😤

Ya, saya berhati-hati untuk melacak umpan balik sebelum memperbarui karena hal serupa terjadi dengan Sierra menurut saya.

Saya perhatikan bahwa Terminal.app memiliki pengalaman emoji yang bagus di mana mereka diperlakukan sebagai karakter lebar yang tepat, kita mungkin bisa melakukannya jika mereka bisa 😄

UAX # 11 East Asian Width, Revisi 31 mengubah emoji _East Asian Wide_ (double-width), dan wcswidth in wchar.h mengembalikan lebar string. Saya kira macOS High Sierra akan mendukung pembaruan.
xterm.js wcwidth di src/CharWidth.ts belum mendukungnya.

@ mandel59 terima kasih atas infonya!

@ mandel59 Saya pikir masalah ini khusus untuk emoji, saya pikir karakter CJK harus dikategorikan dengan benar sebagai karakter lebar ganda (beberapa komponen mungkin rusak meskipun seperti https://github.com/xtermjs/xterm.js/issues/1387)

Masalah VS Code: https://github.com/Microsoft/vscode/issues/59145

Rupanya lari bergetar menunjukkan perilaku ini

Berikut adalah repro Dart kecil untuk apa yang kami lihat yang tidak memerlukan Flutter (memang membutuhkan 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);
}

Simpan sebagai file .dart dan kemudian jalankan dengan dart xxx.dart . Kode ini di sini mengeluarkan dua ruang belakang untuk karakter ini, yang di terminal macOS standar menghapus karakter dengan benar. Namun, di terminal VS Code itu akan memundurkan emoji dan karakter lain. Jika emoji berada di awal baris, ini tidak melakukan apa-apa, tetapi jika tidak, rendering perlahan-lahan merayap ke kiri oleh karakter (dan meninggalkan bagian kanan ikon setelahnya).

Jika saya Anda menghapus * _animation[0].length dari backspace sehingga selalu melakukan satu backspace, itu berfungsi dengan baik di terminal VS Code, tetapi tidak lagi cukup ruang belakang di Terminal macOS (jadi bulan kemudian merayap ke kanan !).

Juga berlaku untuk bahasa Ibrani / Arab seperti yang disebutkan di https://github.com/Microsoft/vscode/issues/60470

VSCode 1.31.1 di Ubuntu 18.04 mengalami masalah ini.

Saat Anda menggulir ke atas atau ke bawah riwayat perintah Anda dengan tombol panah, artefak diambil sedemikian rupa sehingga ketika Anda mendapatkan perintah yang ingin Anda jalankan, kemungkinannya tidak terbaca.

Selain itu, setelah Anda mengambil artefak, mengedit perintah menjadi bermasalah, karena apa yang ditampilkan berbeda dari apa yang ada di memori di xterm.

Langkah:

Menambahkan emoji ke prompt saya:
screenshot from 2019-02-21 11-10-15
Tekan panah ke atas sekali untuk mendapatkan perintah npm i
screenshot from 2019-02-21 11-10-55

Perhatikan bajingan n yang telah ditambahkan ke prompt.

Hapus emoji dari prompt di .bashrc dan muat ulang istilah tersebut dan bug hilang.

Hal pertama yang pertama, saya ingin berterima kasih kepada kalian atas pekerjaan luar biasa Anda.

VSCode 1.31.1 di macOS Mojave 10.14.3 mengalami hal yang sama. Hal n yang disebutkan oleh @juliusecker terjadi pada saya juga, persis seperti yang dia jelaskan.

Saya memiliki bug yang sama seperti yang disebutkan oleh @juliusecker.
VSCode Versi 1.33.1 (1.33.1) 51b0b28134d51361cf996d2f0a1c698247aeabd8 2019-04-11T08: 14: 39.158Z
Versi Sistem: macOS 10.14.4 (18E226)
zsh 5.7.1 (x86_64-apple-darwin17.7.0)

Sangat mudah untuk direproduksi di VSCode dan Powershell.

emojiterminaltest.ps1

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

image

Apakah ada sumber daya yang ditugaskan untuk item ini? Sepertinya banyak regresi di program lain (Hyper, dll.) Seperti yang terlihat di utas masalah ini.

@jerch apakah ini duplikat dari https://github.com/xtermjs/xterm.js/issues/1709?

@Tyriar Ya agak, itu hanya contoh di mana ppl kemungkinan besar akan menghadapinya - emoji: smile_cat:

Saya kira kami akan membiarkan keduanya terbuka karena ini menjelaskan masalah dengan baik dan # 1709 lebih melihat solusinya, ditambah yang ini memiliki banyak suara positif.

Ini dapat direplikasi di Windows 10, versi berikut:
image

image
Di atas adalah apa yang saya lihat di terminal build-in kode VS,
image
di atas adalah apa yang saya lihat ketika teks yang sama dalam file teks dibuka dalam kode VS.

Masalahnya sudah sekitar hampir dua tahun, ada pembaruan?

@jerch ingin segera melakukannya, dia memiliki banyak hal yang sedang berlangsung di atm. Salah satu pemblokir besar untuk ini adalah sistem addon baru yang sekarang dirilis.

Menutup demi https://github.com/xtermjs/xterm.js/issues/1709 karena mereka pada dasarnya adalah hal yang sama dan kami ingin agar masalah kami tetap dihitung.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

johnpoth picture johnpoth  ·  3Komentar

jestapinski picture jestapinski  ·  3Komentar

Tyriar picture Tyriar  ·  4Komentar

jerch picture jerch  ·  3Komentar

Tyriar picture Tyriar  ·  4Komentar