에머스 31, 곧 출시…일상적인 변화
출처: Hacker News
Karthik Chikmagalur는 최근 그의 훌륭한 “Even More Batteries Included with Emacs” 포스트를 발표했습니다. 이 글은 Emacs에 이미 포함되어 있는 lesser‑known 기능을 파헤칩니다. 저는 그 거울 이미지를 작성하고 싶었습니다. 그의 포스트는 상자에 이미 들어 있는 배터리를 다룹니다. 저의 포스트는 Emacs 31에 도착하는 배터리를 다룹니다.
Emacs 31은 아직 출시되지 않았지만, 저는 emacs-31 브랜치와 master 모두에서 빌드하고 몇 달 동안 일상적으로 사용해 왔습니다. 새롭고 유용한 것이 나올 때마다 Emacs Solo(외부 패키지 없이 구성된 설정)에它를 접어 넣고, 작은 ; EMACS-31 주석을 달아 출시가 정식으로 발표될 때 다시 revisit하도록 합니다. 이 포스트는 그 흔적을 따라갑니다. 아래에 있는 모든 변경 사항은 현재 제가 구성 중인 내용이며, 그것이 무엇을 하는지 그리고 왜 유지하는지에 대한 메모가 함께 있습니다. 아무것도 패키지가 필요하지 않습니다. 모두 이미 master에 있거나 그 뒤에 아주 가깝습니다.
한 가지 주의사항: Emacs 31은 아직 개발 중이며(정확히는 프리릴리스 단계)이며, 최종 출시 전 이름이 바뀔 수 있고 기본값도 변경될 수 있습니다. 아래 내용은 2026년 중반 기준으로 제가 실행하고 있는 것입니다. emacs-31 브랜치나 master에서 빌드하지 않는다면, 이것은 앞으로 올 것을 미리 보는 것이라고 생각하세요.
Tree-sitter가 그냥 작동한다
제가 가장 만족하는 변화가 하나 있다고 해야 한다면,那就是 이것입니다. 수 많은 연도를 거쳐 *-ts-mode를 설정하려면 treesit-language-source-alist에 수동으로 채우고, treesit-install-grammar을 호출하고, 툴체인이 구문 컴파일에 대비하도록 하는 것을 기도해야 했습니다. Emacs 31에서는 이 모든 의식이 사라집니다: treesit-enabled-modes를 t로 설정하면 트리시터 변형을 가진 주요 모드들이それに 맞춰 전환되고, treesit-auto-install-grammar은 구문이 없을 때 Emacs가 가져와 빌드하도록 제안하며 오류를 발생시키지 않습니다. 이것은 treesit-auto 패키지의 경험과 동일하지만, 이제 코어 부분에서 작업을 수행합니다. 이 효과는 제 구성 전체에 퍼져 나옵니다. 저는 각 구문이 어디에 있는지 가르치기 위해 다음과 같은 라인을 유지하고 있었습니다:
In Emacs 31에서는 TypeScript, TSX, Rust, TOML, YAML 및 Dockerfile과 같은 언어의 구문 소스가 모드 자체 안에 존재하므로, ;; EMACS-31 this is now defined on mode code 주석으로 표시된 블록들을 삭제할 수 있게 되었습니다. 어느 날엔가 더 적은 설정이 동일한 작업을 수행하는 것을 선호합니다.

Emacs에 더 많은 트리시터 개선들이 올 것입니다. 개발자들은 tirelessly(끊임없이) 작업하고 있으며, Yuan Fu를 비롯한 여러 다른 사람들은 트리시터 경험을 다양한 영역에서 지속적으로 향상시키고 있습니다. 언어 지원 개선, 가독성 및 성능 향상으로, Emacs의 트리시터는 놀라운 속도로 진화하고 있습니다.
내장된 markdown-ts-mode (실험적)
Emacs 31은 markdown-ts-mode를 기본으로 제공하며, 이는 제게 매우 친숙합니다. 저는 이 모드를 만들었습니다. 2025년 초에 emacs-devel에 보낸 제안에서 아이디어와 초기 코드 버전은 모두 제 것이었습니다. 이 모드를 단독 노력으로 보는 것을 허용한다면 저는 그 모드에게 불공평을 가하는 것입니다. Stéphane Marks가 조금 뒤에 합류해 소매를 걷어 올렸고, 이후에는 모드의 공동 저자로 성장했습니다. 그는 오늘날 사용하기 좋은 많은 부분을 책임지는 에너지입니다. 그는 몇 개의 패치를 보내고 바로 떠나는 것이 아니라, stay(남아)있으며, 제가 스케치한 것을 훨씬 넘어서 모드를 발전시키고, “작동한다”는 것을 “기쁨이다”로 바꾸는 세부 사항에 집중했습니다. 제가 자랑하려 했던 많은 폴리시는 그의 것입니다. 이 모드는 이제 우리 것이며, 그 덕에 더 좋습니다. 아이디어가 메일링 리스트 메시지에서 핵심 코드로 이동하고, 그过程中 훌륭한 협력자를 만나게 되는 과정을 보는 것은 Emacs 커뮤니티에서 머무는 것이 가장 보람 있는 일 중 하나입니다.
이것은 색을 넘어서 제공하며, 여기서는 보여드리고 싶은 부분들이 있습니다:
✔️ Org 사용자는 마치 집에서처럼 느낍니다. 키바인딩과 편집이 Org와 유사하게 유지되어 헤드라인 이동, 섹션 접기, 구조 요소 이동이 편합니다. Org를 이미 익히셨다면 Markdown을 다시 배울 필요가 없습니다.
✔️ **실시간 색상 코드 블록, 트리시터가 없는 언어에도 적용됩니다.**这是我最喜欢的 기술입니다. 포스트된 코드 블록은 해당 언어로 실제 전역 모드를 사용해 서식 지정되며, 평면 모노스페이스로 덤프되지 않습니다. Emacs 내부 모드까지 도달하므로 elisp 블록은 진정한 Emacs Lisp 서식 지정을 받으며, 다른 내장 모드도 동일하게 동작합니다. 코드 샘플 안에 올바른 구문 하이라이트링을 적용할 수 있어 추가 설정이 필요 없습니다.
✔️ 인라인 이미지 보기. 이미지 링크가 버퍼에 렌더링되어, 스크린샷이나 다이어그램을 포함한 Markdown 문서는 noise의 벽이 아니라 문서처럼 읽힙니다.
그리고 많이 더 발견 가능하고 개발 중인 기능들이 있습니다. 이 모든 것이 Emacs 내에서 Markdown을 쓰고 읽는 것을 편안한 공간으로 만들어 줍니다. 즉, 단순히 .md 파일에 부착된 구문 하일라이저가 아니라 쓰는 것과 읽는 것을 즐길 수 있는 환경입니다.
One caveat I want to be upfront about: markdown-ts-mode는 아직 실험적이며, 이를 사용하도록 선택해야 합니다. markdown-ts-mode.el 헤더에 적혀 있듯이, 아직 auto-mode-alist와 연결되어 있지 않아 .md 파일을 자동으로 대체하지 않습니다. 현재는 M-x load-library RET markdown-ts-mode 로 라이브러리를 불러온 뒤, 버퍼에서 직접 활성화하거나 auto-mode-alist에 직접 추가하는 것이 좋습니다. Stéphane와 저는 다음 Emacs 출시까지 이 모드를 준비된 상태로 만들기 위해 노력하고 있으며, 여러분이 그 과정에 참여해 주시길 바랍니다. 만약 사용해 보시고 어려운 점을 발견하거나 정말 잘 작동한다면 알려 주세요. M-x report-emacs-bug 로 버그 목록에 피드백을 보내거나, direttamente 저와 Stéphane에게 연락해 주세요. 실제 사용이 모드를 “실험적”에서 “완료” 상태로 전환시키는 핵심 요소이므로, 부담 없이 사용해 보세요.
더 많은 스크린샷은 여기 에서 확인할 수 있습니다.
markdown-ts와 함께 Eglot 렌더링 문서 (또한 아직 실험적)
Markdown에 관해 이야기하자면, Emacs 31의 Eglot은 평문 대신 동일한 내부 모드를 사용해 LSP 문서를 렌더링할 수 있습니다: “markdown-ts-view-mode는 추가 라이브러리 없이 포맷된 호버 문서를 제공합니다.” 이때 동일한 실험적 제한이 적용됩니다. 이는 markdown-ts-mode에 의존하므로, 완성된 기본값 대신 옵트인 것으로 취급해야 합니다. 저는 eglot-code-action-indications를 비활성화합니다. 새로운 인라인 ” здесь можно выполнить код” 힌트는 현명하지만, 일부 언어 서버가 노이즈를 만들어내어 끄고 있습니다.
eglot-events-buffer-size는 eglot-events-buffer-config에 대체되어 사라지는 추세이므로, 오래된 변수에 ;; EMACS-31 -- do we still need it? 주석을 남겨 나중에 정리할 예정입니다.
eldoc에서 포인트
제가 좋아하는 작은 기능 중 하나입니다: 이 옵션을 켜면 커서 아래에 있는 내용의 도움말 텍스트가 표시되며, 아무것도 호출하지 않아도 됩니다. eldoc-echo-area-prefer-doc-buffer와 함께 사용하면 익숙하지 않은 코드를 탐색할 때 더 안내받는 느낌을 줍니다.
스마트하고 eager(즉시) 완성
미니버퍼와 완성 메커니즘이 새로운 토글 몇 개를 추가했습니다: “completion-eager-update와 completion-eager-display는 요청을 기다리지 않고 입력하는 동안 UI를 갱신합니다. icomplete와 같은 것을 사용하지 않는다면, eager display를 t 로 설정하면 자체적으로도 깔끔한 기본 환경을 제공합니다. minibuffer-visible-completions를 'up-down 로 설정하면 화면에 보이는 후보들을 화살표 키로 이동할 수 있어 자연스럽게 느껴집니다. icomplete도 주목받았고, 이는 제가 직접 참여한 또 다른 사항입니다. Emacs 31에는 bug#75784 패치가 포함되어 있으며, 이 패치는 제가 제안하고 작업했습니다. 수직 인-버퍼 동작을 제공합니다.