1 puntos por GN⁺ 13 시간 전 | 1 comentarios | Compartir por WhatsApp
  • Emacs 31 todavía no se lanza oficialmente, pero tanto en la rama emacs-31 como en master ya se están acumulando cambios perceptibles, y varias configuraciones se están moviendo hacia una dirección en la que se resuelven solo con el core de Emacs, sin paquetes externos
  • Con la llegada del cambio automático a Tree-sitter y la instalación de gramáticas, baja la carga de tener que gestionar manualmente los major modes y las fuentes de gramática
  • markdown-ts-mode, el renderizado de documentación de Eglot, eldoc-help-at-pt, la finalización eager y xref-edit-mode refuerzan el flujo de edición, navegación y consulta de documentación con foco en funciones integradas
  • Opciones pequeñas como la side window de Speedbar, el autoocultado de VC, las condiciones de logs de ERC, kill-region-dwim, ielm-history-file-name y native-comp-async-on-battery-power reducen fricciones repetitivas
  • Los nombres de funciones y valores por defecto de Emacs 31 todavía pueden cambiar, y markdown-ts-mode junto con el renderizado de documentación de Eglot que lo usa están marcados como funciones experimentales, por lo que hay que activarlos explícitamente

Premisas de esta vista previa de Emacs 31

  • Emacs 31 todavía no se ha lanzado, y el entorno de referencia es una configuración usada hacia mediados de 2026 compilando las ramas emacs-31 y master
  • Los puntos presentados son cambios incorporados en la configuración diaria real, y en su mayoría ya entraron al core de Emacs o están muy cerca de hacerlo
  • Los nombres de funciones y los valores por defecto pueden cambiar hasta la versión final
  • Los ejemplos de configuración se pueden ver en el init.el de Emacs Solo bajo el comentario ; EMACS-31

Menos configuración de Tree-sitter

  • En Emacs 31, dos opciones simplifican el cambio a modos basados en Tree-sitter y el flujo de instalación de gramáticas
    • treesit-enabled-modes t
    • treesit-auto-install-grammar t
  • Si treesit-enabled-modes se deja en t, los major modes que tengan variante Tree-sitter pasarán a usar esa variante
  • treesit-auto-install-grammar ya no solo lanza un error cuando falta una gramática, sino que propone que Emacs la descargue y la compile
  • Como las fuentes de gramática de lenguajes como TypeScript, TSX, Rust, TOML, YAML y Dockerfile vienen dentro de los modos, se reduce la necesidad de poner manualmente URLs y rutas en treesit-language-source-alist
  • Si se usa un directorio compartido de Emacs entre varias arquitecturas, hay que tener cuidado
    • Las gramáticas instaladas automáticamente no se separan por arquitectura
    • Los .so de x86_64 y arm64 quedan bajo el mismo nombre, así que un binario compilado en una máquina puede no cargarse en otra

markdown-ts-mode integrado

  • Emacs 31 incluye el experimental markdown-ts-mode
  • Este modo nació a partir de una propuesta enviada a emacs-devel a inicios de 2025, y después Stéphane Marks se sumó como coautor para seguir mejorándolo
  • Trata Markdown no solo como algo para resaltar sintaxis, sino como un entorno de edición más cómodo para escribir y leer
    • Ofrece navegación por encabezados, plegado y movimiento entre elementos estructurales, algo familiar para quienes usan Org
    • Los fenced code blocks no se muestran como texto monoespaciado plano, sino que reciben font-locking con el major mode real del lenguaje correspondiente
    • Los bloques de Emacs Lisp y otros modos integrados también pueden recibir resaltado de sintaxis real
    • Los comandos para editar bloques de código funcionan en buena medida, aunque la finalización dentro de los bloques todavía se siente algo verde
    • Los enlaces a imágenes se renderizan en línea dentro del buffer
  • Todavía no está conectado a auto-mode-alist, así que no toma archivos .md automáticamente
    • Se puede cargar la librería con M-x load-library RET markdown-ts-mode y activarlo en el buffer
    • También se puede agregar manualmente a auto-mode-alist
  • El feedback se puede enviar a la lista de bugs con M-x report-emacs-bug
  • Hay capturas adicionales en el demo de markdown-ts-mode-lab

Mejoras en Eglot, Eldoc y completion

  • En Emacs 31, Eglot puede renderizar documentación LSP con markdown-ts-view-mode
    • eglot-documentation-renderer 'markdown-ts-view-mode
    • Permite ver hover docs formateados sin paquetes externos
    • Como depende de markdown-ts-mode, esta función también es experimental
  • Con eglot-code-action-indications se pueden apagar las nuevas pistas inline de code actions
    • En algunos language servers estas pistas pueden sentirse demasiado ruidosas
  • eglot-events-buffer-size está siendo reemplazado por eglot-events-buffer-config
  • eldoc-help-at-pt t muestra ayuda del elemento bajo el cursor sin invocarla por separado
    • Si se usa junto con eldoc-echo-area-prefer-doc-buffer, aumenta la guía al explorar código desconocido
  • Las nuevas opciones de completion actualizan la UI de forma más activa mientras se escribe
    • completion-eager-update t
    • completion-eager-display 'auto
    • minibuffer-visible-completions 'up-down
  • completion-eager-update y completion-eager-display actualizan la UI de completion en función de la entrada incluso antes de que el usuario lo pida
  • Si minibuffer-visible-completions se configura como 'up-down, se puede moverse por los candidatos visibles con las flechas
  • icomplete incluye el parche de bug#75784, que añade comportamiento vertical dentro del buffer y un indicador de prefijo
    • icomplete-vertical-in-buffer-adjust-list
    • icomplete-vertical-render-prefix-indicator

Distribución de ventanas y Speedbar

  • Emacs 31 añade comandos para cambiar la disposición de ventanas sin tener que volver a dividirlas o cerrarlas manualmente
    • window-layout-transpose
    • window-layout-rotate-clockwise
    • window-layout-flip-leftright
    • window-layout-flip-topdown
  • transpose cambia entre disposición horizontal y vertical, rotate gira todo el layout, y los comandos flip lo espejan de izquierda a derecha o de arriba abajo
  • Son útiles cuando se quiere cambiar solo la posición de la ventana del editor en una configuración de 3 ventanas manteniendo los buffers
  • En Emacs 31, Speedbar puede ubicarse en una side window en lugar de abrir un frame separado
    • speedbar-window-default-width
    • speedbar-window-max-width
    • speedbar-window
  • speedbar-window acopla Speedbar al costado como si fuera un árbol de archivos moderno
  • En entornos tipo tiling o en laptops de una sola pantalla, este enfoque con side window encaja mejor que el frame flotante tradicional

VC y xref editable

  • VC incorpora opciones que reducen fricción en el flujo cotidiano de control de versiones
    • 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 oculta automáticamente los archivos al día al refrescar el buffer de vc-dir
    • Así se puede borrar el hack de teclas que antes llamaba a vc-dir-hide-up-to-date después de vc-dir-refresh
  • vc-allow-rewriting-published-history encaja con flujos donde se reescribe intencionalmente historial ya publicado, como en Jujutsu o force-push de feature branches
  • Emacs 31 incorpora un xref buffer editable
    • Antes, el buffer de xref solo tenía xref-query-replace-in-results en r, y estaba limitado a reemplazos basados en expresiones regulares
    • A diferencia de wdired-mode en Dired o grep-edit-mode en buffers grep, xref no tenía un flujo para editar directamente el buffer de resultados
  • La propuesta inicial consistía en exportar resultados de xref con xref-export-to-grep a un buffer grep-mode con formato file:line:content, y editar desde ahí
  • Dmitry Gutov, mantenedor de xref, propuso en lugar de eso una edición inline del buffer xref en vez de desviar la UI hacia un buffer grep, y así nació xref-edit-mode
  • xref-edit-mode evita saltos a buffers extra y funciona más rápido incluso en buffers xref grandes
  • El flujo de uso es buscar con C-x p g, iniciar modo de edición con e en el buffer *xref*, y luego confirmar los cambios con C-c C-c
  • La discusión relacionada está publicada en bug#80616

ERC y pequeñas mejoras de calidad de vida

  • ERC puede insertar logs anteriores solo al abrir un target buffer nuevo con erc-log-insert-log-on-open 'erc-log-new-target-buffer-p
  • En Emacs 31, el módulo scrolltobottom de ERC ya no depende de erc-fill-wrap, así que se pueden quitar configuraciones condicionales para versiones anteriores
  • Otros valores pequeños también mejoran la usabilidad
    • delete-pair-push-mark t: después de delete-pair, hace push del mark para poder seleccionar el interior con C-x C-x
    • ibuffer-human-readable-size t: muestra KB/MB en vez de bytes crudos
    • ielm-history-file-name: conserva el historial de entrada de IELM tras reiniciar
    • kill-region-dwim 'emacs-word: si no hay una región activa, C-w mata la palabra siguiente en lugar de dar error
    • native-comp-async-on-battery-power nil: detiene la compilación nativa en segundo plano mientras se usa batería
    • view-lossage-auto-refresh t: C-h l actualiza en tiempo real las teclas presionadas recientemente
    • display-fill-column-indicator-warning nil
    • dired-hide-details-hide-absolute-location t: oculta la ruta absoluta del directorio en dired-hide-details-mode
    • world-clock-sort-order "%FT%T": ajusta el ordenamiento del reloj mundial
    • zone-all-frames t
    • zone-all-windows-in-frame t
    • uniquify-after-kill-buffer-flag t: el nombre cambió respecto de la variante anterior con -p
  • kill-region-dwim evita el error “the mark is not active” al usar C-w
  • view-lossage-auto-refresh es útil para mostrar en tiempo real las teclas durante una clase o al compartir pantalla
  • native-comp-async-on-battery-power nil reduce situaciones en las que el ventilador se enciende por compilación en segundo plano mientras se trabaja sin conexión eléctrica
  • tty-tip-mode ofrece tooltips incluso en Emacs ejecutado con -nw

term, temas Modus y por qué usar master

  • Emacs 31 corrige problemas en term y ansi-term donde se tragaban líneas o la pantalla se corrompía
    • Programas como htop, nethack o aplicaciones basadas en curses que usan direccionamiento de cursor y redraw de pantalla completa ahora se redibujan correctamente dentro del terminal de Emacs
    • Esto elimina una de las razones para abrir un emulador de terminal externo
  • Emacs incluye los temas Modus 5 de Protesilaos
    • modus-operandi-deuteranopia: tema optimizado para deuteranopia con fondo blanco
    • modus-operandi: tema de alta legibilidad con fondo blanco
    • modus-operandi-tinted: tema de alta legibilidad con fondo ocre claro
    • modus-operandi-tritanopia: tema optimizado para tritanopia con fondo blanco
    • modus-vivendi-deuteranopia: tema optimizado para deuteranopia con fondo negro
    • modus-vivendi: tema de alta legibilidad con fondo negro
    • modus-vivendi-tinted: tema de alta legibilidad con fondo de cielo nocturno
    • modus-vivendi-tritanopia: tema optimizado para tritanopia con fondo negro
  • La razón para usar a diario una versión no lanzada de Emacs es ver de primera mano qué entra al core y cómo se reduce con cada release la cantidad de glue code hecho a mano
  • Como texto complementario sobre funciones que ya vienen incluidas, también se puede leer Even More Batteries Included with Emacs

1 comentarios

 
Comentarios en Lobste.rs
  • Tengo muchas ganas de ver los cambios en tree-sitter. Siempre me ha parecido que el proceso de configuración es bastante torpe
    También me da curiosidad eager complete. icomplete y fido-mode se acercan bastante a lo que quiero, pero todavía no son tan cómodos de usar como paquetes de terceros como corfu

    • Ojalá algún día podamos tener una experiencia más cercana a vertico y similares solo con funciones integradas, y además activadas por defecto
      Con unos cuantos ajustes y activando solo funciones integradas, la usabilidad cambia muchísimo; bedrock y emacs-solo están armados de esa forma
    • Uso Emacs 32 a diario, y no diría que treesit simplemente funciona
      Cada vez que inicio Emacs me sale un mensaje enorme sobre un dylib faltante
  • La sintaxis de ejemplo (treesit-auto-install-grammar t) y (treesit-enabled-modes t) parece una llamada a función, pero en realidad son opciones que hay que configurar
    También hay pequeños cambios en la próxima versión que me gustan: minibuffer-nonselected-mode viene activado por defecto, así es más fácil ver si quedaron tareas incompletas en el minibúfer, y diff-mode con diff-delete-other-hunks es muy útil junto con el comportamiento de VC en buffers diff que se introdujo en Emacs 29
    with-work-buffer es parecido a with-temp-buffer, pero reutiliza un pool de buffers. Lo descubrí por casualidad en mi configuración personal, donde uso la misma convención de nombre de buffer *work*
    Emacs 31 incluye lua-mode, así que ya no hace falta instalarlo aparte
    También tuve que hacer algunos ajustes para que volviera a funcionar exactamente como quiero: xterm-mouse-mode viene activado por defecto, así que lo desactivé explícitamente, y la face de mode-line cambia para adaptarse a temas oscuros, pero como ya estaba acostumbrado a los colores predeterminados anteriores, la revertí
    Emacs 31 advierte si un archivo fuente no tiene la cookie lexical-binding. Si molesta, se puede desactivar; también se puede corregir fácilmente con el comando elisp-enable-lexical-binding, e incluso es posible hacer de lexical-binding el valor predeterminado global
    Si no aparecen bugs nuevos, como siempre, parece que será una release sólida

    • Este ejemplo probablemente fue copiado de una lista :custom de use-package
      Por eso me genera sensaciones encontradas :custom. Se vuelve más incómodo al experimentar con valores o compartirlos
    • ¿with-work-buffer es por rendimiento? La documentación no explica por qué usarlo en lugar de with-temp-buffer; solo dice que hay que tener más cuidado
    • Me gustaría saber cómo desactivar esa advertencia. Idealmente, estaría bien que no advirtiera sobre archivos dentro de elpa, sino solo sobre mis propios archivos
      Además, de las 68 advertencias en mi Emacs, 64 vienen de archivos generados -autoloads.el. Eso parece algo que deberían corregir las herramientas de generación del lado de elpa/melpa
  • Por fin estaba esperando xref editable, y esto parece que me va a facilitar mucho la vida
    Hay muchos cambios excelentes que tocan sorprendentemente muchas de las cosas con las que lidio todos los días

  • Nvim cambió el valor predeterminado de expresiones regulares de vim a treesitter, y eso rompió mi entorno de escritura
    treesitter necesitaba algo de configuración para parsear comentarios HTML dentro de Markdown, y aun después de armar todo, no funcionó
    Al final lo resolví desactivando treesitter
    Soy muy conservador con la infraestructura base como los editores. Los cambios en el editor casi siempre rompen algo que había funcionado sin problemas durante años

    • Por suerte, Emacs no está cambiando el valor predeterminado a treesitter; todo sigue siendo activación opcional