HN 日本語サマリー

← 一覧へ戻る
プログラミング

Emacs 31.1の新機能

What's new in Emacs 31.1 (masteringemacs.org)

309 pointsby geospeck86 コメント

要約

Emacs 31.1がリリースされ、大きな新機能はないものの、多くの小さな品質改善や一つの時代の終焉を告げる非推奨化が含まれています。特に、長年使われてきたunexec dumperが削除され、ユーザーLispディレクトリ機能の強化や、Tree-sitterの文法インストール支援などが注目されています。

全文翻訳

Emacs 31.1がついにリリースされました!以前のEmacsバージョンとは異なり、このリリースには単一のビッグバン機能はありません。私が把握した限りでは、新しいガベージコレクタはEmacs 31.1に含まれる予定だったかもしれませんが、Emacs 32に延期されました。しかし、それについては将来の投稿で詳しく説明します。それは興味深いトピックです。Emacs 31.1のより注目すべき機能のいくつかは、小さな品質改善であり、一つの非推奨化は時代の終わりを告げています。いつものように、私の本「Mastering Emacs」は、リリースを祝って来週31%オフになります。 unexec/pdumperの論争とその後の非推奨化 Emacsは…通常のアプリケーションではありません。それをコンパイルしてリンクすると、Emacsの心臓部であるtemacsが得られますが、それに付属するほとんどのライブラリはありません。それは、Cコアとインタプリタ以上のほとんど何もない、最小限のEmacsです。それは実際にはあまり役に立ちません。あなたが知っているEmacsバイナリを取得するには、temacsを実行し、標準ライブラリをメモリにロードするように指示する必要があります。それは遅いです。多くのelispとハウスキーピングが発生する必要があります。この方法でEmacsを起動するには、数分とかなりのCPUとRAMが必要になる場合があります。それは耐え難いです。これは何十年もの間Emacsを悩ませてきた問題です。今日では大きな問題ではありませんが、昔は、熱心なEmacsユーザーのグループが朝に同時にEmacsを起動することを決定した場合、ホームコンピュータや共有マルチユーザー環境を壊す可能性がありました。 この問題の解決策は?すべてを一度ロードし、次にEmacsのメモリのテキスト/データ/bss/などのセグメントを新しいバイナリに文字通りダンプします。それを実行すれば、Emacs Lispの状態を何度もブートストラップする必要はありません。それはほとんどレスリング技のように感じられます。あなたは重いEmacsを位置に追い込み、「The Attitude Adjustment」を適用し、Emacsを新しいバイナリにボディスラムし、すべてがセットアップされ、すぐに使用できるようになります。それはかなり素晴らしい動きです。しかし、この、えー、レスリング技を機能させるために、Emacsはglibcのいくつかのスノーフレーク関数に依存していました。この種の悪い挙動を数十年間許可した後、glibcチームはそれをやめ、Emacsは別の方法を見つけなければなりませんでした。Daniel Colascioneは、はるかに優れたソリューションを構築しましたが、誰もがそれに満足していたわけではありません。簡単に言えば、Emacsの内部構造のシリアライゼーションを、内部メモリ構造の1対1のダンプではないものに標準化します。ポータブルダンパーは数年間デフォルトでした。それは約10年前に初めて導入され、Emacsの長い互換性の歴史に沿って、ポータブルダンパーの考えをばかげているか実行不可能だと考える1人か2人のユーザーのために、古いunexecダンパーは表向きは維持されていました。しかし今、それはついに永久に削除されました。時代の終わりです。 ユーザーLispディレクトリ 古典的な問題:Emacsパッケージをどこかにgit cloneまたはダウンロードし、それが動作するようにしたいとします。しかし、どうすればよいでしょうか?それはそれほど単純ではありません。それを実行する方法はいくつか競合しています。最も簡単な方法は、ユーザーにパッケージを.emacs.dディレクトリのuser-lisp/にドロップするように指示することです。そうすれば、Emacsはロードとオートロードの設定(M-xに適切なものが表示されるように)を処理します。 ミニバッファと補完 Emacs 30.1では、completion-preview-modeが追加されました。これは、CompanyやCorfuに似ていますが、Emacs独自のやり方に適応したネイティブな「ポップアップウィンドウ」システムです。Companyなどがフローティング子フレームを使用するのではなく、*Completions*ウィンドウを使用します。Emacs 31.1は、ネイティブにしたい場合にカスタマイズしたいであろう幅広いカスタマイズ可能なオプションでこれを強化しています。 ウィンドウレイアウトの回転 M-x window-layout-rotate-clockwise(C-x w C-hで多くの新しいオプションを確認してください)などがウィンドウレイアウトを回転させます。別の小さなUIの勝者です。 リージョンをアクティブにせずにポイントとマークを交換する 私は(主に私の本で)transient-mark-modeが、kill-region (C-w) のようなEmacsの多数の「リージョンに影響する」コマンドの上に draped された、厄介なワンサイズフィットオールであることについて話しました。したがって、C-x C-x、ポイントとマークを交換する操作も、あなたがそれを望むかどうかにかかわらず、リージョンをアクティブにします。transient mark modeでマークコマンドを修正するという私の古い記事では、まさにそれを実演しました。しかし今、それがそうしないという組み込みオプションがあります - それは素晴らしいです。 Tree-sitterが文法をインストールするようにオファーするようになりました Tree-sitterのEmacsでのより広い採用を妨げる2つのブロッカーが連携しています。TSは特別なメジャーモードを必要とすること。そして、そのモードはしばしば元のモードの薄っぺらい再実装であること。特にWindowsでの文法のインストールは非常に面倒なことです。なぜなら、tree-sitterライブラリ自体の厳密なABIバージョンをうまく通すだけでなく、各言語文法の厳密なバージョンを確実に取得する必要があるからです。そうしないとすべてが煙になります。前者はまだ問題ですが、後者はほぼ解決しました。Emacsは、TSモードが認識している適切な言語文法をインストールするようにオファーできるようになりました。これで、Combobulate: Structured Movement and Editing with Tree-Sitterを試す言い訳はありません。 そして、さらに多くのこと 多くの小さな調整と変更があります。読んでみてください。 インストール Emacs 31.1の変更点 unexec dumperが削除されました。Emacs 27から非推奨となっていた従来のunexec dumperが削除されました。ポータブルダンパーは現在、m68k a.outターゲットで動作します。冒頭の紹介で書いたように、これはまさに時代の終わりです。 Emacsの古い「ctags」プログラムは、もはやビルドまたはインストールされません。代わりにUniversal Ctags <https://ctags.io/> を使用することをお勧めします。今のところ、古い「ctags」の動作を取得するには、「etags --ctags」を実行するか、「ctags」という名前のシェルスクリプトを使用して「etags --ctags "$@"」を実行できます。TAGSユーザーの場合は、どこで確認し、新しいものがインストールされていることを確認してください。(あなたがTAGSを使用しているかどうかわからない場合は、使用していません。) 32ビットx86システムでのGCCデフォルトオプションが変更されました。GCC 4以降を使用して32ビットx86システムでEmacsをビルドする場合、「configure」はデフォルトでGCCオプション「-mfpmath=sse」(ホストシステムがSSE2をサポートしている場合)または「-fno-tree-sra」(そうでない場合)を使用するようになりました。これらのGCCオプションは、GCCバグ58416の回避策であり、まれにEmacsが正しく動作しない原因となる可能性があります。 新しいconfigureオプション「--with-systemduserunitdir」。これにより、systemdのユーザーユニットファイルがインストールされるディレクトリを指定できます。デフォルトは「${prefix}/usr/lib/systemd/user」です。そのようにEmacsのサーバーを実行するためのsystemdサービスをインストールするようにEmacsに指示できます。これをお勧めします。 起動 Emacs 31.1の変更点 互換性のあるターミナルでは、「xterm-mouse-mode」がデフォルトでオンになります。これらのターミナルでは、マウスはデフォルトで動作します。互換性のあるターミナルとは、EmacsがOSセレクションデータ(クリップボード)の設定と取得、およびマウスボタンと移動イベントをサポートしているターミナルです。「xterm-mouse-mode」が有効になっている場合、ターミナル固有のキーバインディングではなく、Emacsのキーバインディングを使用してOSセレクションにコピーする必要があります。カスタマイズして「xterm-mouse-mode」をnilにすることで、古い動作を維持できます。ほとんどの人はこれを知りませんが、Emacsは何年も前にターミナルEmacsにマウスサポートを追加しましたが、オフのままでした。ターミナルの機能は大きく異なるため、それは良い安全な決定でした。しかし今、それはあなたが期待するように動作します:メニューはクリック可能であり、その他も同様です。良いことです。 site-start.elがユーザーの初期化ファイルよりも前にロードされるようになりました。以前は、順序はearly-init.el、site-start.el、そしてユーザーの通常の初期化ファイルでしたが、今ではsite-start.elが最初にロードされます。これにより、サイト管理者は、通常early-init.elからのみ実行できること(例:「package-directory-list」への追加)をカスタマイズできます。ラップトップやホームコンピュータのような単一ユーザーシステムを使用している場合、これはあなたにとってあまり関係ないでしょう。 新しいユーザーLispディレクトリ機能。Emacs設定ディレクトリに「user-lisp/」というサブディレクトリがある場合、その中のLispファイルとそのサブディレクトリは再帰的にバイトコンパイルされ、オートロードクッキーがスクレイピングされ、「load-path」に追加されます。機能を無効にすることで