Extension runblock

À faire

Cette extension Sphinx autorun (runblock) semble cassée avec les dernières versions de Sphinx. En même temps, elle a 12/15 ans… Je n’ai pas le temps de la réparer, ni d’essayer runcmd.

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 :

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

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 :

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

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

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) :

Autres exemples divers

figlet pour afficher du texte en ASCII art :

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 :

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

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

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

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

Quelques statistiques sur ce dépôt git :

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) :

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 :

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…