메뉴
HN
Hacker News 41일 전

이미 일상에서 쓰는 Emacs 31의 주요 변화들

IMP
6/10
핵심 요약

아직 공식 출시되지 않은 Emacs 31에 적용될 핵심 기능과 개선사항들을 조명하는 글입니다. 작성자가 본인의 환경에 직접 빌드하여 실사용 중인 기능들을 위주로 소개합니다. 특히 복잡한 설정 없이 구문 분석기가 자동으로 설치되는 Tree-sitter 개선 사항과 기본 내장 마크다운 모드가 핵심적으로 다뤄집니다.

번역된 본문

원문 제목: Emacs 31 Is Around the Corner: The Changes I'm Already Daily Driving 출처: hackernews

Emacs 31이 코앞으로 다가왔다: 내가 이미 일상적으로 사용하고 있는 변화들 - Rahul M. Juliato (2026년 6월 18일) #emacs #emacs-31 #config

Karthik Chikmagalur는 최근 훌륭한 "Emacs에 기본 포함된 더 많은 기능들(Even More Batteries Included with Emacs)" 게시물을 또 하나 게시했습니다. 오늘날 Emacs에 이미 탑재되어 있는 잘 알려지지 않은 기능들을 깊이 있게 파고드는 내용이었죠. 저는 그 글의 거울상(mirror image) 같은 글을 쓰고 싶었습니다. 그의 글이 상자에 이미 들어있는 배터리(기본 기능)를 다룬다면, 제 글은 Emacs 31에 도착할 배터리들을 다룰 것입니다.

Emacs 31은 아직 정식 출시되지 않았지만, 저는 수개월 전부터 emacs-31 브랜치와 master 브랜치를 직접 빌드해서 매일 일상적으로 사용하고 있습니다. 새롭고 유용한 기능이 추가될 때마다, 외부 패키지를 쓰지 않는 제 개인 설정인 'Emacs Solo'에 해당 기능을 접목하고 있습니다. 그리고 정식 출시 후에 다시 확인할 수 있도록 ; EMACS-31이라는 작은 주석을 달아두고 있죠. 이 글은 그 흔적들을 따라가는 과정입니다. 아래에 적힌 모든 변화들은 현재 제 설정 파일에서 실제로 사용하고 있는 것들이며, 이 기능이 무엇을 하고 왜 사용하는지에 대한 설명이 함께 담겨 있습니다. 외부 패키지는 전혀 필요하지 않습니다. 모두 마스터 브랜치에 이미 들어갔거나 곧 합쳐질 기능들입니다.

한 가지 주의할 점을 말씀드리자면, Emacs 31은 아직 개발 중(실제로는 사전 릴리스 단계)이므로 정식 출시 전에 기능 이름이나 기본값이 변경될 수 있습니다. 아래 내용은 2026년 중반 현재 제가 실행하고 있는 환경을 기준으로 합니다. 아직 emacs-31 브랜치나 master에서 직접 빌드해 사용하고 계시지 않다면, 이 글을 곧 다가올 기능에 대한 미리보기로 생각해주시면 됩니다.

그냥 작동하는 Tree-sitter 제가 가장 기뻐하는 변화 딱 하나만 꼽아야 한다면 바로 이것입니다. 수년간 *-ts-mode를 설정한다는 것은 수동으로 treesit-language-source-alist를 채우고, treesit-install-language-grammar를 호출한 뒤, 문법을 컴파일할 툴체인이 제대로 설정되어 있기를 기도하는 것을 의미했습니다. Emacs 31에서는 이런 성가신 의식들이 많이 사라집니다:

( treesit-auto-install-grammar t ) ; EMACS-31 ( treesit-enabled-modes t ) ; EMACS-31

treesit-enabled-modes를 t로 설정하면 tree-sitter 변형이 있는 모든 메이저 모드를 자동으로 해당 모드로 전환합니다. 또한 treesit-auto-install-grammar는 문법이 없을 때 에러를 뱉는 대신, Emacs가 사용자에게 문법을 가져와 빌드할지 제안하도록 만듭니다. 이는 기존에 treesit-auto 패키지를 썼을 때의 경험과 동일하지만, 이제는 코어 자체에서 이 작업을 수행합니다.

이로 인한 파급 효과는 제 설정 파일 곳곳에 나타납니다. 저는 예전에 각 언어의 문법이 어디에 있는지 Emacs에게 알려주기 위해 다음과 같은 줄을 항상 유지해야 했습니다:

( add-to-list 'treesit-language-source-alist '( typescript "https://github.com/tree-sitter/tree-sitter-typescript" "master" "typescript/src" ) )

Emacs 31에서는 TypeScript, TSX, Rust, TOML, YAML, Dockerfile 같은 언어에 대한 문법 소스가 모드 내부 자체에 내장되어 있습니다. 그래서 31이 출시되면 삭제할 수 있는 블록마다 ;; EMACS-31 this is now defined on mode code(이제 모드 코드에 정의됨)라는 주석을 남겨두는 식으로 처리했습니다. 동일한 작업을 한다면 설정이 줄어드는 것은 언제나 환영할 일입니다.

Emacs에는 훨씬 더 많은 tree-sitter 개선 사항이 추가될 예정입니다. Yuan Fu를 비롯한 수많은 개발자들이 끊임없이 노력하여 여러 영역에 걸쳐 tree-sitter 경험을 지속적으로 개선해 왔습니다. 더 나은 언어 지원부터 사용성 및 성능 향상까지, Emacs의 tree-sitter는 놀라운 속도로 계속 발전하고 있습니다.

기본 내장 markdown-ts-mode (실험적 기능) Emacs 31에는 markdown-ts-mode가 기본으로 탑재되는데, 이는 제 마음에 깊이 와닿는 기능입니다. 제가 바로 이것을 시작했기 때문입니다. 이 모드는 2025년 초에 제가 emacs-devel 메일링 리스트에 보낸 제안에서 시작되었으며, 아이디어와 첫 번째 코드 버전은 모두 제 것이었습니다.

하지만 이것이 혼자서 이뤄낸 결과라고 생각하게 두는 것은 이 모드에 대한 잘못된 평가가 될 것입니다. Stéphane Marks가 조금 뒤에 합류해 팔을 걷어붙였고, 그 이후로 이 모드의 공동 저자가 되었습니다. 오늘날 이 모드를 멋지게 만드는 에너지의 상당 부분은 그에게서 나옵니다. 그는 패치 한두 개를 보내고 사라진 것이 아니라, 제가 스케치했던 것을 훨씬 뛰어넘도록 모드를 발전시켰으며, 단순히 '작동하는' 것을 '사용하는 것이 즐거운' 수준으로 만드는 디테일에 땀을 흘렸습니다. 제가 자랑하려고 하는 디테일의 상당 부분은 그의 것입니다. 이제 이 모드는 우리의 것이 되었고, 그 덕분에 더욱 훌륭해졌습니다. 메일링 리스트의 메시지 하나가 핵심 코드로 완성되는 여정을 보고, 그 과정에서 훌륭한 협업자를 만나는 것은 Emacs 커뮤니티에 머무는 가장 보람 있는 일 중 하나입니다.

( use-package markdown-

원문 보기
원문 보기 (영어)
Emacs 31 Is Around the Corner: The Changes I'm Already Daily Driving Rahul M. Juliato Rahul M. Juliato June 18, 2026 # emacs # emacs-31 # config Karthik Chikmagalur recently published another of his excellent "Even More Batteries Included with Emacs" posts, digging into lesser-known features that already ship with Emacs today. I wanted to write its mirror image. His post covers the batteries already in the box. Mine covers the ones arriving in Emacs 31. Emacs 31 isn't out yet, but I've been building it from both emacs-31 branch and master and daily driving it for months. Every time something new and useful lands, I fold it into Emacs Solo , my no-external-packages config, and mark it with a small ; EMACS-31 comment so I remember to revisit it once the release is official. This post walks those breadcrumbs. Every change below is one I'm touching in my config right now, with a note on what it does and why I keep it. None of it requires a package. It's all either on master already or close behind. One disclaimer: Emacs 31 is still in development (actually in pre-release phase), so names and defaults can shift before final release. Everything below is what I'm running as of mid-2026. If you're not building from emacs-31 branch or master , treat this as a preview of what's coming. Tree-sitter that just works If I had to pick the single change I'm happiest about, it's this one. For years, getting a *-ts-mode going meant manually populating treesit-language-source-alist , calling treesit-install-language-grammar , and praying your toolchain was set up to compile the grammar. In Emacs 31 a lot of that ceremony goes away: ( treesit-auto-install-grammar t ) ; EMACS-31 ( treesit-enabled-modes t ) ; EMACS-31 treesit-enabled-modes set to t switches the major modes that have a tree-sitter variant over to it, and treesit-auto-install-grammar makes Emacs offer to fetch and build the grammar when it's missing instead of erroring out. This is the treesit-auto package experience, except now the core does the work. The knock-on effect shows up all over my config. I used to keep lines like these around to teach Emacs where each grammar lives: ( add-to-list 'treesit-language-source-alist '( typescript "https://github.com/tree-sitter/tree-sitter-typescript" "master" "typescript/src" ) ) In Emacs 31 the grammar sources for languages like TypeScript, TSX, Rust, TOML, YAML and Dockerfile live inside the modes themselves, so I've got a trail of ;; EMACS-31 this is now defined on mode code comments marking every block I get to delete once 31 ships. I'll take less config that does the same job any day. There are many more tree-sitter improvements coming to Emacs. The developers have been working tirelessly on it, Yuan Fu, along with many others, have been continuously improving the tree-sitter experience across multiple areas. From better language support to usability and performance enhancements, tree-sitter in Emacs continues to evolve at a remarkable pace. A built-in markdown-ts-mode (experimental) Emacs 31 ships a markdown-ts-mode in the box, and this one is close to my heart. I started it. It grew out of a proposal I sent to emacs-devel back in early 2025, where the idea and the first version of the code were mine. I'd be doing the mode a disservice if I let you think it's a solo effort. Stéphane Marks came along a bit later, rolled up his sleeves, and has since become a co-author of the mode. He's the energy behind much of what makes it nice to use today. He didn't send a patch or two and move on; he stayed, pushing the mode well past what I'd sketched out and sweating the details that turn "it works" into "it's a pleasure." Much of the polish I'm about to brag about is his. The mode is ours now, and it's better for it. Watching an idea make the round trip from a mailing-list message to core code, and picking up a great collaborator on the way, is one of the most rewarding things about hanging around the Emacs community. ( use-package markdown-ts-mode :ensure nil :defer t ) It gives you more than colors, and these are the parts I want to show off: ✔️ Org users will feel at home. The keybindings and editing feel stay close to Org: navigating headings, folding sections, moving between structural elements. If your fingers know Org, you won't have to relearn Markdown. ✔️ Live, colored code blocks, even for non-tree-sitter languages. This is my favorite trick. A fenced code block gets fontified using the real major mode for that language, not dumped as flat monospace. It reaches Emacs' own internal modes too, so an ```elisp block lights up with true Emacs Lisp font-locking, and the other built-in modes do the same. You get proper syntax highlighting inside your code samples with no extra setup. ✔️ Inline image viewing. Image links render in the buffer, so a Markdown doc with screenshots or diagrams reads like a document, not a wall of ![](path) noise. And many more features discoverable and being developed. Together these make it feel like a comfortable place to write and read Markdown inside Emacs, not a syntax highlighter bolted onto .md files. One caveat I want to be upfront about: markdown-ts-mode is still experimental , and you have to opt into it. As the header of markdown-ts-mode.el notes, it isn't wired up to auto-mode-alist yet, so it won't take over .md files on its own. For now you pull in the library with M-x load-library RET markdown-ts-mode , then turn it on in a bufferf, or add it to auto-mode-alist yourself if you're feeling brave. Stéphane and I are working to get it considered ready by the next Emacs release, and that's where you come in. If you try it and hit rough edges, or it works great, we want to hear about it. Send feedback to the bug list with M-x report-emacs-bug , or reach out to me and Stéphane directly. Real-world use is what moves a mode from "experimental" to "done", so don't be shy. Many more screenshots here . Eglot rendering docs with markdown-ts (also, still experimental) Speaking of Markdown, Eglot in Emacs 31 can render LSP documentation using that same internal mode instead of falling back to plain text: ( eglot-documentation-renderer 'markdown-ts-view-mode ) ;; EMACS-31 ( eglot-code-action-indications nil ) ;; EMACS-31 markdown-ts-view-mode gives you formatted hover docs without pulling in anything extra. The same experimental caveat applies here, since it leans on markdown-ts-mode , so treat it as something to opt into rather than a finished default. I also turn off eglot-code-action-indications . The new inline "you can do a code action here" hints are clever, but some language servers make them noisy, so I keep them off. There's also some churn here: eglot-events-buffer-size is on its way out in favor of eglot-events-buffer-config , so I've left a ;; EMACS-31 -- do we still need it? note on the old variable to clean up later. eldoc at point A small one I'm fond of: ( eldoc-help-at-pt t ) ;; EMACS-31 With this on, eldoc shows the help text for whatever sits under the cursor, without me invoking anything. Paired with eldoc-echo-area-prefer-doc-buffer , it makes wandering through unfamiliar code feel more guided. Smarter, eager completion The minibuffer and completion machinery picked up a few new toggles: ( completion-eager-update t ) ;; EMACS-31 ( completion-eager-display 'auto ) ;; EMACS-31 ( minibuffer-visible-completions 'up-down ) ;; EMACS-31 completion-eager-update and completion-eager-display refresh the completion UI as you type instead of waiting for you to ask. If you don't run something like icomplete, setting eager display to t gives you a sharp out-of-the-box experience on its own. And minibuffer-visible-completions set to 'up-down lets you move through the visible candidates with the arrow keys, which feels natural at last. icomplete got attention too, and this is another one I had a direct hand in. Emacs 31 includes the patch from bug#75784 , which I proposed and worked on. It brings vertical in-buffer behavior and