이미 일상에서 쓰는 Emacs 31의 주요 변화들
아직 공식 출시되지 않은 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-