Venant de # 1707, il semble que la gestion correcte de l'unicode soit de plus en plus un problème pour les gens en raison des emojis. Puisque nous aimons tous les emojis, cela devrait être corrigé dès que possible :smile:
Proposition:
Créez un fournisseur pour différentes versions d'Unicode, capable de cacher les données et les implémentations spécifiques à la version derrière une belle API. Actuellement, nous n'avons besoin que d'implémentations dépendantes de la version pour wcwidth, donc un croquis approximatif pourrait ressembler à ceci :
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
}
Idéalement, le fournisseur est autonome, le terminal n'a donc qu'à gérer les méthodes d'interface et mettre à jour la version/locale si nécessaire. Le fournisseur devrait gérer les éléments de bas niveau pour fournir les ensembles de données corrects afin que les méthodes fonctionnent comme prévu pour une version prise en charge.
Au sein du fournisseur, nous pouvons alors décider si les données sont fournies de manière statique dans la base de code ou même essayer de créer les données à la volée. Le premier aura un impact important sur la taille de xterm.js, le second soulèvera des questions asynchrones (rappelez-vous - la plupart des parties centrales sont synchrones atm). L'ensemble de l'unicode pourrait également être regroupé dans une fonctionnalité similaire à un addon pour la version XY.
A débattre.
/cc @Tyriar , @bgw , @mofux , @dnfield
Je pense que quelque chose comme ça pourrait être plus accessible:
interface IUnicodeProvider {
getVersion(): string;
wcwidth(ucs: number): number;
getStringCellWidth(s: string): number;
... // more to come with support of other unicode features
}
Avec quelque chose comme un UnicodeProviderFactory.v11
serait un peu plus agréable au moment du codage, mais cela a du sens pour moi de toute façon.
@dnfield Ouais dans les deux cas, cela fonctionnera. Je ne sais pas si nous aurons besoin des informations de type au niveau de la version.
Mon idée était de créer une interface, qui peut faire de manière transparente les changements de version au moment de l'exécution comme ceci :
// 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(...)
De cette façon, this.unicodeProvider
peut être transporté sans qu'il soit nécessaire de le rattacher après un changement de version ou d'utiliser une propriété coûteuse sur l'instance du terminal.
Ce que j'obtiens de la discussion au #1707 :
Des preneurs pour intégrer cela dans le code TS?
A fait une première incarnation possible en #1714. Copié le nouveau tableau à partir de # 1707, j'espère que ça va (@dnfield).
Aucun problème!
https://github.com/xtermjs/xterm.js/pull/1714 est une bonne référence pour cela, mais le plan est d'expédier plusieurs addons après le nouveau modèle d'addon (https://github.com/xtermjs/xterm. js/issues/1128) se trouve, puis laissez l'intégrateur choisir la bonne version.
Veuillez corriger dès que possible, la mise à jour de Windows a récemment semblé casser cela pour moi. J'essaie de prendre en charge une bibliothèque Node.js qui emoji'fie certains aspects de la journalisation pour une lisibilité plus facile (cela semble beaucoup plus maladroit qu'il ne l'est).
Nouvelle tentative dans https://github.com/xtermjs/xterm.js/pull/2568 , j'espère que nous pourrons le déployer avec la prochaine version.
@jerch pouvons-nous appeler cela fermé avec la fusion de # 2568 ?
@Tyriar Yepp, il y a aussi déjà un suivi :smile_cat: --> #2668
Commentaire le plus utile
Nouvelle tentative dans https://github.com/xtermjs/xterm.js/pull/2568 , j'espère que nous pourrons le déployer avec la prochaine version.