世界を動かす技術を、日本語で。

Emacs 31.1の新機能

概要

  • Emacs 31.1 がリリース、目立つ大規模新機能はなし
  • unexec dumper の完全廃止など、時代の終焉を象徴する変更
  • ユーザビリティ向上 のための細かな改善多数
  • Tree-sitter の導入支援やミニバッファ強化など、開発体験の向上
  • インストールや起動時の 挙動変更 も要チェック

Emacs 31.1の主な特徴と変更点

  • 目立つ大きな新機能は非搭載 従来のEmacsメジャーリリースとは異なり、「これ一つ!」という大きな新機能はなし 小規模な使い勝手改善や技術的な整理が中心

  • Garbage Collector刷新は次期バージョンへ延期 期待されていた新GCは Emacs 32 で導入予定 詳細は今後の投稿で解説予定

  • unexec/pdumper論争とその終焉 伝統的な unexec dumper が完全廃止 代替の portable dumper が全ユーザー向けデフォルトに glibc依存からの脱却、Daniel Colascioneによる新方式の標準化 これによりEmacs起動高速化とクロスプラットフォーム性向上

  • User Lisp Directory機能の追加 .emacs.d配下のuser-lisp/ディレクトリ以下のLispファイルを自動で再帰的にバイトコンパイル autoload対応・load-path自動追加 設定で無効化やディレクトリ変更も可能 prepare-user-lispコマンドによる手動再スキャンもサポート

  • Minibufferと補完UIの強化 completion-preview-modeのカスタマイズ性向上 Emacs標準のCompletionsウィンドウ活用型UIの改善 「Company」「Corfu」的な体験をEmacs流で実現

  • ウィンドウレイアウトの回転機能 M-x window-layout-rotate-clockwise等でウィンドウ配置の回転 C-x w C-hで新オプションの確認が可能

  • ポイントとマークの交換動作の改善 C-x C-xでリージョンをアクティブ化せずにポイント・マーク交換が可能に transient-mark-modeの使い勝手向上

  • Tree-sitterの自動言語グラマーインストール 対応モードではTree-sitter用グラマーの自動インストールを提案 Windows等での導入障壁を大幅に緩和 Combobulate等のTree-sitter系パッケージ利用促進

  • Emacs 31.1でのインストール・起動時の主な変更 unexec dumper完全削除

    • Emacs 27から非推奨だったunexec dumperがついに削除
    • portable dumperがm68k a.outターゲットにも対応 ctagsプログラムのビルド・インストール廃止
    • 代替としてUniversal Ctags推奨(https://ctags.io/)
    • 旧ctags互換はetags --ctagsで対応可能 32bit x86向けGCCビルドオプション変更
    • '-mfpmath=sse'または'-fno-tree-sra'をデフォルト化しGCCバグ回避 systemdユーザーサービス用インストール先指定オプション追加
    • --with-systemduserunitdirでsystemd user unitファイルの設置先指定
    • Emacsサーバーのsystemdサービス化が容易に
  • 起動時の挙動変更 xterm-mouse-modeが標準で有効化

    • 対応端末ではマウス操作がデフォルトで利用可能
    • 旧動作希望時はxterm-mouse-modeをnilにカスタマイズ site-start.elの読み込み順変更
    • site-start.elがearly-init.elより先にロードされる仕様へ
    • サイト管理者によるグローバル設定が容易に
  • ユーザLispディレクトリ機能の詳細 user-lisp/配下のLispファイルを再帰的にバイトコンパイル・autoload抽出・load-path追加 user-lisp-auto-scrape変数で無効化可能 user-lisp-directoryで対象ディレクトリ変更可能 prepare-user-lispコマンドで任意タイミングで処理実行

  • デーモン起動時の警告表示 Emacsデーモン起動時の警告が最初のクライアントフレームでWarningsバッファとして表示 設定ミスや初期化ファイルの問題を即時確認可能

  • 表示・UI関連の細かな改善 line-spacingで行上部のスペース指定が可能に(上下個別指定可) 新face「margin」によりマージン表示のカスタマイズ性向上 prettify-symbols-modeが表示不能文字を無視 standard-display-tableの拡張で子フレーム・TTY向け枠線・区切り線指定が容易に 子フレームがTTYフレームでも利用可能に(Posframe, Corfu等の端末対応強化)

  • フォントロック関連の変数整理 多数のfont-lock-xxx-face変数が非推奨化

まとめ

  • Emacs 31.1 は大規模新機能よりも 技術的負債の整理ユーザビリティ改善 が主眼
  • unexec dumperの廃止Tree-sitter導入支援 など、今後のEmacs進化の基盤強化
  • 細かな改善 の積み重ねにより、日常利用の快適さ向上
  • 従来の設定や運用に依存していたユーザー は、移行や新機能の活用方法を要確認

Hackerたちの意見

treesitter と eglot(つまり LSP)のおかげで、Emacs を使っているときに他のエディタで恋しいものはあまりないな。最近 Zed にハマってるけど、GNU の呼び声が聞こえてきた。この週に .emacs の破産を宣言して、クリーンなセットアップで再スタートするかもしれない。どれだけ古いサードパーティの設定をビルトインで置き換えられるか試してみたい。

Zed の機能で恋しくなるものってある? AI は目立つ?

AIはEmacs Lispが得意だよね、特にGPTが。だから、今日は楽に進めると思うよ!

あなたはマジックを使ってないのかな?

user-lisp/ の変更が楽しみだな。これでカスタムの軽量パッケージを作れて、インタラクティブなコマンドやモードに ;;;###autoload をちょっと振りかけるだけで遅延読み込みできるようになるんだ。

ちょっと脱線するけど、Emacs Lisp でパッケージのソースを眺めるだけじゃなくて、何かをするための良い学習資料ってないかな? Mastering Emacs の本は持ってて、ほとんど読んだけど、いくつかのことについては良いアイデアが得られた。でも、一般的なことに対する適切なデザインパターンのアイデアがもっと欲しいんだ。

Info の Emacs Lisp Intro と Elisp マニュアルは読んだ? 特に後者は参考になるよ。

The Land of Lisp を読んでから ELisp にちょっと興味を持ち始めたけど、たぶんちょっと基本的な内容だね。もし本やドキュメントを通じて ELisp をもっと上達させようと思ったら、Common Lisp の資料を探すかな。

Prot のパッケージはどれもすごくデザインが良いと思うよ。 [1]: https://protesilaos.com/emacs/

ソースをただ「見つめる」だけじゃなくて、ちゃんとインタラクションできるよ!Emacsはすごくドキュメントが充実してて、C-h f(つまりM-x describe-function)やC-h v(つまりM-x describe-variable)を使うだけでたくさん学べるよ。Elispのソースファイルでは、関数や変数が何をするのか分からないときはそのコマンドを使ってみて。説明を読んで、ハイパーリンクをクリックすればソースも見れるし。これが実際に物事を進めるための一番いい学び方だと思う。どの関数や変数を探しているか分からないときは、M-x aproposやそのバリエーションが役立つよ。高レベルのデザインパターンに関する良いリファレンスは持ってないけど(Elispマニュアル以外には)、一般的にElispはすごく柔軟で、他のところで知ってるパターンを実装するのに必要なものはすでに揃ってるよ。まずはデータ構造を決めてね。おそらく、まだ知らないかもしれない最も重要な教訓は、テキスト操作には文字列じゃなくてバッファを使うことだよ。

「User Lisp Directory」の下のセクションが不完全な感じがする。二段落目を期待してたんだけど。

同じことを思ったけど、記事の後半で詳しく説明してあって、そのディレクトリの下にあるlispファイルは自動で読み込まれるし、追加したコマンドもそのまま使えるみたい!すごくいい内容だよ。

Hacker Newsで議論の続きを見る