Introduction
Le développement d'applications avec des interfaces utilisateur graphiques (GUI) ou en mode texte (TUI) peut être insatisfaisant en raison des changements constants dans les bibliothèques et les tendances. Pour répondre à ce défi, l'auteur a créé son propre cadre TUI appelé Movwin.
Contexte Technique
Movwin est une bibliothèque Python qui s'appuie sur ncurses pour la compatibilité des terminaux. Il ne utilise pas les sous-fenêtres ou les tampons de ncurses, mais plutôt comme un framebuffer intelligent pour le dessin et la saisie au clavier et à la souris. L'un des objectifs principaux est de fournir un support Unicode acceptable, même si cela peut varier en fonction du terminal utilisé.
La bibliothèque Movwin repose sur une seule dépendance, wcwidth, pour mesurer la largeur des caractères Unicode. Elle comprend également des concepts de fenêtres et de gestionnaire de fenêtres, inspirés des anciennes interfaces TUI de DOS.
Analyse et Implications
Movwin vise à offrir des performances acceptables, avec un temps de démarrage d'environ 200-300 ms sur un petit ordinateur Intel NUC. Pour atteindre cet objectif, certaines sacrifices ont été faites, comme l'absence d'utilisation de dataclasses en raison de leur lenteur d'importation.
Plusieurs applications démonstratives utilisent Movwin, notamment tracktivity pour suivre les activités et les événements, et bine, un éditeur hexadécimal basique avec un bon rendement et des fonctionnalités d'information. Ces applications montrent la flexibilité et les capacités de Movwin.
Perspective
Malgré les limites actuelles, comme la prise en charge limitée de la souris, Movwin offre une base solide pour le développement d'applications TUI. L'auteur a choisi de ne pas publier le code pour le moment en raison de préoccupations concernant l'utilisation potentielle par des entreprises sans respecter les licences. L'avenir de Movwin dépendra de l'évolution des besoins et des défis de l'auteur, ainsi que de la communauté potentielle qui pourrait s'intéresser à ce cadre TUI personnalisé.