- Démo de terminal aux fonctionnalités minimales basée sur la C API de libghostty, fonctionnant avec un unique fichier C et le rendu Raylib
- Conçu pour valider les capacités de libghostty-vt, le projet montre une implémentation de terminal fondée sur des graphismes 2D plutôt qu’un rendu GPU
- Prend en charge des fonctions de niveau terminal réelles comme le reflow du texte, la couleur 24 bits, la gestion de l’Unicode et les protocoles souris/clavier
- Certaines fonctions comme le Kitty Graphics Protocol et la gestion du presse-papiers et du titre via OSC ne sont pas encore implémentées, et la prise en charge de Windows n’est pas incluse
- En exploitant le cœur de libghostty, il offre une extensibilité permettant à diverses applications d’associer leur propre GUI ou moteur de rendu
Aperçu de Ghostling
- Ghostling est un projet de démonstration de terminal aux fonctionnalités minimales basé sur la C API de libghostty, présenté sous la forme d’un exemple composé d’un unique fichier C
- Il utilise Raylib pour la gestion de la fenêtre et le rendu, et fonctionne selon une architecture mono-thread
- Pour montrer la flexibilité de libghostty-vt, il utilise un moteur de rendu graphique 2D au lieu d’un rendu direct sur GPU
- Il ne s’agit pas d’un terminal complet pour un usage quotidien, mais d’un exemple minimal de terminal viable, avec une validation limitée de l’exactitude du code
Présentation de Libghostty
- Libghostty est une bibliothèque embarquable d’émulation de terminal extraite du cœur de Ghostty, qui fournit des API C et Zig
- libghostty-vt est une bibliothèque sans dépendances chargée de la gestion de l’état du terminal, notamment l’analyse des séquences VT, la position du curseur, les styles et le scrollback
- Elle n’inclut ni code de rendu ni gestion de fenêtre, que l’application qui l’utilise doit implémenter elle-même
- Basée sur le code validé dans la GUI Ghostty, elle fournit une émulation de terminal précise et complète, une analyse optimisée par SIMD, une prise en charge avancée d’Unicode, une utilisation efficace de la mémoire et une stabilité issue d’une large base de tests
Fonctionnalités principales
- Prise en charge du redimensionnement de fenêtre avec reflow du texte
- Prise en charge de la couleur 24 bits et de la palette 256 couleurs, ainsi que des styles gras, italique et inversé
- Gestion de l’Unicode et des graphèmes à plusieurs code points (sans shaping ni layout)
- Gestion des touches modificatrices comme Shift, Ctrl, Alt, Super
- Prise en charge du Kitty Keyboard Protocol, du suivi de la souris (X10, normal, button, any-event) et de plusieurs formats de reporting souris (SGR, URxvt, UTF8, X10)
- Prise en charge de la molette de défilement et de la barre de défilement par glisser-déposer, ainsi que du focus reporting (CSI I / CSI O)
- Inclut la majeure partie des fonctionnalités d’émulation de terminal au même niveau que la GUI Ghostty
Fonctionnalités prévues
- Fonctionnalités pas encore entièrement exposées dans libghostty-vt
-
Kitty Graphics Protocol
-
Prise en charge du presse-papiers OSC
- Définition du titre via OSC
- La prise en charge de Windows est possible dans libghostty-vt, mais reste non implémentée dans Ghostling
- La liste sera étendue à mesure que de nouvelles fonctionnalités à ajouter seront identifiées
Fonctionnalités non fournies
- libghostty se concentre sur le cœur de l’émulation de terminal et n’inclut donc pas les fonctionnalités de couche GUI
- Onglets, fenêtres multiples, écran partagé, gestion de session, fichier de configuration, GUI, interface de recherche, etc. ne sont pas inclus
- Ces fonctionnalités doivent être implémentées directement par les applications utilisant libghostty
- Ghostling les exclut volontairement afin de conserver un exemple minimal
Méthode de build
FAQ
-
Pourquoi utiliser C au lieu de Zig
-
libghostty-vt fournit une API Zig complète, mais l’API C est plus largement utilisée et plus accessible
- Ghostling est une démo destinée à montrer un exemple minimal d’utilisation de l’API C
-
Prise en charge d’autres langages comme Rust
- libghostty-vt peut fonctionner sans aucune dépendance via son API C
- Il peut être utilisé dans la plupart des langages avec de simples bindings légers, et les bindings officiels sont centrés sur C et Zig
- L’objectif est que la communauté développe et maintienne des bindings dans divers langages
-
Raylib est-il obligatoire ?
- Non. libghostty n’impose aucune contrainte sur le moteur de rendu ni le framework GUI
- Il peut aussi fonctionner indépendamment dans un environnement WASM
- Il fournit une API d’état de rendu, ce qui permet de l’associer à n’importe quel moteur de rendu, comme Metal, OpenGL ou Raylib
-
Pourquoi avoir choisi CMake et Raylib
- Le projet n’est lié à aucune technologie particulière, et CMake est un système de build généraliste et largement pris en charge
-
Raylib est une bibliothèque simple et facile à configurer pour les fenêtres et le rendu 2D
- L’objectif du projet est moins le choix technique que de montrer un exemple d’utilisation de libghostty
Aucun commentaire pour le moment.