Contexte et objectifs

Les interfaces texte (TUI) utilisent traditionnellement les caractères Unicode de tracé de boîte. Chaque caractère occupe une cellule complète, ce qui oblige les panneaux à sacrifier une ligne et une colonne pour chaque bord. L’auteur de Ratatui décrit ce problème comme une perte de 6 à 8 lignes dans une fenêtre de 50 lignes, limitant la densité d’affichage. Le protocole présenté vise à dessiner des lignes directement sur les bords des cellules, de façon analogue à un attribut de couleur de fond, afin d’éliminer cet encombrement.

Architecture du protocole

Chaque cellule peut contenir jusqu’à douze segments de ligne : les deux moitiés de ses quatre arêtes et quatre bras partant du centre. Chaque segment possède une couleur, une largeur et un style (solide, double, pointillé ou tireté). Les arêtes sont découpées en demi‑cellules pour s’aligner avec les caractères de quadrant (▖▗▘▝), ce qui permet de placer un cadre à une demi‑cellule du quadrillage tout en conservant une bordure nette.

Lorsque deux cellules adjacentes définissent un segment sur la même arête, les segments sont fusionnés. La règle de résolution repose d’abord sur la priorité du pen, puis sur la largeur, et enfin sur la position (droite ou inférieure). Cette logique garantit qu’un panneau focalisé peut conserver son contour complet même si ses voisins sont dessinés après.

Implémentation et séquence d’échappement

Le protocole s’appuie sur une séquence DCS (Device Control String) avec le namespace cell-border. La forme générale est :

ESC P 1 + b cell-border ; OP ; FIELDS... ESC \

Un pen agit comme le paramètre de couleur actuel. Exemple d’utilisation :

ESC P 1 + b cell-border;pen;48;32;7aa2f7;0;0 ESC \   # bord inférieur bleu, souligné

Après avoir défini le pen, le texte imprimé hérite automatiquement des bordures spécifiées. Un code SGR ESC [ 0 m réinitialise le pen. Des commandes rectangulaires permettent de définir ou d’effacer des bordures sur des zones existantes sans toucher au pen, et une requête de capacité (followed by DA1) permet à l’application de détecter la prise en charge du terminal.

Analyse des impacts et limites

Le principal avantage réside dans la conservation de l’espace : les bordures n’utilisent aucune ligne ou colonne supplémentaire, ce qui améliore la lisibilité des panneaux imbriqués et permet d’aligner des champs de texte, des cases à cocher ou des boutons directement contre leurs contours. De plus, les bordures ne sont pas du texte, donc elles ne sont pas copiées lors d’une sélection, évitant le « nettoyage » des caractères de boîte dans les échanges de texte.

En revanche, le protocole nécessite une implémentation côté terminal. Les terminaux qui ignorent la séquence DCS se replient sur les caractères de boîte, conservant ainsi le comportement historique. Le rendu dépend également de la capacité du terminal à dessiner des segments de largeur variable et à gérer les arcs antialiasés pour les coins arrondis. Enfin, la spécification actuelle ne décrit pas de mécanisme de compression du flux de bordures, ce qui pourrait augmenter la charge réseau dans des sessions à haut débit.