🔖

[備忘録] Emacs 初期化処理 整理

2022/10/09に公開

[備忘録] Emacs 初期化処理 整理

Emacsの初期化処理について、公式ドキュメント(英語)の内容を日本語で整理する。

Emacs 初期化処理

1. load-path の追加

subdirs.el によって標準のEmacs lispファイルが存在するディレクトリが、 load-path に追加される。

2. leim-list.el のロード

LEIM == Library of Emacs Input Methodの省略形

3. 変数 before-init-time の設定

current-time の値が設定される。
また、 after-init-time には nil が設定される。(この変数はEmacsが初期化中であることを表すフラグとしても使われる)

4. 言語設定の設定

LANG などの環境変数で指定がある場合、その値をもとに処理される。

5. コマンドライン引数の解析

6. Early init file の読み込み

Emacs起動時に独自の設定を反映させたい場合、Early Init Fileが使われる。
パッケージシステムやGUIが初期化される前に読み込まれる。
通常の初期化ファイルの代わりに使うことは推奨されていない。(GUIの初期化前などに実行されるため)

保存場所としては以下。

  • ~/.config/emacs/early-init.el
  • ~/.emacs.d/early-init.el

-q, -Q, --batch の引数が指定されている場合、この処理は実行されない。
-u の引数が指定されている場合、 ユーザーのホームディレクトリから探索する。

7. パッケージの有効化

package-activate-all を呼び出し、すでにインストールされているパッケージを有効化する。
pacakge-enable-at-startupnil が指定されている場合、もしくは -q, -Q, --batch の引数が指定されている場合、パッケージの有効化は行われない。
後者の場合、--funcall などによって明示的に package-activate-all を呼び出す必要あり。

8. ウィンドウシステムに関する初期化

initial-window-system によって指定された値をもとに、ウィンドウシステムに関する初期化処理が行われる。
バッチモードの場合、このステップは実行されない。

9. before-init-hook の実行

10. グラフィカルフレームの作成

initial-frame-alist, default-frame-alist で指定されている値をもとに初期化される。
バッチモード・デーモンモードの場合、このステップは実行されない。

11. 初期フレームの見た目の初期化

初期フレームの見た目が初期化され、メニューバーとツールバーが必要であればセットされる。
グラフィカルフレームが有効である場合、グラフィカル版のツールバーが表示される。

12. 変数の再初期化

custom-reeveluate-setting によって、ビルド時の値から実行時の環境に合わせた値へ再度変数が初期化される。

13. site-start ライブラリの読み込み

site-start ライブラリが存在すれば読み込む。
-q, -Q, --batch が指定されている場合この処理は実行されない。

14. ユーザーの初期化ファイル読み込み

-q, -Q, --batch が指定されている場合この処理は実行されない。
-u が指定されている場合、ユーザーのホームディレクトリから検索される。

15. default ライブラリの読み込み

default ライブラリが存在すれば読み込む。
-q, -Q, --batch が指定されている場合この処理は実行されない。

16. ユーザー辞書の読み込み

abbrev-file-name が存在する場合読み込む。
--batch が指定されている場合この処理は実行されない。

17. after-init-time の設定

after-init-timecurrent-time の値が設定される。
before-init-time と比較することで、起動時にかかった時間が確認できる。

18. after-init-hook の実行

19. メジャーモードの設定

*scratch* バッファが存在しFundamental modeの場合、 initial-major-mode の値に従ってメジャーモードを設定する。

20. tty-setup-hookの実行

ターミナル上で実行されている場合、ターミナル専用のLispライブラリが読み込まれ tty-setup-hook が実行される。
--batch モード、もしくは term-file-prefixnil が設定されている場合、この処理は実行されない。

21. 初期メッセージの表示

echoエリアに初期メッセージが表示される。
inhibit-startup-echo-area-message が設定されている場合、この処理は実行されない。

22. 残りのコマンドライン引数の処理

ここまでで処理されていないコマンド引数が処理される。

23. batchモードの初期化完了

24. 初期スクラッチメッセージの挿入

*scratc* バッファが存在し空の状態である場合、 initial-scratch-message の値を挿入する。

25. 指定されたファイルの表示

initial-buffer-choice に文字列が指定されている場合、指定されている名前のファイル、またはディレクトリを表示する。
関数が渡されている場合、引数なしで指定された関数を呼び出し返り値の名前のバッファを選択する。
コマンドラインでファイルが1つ指定されている場合、 initial-buffer-choice で指定された内容と合わせて表示する。
コマンドラインで複数のファイルが指定されている場合、全ての指定されているファイルを読み込んだ後 Buffer Listinitial-buffer-choice で指定された内容と合わせて表示する。

26. emacs-startup-hook の実行

27. フレームのパラメータ変更

frame-notice-user-settings を呼び出し、初期化ファイルの内容にしたがって、フレームのパラメータを変更する。(フレームの大きさや色など?)

28. window-setup-hook の実行

emacs-startup-hook と違ってフレームのパラメータが変更された後実行される。

29. スタートアップ画面の表示

コピーレフトや基本的な使い方を含む画面を表示する。
inhibit-startup-screen が指定されているか、 initial-buffer-choicenil でない、 または --no-splash, -Q が指定されている場合、この処理は実行されない。

30. デーモン化

デーモンモードで起動されている場合、 server-start を呼び出しデーモン化される。

31. emacs-session-restore の実行

X環境で実行されている場合、 emacs-seesion-restore に直前のセッションIDを渡し実行する。

Discussion