Les changements d’Emacs 31 que j’utilise déjà au quotidien
(rahuljuliato.com)- Emacs 31 n’est pas encore officiellement publié, mais des changements déjà perceptibles s’accumulent dans la branche
emacs-31et dansmaster, avec une évolution générale vers des réglages pris en charge par le cœur d’Emacs sans paquet externe - L’arrivée du basculement automatique vers Tree-sitter et de l’installation des grammaires réduit la charge liée à la gestion manuelle des major modes et des sources de grammaire
markdown-ts-mode, le rendu de documentation d’Eglot,eldoc-help-at-pt, la completion eager etxref-edit-moderenforcent les flux d’édition, de navigation et de consultation de documentation autour de fonctions intégrées- De petites options comme la side window de Speedbar, le masquage automatique dans VC, les conditions de logs d’ERC,
kill-region-dwim,ielm-history-file-nameounative-comp-async-on-battery-powerréduisent les frictions répétitives - Les noms de fonctionnalités et les valeurs par défaut d’Emacs 31 peuvent encore changer, et
markdown-ts-modeainsi que le rendu de documentation d’Eglot qui l’utilise sont indiqués comme fonctionnalités expérimentales et doivent être activés explicitement
Le cadre de cette préversion d’Emacs 31
- Emacs 31 n’est pas encore publié, et l’environnement de référence consiste à compiler et utiliser la branche
emacs-31etmasterà la mi-2026 - Les éléments présentés sont des changements réellement intégrés dans une configuration quotidienne, et la plupart sont déjà entrés dans le cœur d’Emacs ou sont très proches de l’être
- Les noms de fonctionnalités et les valeurs par défaut peuvent encore changer jusqu’à la publication finale
- Des exemples de configuration sont visibles dans le
init.elde Emacs Solo, avec le commentaire; EMACS-31
Moins de configuration pour Tree-sitter
- Dans Emacs 31, deux options simplifient le basculement vers les modes fondés sur Tree-sitter et le flux d’installation des grammaires
treesit-enabled-modes ttreesit-auto-install-grammar t
- Si
treesit-enabled-modesvautt, les major modes qui ont une variante Tree-sitter basculent vers cette variante treesit-auto-install-grammarne se contente plus d’émettre une erreur lorsqu’une grammaire manque : Emacs propose alors de la récupérer et de la compiler- Comme les sources de grammaire pour des langages comme TypeScript, TSX, Rust, TOML, YAML ou Dockerfile sont désormais incluses dans les modes, on peut réduire les réglages où l’on ajoutait soi-même URL et chemins dans
treesit-language-source-alist - Il faut faire attention si l’on utilise un répertoire Emacs partagé entre plusieurs architectures
- les grammaires installées automatiquement ne sont pas séparées par architecture
- un
.sopourx86_64et un.sopourarm64peuvent se retrouver sous le même nom, si bien qu’un binaire compilé sur une machine peut ne pas être chargeable sur une autre
markdown-ts-mode intégré
- Emacs 31 inclut un
markdown-ts-modeexpérimental - Ce mode est né d’une proposition envoyée à emacs-devel début 2025, puis Stéphane Marks a rejoint le travail comme coauteur pour poursuivre les améliorations
- Il traite Markdown non pas comme un simple sujet de coloration syntaxique, mais comme un environnement d’édition agréable à écrire et à lire
- Il propose des déplacements entre titres, du repliage et des mouvements entre éléments structurels familiers aux utilisateurs d’Org
- Les fenced code blocks ne sont pas affichés comme un texte monospacé plat : ils reçoivent le font-locking du major mode réel du langage concerné
- Les blocs Emacs Lisp et d’autres modes intégrés peuvent aussi bénéficier d’une vraie coloration syntaxique
- Les commandes d’édition des blocs de code fonctionnent en grande partie déjà, même si la completion à l’intérieur des blocs reste encore un peu brute
- Les liens d’image sont rendus inline dans le buffer
- Il n’est pas encore relié à
auto-mode-alist, donc il ne prend pas automatiquement en charge les fichiers.md- On peut charger la bibliothèque avec
M-x load-library RET markdown-ts-mode, puis l’activer dans le buffer - Il est aussi possible de l’ajouter soi-même à
auto-mode-alist
- On peut charger la bibliothèque avec
- Les retours peuvent être envoyés à la bug list via
M-x report-emacs-bug - D’autres captures d’écran sont disponibles dans la démo markdown-ts-mode-lab
Améliorations d’Eglot, Eldoc et de la completion
- Dans Emacs 31, Eglot peut rendre la documentation LSP avec
markdown-ts-view-modeeglot-documentation-renderer 'markdown-ts-view-mode- il devient possible de consulter des hover docs formatées sans paquet externe
- cette fonction dépend de
markdown-ts-modeet reste donc elle aussi expérimentale
eglot-code-action-indicationspermet de désactiver les nouveaux indices inline de code actions- avec certains language servers, ces indices peuvent sembler trop envahissants
eglot-events-buffer-sizeest en train d’être remplacé pareglot-events-buffer-configeldoc-help-at-pt taffiche l’aide pour l’élément sous le curseur sans appel séparé- utilisé avec
eldoc-echo-area-prefer-doc-buffer, cela apporte davantage de guidage quand on explore du code inconnu
- utilisé avec
- De nouveaux réglages de completion rendent l’interface plus réactive pendant la saisie
completion-eager-update tcompletion-eager-display 'autominibuffer-visible-completions 'up-down
completion-eager-updateetcompletion-eager-displaymettent à jour l’interface de completion en fonction de la saisie, même avant que l’utilisateur ne la demande explicitement- Si
minibuffer-visible-completionsest réglé sur'up-down, on peut parcourir les candidats visibles avec les touches fléchées - icomplete inclut un correctif de bug#75784 qui ajoute le comportement vertical in-buffer et un indicateur de préfixe
icomplete-vertical-in-buffer-adjust-listicomplete-vertical-render-prefix-indicator
Disposition des fenêtres et Speedbar
- Emacs 31 ajoute des commandes qui permettent de modifier la disposition des fenêtres sans avoir à tout redécouper et refermer manuellement
window-layout-transposewindow-layout-rotate-clockwisewindow-layout-flip-leftrightwindow-layout-flip-topdown
- transpose inverse un agencement horizontal/vertical, rotate fait pivoter l’ensemble de la disposition, et les commandes flip la reflètent à gauche/droite ou haut/bas
- C’est pratique quand on veut simplement changer la position des fenêtres d’édition dans une disposition à trois fenêtres tout en conservant les buffers
- Dans Emacs 31, Speedbar peut être placé dans une side window au lieu d’une frame séparée
speedbar-window-default-widthspeedbar-window-max-widthspeedbar-window
speedbar-windowancre Speedbar sur le côté, comme un arbre de fichiers plus moderne- Dans un environnement en tiling ou sur un portable à écran unique, cette approche en side window s’adapte mieux que l’ancienne frame flottante
VC et xref éditable
- VC reçoit des réglages qui allègent le flux quotidien de gestion de versions
vc-auto-revert-mode tvc-allow-rewriting-published-history tvc-dir-auto-hide-up-to-date 'revert
vc-dir-auto-hide-up-to-datemasque automatiquement les fichiers à jour quand on rafraîchit un buffervc-dir- on peut ainsi supprimer les bricolages de raccourcis qui appelaient
vc-dir-hide-up-to-dateaprèsvc-dir-refresh
- on peut ainsi supprimer les bricolages de raccourcis qui appelaient
vc-allow-rewriting-published-historyconvient aux flux qui réécrivent volontairement un historique déjà poussé, comme avec Jujutsu ou un force-push sur une feature branch- Emacs 31 introduit un buffer xref éditable
- jusque-là, le buffer xref ne proposait que
r, viaxref-query-replace-in-results, et se limitait aux remplacements basés sur des expressions régulières - contrairement à
wdired-modepour Dired ougrep-edit-modepour les buffers grep, xref n’avait pas de flux où l’on modifie directement le buffer de résultats
- jusque-là, le buffer xref ne proposait que
- La première proposition consistait à exporter les résultats xref avec
xref-export-to-grepdans un buffer engrep-modeau formatfile:line:content, puis à l’éditer - Dmitry Gutov, mainteneur de xref, a proposé une édition inline dans le buffer xref plutôt qu’une interface détournée via un buffer grep, puis
xref-edit-modea été écrit et intégré xref-edit-modeévite les changements de buffer supplémentaires et fonctionne plus rapidement même avec de gros buffers xref- Le flux d’utilisation consiste à lancer une recherche avec
C-x p g, puis à démarrer le mode édition avecedans le buffer*xref*, avant de valider avecC-c C-caprès modification - La discussion associée est publique dans bug#80616
ERC et petites améliorations de qualité de vie
- ERC permet avec
erc-log-insert-log-on-open 'erc-log-new-target-buffer-pde n’insérer les anciens logs qu’à l’ouverture d’un nouveau target buffer - Dans Emacs 31, le module
scrolltobottomd’ERC ne dépend plus deerc-fill-wrap, ce qui permet de supprimer les réglages conditionnels destinés aux versions précédentes - De petites valeurs de configuration contribuent elles aussi à améliorer l’usage quotidien
delete-pair-push-mark t: pousse la mark aprèsdelete-pair, ce qui permet de sélectionner l’intérieur avecC-x C-xibuffer-human-readable-size t: affiche des tailles en KB/MB au lieu des octets brutsielm-history-file-name: conserve l’historique de saisie d’IELM après redémarragekill-region-dwim 'emacs-word: en l’absence de region active,C-wsupprime le mot suivant au lieu d’émettre une erreurnative-comp-async-on-battery-power nil: arrête la compilation native en arrière-plan sur batterieview-lossage-auto-refresh t:C-h lmet à jour les dernières frappes en temps réeldisplay-fill-column-indicator-warning nildired-hide-details-hide-absolute-location t: masque le chemin absolu du répertoire dansdired-hide-details-modeworld-clock-sort-order "%FT%T": ajuste l’ordre de tri de l’horloge mondialezone-all-frames tzone-all-windows-in-frame tuniquify-after-kill-buffer-flag t: le nom a changé par rapport à l’ancienne variante en-p
kill-region-dwimévite le message d’erreur « the mark is not active » surC-wview-lossage-auto-refreshest utile pour montrer les frappes en direct pendant un partage d’écran ou une formationnative-comp-async-on-battery-power nilréduit les cas où le ventilateur se met à tourner à cause de la compilation en arrière-plan pendant les déplacements sans alimentation secteurtty-tip-modeapporte des tooltips même dans Emacs lancé avec-nw
term, thèmes Modus et pourquoi utiliser master
- Emacs 31 corrige des problèmes dans
termetansi-termoù des lignes étaient avalées ou l’affichage se corrompait- des programmes comme
htop,nethackou d’autres applications basées sur curses qui utilisent l’adressage du curseur et le redraw plein écran se redessinent correctement dans le terminal Emacs - cela enlève une raison de plus d’ouvrir un émulateur de terminal externe
- des programmes comme
- Emacs inclut les thèmes Modus 5 de Protesilaos
modus-operandi-deuteranopia: thème à fond blanc optimisé pour la deutéranopiemodus-operandi: thème à fond blanc à haute lisibilitémodus-operandi-tinted: thème à fond ocre clair à haute lisibilitémodus-operandi-tritanopia: thème à fond blanc optimisé pour la tritanopiemodus-vivendi-deuteranopia: thème à fond noir optimisé pour la deutéranopiemodus-vivendi: thème à fond noir à haute lisibilitémodus-vivendi-tinted: thème à fond ciel nocturne à haute lisibilitémodus-vivendi-tritanopia: thème à fond noir optimisé pour la tritanopie
- Si l’on utilise au quotidien une version non publiée d’Emacs, c’est pour voir directement ce qui entre dans le cœur et constater, à chaque version, la diminution du code de glue maison nécessaire
- On peut lire en complément l’article jumeau consacré à des fonctions déjà intégrées : Even More Batteries Included with Emacs
1 commentaires
Avis sur Lobste.rs
Le changement autour de tree-sitter me réjouit vraiment. J’ai toujours trouvé la configuration assez maladroite
Je suis aussi curieux de voir eager complete.
icompleteetfido-modes’approchent déjà pas mal de ce que je veux, mais ce n’est pas encore aussi agréable à utiliser qu’un paquet tiers commecorfuverticoet consorts uniquement avec les fonctionnalités intégrées, et même activée par défautAvec quelques ajustements et en activant seulement les fonctions intégrées, l’utilisabilité change déjà beaucoup, et c’est ainsi que sont configurés
bedrockouemacs-soloÀ chaque démarrage d’Emacs, j’ai systématiquement un gros message à propos d’une
dylibmanquanteDans l’exemple, la syntaxe de
(treesit-auto-install-grammar t)et(treesit-enabled-modes t)ressemble à des appels de fonction, mais ce sont en réalité des options à configurerIl y a aussi de petits changements sympa dans la prochaine version :
minibuffer-nonselected-modeest activé par défaut, ce qui permet de mieux voir s’il reste du travail inachevé dans le minibuffer, etdiff-modeavecdiff-delete-other-hunksest très utile avec le comportement VC des buffers diff introduit dans Emacs 29with-work-bufferressemble àwith-temp-buffer, mais réutilise un pool de buffers. Je l’ai découvert par hasard en utilisant dans ma config la même convention de nom de buffer,*work*Emacs 31 inclut
lua-mode, donc il n’y a plus besoin de l’installer séparémentJ’ai aussi dû faire quelques ajustements pour retrouver exactement le comportement que je voulais :
xterm-mouse-modeest activé par défaut, donc je l’ai désactivé explicitement, et la facemode-linechange pour s’adapter aux thèmes sombres, mais comme j’étais habitué aux anciennes couleurs par défaut, je suis revenu en arrièreEmacs 31 affiche un avertissement si un fichier source n’a pas de cookie
lexical-binding. Si ça gêne, on peut le désactiver, le corriger facilement avec la commandeelisp-enable-lexical-binding, et il est aussi possible de faire delexical-bindingla valeur par défaut globaleSauf apparition de nouveaux bugs, cela ressemble comme toujours à une version solide
:customdeuse-packageC’est pour ça que je reste partagé sur
:custom. C’est plus pénible pour expérimenter des valeurs ou les partagerwith-work-buffer, c’est pour des raisons de performance ? La documentation n’explique pas pourquoi l’utiliser à la place dewith-temp-buffer, elle dit seulement qu’il faut être plus prudentelpa, mais seulement pour mes propres fichiersEn plus, sur les 68 avertissements de mon Emacs, 64 viennent de fichiers générés
-autoloads.el. Ça semble devoir être corrigé côté outils de génération deelpa/melpaJ’attendais enfin des xref éditables, et ça a l’air de vraiment me simplifier la vie
Il y a énormément d’excellents changements qui touchent de façon étonnamment large ce que j’utilise tous les jours
Nvim a remplacé par défaut les expressions régulières vim par treesitter, et ça a cassé mon environnement d’écriture
treesitter demandait un peu de configuration pour parser les commentaires HTML dans Markdown, et même après avoir assemblé les pièces, ça ne marchait pas
Au final, j’ai réglé le problème en désactivant treesitter
Je suis très conservateur sur l’infrastructure de base comme l’éditeur. Les changements d’éditeur cassent presque toujours quelque chose qui fonctionnait sans problème depuis des années