Extension runblock

Je teste ici la fonctionnalité « expérimentale » de Sphinx, l’extension autorun, qui donne une directive .. runblock::, qui permet d’exécuter du code lors de la génération de la page web.

Voir aussi

Pour une liste d’extensions Sphinx utiles, cette page donne un bonne idée de ce qui existe (en anglais).

Exemples

pycon

La première directive est ..runblock:: pycon. Elle fait appel au langage Python, mais utilise la syntaxe d’une session interactive de l’intérpreteur.

Par exemple, le code suivant :

.. runblock:: pycon

    >>> for i in range(5):
    …  print(i)

produira la sortie suivante :


0
1
2
3
4

On peut aussi vérifier la version de Python utilisée par l’extension :


2.7.18 (default, Jul  1 2022, 12:27:04) 
[GCC 9.4.0]

Cette directive .. runblock:: pycon est intéressante, pour donner des exemples et de courtes démonstrations, dans des tutoriels ou de la documentation par exemple.

Mais, cette extension runcode permet aussi de faire plus !


Exemples plus intéressants

.. runblock:: console

Cette directive accepte la syntaxe d’un shell (sh classique) ou de Bash, où le code est précédé d’un symbole *$ *.

Par exemple, la date courante et le dossier de travail courant :

$ echo "Date : $(date). Dossier : $(pwd)."
Date : sam. 17 févr. 2024 13:14:23 CET. Dossier : /home/lilian/web-sphinx.

Ou bien une liste des fichiers reStructuredText (.rst, sources de chaque de ces pages web) dans le dossier courant :

$ ls -larth ./{,.}*.rst
-rw-r--r-- 1 lilian lilian  650 janv. 30  2017 ./.javascript.fr.rst
-rw-r--r-- 1 lilian lilian  578 janv. 30  2017 ./.javascript.en.rst
lrwxrwxrwx 1 lilian lilian   22 juin  16  2020 ./admin.rst -> /home/lilian/admin.rst
-rw-r--r-- 1 lilian lilian  739 févr.  8  2021 ./.special.rst
-rw-r--r-- 1 lilian lilian  12K mars  14  2021 ./.blagues.rst
-rw-r--r-- 1 lilian lilian 2,4K avril 12  2021 ./404.rst
-rw-r--r-- 1 lilian lilian 2,4K avril 12  2021 ./403.rst
-rw-r--r-- 1 lilian lilian 8,7K avril 12  2021 ./affaires-voyage.fr.rst
-rw-r--r-- 1 lilian lilian 1,8K avril 12  2021 ./ace.rst
-rw-r--r-- 1 lilian lilian 2,5K avril 12  2021 ./ace2.rst
-rw-r--r-- 1 lilian lilian 8,8K avril 12  2021 ./A953.rst
-rw-r--r-- 1 lilian lilian  12K avril 12  2021 ./beacon.en.rst
-rw-r--r-- 1 lilian lilian 8,6K avril 12  2021 ./avoir.rst
-rw-r--r-- 1 lilian lilian 6,4K avril 12  2021 ./apprendre-python.fr.rst
-rw-r--r-- 1 lilian lilian  14K avril 12  2021 ./apk.fr.rst
-rw-r--r-- 1 lilian lilian  12K avril 12  2021 ./apk.en.rst
-rw-r--r-- 1 lilian lilian 2,2K avril 12  2021 ./blagues.fr.rst
-rw-r--r-- 1 lilian lilian 3,8K avril 12  2021 ./bitbucket-features.fr.rst
-rw-r--r-- 1 lilian lilian 3,7K avril 12  2021 ./bitbucket-features.en.rst
-rw-r--r-- 1 lilian lilian  15K avril 12  2021 ./bin.fr.rst
-rw-r--r-- 1 lilian lilian  15K avril 12  2021 ./bin.en.rst
-rw-r--r-- 1 lilian lilian  11K avril 12  2021 ./beacon.fr.rst
-rw-r--r-- 1 lilian lilian  18K avril 12  2021 ./blog-roll.fr.rst
-rw-r--r-- 1 lilian lilian  18K avril 12  2021 ./blog-roll.en.rst
-rw-r--r-- 1 lilian lilian  23K avril 12  2021 ./cv.en.rst
-rw-r--r-- 1 lilian lilian 4,3K avril 12  2021 ./cookies.fr.rst
-rw-r--r-- 1 lilian lilian 3,0K avril 12  2021 ./cookies.en.rst
-rw-r--r-- 1 lilian lilian  19K avril 12  2021 ./conseils-visio.en.rst
-rw-r--r-- 1 lilian lilian  24K avril 12  2021 ./conseils-email.en.rst
-rw-r--r-- 1 lilian lilian 4,0K avril 12  2021 ./ga.en.rst
-rw-r--r-- 1 lilian lilian 3,6K avril 12  2021 ./freedns.rst
-rw-r--r-- 1 lilian lilian 2,1K avril 12  2021 ./folders.rst
-rw-r--r-- 1 lilian lilian  21K avril 12  2021 ./firefox-extensions.fr.rst
-rw-r--r-- 1 lilian lilian  19K avril 12  2021 ./firefox-extensions.en.rst
-rw-r--r-- 1 lilian lilian  15K avril 12  2021 ./demo.rst
-rw-r--r-- 1 lilian lilian 3,9K avril 12  2021 ./data-analysis-of-2-years-of-sms-2016-2017.fr.rst
-rw-r--r-- 1 lilian lilian 3,5K avril 12  2021 ./data-analysis-of-2-years-of-sms-2016-2017.en.rst
-rw-r--r-- 1 lilian lilian 4,5K avril 12  2021 ./iteri.fr.rst
-rw-r--r-- 1 lilian lilian 4,8K avril 12  2021 ./iteri.en.rst
-rw-r--r-- 1 lilian lilian 9,7K avril 12  2021 ./graph.fr.rst
-rw-r--r-- 1 lilian lilian 9,5K avril 12  2021 ./graph.en.rst
-rw-r--r-- 1 lilian lilian  11K avril 12  2021 ./gnuplot.rst
-rw-r--r-- 1 lilian lilian 7,3K avril 12  2021 ./gnuplot_embed.rst
-rw-r--r-- 1 lilian lilian 4,0K avril 12  2021 ./ga.fr.rst
-rw-r--r-- 1 lilian lilian  684 avril 12  2021 ./my-favorite-tools.en.rst
-rw-r--r-- 1 lilian lilian 3,6K avril 12  2021 ./mount.fr.rst
-rw-r--r-- 1 lilian lilian 3,1K avril 12  2021 ./mount.en.rst
-rw-r--r-- 1 lilian lilian 5,0K avril 12  2021 ./mes-chansons-preferees.fr.rst
-rw-r--r-- 1 lilian lilian 5,1K avril 12  2021 ./matlab-clones.fr.rst
-rw-r--r-- 1 lilian lilian 4,6K avril 12  2021 ./matlab-clones.en.rst
-rw-r--r-- 1 lilian lilian 6,1K avril 12  2021 ./math.rst
-rw-r--r-- 1 lilian lilian 6,0K avril 12  2021 ./learn-python.en.rst
-rw-r--r-- 1 lilian lilian 3,0K avril 12  2021 ./latexonwindows.fr.rst
-rw-r--r-- 1 lilian lilian 3,0K avril 12  2021 ./latexonwindows.en.rst
-rw-r--r-- 1 lilian lilian 4,9K avril 12  2021 ./js.fr.rst
-rw-r--r-- 1 lilian lilian 4,5K avril 12  2021 ./js.en.rst
-rw-r--r-- 1 lilian lilian 1,3K avril 12  2021 ./jokes.en.rst
-rw-r--r-- 1 lilian lilian 6,8K avril 12  2021 ./jitsi.fr.rst
-rw-r--r-- 1 lilian lilian 6,2K avril 12  2021 ./jitsi.en.rst
-rw-r--r-- 1 lilian lilian 4,4K avril 12  2021 ./packing.en.rst
-rw-r--r-- 1 lilian lilian 8,4K avril 12  2021 ./opendns.fr.rst
-rw-r--r-- 1 lilian lilian 7,8K avril 12  2021 ./opendns.en.rst
-rw-r--r-- 1 lilian lilian 3,9K avril 12  2021 ./online-gnu-octave.fr.rst
-rw-r--r-- 1 lilian lilian 3,6K avril 12  2021 ./online-gnu-octave.en.rst
-rw-r--r-- 1 lilian lilian  23K avril 12  2021 ./old_apk.fr.rst
-rw-r--r-- 1 lilian lilian  21K avril 12  2021 ./old_apk.en.rst
-rw-r--r-- 1 lilian lilian 4,2K avril 12  2021 ./ocaml.fr.rst
-rw-r--r-- 1 lilian lilian 4,2K avril 12  2021 ./ocaml.en.rst
-rw-r--r-- 1 lilian lilian 5,7K avril 12  2021 ./ocaml_ace.rst
-rw-r--r-- 1 lilian lilian  16K avril 12  2021 ./NanoSyntax.rst
-rw-r--r-- 1 lilian lilian  14K avril 12  2021 ./recherche.fr.rst
-rw-r--r-- 1 lilian lilian 9,1K avril 12  2021 ./README.rst
-rw-r--r-- 1 lilian lilian 8,5K avril 12  2021 ./python.rst
-rw-r--r-- 1 lilian lilian  19K avril 12  2021 ./publis.fr.rst
-rw-r--r-- 1 lilian lilian  19K avril 12  2021 ./publis.en.rst
-rw-r--r-- 1 lilian lilian 1,3K avril 12  2021 ./plume-air-paris.fr.rst
-rw-r--r-- 1 lilian lilian 1,2K avril 12  2021 ./plume-air-paris.en.rst
-rw-r--r-- 1 lilian lilian 7,6K avril 12  2021 ./pgp.fr.rst
-rw-r--r-- 1 lilian lilian 4,7K avril 12  2021 ./pgp.en.rst
-rw-r--r-- 1 lilian lilian  12K avril 12  2021 ./pair-programming-tools.fr.rst
-rw-r--r-- 1 lilian lilian 3,4K avril 12  2021 ./pair-programming-tools.en.rst
-rw-r--r-- 1 lilian lilian 6,7K avril 12  2021 ./runblock.en.rst
-rw-r--r-- 1 lilian lilian 133K avril 12  2021 ./rules-and-principles.en.rst
-rw-r--r-- 1 lilian lilian 1,6K avril 12  2021 ./rss.rst
-rw-r--r-- 1 lilian lilian  12K avril 12  2021 ./resume-de-mon-annee-2019.rst
-rw-r--r-- 1 lilian lilian  16K avril 12  2021 ./resume-de-mon-annee-2018.rst
-rw-r--r-- 1 lilian lilian  11K avril 12  2021 ./resume-de-mon-annee-2017.rst
-rw-r--r-- 1 lilian lilian  13K avril 12  2021 ./research.en.rst
-rw-r--r-- 1 lilian lilian 5,4K avril 12  2021 ./star-wars.fr.rst
-rw-r--r-- 1 lilian lilian 6,1K avril 12  2021 ./star-wars.en.rst
-rw-r--r-- 1 lilian lilian 3,5K avril 12  2021 ./sphinxtabs.fr.rst
-rw-r--r-- 1 lilian lilian 3,3K avril 12  2021 ./sphinxtabs.en.rst
-rw-r--r-- 1 lilian lilian  23K avril 12  2021 ./slides.rst
-rw-r--r-- 1 lilian lilian  12K avril 12  2021 ./skulpt.rst
-rw-r--r-- 1 lilian lilian  562 avril 12  2021 ./sitemap.fr.rst
-rw-r--r-- 1 lilian lilian  512 avril 12  2021 ./sitemap.en.rst
-rw-r--r-- 1 lilian lilian  908 avril 12  2021 ./self-quantified.fr.rst
-rw-r--r-- 1 lilian lilian  16K avril 12  2021 ./self-quantified.en.rst
-rw-r--r-- 1 lilian lilian 6,9K avril 12  2021 ./runblock.fr.rst
-rw-r--r-- 1 lilian lilian 1,7K avril 12  2021 ./todo.rst
-rw-r--r-- 1 lilian lilian 2,7K avril 12  2021 ./time.rst
-rw-r--r-- 1 lilian lilian  32K avril 12  2021 ./sublimetext.fr.rst
-rw-r--r-- 1 lilian lilian  29K avril 12  2021 ./sublimetext.en.rst
-rw-r--r-- 1 lilian lilian 8,1K avril 12  2021 ./stats-google-analytics.fr.rst
-rw-r--r-- 1 lilian lilian 8,6K avril 12  2021 ./stats-google-analytics.en.rst
-rw-r--r-- 1 lilian lilian  26K avril 12  2021 ./tutogit.fr.rst
-rw-r--r-- 1 lilian lilian  25K avril 12  2021 ./tutogit.en.rst
-rw-r--r-- 1 lilian lilian 6,0K avril 12  2021 ./try-ocaml.fr.rst
-rw-r--r-- 1 lilian lilian 6,0K avril 12  2021 ./try-ocaml.en.rst
-rw-r--r-- 1 lilian lilian 9,3K avril 12  2021 ./transifex.fr.rst
-rw-r--r-- 1 lilian lilian 8,0K avril 12  2021 ./transifex.en.rst
-rw-r--r-- 1 lilian lilian 9,8K avril 12  2021 ./trademarks.rst
-rw-r--r-- 1 lilian lilian  19K avril 12  2021 ./top10.fr.rst
-rw-r--r-- 1 lilian lilian  25K avril 12  2021 ./wakatime.fr.rst
-rw-r--r-- 1 lilian lilian  24K avril 12  2021 ./wakatime.en.rst
-rw-r--r-- 1 lilian lilian 7,8K avril 12  2021 ./vpn.fr.rst
-rw-r--r-- 1 lilian lilian  23K avril 12  2021 ./visualstudiocode.fr.rst
-rw-r--r-- 1 lilian lilian  20K avril 12  2021 ./visualstudiocode.en.rst
-rw-r--r-- 1 lilian lilian 2,7K avril 12  2021 ./zotero.fr.rst
-rw-r--r-- 1 lilian lilian 2,6K avril 12  2021 ./zotero.en.rst
-rw-r--r-- 1 lilian lilian 8,9K avril 12  2021 ./wolfram.fr.rst
-rw-r--r-- 1 lilian lilian 8,9K avril 12  2021 ./wolfram.en.rst
-rw-r--r-- 1 lilian lilian 3,8K avril 12  2021 ./whatsnew.fr.rst
-rw-r--r-- 1 lilian lilian 3,7K avril 12  2021 ./whatsnew.en.rst
lrwxrwxrwx 1 lilian lilian   19 avril 12  2021 ./teaching.fr.rst -> enseignement.fr.rst
lrwxrwxrwx 1 lilian lilian   16 avril 12  2021 ./research.fr.rst -> recherche.fr.rst
lrwxrwxrwx 1 lilian lilian   15 avril 12  2021 ./recherche.en.rst -> research.en.rst
lrwxrwxrwx 1 lilian lilian   22 avril 12  2021 ./packing.fr.rst -> affaires-voyage.fr.rst
lrwxrwxrwx 1 lilian lilian   26 avril 12  2021 ./my-favorite-tools.fr.rst -> mes-outils-preferes.fr.rst
lrwxrwxrwx 1 lilian lilian   24 avril 12  2021 ./mes-outils-preferes.en.rst -> my-favorite-tools.en.rst
lrwxrwxrwx 1 lilian lilian   23 avril 12  2021 ./learn-python.fr.rst -> apprendre-python.fr.rst
lrwxrwxrwx 1 lilian lilian   14 avril 12  2021 ./jokes.fr.rst -> blagues.fr.rst
lrwxrwxrwx 1 lilian lilian   15 avril 12  2021 ./hitch-hiking.fr.rst -> autostop.fr.rst
lrwxrwxrwx 1 lilian lilian   15 avril 12  2021 ./enseignement.en.rst -> teaching.en.rst
lrwxrwxrwx 1 lilian lilian   30 avril 12  2021 ./ce-que-je-regarde-sur-youtube.en.rst -> what-i-watch-on-youtube.en.rst
lrwxrwxrwx 1 lilian lilian   12 avril 12  2021 ./blagues.en.rst -> jokes.en.rst
lrwxrwxrwx 1 lilian lilian   19 avril 12  2021 ./autostop.en.rst -> hitch-hiking.en.rst
lrwxrwxrwx 1 lilian lilian   19 avril 12  2021 ./apprendre-python.en.rst -> learn-python.en.rst
lrwxrwxrwx 1 lilian lilian   14 avril 12  2021 ./affaires-voyage.en.rst -> packing.en.rst
lrwxrwxrwx 1 lilian lilian   36 avril 12  2021 ./what-i-watch-on-youtube.fr.rst -> ce-que-je-regarde-sur-youtube.fr.rst
-rw-r--r-- 1 lilian lilian  21K avril 13  2021 ./teaching.en.rst
-rw-r--r-- 1 lilian lilian 5,0K avril 13  2021 ./coronavirus.en.rst
-rw-r--r-- 1 lilian lilian  61K avril 13  2021 ./top10.en.rst
-rw-r--r-- 1 lilian lilian 2,2K avril 14  2021 ./twitch.en.rst
-rw-r--r-- 1 lilian lilian 9,2K avril 14  2021 ./pokemon.en.rst
-rw-r--r-- 1 lilian lilian 8,6K avril 14  2021 ./pokemon.fr.rst
-rw-r--r-- 1 lilian lilian 3,1K avril 14  2021 ./twitch.fr.rst
-rw-r--r-- 1 lilian lilian  16K avril 18  2021 ./journal-de-bord-pendant-confinement-coronavirus-2020.fr.rst
-rw-r--r-- 1 lilian lilian  23K mai    6  2021 ./coronavirus.fr.rst
-rw-r--r-- 1 lilian lilian 9,2K nov.  23  2022 ./hitch-hiking.en.rst
-rw-r--r-- 1 lilian lilian  11K nov.  23  2022 ./autostop.fr.rst
-rw-r--r-- 1 lilian lilian  26K févr. 21  2023 ./cv.fr.rst
-rw-r--r-- 1 lilian lilian  27K févr. 21  2023 ./conseils-email.fr.rst
-rw-r--r-- 1 lilian lilian  11K févr. 21  2023 ./vieprivee.rst
-rw-r--r-- 1 lilian lilian  21K févr. 21  2023 ./conseils-visio.fr.rst
-rw-r--r-- 1 lilian lilian  32K févr. 21  2023 ./a-faire-avant-30-ans.rst
-rw-r--r-- 1 lilian lilian 7,4K févr. 28  2023 ./resume-de-mon-annee-2022.rst
-rw-r--r-- 1 lilian lilian  38K mai   30  2023 ./what-i-watch-on-youtube.en.rst
-rw-r--r-- 1 lilian lilian  39K mai   30  2023 ./ce-que-je-regarde-sur-youtube.fr.rst
-rw-r--r-- 1 lilian lilian 6,9K août  26 23:21 ./callme.fr.rst
-rw-r--r-- 1 lilian lilian 6,5K août  26 23:23 ./callme.en.rst
-rw-r--r-- 1 lilian lilian  14K août  29 13:00 ./index.en.rst
-rw-r--r-- 1 lilian lilian  21K oct.  11 12:31 ./enseignement.fr.rst
-rw-r--r-- 1 lilian lilian  30K oct.  11 12:35 ./mes-outils-preferes.fr.rst
-rw-r--r-- 1 lilian lilian  16K oct.  11 17:08 ./resume-de-mon-annee-2020.rst
-rw-r--r-- 1 lilian lilian  19K oct.  11 17:13 ./resume-de-mon-annee-2021.rst
-rw-r--r-- 1 lilian lilian  11K févr. 17 13:01 ./resume-de-mon-annee-2023.rst
-rw-r--r-- 1 lilian lilian 6,0K févr. 17 13:09 ./resume-de-mon-annee-2024.rst
-rw-r--r-- 1 lilian lilian  14K févr. 17 13:11 ./index.fr.rst

On peut chercher les 10 plus long noms de fichiers (parmi les fichiers reStructuredText) dans le dossier courant :

$ for i in $(find -iname '*'.rst | sort); do echo "${#i} : $i" | sed s/'^\([0-9]\) '/'0\1 '/; done | sort | tail | awk '{ print $3 }'
./pair-programming-tools.fr.rst
./stats-google-analytics.en.rst
./stats-google-analytics.fr.rst
./what-i-watch-on-youtube.en.rst
./what-i-watch-on-youtube.fr.rst
./ce-que-je-regarde-sur-youtube.en.rst
./ce-que-je-regarde-sur-youtube.fr.rst
./data-analysis-of-2-years-of-sms-2016-2017.en.rst
./data-analysis-of-2-years-of-sms-2016-2017.fr.rst
./journal-de-bord-pendant-confinement-coronavirus-2020.fr.rst

Ou bien encore, on peut réaliser une signature GPG (à la volée) du fichier courant (pour plus d’infos sur GPG, voir pgp.html) :

$ gpg --quiet -o - --armor --detach-sign runblock.fr.rst
-----BEGIN PGP SIGNATURE-----

iQIzBAABCgAdFiEE/DSleRq5aEZtX0W7LaPXUOHniXEFAmXQoyAACgkQLaPXUOHn
iXEc9A//dSyowAqAWF5DqgWDWcde55umBZkmNz3oq53yFVvc1fvKj6A6p/NkJaTB
A79SE8FZPqD+3zwX8oFeqB8W2bHXbIsmxF2rHR0+IVd697/NBYSTa+6r7DkNf7f+
shnh0uDVHPtNXkgPgw+xm0MKzFUXBi3r0TaGur6OstDg2At4j+pekZwGMfbyrTKJ
jz8x3vBimw3z2r4w7qjrCysl6PicG5QHKJPNoJkAQkalbSFBjF15Ux+vTgWf5b3j
qSGWNZpPxq/UnjxPYrVU4HdB35BGeOTGSrqOpdXBFus2eTfIGGQ42U19MD9AhJli
8cqL7UepxmZIMhRzyUfrKWW7BYhyWsZ3p97nOql9N2xlzev9MGSYxAoqCQ+bULUM
EomOyPMOvsb3e2YqIFfEO7iBIlFCfVRr2LUc03luVl1ocK5x+0drjR5sqm3JDyNS
pa5TUT73qDfflnczmOTAvAJZes3fefZf9hEJFhxUakT53N4Uw0CKmJIgu5agWVs5
SRVCibkw2LoLWiCxjAhZXoIDo/bbiLwjdPefnamOOA7XFxX3HgIwpemVBkh3OFN1
8dwNsyDQUjOjzHDhLF/rGUH/t5+LAcj9PKdUcw/3Oqt1XLUOjPKGfRVKu81X+K0W
qgDubJDsH1L1v6DXqT8HwjOJosfURLBin4BnA9XpTa2bgdjwvuA=
=lbuc
-----END PGP SIGNATURE-----

Autres exemples divers

figlet pour afficher du texte en ASCII art :

$ figlet "C'est  joli  non  ?"
  ____ _           _        _       _ _                         ___ 
 / ___( ) ___  ___| |_     (_) ___ | (_)   _ __   ___  _ __    |__ \
| |   |/ / _ \/ __| __|    | |/ _ \| | |  | '_ \ / _ \| '_ \     / /
| |___  |  __/\__ \ |_     | | (_) | | |  | | | | (_) | | | |   |_| 
 \____|  \___||___/\__|   _/ |\___/|_|_|  |_| |_|\___/|_| |_|   (_) 
                         |__/                                       

Mon script bin/series.sh permet de lire automatiquement l’épisode suivant d’une série télé, et utilise un fichier ~/current pour savoir quel dossier lire. On peut s’en servir pour afficher quelle série télé je regarde en ce moment :

$ echo -e "En ce moment, je regarde la série $(basename "$(cat /home/lilian/current | tr _ ' ')") :)"
En ce moment, je regarde la série The Dragon Prince :)

État du dépôt git (montre quels fichiers sont nouveaux (N), modifiés (M) ou supprimés (D)) :

$ git status --porcelain

Un truc débile avec un élan (cf. Bohort : « Non, moi ça m’évoque plutôt un élan » via publis/.quotes.txt) :

$ cowthink -W 160 -f /usr/share/cowsay/cows/moose.cow "Et vous trouvez ça drôle ?"
 ____________________________
( Et vous trouvez ça drôle ? )
 ----------------------------
  o
   o   \_\_    _/_/
    o      \__/
           (oo)\_______
           (__)\       )\/\
               ||----w |
               ||     ||

On peut essayer une idée encore plus folle, afficher une image en texte ASCII :

$ convert ~/.link.ico jpg:- | jp2a -b - --size=31x20
+-------------------------------+
|MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM|
|MMMMMMMMMMWNNNNNNNNWMMMMMMMMMMM|
|MMMMMMMMMNk'.......ONNWMMMMMMMM|
|MMMMMMMWNc.;::;cxl;'..xWMMMMMMM|
|MMMMMWKl.';;lkkxc,'oxd;'dXXNMMM|
|MMMMNd.'::;.'::;.c0Ox:.   .lWMM|
|MMMN;.::c..dl  .xOko, ....xNMMM|
|MMMWd,;:c..kkc. ;;'. .okkKWMMMM|
|MMMMMX:';..x00, .l0..Oc..'XMMMM|
|MMMMMMW0: .dO0,.k00,,kkkc'KMMMM|
|MMMMMMMMW: ,ck'.xkkxo;;;dNWMMMM|
|MMMMMMMMW; ..,. ,;;;' lMMMMMMMM|
|MMMMMMW0d,.:' .,,. .. lMMMMMMMM|
|MMMMMMWl 'cc' l0Kc :: lMMMMMMMM|
|MMMMMMMo .,,. ;oo, ll lMMMMMMMM|
|MMMMMMMO:. ',,,,,. .. lMMMMMMMM|
|MMMMMMNko. ;ccccc'    ;ONMMMMMM|
|MMMMMMNdcllodddxxxkOO0KKNMMMMMM|
|MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM|
|MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM|
+-------------------------------+

Et la même en plus gros (au fait, cette image est l’icone de ce site web) :

$ convert ~/.link.ico jpg:- | jp2a -b - --size=62x30
+--------------------------------------------------------------+
|MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM|
|MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM|
|MMMMMMMMMMMMMMMMMMMMMWXKKKKKKKKKKKKKKKNMMMMMMMMMMMMMMMMMMMMMMM|
|MMMMMMMMMMMMMMMMMMMWNO;...............xMMMMMMMMMMMMMMMMMMMMMMM|
|MMMMMMMMMMMMMMMMMWKoc:'........';;,'.'cdddddOWMMMMMMMMMMMMMMMM|
|MMMMMMMMMMMMMMN0Ox:...;cclooooodxkxc,,,'...':xO0XWMMMMMMMMMMMM|
|MMMMMMMMMMMMWXl.  .;cccclx00000klc;.  c0000Ko.  :KWWMWWMMMMMMM|
|MMMMMMMMMMWOc,'''',:c:'.'cdddddc'.':lok00kdd:   .:ccc:c0MMMMMM|
|MMMMMMMMWKx;..'ccc:;;,...,;;;;;'..'xK00OOo;;'        ..dWMMMMM|
|MMMMMMMNd..':;:ccc,. .lkx;     ,dkO000xll,          :0XNMMMMMM|
|MMMMMMMXc. 'cccccc'  .dKOc''.  .ldo:;,'...  ;xkkkkkkKWMMMMMMMM|
|MMMMMMMMWOc;,,:ccc'  .dK0xdo,   .',,,'.  .';lddddxOXWMMMMMMMMM|
|MMMMMMMMMMW0:.'ccc'  .dK0000:     .dKO;  ;O0d.    .:KMMMMMMMMM|
|MMMMMMMMMMMMNkc;,..  .dK0000c  .cloOKO;  ;O0koll:. 'OMMMMMMMMM|
|MMMMMMMMMMMMMMNKk;.  .oOkO00c  ,kK000Oc..:xkkkxkd;.,OMMMMMMMMM|
|MMMMMMMMMMMMMMMMMWd. .;c:dO0:  'x00OO0Okkoc:;...,xXXWMMMMMMMMM|
|MMMMMMMMMMMMMMMMMWd.   ..;ol,  .:ooooooll,..,x000NMMMMMMMMMMMM|
|MMMMMMMMMMMMMMMMMNo.  ....,,.   ',,,,,,,,.  '0MMMMMMMMMMMMMMMM|
|MMMMMMMMMMMMMMWWWNo. .,c:.                  '0MMMMMMMMMMMMMMMM|
|MMMMMMMMMMMMMWx,,''',;:c:.  'oodddc.  .,,.  '0MMMMMMMMMMMMMMMM|
|MMMMMMMMMMMMMWl   .;cccc:.  ;00K00x'  ;xd;  'OMMMMMMMMMMMMMMMM|
|MMMMMMMMMMMMMMo.  .,::::;.  ;kOOOOd.  :OO:  'OMMMMMMMMMMMMMMMM|
|MMMMMMMMMMMMMMo    ... ..   .......   ,ol,  .OMMMMMMMMMMMMMMMM|
|MMMMMMMMMMMMMWk;;;.   .'''''''''',.   .,,.  'OWMMMMMMMMMMMMMMM|
|MMMMMMMMMMMMWNKOOOc. .cxdddddddddxl.        .kXNWMMMMMMMMMMMMM|
|MMMMMMMMMMMMWO;....   ........'''''.'',,,;;:codkKWMMMMMMMMMMMM|
|MMMMMMMMMMMMMNkoddxxkkkO000000KKKKXXXNNNNWWWMMMMMMMMMMMMMMMMMM|
|MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM|
|MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM|
|MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM|
+--------------------------------------------------------------+

Quelques statistiques sur ce dépôt git :

$ echo "Nombre de commits par auteur (dans ce depot git) :"
$ git --no-pager shortlog -sn --all
Nombre de commits par auteur (dans ce depot git) :
  2155	Lilian Besson
     5	Lilian Besson (Naereen)
     1	Jill-Jênn Vie

Un calendrier montrant les jours d’activités de ce dépôt git (avec cet autre script, si vous êtes curieux cette web-page est une jolie version web de ce « calendrier » minimaliste) :

$ git-cal --ascii
      Feb   Mar     Apr       May     Jun     Jul       Aug     Sep       Oct     Nov     Dec       Jan     Feb 
                                                              o                                                   
    M     O                         .                                                                             
        o .                         .                         .                                                   
    W                                                                     .                                       
                                                                                                                  
    F                                                                                 o                           
                                                                                    .                         .   

                                                                                            Less   . o O 0  More
  16: Total commits
   2: Days ( Feb 27 2023 - Feb 28 2023 ) - Longest streak excluding weekends       
   2: Days ( Feb 27 2023 - Feb 28 2023 ) - Longest streak including weekends       
   1: Days ( Feb 17 2024 - Feb 17 2024 ) - Current streak                          

Des ajouts : OCaml ?

Dans le fichier de configuration de Sphinx, conf.py, on peut facilement créer des raccourcis pour faciliter l’utilisation de cette extension runblock.

Il faut d’abord créér un dictionnaire vide appelé autorun_languages :

autorun_languages = {}

Et ensuite ajouter une valeur truc (un programme valide, comme gnuplot ou ocaml) et truc_prefix_chars (taille des préfixes) pour rendre utilisable la balise .. code-block:: truc dans les documents reStructuredText (dans ce projet seulement) :

# Ajouter ça dans votre 'conf.py'
autorun_languages['ocaml'] = u'ocaml -stdin'
autorun_languages['ocaml_prefix_chars'] = 2
autorun_languages['ocaml_input_language'] = 'utf_8'
autorun_languages['ocaml_output_language'] = 'utf_8'

.. runblock:: ocaml marche désormais

Avec cette astuce, on peut désormais inclure facilement des exemples de code en OCaml :

# let rec f = function 0 -> 1 | n -> n *(f (n-1)) in
# print_int (f 11);;
# Printf.printf "\n        OCaml version %s\n" Sys.ocaml_version;;
39916800
        OCaml version 4.14.1

Pour plus de détails, cf. le code source de l’extension autorun.py.


Bug étrange de pygments

This runblock extension uses the great pygments Python library to color the code.

J’ai des fois vu pygments ou pygmentize se casser complètement, et la correction que je fais manuellement est de supprimer le support (annoncé comme expérimental) de pkg_resources dans le fichier plugin.py dans les sources de pygments, en forçant manuellement pkg_resources = None (à la ligne 41). C’est sale mais ça corrige le bug…