GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Startup-Summary.html ・ emacs-doc.conao3.com

43.1.1 まとめ:起動時の動作手順

Emacs が起動すると、以下の処理が行われます(startup.el の normal-top-level を参照)。

  1. リスト内の各ディレクトリで subdirs.el という名前のファイルを実行することで、load-path にサブディレクトリを追加します。通常、このファイルはディレクトリのサブディレクトリをリストに追加し、それらが順にスキャンされます。subdirs.el ファイルは通常、Emacs のインストール時に自動的に生成されます。
  2. load-path ディレクトリ内で見つかった leim-list.el ファイルをすべて読み込みます。このファイルは入力メソッドを登録するためのものです。検索対象となるのは、ユーザーが作成した個人用の leim-list.el ファイルのみであり、標準の Emacs ライブラリが含まれるディレクトリは除外されます(これらのディレクトリには、Emacs の実行ファイルにコンパイルされる単一の leim-list.el ファイルのみが含まれているはずです)。
  3. 変数 before-init-time に current-time の値を設定します(時刻を参照)。また、after-init-time に nil を設定し、これにより Lisp プログラムに対して Emacs が初期化中であることを通知します。
  4. LANG などの環境変数によって要求された場合、言語環境と端末のコーディングシステムを設定します。
  5. コマンドライン引数の基本的な解析を行います。
  6. custom-reevaluate-setting を使用して、リスト custom-delayed-init-variables の要素を再初期化します。これらは、デフォルト値がビルド時ではなくランタイムのコンテキストに依存する、あらかじめロード済みのユーザーオプションです。custom-initialize-delay を参照してください。
  7. ライブラリ site-start が存在する場合はロードします。オプション ‘-Q’ または ‘--no-site-file’ が指定されている場合は、この処理は行われません。
  8. 初期初期化ファイル(The GNU Emacs Manualの初期初期化ファイルを参照)を読み込みます。オプション ‘-q’、‘-Q’、または ‘--batch’ が指定されている場合は、この処理は行われません。オプション ‘-u’ が指定されている場合、Emacsは代わりにそのユーザーのホームディレクトリ内で初期化ファイルを探します。
  9. インストール済みの任意のオプションのEmacs Lispパッケージを有効にするため、関数 package-activate-all を呼び出します。パッケージングの基本 を参照してください。ただし、package-enable-at-startup が nil である場合や、オプションの ‘-q’、‘-Q’、または ‘--batch’ のいずれかを指定して起動した場合には、Emacsはパッケージを有効にしません。後者の場合にパッケージを有効にするには、package-activate-all を明示的に呼び出す必要があります(例:‘--funcall’ オプション経由)。
  10. バッチモードで実行されていない場合は、変数 initial-window-system が指定するウィンドウシステムを初期化します(initial-window-system を参照)。初期化関数 window-system-initialization はジェネリック関数(Generic Functions を参照)であり、その実際の実装はサポートされている各ウィンドウシステムによって異なります。initial-window-system の値が windowsystem である場合、初期化関数の適切な実装がファイル term/windowsystem-win.el で定義されています。このファイルは、Emacs の実行ファイルをビルドする際にコンパイルされているはずです。
  11. 通常のフック before-init-hook が実行されます。
  12. 適切な場合には、グラフィカルフレームを作成します。グラフィカルフレームの作成の一環として、当該ウィンドウシステム用のwindow-system-initialization関数を呼び出すことで、グラフィカルフレーム用にinitial-frame-alistおよびdefault-frame-alistで指定されたウィンドウシステムを初期化します(初期フレームパラメータを参照)。バッチ(非対話)モードまたはデーモンモードでは、この処理は行われません。
  13. 初期フレームのフェイスを初期化し、必要に応じてメニューバーとツールバーを設定します。グラフィカルフレームがサポートされている場合は、後でグラフィカルフレームが作成される可能性があるため、現在のフレームがグラフィカルでなくてもツールバーを設定します。
  14. initファイル(Initファイルを参照)を読み込みます。オプション ‘-q’、‘-Q’、または ‘--batch’ が指定されている場合は、この処理は行われません。オプション ‘-u’ が指定されている場合、Emacsは代わりにそのユーザーのホームディレクトリ内でinitファイルを探します。
  15. ライブラリ default が存在する場合はロードされます。inhibit-default-init が nil でない場合、またはオプション ‘-q’、‘-Q’、‘--batch’ が指定された場合は、この処理は行われません。
  16. abbrev-file-name で指定されたファイルが存在し、かつ読み取り可能な場合、そのファイルから略語を読み込みます(abbrev-file-name を参照)。オプション ‘--batch’ が指定されている場合は、この処理は行われません。
  17. 変数 after-init-time に current-time の値を代入します。この変数は先に nil に代入されており、現在の時刻を代入することで初期化フェーズが終了したことを示し、before-init-time と合わせて所要時間の計測値となります。
  18. 通常のフック after-init-hook と delayed-warnings-hook が実行されます。後者は、起動の先行段階で出力された警告を表示しますが、これらは自動的に遅延処理されます。
  19. バッファ *scratch* が存在し、かつ依然として Fundamental モードである場合(デフォルトではそうあるべきです)、initial-major-mode に従ってメジャーモードを設定します。
  20. テキスト端末で起動した場合は、端末固有のLispライブラリをロードし(端末固有の初期化を参照)、フック tty-setup-hook を実行します。これは --batch モードでは行われず、また term-file-prefix が nil である場合も行われません。
  21. inhibit-startup-echo-area-message で抑制していない限り、初期のエコー領域メッセージが表示されます。
  22. それまでに処理されなかったコマンドラインオプションを処理します。
  23. オプション --batch が指定された場合は、終了するようになりました。
  24. *scratch* バッファが存在し、かつ空である場合、そのバッファに (substitute-command-keys initial-scratch-message) を挿入します。
  25. initial-buffer-choice が文字列の場合、その名前のファイル(またはディレクトリ)にアクセスします。関数の場合、引数なしでその関数を呼び出し、返されたバッファを選択します。コマンドライン引数として1つのファイルが指定された場合、そのファイルにアクセスし、そのバッファを initial-buffer-choice と並んで表示します。複数のファイルが指定された場合、すべてのファイルにアクセスし、*Buffer List* バッファを initial-buffer-choice と並んで表示します。
  26. emacs-startup-hook が動作します。
  27. frame-notice-user-settingsを呼び出し、initファイルの指定内容に応じて選択されたフレームのパラメータを変更します。
  28. window-setup-hookが実行されます。このフックとemacs-startup-hookの唯一の違いは、こちらが前述のフレームパラメータの変更後に実行される点です。
  29. コピーレフトやEmacsの基本的な使い方に関する情報を含む特殊なバッファである起動画面を表示します。inhibit-startup-screen または initial-buffer-choice が nil でない場合、あるいはコマンドラインオプションの ‘--no-splash’ または ‘-Q’ が指定された場合は、この処理は行われません。
  30. デーモンがリクエストされた場合、server-startを呼び出します。(POSIXシステムでは、バックグラウンドデーモンがリクエストされた場合、制御端末からデタッチします。)The GNU Emacs ManualのEmacs Serverを参照してください。
  31. Xセッションマネージャによって起動された場合、直前のセッションのIDを引数として渡してemacs-session-restoreを呼び出します。セッション管理を参照してください。

以下のオプションは、起動シーケンスの一部の動作に影響します。

ユーザーオプション: inhibit-startup-screen

この変数が nil 以外の場合、起動画面は表示されません。その場合、Emacs は通常 *scratch* バッファを表示しますが、後述の initial-buffer-choice を参照してください。

新規ユーザーの初期化ファイルにこの変数を設定したり、複数のユーザーに影響が及ぶ形で設定したりしないでください。そうすると、新規ユーザーがコピーレフトやEmacsの基本的な使い方に関する情報を得られなくなります。

inhibit-startup-message と inhibit-splash-screen はこの変数のエイリアスです。

ユーザーオプション: initial-buffer-choice

nil 以外の場合、この変数は、起動画面の代わりに Emacs が起動後に表示するファイルまたはディレクトリを指定する文字列となります。値が関数である場合、Emacs はその関数を呼び出し、その関数はバッファを返して表示させる必要があります。値が t の場合、Emacs は *scratch* バッファを表示します。

ユーザーオプション: inhibit-startup-echo-area-message

この変数は、起動時のエコーエリアメッセージの表示を制御します。initファイルに以下の形式のテキストを追加することで、起動時のエコーエリアメッセージを抑制できます。

(setq inhibit-startup-echo-area-message
      "your-login-name")

Emacsは、initファイル内で上記のように式が記述されているかを明示的にチェックします。ログイン名は、Lispの文字列定数としてその式に含まれている必要があります。また、Customizeインターフェースを利用することも可能です。inhibit-startup-echo-area-messageを同じ値に設定する他の方法では、起動メッセージを抑制することはできません。これにより、必要に応じて簡単にメッセージを抑制できますが、initファイルを不用意にコピーしても、他のユーザーのメッセージが抑制されることはありません。

ユーザーオプション: initial-scratch-message

この変数が nil 以外の場合は文字列である必要があり、Emacs の起動時または当該バッファが再作成された際に *scratch* バッファに挿入されるドキュメントとして扱われます。nil の場合は、*scratch* バッファは空です。

以下のコマンドラインオプションは、起動シーケンスの一部に影響を与えます。The GNU Emacs ManualのInitial Optionsを参照してください。

--no-splash

スプラッシュ画面を表示しない。

--batch

対話型ターミナルなしで実行します。バッチモードを参照してください。

--daemon
--bg-daemon
--fg-daemon

ディスプレイの初期化は行わず、サーバーを起動してください。(「バックグラウンド」デーモンが自動的にバックグラウンドで動作します。)

--no-init-file
-q

initファイルおよびdefaultライブラリのいずれもロードしないでください。

--no-site-file

site-startライブラリをロードしないでください。

--quick
-Q

「-q --no-site-file --no-splash」に相当します。

--init-directory

Emacsの初期化ファイルを探す際に使用するディレクトリを指定します。