Berasal dari #1707, tampaknya penanganan unicode yang benar semakin menjadi masalah bagi orang-orang karena emoji. Karena kita semua menyukai emoji, ini harus diperbaiki secepatnya :smile:
Usul:
Buat penyedia untuk versi unicode yang berbeda, yang mampu menyembunyikan data spesifik versi dan implementasi di balik API yang bagus. Saat ini kami hanya membutuhkan implementasi yang bergantung pada versi untuk wcwidth, sehingga sketsa kasarnya dapat terlihat seperti ini:
interface IUnicodeProvider {
supportedVersions(): string[];
getVersion(): string;
setVersion(version?: string); // version optional for fallback behavior
wcwidth(ucs: number): number;
getStringCellWidth(s: string): number;
... // more to come with support of other unicode features
}
Idealnya penyedia mandiri, sehingga terminal hanya perlu berurusan dengan metode antarmuka dan memperbarui versi/lokal bila diperlukan. Penyedia harus berurusan dengan hal-hal tingkat rendah untuk menyediakan kumpulan data yang benar sehingga metode hanya berfungsi seperti yang diharapkan untuk versi yang didukung.
Di dalam penyedia, kami kemudian dapat memutuskan apakah data disediakan secara statis dalam basis kode atau bahkan mencoba membuat data dengan cepat. Pertama akan berdampak cukup besar pada ukuran xterm.js, yang kedua akan menimbulkan pertanyaan asinkron (ingat - sebagian besar bagian inti adalah atm sinkron). Seluruh barang unicode juga dapat digabungkan ke dalam beberapa fitur seperti addon untuk versi XY.
Untuk diskusi.
/cc @Tyriar , @bgw , @mofux , @dnfield
Saya pikir sesuatu seperti ini mungkin lebih mudah didekati:
interface IUnicodeProvider {
getVersion(): string;
wcwidth(ucs: number): number;
getStringCellWidth(s: string): number;
... // more to come with support of other unicode features
}
Dengan sesuatu seperti UnicodeProviderFactory.v11
akan sedikit lebih baik pada waktu pengkodean, tetapi ini masuk akal bagi saya.
@dnfield Ya, keduanya akan berhasil. Tidak yakin apakah kita akan memerlukan info jenis di tingkat versi.
Ide saya adalah membuat antarmuka, yang secara transparan dapat melakukan peralihan versi saat runtime seperti ini:
// terminal ctor - create the provider
this.unicodeProvider = new UnicodeProvider();
...
// some code that knows whether to switch unicode versions
this.unicodeProvider.setVersion(xy);
...
// some unicode consumer - does not care about versions at all, just gets the right method
this.unicodeProvider.wcwidth(...)
Dengan cara ini this.unicodeProvider
dapat dibawa-bawa tanpa perlu dipasang kembali setelah perubahan versi atau menggunakan properti mahal pada instance terminal.
Apa yang saya dapatkan dari diskusi di #1707:
Adakah pengambil untuk memasukkannya ke dalam kode TS?
Melakukan inkarnasi pertama yang mungkin di #1714. Menyalin tabel baru dari #1707, semoga tidak apa-apa (@dnfield).
Tidak masalah!
https://github.com/xtermjs/xterm.js/pull/1714 adalah referensi yang bagus untuk ini, tetapi rencananya adalah mengirimkan beberapa addon setelah model addon baru (https://github.com/xtermjs/xterm. js/issues/1128) masuk, lalu izinkan penyemat untuk memilih versi yang tepat.
Tolong perbaiki ASAP, memperbarui Windows baru-baru ini sepertinya merusak ini untuk saya. Saya mencoba untuk mendukung perpustakaan Node.js yang emoji'fies beberapa aspek logging agar lebih mudah dibaca (kedengarannya jauh lebih konyol daripada itu).
Upaya baru di https://github.com/xtermjs/xterm.js/pull/2568 , semoga kami dapat meluncurkan ini dengan rilis berikutnya.
@jerch bisakah kita menyebutnya ditutup dengan #2568 digabung?
@Tyriar Yepp, udah ada follow upnya juga :smile_cat: --> #2668
Komentar yang paling membantu
Upaya baru di https://github.com/xtermjs/xterm.js/pull/2568 , semoga kami dapat meluncurkan ini dengan rilis berikutnya.