1 Punkte von GN⁺ 13 시간 전 | 1 Kommentare | Auf WhatsApp teilen
  • Emacs 31 ist zwar noch nicht offiziell veröffentlicht, aber im Branch emacs-31 und auf master haben 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 und xref-edit-mode stä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-name und native-comp-async-on-battery-power reduzieren wiederkehrende Reibungspunkte
  • Funktionsnamen und Standardwerte in Emacs 31 können sich noch ändern, und markdown-ts-mode sowie 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-31 und master selbst 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.el von Emacs Solo anhand des Kommentars ; EMACS-31 nachsehen

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 t
    • treesit-auto-install-grammar t
  • Wenn treesit-enabled-modes auf t gesetzt ist, werden Major Modes, für die es Tree-sitter-Varianten gibt, auf diese umgestellt
  • treesit-auto-install-grammar meldet 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-alist eingetragen 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ür x86_64 und arm64 liegen 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-alist angebunden und übernimmt daher .md-Dateien nicht automatisch
    • Nach dem Laden der Bibliothek mit M-x load-library RET markdown-ts-mode kann er in einem Buffer aktiviert werden
    • Alternativ lässt er sich manuell zu auto-mode-alist hinzufügen
  • Feedback kann über M-x report-emacs-bug an 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-mode rendern
    • eglot-documentation-renderer 'markdown-ts-view-mode
    • Formatierte Hover-Dokumentation lässt sich damit ohne externe Pakete anzeigen
    • Da die Funktion auf markdown-ts-mode basiert, ist sie ebenfalls experimentell
  • Mit eglot-code-action-indications lassen 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-size wird schrittweise durch eglot-events-buffer-config ersetzt
  • eldoc-help-at-pt t zeigt Hilfe zum Element unter dem Cursor an, ohne dass ein separater Aufruf nötig ist
    • Zusammen mit eldoc-echo-area-prefer-doc-buffer erhält man beim Erkunden unbekannten Codes mehr Führung
  • Neue completion-Einstellungen aktualisieren die UI beim Tippen aktiver
    • completion-eager-update t
    • completion-eager-display 'auto
    • minibuffer-visible-completions 'up-down
  • completion-eager-update und completion-eager-display aktualisieren die Completion-UI passend zur Eingabe, noch bevor die Nutzenden sie explizit anfordern
  • Wenn minibuffer-visible-completions auf 'up-down gesetzt 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-list
    • icomplete-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-transpose
    • window-layout-rotate-clockwise
    • window-layout-flip-leftright
    • window-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-width
    • speedbar-window-max-width
    • speedbar-window
  • speedbar-window dockt 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 t
    • vc-allow-rewriting-published-history t
    • vc-dir-auto-hide-up-to-date 'revert
  • vc-dir-auto-hide-up-to-date blendet in vc-dir beim Aktualisieren automatisch Dateien aus, die bereits auf dem neuesten Stand sind
    • Tastatur-Hacks, die nach vc-dir-refresh noch vc-dir-hide-up-to-date aufrufen, können dadurch entfernt werden
  • vc-allow-rewriting-published-history passt 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-results auf r, und das war auf regex-basierte Ersetzungen beschränkt
    • Ein direkter Workflow zum Bearbeiten des Ergebnis-Buffers wie in Direds wdired-mode oder dem grep-edit-mode für grep-Buffer fehlte bei xref
  • Der erste Vorschlag bestand darin, xref-Ergebnisse über xref-export-to-grep in einen grep-mode-Buffer im Format file:line:content zu 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-mode vermeidet 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 mit e den Bearbeitungsmodus starten und die Änderungen anschließend mit C-c C-c bestä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-p frü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 von erc-fill-wrap ab, sodass bedingte Konfiguration für ältere Versionen entfernt werden kann
  • Auch kleine Konfigurationswerte tragen zur besseren Nutzbarkeit bei
    • delete-pair-push-mark t: legt nach delete-pair die Markierung ab, sodass mit C-x C-x der innere Bereich ausgewählt werden kann
    • ibuffer-human-readable-size t: zeigt KB/MB statt roher Byte-Werte an
    • ielm-history-file-name: behält die Eingabehistorie von IELM auch nach einem Neustart
    • kill-region-dwim 'emacs-word: lässt C-w ohne aktive Region das Wort hinter dem Cursor killen statt einen Fehler auszugeben
    • native-comp-async-on-battery-power nil: stoppt die Hintergrund-Native-Compilation im Akkubetrieb
    • view-lossage-auto-refresh t: aktualisiert C-h l in Echtzeit mit den zuletzt gedrückten Tasten
    • display-fill-column-indicator-warning nil
    • dired-hide-details-hide-absolute-location t: verbirgt in dired-hide-details-mode absolute Verzeichnispfade
    • world-clock-sort-order "%FT%T": passt die Sortierung der Weltuhr an
    • zone-all-frames t
    • zone-all-windows-in-frame t
    • uniquify-after-kill-buffer-flag t: umbenannt gegenüber der früheren -p-Variante
  • kill-region-dwim vermeidet bei C-w den Fehler „the mark is not active“
  • view-lossage-auto-refresh ist nützlich, um bei Screen-Sharing oder Schulungen Tasteneingaben live anzuzeigen
  • native-comp-async-on-battery-power nil reduziert Situationen, in denen unterwegs ohne Netzteil durch Hintergrundkompilierung die Lüfter anlaufen
  • tty-tip-mode bringt Tooltips auch in Emacs, das mit -nw läuft

term, Modus-Themes und warum master

  • Emacs 31 behebt in term und ansi-term Probleme, bei denen Zeilen verschluckt wurden oder die Anzeige kaputtging
    • Programme wie htop, nethack und 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
  • Emacs enthält die Modus-5-Themes von Protesilaos
    • modus-operandi-deuteranopia: für Deuteranopie optimiertes Theme mit weißem Hintergrund
    • modus-operandi: kontrastreiches, gut lesbares Theme mit weißem Hintergrund
    • modus-operandi-tinted: gut lesbares Theme mit hellem ockerfarbenem Hintergrund
    • modus-operandi-tritanopia: für Tritanopie optimiertes Theme mit weißem Hintergrund
    • modus-vivendi-deuteranopia: für Deuteranopie optimiertes Theme mit schwarzem Hintergrund
    • modus-vivendi: kontrastreiches, gut lesbares Theme mit schwarzem Hintergrund
    • modus-vivendi-tinted: gut lesbares Theme mit nachthimmelartigem Hintergrund
    • modus-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. icomplete und fido-mode kommen dem, was ich will, ziemlich nahe, sind aber noch nicht so angenehm zu benutzen wie Drittanbieter-Pakete wie corfu

    • Irgendwann wäre es schön, eine Erfahrung näher an vertico usw. nur mit eingebauten Funktionen zu bekommen, und dann auch noch standardmäßig aktiviert
      Mit ein paar Anpassungen und nur dem Aktivieren eingebauter Funktionen ändert sich die Benutzbarkeit schon stark; bedrock oder emacs-solo sind so aufgebaut
    • Ich nutze Emacs 32 täglich, aber zu sagen, dass treesit einfach funktioniert, wäre schwer
      Jedes Mal beim Start von Emacs erscheint erneut eine große Meldung über eine fehlende dylib
  • Die 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üssen
    In der nächsten Veröffentlichung gibt es auch kleine Änderungen, die mir gefallen: minibuffer-nonselected-mode ist standardmäßig aktiviert, sodass man besser sieht, ob im Minibuffer unvollendete Arbeit übrig ist, und diff-modes diff-delete-other-hunks ist zusammen mit dem VC-Verhalten des Diff-Buffers, das in Emacs 29 eingeführt wurde, sehr nützlich
    with-work-buffer ist ähnlich wie with-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 habe
    Emacs 31 enthält lua-mode, sodass man es nicht mehr separat installieren muss
    Ich musste auch ein paar Dinge nachjustieren, damit es wieder genau so funktioniert, wie ich es wollte: xterm-mouse-mode ist standardmäßig aktiviert, also habe ich es explizit deaktiviert, und das mode-line-Face wird passend zu dunklen Themes geändert, aber ich hatte mich an die alten Standardfarben gewöhnt und es wieder zurückgesetzt
    Emacs 31 warnt, wenn in Quelldateien das lexical-binding-Cookie fehlt. Wenn es stört, kann man es abschalten, mit dem Befehl elisp-enable-lexical-binding leicht beheben, und man kann lexical-binding auch zum globalen Standard machen
    Wenn keine neuen Bugs auftauchen, wird es wie immer wohl ein solides Release

    • Das Beispiel wurde vermutlich aus der :custom-Liste von use-package kopiert
      Deshalb fühle ich mich bei :custom etwas unwohl. Es ist umständlicher, wenn man mit Werten experimentieren oder sie teilen will
    • Dient with-work-buffer der Performance? In der Dokumentation steht nicht, warum man es statt with-temp-buffer verwenden sollte, sondern nur, dass man vorsichtiger sein muss
    • Ich würde gern wissen, wie man diese Warnung abschaltet. Ideal wäre, wenn Dateien in elpa nicht gewarnt würden, aber meine eigenen Dateien schon
      Außerdem stammen 64 meiner 68 Warnungen in Emacs aus generierten Dateien -autoloads.el. Das sollte wohl in den Generierungswerkzeugen auf elpa/melpa-Seite behoben werden
  • Ich 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

    • Zum Glück stellt Emacs den Standard nicht auf treesitter um; es bleibt weiterhin alles optional aktivierbar