termtosvg pour enregister vos terminaux

Posté par Fabrice le Wednesday 24 April 2019 Traduction : en

Un terminal ne contient que du texte (si on excepte les hacks utilisés dans w3m). Ainsi, lorsqu’on souhaite illustrer le comportement d’un programme en ligne de commande, il est commun de simplement en coller le résultat.

Mais une fois la boîte de Pandore des terminaux est ouverte, un autre monde s’offre à nous : ncurse. Pour représenter ces structures plus farfelues, on en vient souvent à recourir aux captures d’écrans. Si cette solution est pratique, je me suis déjà plains de ses limitations. En effet, toute l’information de texte se perd dans la rastérisation, et il devient alors impossible de sélectionner du texte (à moins de passer par un ROC, un pic ou une péninsule ?).

Toutefois, Nicolas Bedos nous propose un outil dénommé termtosvg. Ce petit programme python est disponible dans pip ainsi que sur github.

Son utilisation est assez directe : il suffit de l’invoquer dans notre émulateur de terminal favoris,

termtosvg

et le résultat est automatiquement sauvegardé dans un dossier temporaire. Il est aussi possible de spécifier directement le fichier cible, la géométrie du terminal à simuler, un canevas, etc.

Un exemple simple:

termtosvg -g "82x19" -t progress_bar

qui nous donne

termtosvg : sl

Ensuite, il suffit d’inclure l’animation dans votre page web pour la présenter:

<object data="/examples/termtosvg-sl.svg">texte de remplacement</object>  

Attention: Le résultat est enregistré avec les droits de lecture pour le propriétaire seul, pensez à régler ça avant de téléverser votre image pour éviter les surprises.

Remarque: Testé dans firefox: vous pouvez aussi directement inclure le svg animé en tant qu’image, mais cela retire la possibilité d’y faire des sélections, et casse certaines fonctionnalités, comme le javascript intrégré. Vous pouvez le voir dans cet exemple, déjà inclus dans un précédent billet, produit par :

termtosvg -g "82x30" -t window_frame_js

Image embedding
Un exemple de décorations cassées

Pour conclure ce billet, on peut dire que cette méthode est encore trop jeune et loin d’être parfaite (en particulier les navigateurs ne sont pas du tout optimisés pour ce format, et firefox se montrait parfois réticent à afficher ces animations). Mais ça reste une technique intéressante qui mérite d’être promue pour montrer des contenus interactifs, après tout un terminal n’est pas juste un jeu textuel. Je pense qu’il est faisable d’aller encore plus loin en synchronisant de l’audio avec l’animation à l’aide du javascript intégré dans le SVG pour produire une vraie vidéo avec du contenu sélectionnable, mais cela reste une théorie pour le moment, et demandera un peu de technicité au niveau de la synchronisation.

tags: termtosvg