#1707から来て、正しいユニコード処理は絵文字のために人々にとってますます問題になっているようです。 私たちはみんな絵文字が大好きなので、これはできるだけ早く修正する必要があります:smile:
提案:
さまざまなUnicodeバージョンのプロバイダーを作成します。これにより、バージョン固有のデータと実装を優れたAPIの背後に隠すことができます。 現在、wcwidthのバージョン依存の実装のみが必要なので、大まかなスケッチアップは次のようになります。
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
}
理想的には、プロバイダーは自己完結型であるため、端末はインターフェイスメソッドを処理し、必要に応じてバージョン/ロケールを更新する必要があります。 プロバイダーは、正しいデータセットを提供するために低レベルのものを処理する必要があるため、サポートされているバージョンで期待どおりにメソッドが機能します。
次に、プロバイダー内で、データがコードベースで静的に提供されるか、その場でデータを作成しようとするかを決定できます。 1つ目はxterm.jsのサイズにかなりの影響を与え、2つ目は非同期の質問を提起します(覚えておいてください-コア部分のほとんどは同期ATMです)。 ユニコード全体をバージョンXYの機能のようなアドオンにバンドルすることもできます。
議論のために。
/ cc @ Tyriar 、 @ bgw 、 @ mofux 、@ dnfield
私はこのようなものがより親しみやすいかもしれないと思います:
interface IUnicodeProvider {
getVersion(): string;
wcwidth(ucs: number): number;
getStringCellWidth(s: string): number;
... // more to come with support of other unicode features
}
UnicodeProviderFactory.v11
のようなものを使用すると、コーディング時に少し良いでしょうが、これはどちらの方法でも私には理にかなっています。
@dnfieldええどちらの方法でも機能します。 ただし、バージョンレベルでタイプ情報が必要かどうかはわかりません。
私のアイデアは、次のように実行時にバージョン切り替えを透過的に実行できるインターフェイスを作成することでした。
// 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(...)
このようにして、バージョン変更後に再接続したり、ターミナルインスタンスでコストのかかるプロパティを使用したりすることなく、 this.unicodeProvider
を持ち運ぶことができます。
#1707の議論から得たもの:
それをTSコードに取り入れるためのテイカーはいますか?
#1714で最初の可能な化身をしました。 #1707から新しいテーブルをコピーしました。問題ないことを願っています(@dnfield)。
問題ない!
https://github.com/xtermjs/xterm.js/pull/1714はこのための良いリファレンスですが、新しいアドオンモデル(https://github.com/xtermjs/xterm)の後にいくつかのアドオンを出荷する予定です。 js / issues / 1128)が入っている場合は、埋め込み者が適切なバージョンを選択できるようにします。
できるだけ早く修正してください。最近Windowsを更新すると、これがうまくいかないようです。 私は、読みやすくするためにロギングのいくつかの側面を絵文字で表現するNode.jsライブラリをサポートしようとしています(それはそれよりもはるかに間抜けに聞こえます)。
https://github.com/xtermjs/xterm.js/pull/2568での新しい試み、うまくいけば、これを次のリリースで展開できるようになります。
@ jerch #2568がマージされて、これを閉じたと呼ぶことができますか?
@Tyriar Yepp 、フォローアップもあります:smile_cat:->#2668
最も参考になるコメント
https://github.com/xtermjs/xterm.js/pull/2568での新しい試み、うまくいけば、これを次のリリースで展開できるようになります。