Änderungen in Emacs 31, die ich schon jetzt täglich nutze
(rahuljuliato.com)- Emacs 31 ist zwar noch nicht offiziell veröffentlicht, aber im Branch
emacs-31und aufmasterhaben sich bereits spürbare Änderungen angesammelt; viele Konfigurationen bewegen sich in Richtung Lösungen nur mit dem Emacs-Core, also ohne externe Pakete - Durch die automatische Tree-sitter-Umschaltung und Grammatik-Installation sinkt der Aufwand, Major Modes und Grammar-Quellen selbst zu verwalten
markdown-ts-mode, Eglot-Dokumentationsrendering,eldoc-help-at-pt, eager completion undxref-edit-modestärken den Workflow für Bearbeitung, Navigation und Dokumentation rund um eingebaute Funktionen- Kleine Optionen wie Speedbar im Side Window, automatisches Ausblenden in VC, ERC-Log-Bedingungen,
kill-region-dwim,ielm-history-file-nameundnative-comp-async-on-battery-powerreduzieren wiederkehrende Reibungspunkte - Funktionsnamen und Standardwerte in Emacs 31 können sich noch ändern, und
markdown-ts-modesowie das darauf aufbauende Eglot-Dokumentationsrendering sind ausdrücklich experimentelle Funktionen, die man explizit aktivieren muss
Voraussetzungen für diese Emacs-31-Vorschau
- Emacs 31 ist noch nicht veröffentlicht; die Referenzumgebung basiert auf einer Konfiguration, in der Mitte 2026 der Branch
emacs-31undmasterselbst gebaut und genutzt werden - Die vorgestellten Punkte sind Änderungen, die bereits in die tägliche Konfiguration eingeflossen sind; die meisten sind schon im Emacs-Core angekommen oder sehr nah daran
- Funktionsnamen und Standardwerte können sich bis zur finalen Veröffentlichung noch ändern
- Konfigurationsbeispiele lassen sich in
init.elvon Emacs Solo anhand des Kommentars; EMACS-31nachsehen
Weniger Tree-sitter-Konfiguration
- In Emacs 31 vereinfachen zwei Optionen den Ablauf für Tree-sitter-basierte Mode-Umschaltung und Grammatik-Installation
treesit-enabled-modes ttreesit-auto-install-grammar t
- Wenn
treesit-enabled-modesauftgesetzt ist, werden Major Modes, für die es Tree-sitter-Varianten gibt, auf diese umgestellt treesit-auto-install-grammarmeldet bei fehlender Grammatik nicht nur einen Fehler, sondern schlägt vor, dass Emacs die Grammatik lädt und baut- Da Grammar-Quellen für Sprachen wie TypeScript, TSX, Rust, TOML, YAML und Dockerfile direkt in den Modes enthalten sind, lässt sich Konfiguration einsparen, bei der URLs und Pfade manuell in
treesit-language-source-alisteingetragen wurden - Vorsicht ist geboten, wenn ein gemeinsames Emacs-Verzeichnis über mehrere Architekturen hinweg genutzt wird
- Automatisch installierte Grammatiken werden nicht nach Architekturen getrennt
.so-Dateien fürx86_64undarm64liegen unter demselben Namen, sodass auf einer Maschine gebaute Binärdateien auf einer anderen eventuell nicht geladen werden können
Eingebautes markdown-ts-mode
- Emacs 31 enthält das experimentelle
markdown-ts-mode - Dieser Mode begann mit einem Anfang 2025 an emacs-devel gesendeten Vorschlag; später stieg Stéphane Marks als Co-Autor ein und trieb die Verbesserungen weiter voran
- Markdown wird nicht nur als Ziel für einfache Syntaxhervorhebung behandelt, sondern eher als komfortable Umgebung zum Schreiben und Lesen
- Er bietet Org-Nutzern vertraute Navigation zwischen Überschriften, Falten und das Verschieben struktureller Elemente
- Fenced code blocks werden nicht als flacher Text in Festbreitenschrift dargestellt, sondern mit dem tatsächlichen Major Mode der jeweiligen Sprache font-locked
- Auch Emacs-Lisp-Blöcke und andere eingebaute Modes erhalten echte Syntaxhervorhebung
- Befehle zum Bearbeiten von Codeblöcken funktionieren bereits weitgehend, auch wenn die Vervollständigung innerhalb der Blöcke noch etwas roh ist
- Bild-Links werden inline im Buffer gerendert
- Noch ist er nicht an
auto-mode-alistangebunden und übernimmt daher.md-Dateien nicht automatisch- Nach dem Laden der Bibliothek mit
M-x load-library RET markdown-ts-modekann er in einem Buffer aktiviert werden - Alternativ lässt er sich manuell zu
auto-mode-alisthinzufügen
- Nach dem Laden der Bibliothek mit
- Feedback kann über
M-x report-emacs-bugan die bug list geschickt werden - Weitere Screenshots gibt es in der markdown-ts-mode-lab demo
Verbesserungen bei Eglot, Eldoc und completion
- Eglot kann in Emacs 31 LSP-Dokumentation mit
markdown-ts-view-moderenderneglot-documentation-renderer 'markdown-ts-view-mode- Formatierte Hover-Dokumentation lässt sich damit ohne externe Pakete anzeigen
- Da die Funktion auf
markdown-ts-modebasiert, ist sie ebenfalls experimentell
- Mit
eglot-code-action-indicationslassen sich die neuen Inline-Hinweise für Code Actions deaktivieren- Bei manchen Language Servern können diese Hinweise als zu aufdringlich empfunden werden
eglot-events-buffer-sizewird schrittweise durcheglot-events-buffer-configersetzteldoc-help-at-pt tzeigt Hilfe zum Element unter dem Cursor an, ohne dass ein separater Aufruf nötig ist- Zusammen mit
eldoc-echo-area-prefer-doc-buffererhält man beim Erkunden unbekannten Codes mehr Führung
- Zusammen mit
- Neue completion-Einstellungen aktualisieren die UI beim Tippen aktiver
completion-eager-update tcompletion-eager-display 'autominibuffer-visible-completions 'up-down
completion-eager-updateundcompletion-eager-displayaktualisieren die Completion-UI passend zur Eingabe, noch bevor die Nutzenden sie explizit anfordern- Wenn
minibuffer-visible-completionsauf'up-downgesetzt ist, lassen sich sichtbare Kandidaten mit den Pfeiltasten durchlaufen - In icomplete ist ein Patch aus bug#75784 enthalten, der vertikales In-Buffer-Verhalten und einen Prefix-Indikator hinzufügt
icomplete-vertical-in-buffer-adjust-listicomplete-vertical-render-prefix-indicator
Fensterlayout und Speedbar
- Emacs 31 ergänzt Befehle, mit denen sich Layouts ändern lassen, ohne Fenster manuell erneut zu teilen oder zu schließen
window-layout-transposewindow-layout-rotate-clockwisewindow-layout-flip-leftrightwindow-layout-flip-topdown
- Transpose wechselt zwischen horizontaler und vertikaler Anordnung, Rotate dreht das gesamte Layout, und die Flip-Befehle spiegeln es links-rechts bzw. oben-unten
- Das ist nützlich, wenn man in einer Drei-Fenster-Anordnung nur die Position der Editorfenster verändern möchte, ohne die Buffer zu verschieben
- Speedbar kann in Emacs 31 statt in einem separaten Frame auch in einem Side Window platziert werden
speedbar-window-default-widthspeedbar-window-max-widthspeedbar-window
speedbar-windowdockt die Speedbar seitlich an, ähnlich wie ein moderner Dateibaum- In Tiling-Umgebungen oder auf Laptops mit nur einem Monitor passt dieses Side-Window-Verhalten besser als der bisherige schwebende Frame
VC und bearbeitbare xref-Ergebnisse
- In VC kommen Einstellungen hinzu, die tägliche Versionsverwaltungsabläufe schlanker machen
vc-auto-revert-mode tvc-allow-rewriting-published-history tvc-dir-auto-hide-up-to-date 'revert
vc-dir-auto-hide-up-to-dateblendet invc-dirbeim Aktualisieren automatisch Dateien aus, die bereits auf dem neuesten Stand sind- Tastatur-Hacks, die nach
vc-dir-refreshnochvc-dir-hide-up-to-dateaufrufen, können dadurch entfernt werden
- Tastatur-Hacks, die nach
vc-allow-rewriting-published-historypasst zu Arbeitsweisen wie Jujutsu oder Force-Pushes auf Feature-Branches, bei denen bereits gepushte Historie bewusst umgeschrieben wird- Emacs 31 bringt einen bearbeitbaren xref-Buffer
- Bisher bot der xref-Buffer nur
xref-query-replace-in-resultsaufr, und das war auf regex-basierte Ersetzungen beschränkt - Ein direkter Workflow zum Bearbeiten des Ergebnis-Buffers wie in Direds
wdired-modeoder demgrep-edit-modefür grep-Buffer fehlte bei xref
- Bisher bot der xref-Buffer nur
- Der erste Vorschlag bestand darin, xref-Ergebnisse über
xref-export-to-grepin einen grep-mode-Buffer im Formatfile:line:contentzu exportieren und dort zu bearbeiten - Der xref-Maintainer Dmitry Gutov schlug statt dieses Umwegs über einen grep-Buffer eine Inline-Bearbeitung direkt im xref-Buffer vor; daraus entstand schließlich
xref-edit-mode xref-edit-modevermeidet zusätzliche Buffer-Wechsel und arbeitet auch bei großen xref-Buffern schneller- Der Ablauf sieht so aus: Suche mit
C-x p g, dann im*xref*-Buffer miteden Bearbeitungsmodus starten und die Änderungen anschließend mitC-c C-cbestätigen - Die zugehörige Diskussion ist öffentlich in bug#80616 dokumentiert
ERC und kleine Qualitätsverbesserungen
- ERC kann mit
erc-log-insert-log-on-open 'erc-log-new-target-buffer-pfrühere Logs nur dann einfügen, wenn ein neuer Target-Buffer geöffnet wird - In Emacs 31 hängt das
scrolltobottom-Modul von ERC nicht mehr vonerc-fill-wrapab, sodass bedingte Konfiguration für ältere Versionen entfernt werden kann - Auch kleine Konfigurationswerte tragen zur besseren Nutzbarkeit bei
delete-pair-push-mark t: legt nachdelete-pairdie Markierung ab, sodass mitC-x C-xder innere Bereich ausgewählt werden kannibuffer-human-readable-size t: zeigt KB/MB statt roher Byte-Werte anielm-history-file-name: behält die Eingabehistorie von IELM auch nach einem Neustartkill-region-dwim 'emacs-word: lässtC-wohne aktive Region das Wort hinter dem Cursor killen statt einen Fehler auszugebennative-comp-async-on-battery-power nil: stoppt die Hintergrund-Native-Compilation im Akkubetriebview-lossage-auto-refresh t: aktualisiertC-h lin Echtzeit mit den zuletzt gedrückten Tastendisplay-fill-column-indicator-warning nildired-hide-details-hide-absolute-location t: verbirgt indired-hide-details-modeabsolute Verzeichnispfadeworld-clock-sort-order "%FT%T": passt die Sortierung der Weltuhr anzone-all-frames tzone-all-windows-in-frame tuniquify-after-kill-buffer-flag t: umbenannt gegenüber der früheren-p-Variante
kill-region-dwimvermeidet beiC-wden Fehler „the mark is not active“view-lossage-auto-refreshist nützlich, um bei Screen-Sharing oder Schulungen Tasteneingaben live anzuzeigennative-comp-async-on-battery-power nilreduziert Situationen, in denen unterwegs ohne Netzteil durch Hintergrundkompilierung die Lüfter anlaufentty-tip-modebringt Tooltips auch in Emacs, das mit-nwläuft
term, Modus-Themes und warum master
- Emacs 31 behebt in
termundansi-termProbleme, bei denen Zeilen verschluckt wurden oder die Anzeige kaputtging- Programme wie
htop,nethackund andere curses-basierte Anwendungen, die Cursor-Adressierung und Fullscreen-Redraws nutzen, werden nun innerhalb des Emacs-Terminals korrekt neu gezeichnet - Damit gibt es einen Grund weniger, einen externen Terminal-Emulator öffnen zu müssen
- Programme wie
- Emacs enthält die Modus-5-Themes von Protesilaos
modus-operandi-deuteranopia: für Deuteranopie optimiertes Theme mit weißem Hintergrundmodus-operandi: kontrastreiches, gut lesbares Theme mit weißem Hintergrundmodus-operandi-tinted: gut lesbares Theme mit hellem ockerfarbenem Hintergrundmodus-operandi-tritanopia: für Tritanopie optimiertes Theme mit weißem Hintergrundmodus-vivendi-deuteranopia: für Deuteranopie optimiertes Theme mit schwarzem Hintergrundmodus-vivendi: kontrastreiches, gut lesbares Theme mit schwarzem Hintergrundmodus-vivendi-tinted: gut lesbares Theme mit nachthimmelartigem Hintergrundmodus-vivendi-tritanopia: für Tritanopie optimiertes Theme mit schwarzem Hintergrund
- Der Grund, täglich ein noch unveröffentlichtes Emacs zu nutzen, ist, direkt zu sehen, was in den Core einfließt, und zu beobachten, wie mit jeder Veröffentlichung selbst geschriebener Glue Code überflüssig wird
- Als passender Begleittext zu bereits vorhandenen Funktionen lohnt sich auch Even More Batteries Included with Emacs
1 Kommentare
Lobste.rs-Kommentare
Auf die tree-sitter-Änderungen freue ich mich wirklich. Der Einrichtungsprozess fühlte sich für mich immer ziemlich holprig an
Auf eager complete bin ich auch gespannt.
icompleteundfido-modekommen dem, was ich will, ziemlich nahe, sind aber noch nicht so angenehm zu benutzen wie Drittanbieter-Pakete wiecorfuverticousw. nur mit eingebauten Funktionen zu bekommen, und dann auch noch standardmäßig aktiviertMit ein paar Anpassungen und nur dem Aktivieren eingebauter Funktionen ändert sich die Benutzbarkeit schon stark;
bedrockoderemacs-solosind so aufgebautJedes Mal beim Start von Emacs erscheint erneut eine große Meldung über eine fehlende
dylibDie Syntax der Beispiele
(treesit-auto-install-grammar t)und(treesit-enabled-modes t)sieht wie ein Funktionsaufruf aus, tatsächlich sind es aber Optionen, die gesetzt werden müssenIn der nächsten Veröffentlichung gibt es auch kleine Änderungen, die mir gefallen:
minibuffer-nonselected-modeist standardmäßig aktiviert, sodass man besser sieht, ob im Minibuffer unvollendete Arbeit übrig ist, unddiff-modesdiff-delete-other-hunksist zusammen mit dem VC-Verhalten des Diff-Buffers, das in Emacs 29 eingeführt wurde, sehr nützlichwith-work-bufferist ähnlich wiewith-temp-buffer, verwendet aber einen Buffer-Pool wieder. Ich habe das entdeckt, als ich in meiner persönlichen Konfiguration zufällig dieselbe Buffer-Namenskonvention*work*verwendet habeEmacs 31 enthält
lua-mode, sodass man es nicht mehr separat installieren mussIch musste auch ein paar Dinge nachjustieren, damit es wieder genau so funktioniert, wie ich es wollte:
xterm-mouse-modeist standardmäßig aktiviert, also habe ich es explizit deaktiviert, und dasmode-line-Face wird passend zu dunklen Themes geändert, aber ich hatte mich an die alten Standardfarben gewöhnt und es wieder zurückgesetztEmacs 31 warnt, wenn in Quelldateien das
lexical-binding-Cookie fehlt. Wenn es stört, kann man es abschalten, mit dem Befehlelisp-enable-lexical-bindingleicht beheben, und man kannlexical-bindingauch zum globalen Standard machenWenn keine neuen Bugs auftauchen, wird es wie immer wohl ein solides Release
:custom-Liste vonuse-packagekopiertDeshalb fühle ich mich bei
:custometwas unwohl. Es ist umständlicher, wenn man mit Werten experimentieren oder sie teilen willwith-work-bufferder Performance? In der Dokumentation steht nicht, warum man es stattwith-temp-bufferverwenden sollte, sondern nur, dass man vorsichtiger sein musselpanicht gewarnt würden, aber meine eigenen Dateien schonAußerdem stammen 64 meiner 68 Warnungen in Emacs aus generierten Dateien
-autoloads.el. Das sollte wohl in den Generierungswerkzeugen aufelpa/melpa-Seite behoben werdenIch habe mir endlich bearbeitbare xref gewünscht, und das scheint mein Leben deutlich einfacher zu machen
Es gibt viele großartige Änderungen, die erstaunlich viele Dinge berühren, mit denen ich täglich zu tun habe
Als Nvim den Standard von Vim-RegEx auf treesitter umgestellt hat, ist meine Schreibumgebung kaputtgegangen
Für treesitter brauchte es etwas Konfiguration, um HTML-Kommentare in Markdown zu parsen, und selbst nachdem ich alles zusammengesetzt hatte, funktionierte es nicht
Am Ende habe ich treesitter deaktiviert und das Problem so gelöst
Bei grundlegender Infrastruktur wie einem Editor bin ich sehr konservativ. Änderungen am Editor machen meistens etwas kaputt, das jahrelang problemlos funktioniert hat