7 choses apprises en construisant un framework TUI moderne
Les terminaux sont rapides
- Les émulateurs de terminal modernes sont des logiciels très sophistiqués
- Le rendu accéléré par le matériel permet de réduire le scintillement de l’écran
- Trois astuces pour réduire le scintillement :
- ne pas effacer l’écran, mais réécrire par-dessus
- écrire en une seule fois sur la sortie standard
- utiliser le protocole Synchronized Output
- Textual utilise 60 fps par défaut pour offrir des animations fluides
Les DictViews sont surprenantes
- Les méthodes
keys() et items() des dict Python renvoient respectivement KeysView et ItemsView
- La différence symétrique d’un objet
ItemsView permet de repérer facilement les éléments modifiés
- Dans Textual, cela est utilisé pour des mises à jour optimisées lorsque les propriétés CSS changent
lru_cache est rapide
- Le décorateur
@lru_cache du module functools met en cache les valeurs de retour d’une fonction
- Dans Textual,
@lru_cache est utilisé sur de petites fonctions appelées fréquemment pour améliorer les performances
- Il faut vérifier les informations du cache (
cache_info()) pour confirmer que le caching est efficace
Les objets immuables, c’est le mieux
- Les tuples,
NamedTuple ou les dataclass figées de Python permettent de profiter des avantages des objets immuables
- Les objets immuables permettent d’écrire du code sans effets de bord, ce qui facilite les tests et le caching
L’art Unicode est utile
- Les diagrammes utilisant les caractères de boîte Unicode sont très utiles pour la documentation
- Utilisés avec des docstrings bien rédigées, ils apportent une grande aide
Les fractions sont précises
- Le module
fractions de Python permet d’éviter les erreurs de virgule flottante
- Dans Textual, les fractions sont utilisées pour diviser l’écran selon des proportions et obtenir une mise en page précise
Les emojis sont terribles
- La prise en charge des emojis dans les terminaux est imprévisible et complexe
- La base de données Unicode permet de vérifier la largeur des emojis, mais les emojis récents peuvent produire des résultats imprévisibles
- Les emojis multi-codepoints posent des problèmes encore plus importants
Résumé de GN⁺
- Cet article propose des astuces et techniques utiles pour développer des applications de terminal en Python
- Il partage des conseils pratiques issus de l’expérience de développement du framework Textual
- Il explique comment aborder des problèmes complexes comme les emojis, ce qui peut aider les développeurs
- Parmi les projets aux fonctionnalités similaires, on trouve urwid et prompt_toolkit
1 commentaires
Avis sur Hacker News
Les développeurs de TUI finissent par traiter Unicode, les caractères internationaux et les emojis comme un projet à part entière
rivo/tviewetrivo/unisegont rencontré le même problèmeLe fait que Textual essaie d’imiter React pose problème
Après avoir essayé Textual, il s’avère qu’il faut utiliser du CSS
Ce TUI est joli, mais je n’arrive pas à imaginer dans quel cas l’utiliser réellement
kitty offre davantage de fonctionnalités
Je ne comprends pas pourquoi les ingénieurs logiciel s’intéressent autant aux TUI
Monodraw est réservé à macOS, mais il existe de bonnes alternatives sur d’autres plateformes
« Écraser, ne pas effacer » est une ancienne méthode de développement de jeux
Il existe une méthode pour estimer la version d’Unicode en vérifiant la position du curseur dans le terminal
wcwidthme tapait sur les nerfsAprès avoir évalué plusieurs bibliothèques TUI, FTXUI s’est révélée la plus simple à utiliser et la plus fiable