after-init-hook と emacs-startup-hook の違いを読み解く

当たり前だけど、「どちらも hook なのだけど名前が違う」ってことは「起動されるタイミングが違う」ってことだ。 で、 Startup Summary - GNU Emacs Lisp Reference Manual を見ると

  • after-init-hook は 17.
  • emacs-startup-hook は 25.

でそれぞれ呼び出されているので、言い換えると 「 after-init-hook のあと 18. - 24. の処理をしてから emacs-startup-hook が呼ばれる」 ってことだ。

というわけで、ざっくり 18. - 24. の処理を読み解くと…

  • *scratch* バッファーの mode を設定する
  • (--batch 時省略) テキストターミナルから起動されていたらそれら固有のライブラリーを読み込んで、 tty-setup-hook を呼ぶ
  • エコーエリアの初期メッセージ表示
  • ここまでで処理されていないコマンドラインオプションを処理
  • --batch が指定されていたら Emacs を終了
  • *scratch* バッファーが存在する かつ 空 だったら初期メッセージを挿入する
  • initial-buffer-choice もしくはコマンドラインオプションで指定されたファイルの buffer を current buffer にする

って感じのよう。 これを見る限り、そんなにナーバスになって使い分けなきゃいけないこともなさそうなんだけど、

  • 初期バッファに反映させたい設定とかは after-init-hook で終わっていたほうが良い??
  • 逆にバッファーとか関係なく、 (server-start) のように「単に起動時に1度実行しておきたいだけ」みたいなのは emacs-startup-hook で良さそう??
  • --batch でも適用されていた方がいいものは after-init-hook ??

って感じかな??