Emacs 31.1 automatise les grammaires Tree-sitter et retire unexec
4 min de lecture

GNU Emacs 31.1 est sorti le 24 août 2026, et le changement le plus susceptible
de modifier une journée de travail est modeste : les grammaires Tree-sitter
peuvent désormais s'installer seules. L'annonce de publication, postée sur la
liste de diffusion info-gnu-emacs par Sean Whitton, renvoie à etc/NEWS pour
les détails plutôt que de les énumérer ; la physionomie de cette version vient
donc des présentations publiées en parallèle - un système de complétion
réécrit, une série de commandes pour les dispositions de fenêtres, et le
retrait du dumper unexec, déprécié depuis Emacs 27.
Les grammaires Tree-sitter cessent d'être une corvée manuelle
Emacs 31.1 ajoute une option treesit-auto-install-grammar qui installe
automatiquement les grammaires Tree-sitter, selon la présentation de la version
par Mastering Emacs. Jusqu'ici, utiliser un mode majeur Tree-sitter obligeait à
se procurer soi-même la grammaire et à aligner sa version sur celle attendue
par le mode ; un décalage produisait des erreurs qui ressemblaient à des bogues
de l'éditeur plutôt qu'à un problème de dépendance. Mastering Emacs décrit la
nouvelle option comme supprimant cette gestion manuelle des versions.
La navigation Tree-sitter devient elle aussi plus complète. La même
présentation cite treesit-forward-sexp-list et treesit-forward-list pour se
déplacer entre nœuds structurels, ainsi qu'une commande treesit-explore pour
inspecter l'arbre syntaxique - le moyen concret de comprendre pourquoi un mode
colore ou indente quelque chose de façon inattendue.
Le système de complétion a été réécrit
Le tampon Completions peut maintenant apparaître d'emblée au lieu d'attendre
qu'on le demande, et l'algorithme de correspondance flex a été réécrit, d'après
Mastering Emacs et la couverture de la version candidate par Linux Compatible.
Les catégories de complétion peuvent hériter les unes des autres, et RET
sélectionne désormais le candidat choisi avec M-UP ou M-DOWN.
Linux Compatible documente également l'arrivée d'une valeur up-down pour
minibuffer-visible-completions : « Vous pouvez aussi utiliser
minibuffer-visible-completions avec la nouvelle valeur "up-down" pour
naviguer dans les complétions indépendamment du minibuffer. » Si vous avez
assemblé ce comportement à partir de paquets tiers, la question à se poser
après la mise à jour est de savoir lesquels deviennent redondants.
Les dispositions de fenêtres ont enfin leurs commandes
Réorganiser une disposition de fenêtres imposait de supprimer et de rediviser les fenêtres à la main. Emacs 31.1 ajoute des commandes qui agissent sur la disposition entière, énumérées par Mastering Emacs :
| Commande | Effet |
|---|---|
window-layout-rotate-clockwise | Fait tourner la disposition dans le sens horaire |
window-layout-counterclockwise | La fait tourner dans l'autre sens |
window-layout-flip-topdown | Retourne la disposition verticalement |
window-layout-flip-leftright | La retourne horizontalement |
window-layout-transpose | Transpose lignes et colonnes |
other-window-backward (C-x O) | Passe à la fenêtre précédente |
split-window peut en outre ressusciter une fenêtre supprimée, selon la même
source. Deux changements côté terminal accompagnent ces commandes :
xterm-mouse-mode est activé par défaut dans les terminaux qui le prennent en
charge, et les child frames fonctionnent désormais sur les frames TTY.
Ce qui a été retiré, et un correctif absent
Le dumper unexec disparaît. Il était déprécié depuis Emacs 27, et Mastering
Emacs qualifie son retrait de « fin d'une époque » - ce qui concerne surtout
celles et ceux qui compilent Emacs eux-mêmes ou en maintiennent l'empaquetage.
Le programme ctags intégré a lui aussi été retiré, Universal Ctags faisant
office de remplaçant attendu.
Deux chantiers ne sont pas dans cette version. Le travail sur le ramasse-miettes est reporté à Emacs 32, selon Mastering Emacs. Et Linux Compatible rapporte qu'une vulnérabilité dans les formes abrégées de symboles Emacs Lisp reçoit une atténuation dans cette lignée, mais que la résolution complète est renvoyée à la version 32 - bon à savoir si vous ouvrez des fichiers Elisp venant de sources que vous ne contrôlez pas.
La prise en charge d'Unicode passe à la version 17.0, avec de nouvelles méthodes de saisie pour le grec polytonique, le tifinagh, les langues iroquoiennes du Nord dont le mohawk et l'oneida, des variantes du birman et le syriaque.
Ce que cela signifie pour les développeurs
Le changement Tree-sitter est celui sur lequel agir en premier. Si votre
configuration contient du code d'installation de grammaire écrit à la main ou
un commit de grammaire épinglé, essayez treesit-auto-install-grammar dans une
configuration jetable avant de supprimer quoi que ce soit - puis retirez ce
qu'elle rend inutile. Même chose pour la complétion : le tampon Completions
immédiat et le nouveau moteur flex recouvrent ce que plusieurs paquets
populaires existent pour fournir, et faire tourner 31.1 une après-midi avec une
configuration volontairement minimale est le moyen le plus rapide de découvrir
ce que vous n'avez plus besoin de traîner.
Si vous compilez Emacs depuis les sources ou maintenez un paquet pour une
distribution, lisez le retrait d'unexec comme un changement de système de
compilation et vérifiez votre recette avant que vos utilisateurs ne mettent à
jour. Le retrait de ctags mérite le même traitement : tout ce qui appelle le
binaire fourni exigera désormais Universal Ctags installé.
Deux raisons plaident pour la patience plutôt que la hâte. L'annonce elle-même
délègue le détail à etc/NEWS : C-h n dans un 31.1 fraîchement compilé est
donc la liste de référence - pas un résumé, celui-ci compris. Et parce que le
correctif des formes abrégées de symboles n'arrive qu'avec Emacs 32, le volet
sécurité reste incomplet ; si vous ouvrez régulièrement de l'Elisp non fiable,
c'est une raison de rester attentif plutôt que de considérer l'affaire close.
Sources
- Emacs 31.1 released - GNU info-gnu-emacs mailing list
- What's New in Emacs 31.1? - Mastering Emacs
- GNU Emacs 31.1 RC1: Completion Overhaul, Window Commands and Unicode 17.0 - Linux Compatible