Emacs 31 ещё не вышел, но автор уже давно собирает его из веток emacs-31 и master и использует каждый день. Главное, что его радует — Tree-sitter наконец-то работает «из коробки». Раньше приходилось вручную указывать пути к грамматикам и компилировать их, а теперь treesit-enabled-modes и treesit-auto-install-grammar делают всё сами. Грамматики для TypeScript, Rust, TOML, YAML и Dockerfile уже встроены в соответствующие режимы. Это значит меньше конфигов.
В Emacs 31 появился экспериментальный markdown-ts-mode. Автор сам его начал и дорабатывал с соавтором Stéphane Marks. Режим использует навигацию, знакомую пользователям Org — можно сворачивать секции, перемещаться по заголовкам. Блоки кода подсвечиваются настоящим мажор-режимом для каждого языка, даже если у того нет tree-sitter. Картинки рендерятся прямо в буфере. Пока режим не включён по умолчанию для .md — его надо загружать вручную через M-x load-library RET markdown-ts-mode или добавлять в auto-mode-alist.
Eglot тоже обновился: markdown-ts-view-mode показывает LSP-документацию отформатированной, а не простым текстом. Это пока тоже экспериментально. Ещё eglot-events-buffer-size заменяют на eglot-events-buffer-config.
Появилась настройка, которая заставляет eldoc показывать справку под курсором без лишних вызовов. Автодополнение стало шустрее: completion-eager-update и completion-eager-display обновляют список кандидатов на лету. minibuffer-visible-completions с параметром 'up-down позволяет перемещаться по кандидатам стрелками. В icomplete добавили вертикальное отображение и префиксы — это патч от автора из bug#75784.
Новые команды для окон — transpose, rotate, flip — переставляют панели местами без потери буферов. Speedbar теперь можно прикрепить к боковой панели через speedbar-window, а не держать в отдельном фрейме.
В VC — vc-dir-hide-up-to-date-on-revert автоматически скрывает обновлённые файлы при обновлении. vc-allow-rewriting-published-history полезен для workflows с Jujutsu и force-push.
Главная история — редактируемые xref-буферы. Автор хотел экспорт результатов поиска в grep, но Дмитрий Гутов предложил лучшее решение: xref-edit-mode. Теперь в буфере с результатами поиска (*xref*) можно нажать e, править строки и подтвердить C-c C-c. Всё работает прямо на месте, без переключения.
В ERC — erc-log-insert-log-on-open подгружает историю только для свежих буферов. scrolltobottom больше не зависит от erc-fill-wrap.
Множество мелочей: kill-region-dwim с C-w убивает слово назад, если нет выделения. view-lossage-auto-refresh превращает C-h l в лайв-фид нажатий. ielm-history-file-name сохраняет историю IELM между сессиями. native-comp-async-on-battery-power nil отключает фоновую компиляцию на батарейках. tty-tip-mode добавляет тултипы в терминале.
Исправлен старый баг в term и ansi-term — они больше не глотают строки. htop и nethack теперь работают корректно.
И наконец — в Emacs 31 вошли новые темы Modus 5 от Protesilaos: варианты для дейтеранопии и тританопии, с белым, чёрным и tinted фоном.