Vue normale

Reçu aujourd’hui — 15 août 2025

Dispositio, une bibliothèque Shell POSIX pour afficher des tables de données

Si, comme moi, vous avez eu à reprendre et adapter du script shell pour afficher des tableaux avec mise en forme dans le terminal ou dans des scripts générant des syntaxes Markdown ou Textile (Génération automatique de ticket Redmine), alors vous serez sans doute intéressé par Dispositio (licence Apache v2).

Dispositio est un script shell conforme POSIX qui permet l’affichage des tables de données provenant de fichiers CSV, JSON et YAML dans le terminal. Il offre un formatage avancé, un support des couleurs, et peut-être utilisé comme un outil en ligne de commande autonome ou comme une bibliothèque shell pour la génération de tableaux.

Fonctionnalités clés

  • Formats d’entrée multiples (CSV, YAML et JSON)
  • Utilisation en CLI ou en bibliothèque (dans ce cas, utilisation de fonctions dispositio_add_* pour ajouter des colonnes, lignes ou cellules)
  • Formatage de la sortie (couleurs, mise en forme, style de texte et alignements)
  • Sortie en format Terminal, Markdown (avec CSS, non compatible Github) et Textile (Redmine)

Exemples avec ce fichier JSON

{
  "title": [
    "JSON",
    "Essai"
  ],
  "display": "top",
  "color": "",
  "align": "center",
  "columns": [
    {
      "title": [
        "Header1",
        ""
      ],
      "color": "red",
      "align": ""
    },
    {
      "title": [
        "Header2",
        "Essai"
      ],
      "color": "",
      "align": ""
    },
    {
      "title": [
        "Header3",
        ""
      ],
      "color": "",
      "align": ""
    }
  ],
  "rows": [
    {
      "title": [],
      "color": "green",
      "align": "",
      "valign": "top",
      "separator": 1,
      "cells": [
        {
          "lines": [
            "Row1",
            "Cell1",
            "essai"
          ],
          "color": "",
          "align": ""
        },
        {
          "lines": [
            "",
            "Row1 - Cell2",
            ""
          ],
          "color": "",
          "align": ""
        },
        {
          "lines": [
            "",
            "Row1 - Cell3",
            ""
          ],
          "color": "",
          "align": ""
        }
      ]
    },
    {
      "title": [],
      "color": "",
      "align": "",
      "separator": 0,
      "cells": [
        {
          "lines": [
            "Row2 - Cell1"
          ],
          "color": "",
          "align": ""
        },
        {
          "lines": [
            "Row2 - Cell2"
          ],
          "color": "",
          "align": ""
        },
        {
          "lines": [
            "Row2 - Cell3"
          ],
          "color": "",
          "align": ""
        }
      ]
    }
  ]
}
Sortie Terminal

Terminal

Sortie Markdown
<style>
    .dpo table{margin: 0px auto;}
    .dpo_title{
        text-align: center;
        font-style: bold;
        font-size: 24px;
    }
    .dpo th{
        background: grey;
        text-align: center;
        vertical-align: top;
        font-style: bold;
    }
    .dpo td:nth-child(1){
        background: red;
    }
    .dpo th:nth-child(1){
        background: brown;
    }
    .dpo tr:nth-child(1){
        background: green;
        vertical-align: top;
    }
    .dpo  tr:nth-child(1) td:nth-child(1){
        background: olive !important;
    }
</style>

<div class='dpo'>
<div class='dpo_title'>
JSON<br>Essai<br>
</div>

| Header1 | Header2<br>Essai | Header3 |
|-|-|-|
| Row1<br>Cell1<br>essai | Row1 - Cell2 | Row1 - Cell3 |
| Row2 - Cell1 | Row2 - Cell2 | Row2 - Cell3 |


</div>

Markdown

Sortie Textile
h1{text-align:center; font-size:24px}. *JSON<br>Essai<br>*

table{margin: 0px auto}.
|^.
|_={background-color:brown}. Header1 |_=. Header2<br/>Essai |_=. Header3 |
|={background-color:olive; vertical-align:top}. Row1<br/>Cell1<br/>essai |={background-color:green; vertical-align:top}. Row1 - Cell2 |={background-color:green; vertical-align:top}. Row1 - Cell3 |
|={background-color:red; vertical-align:middle}. Row2 - Cell1 |={vertical-align:middle}. Row2 - Cell2 |={vertical-align:middle}. Row2 - Cell3 |

Textile

Commentaires : voir le flux Atom ouvrir dans le navigateur

❌