Next: , Up: Emacsのスタートアップ   [Contents][Index]


42.1.1 要約: スタートアップ時のアクション順序

Emacsは起動時に以下の処理を行います(startup.el内のnormal-top-levelを参照):

  1. このload-pathの各ディレクトリー内にあるsubdirs.elという名前のファイルを実行してload-pathにサブディレクトリーを追加する。このファイルは通常はそのディレクトリー内にあるサブディレクトリーをこのリスト変数に追加して、それらを順次スキャンする。ファイルsubdirs.elは通常はEmacsインストール時に自動的に作成される。
  2. load-pathのディレクトリー内で見つかったleim-list.elをすべてロードする。このファイルは入力メソッドの登録を意図している。この検索はユーザーが作成するかもしれない個人的なleim-list.elすべてにたいしてのみ行われる。標準的なEmacsライブラリーを含むディレクトリーはスキップされる(これらは単一のleim-list.elだけに含まれるべきでありEmacs実行形式にコンパイル済)。
  3. 変数before-init-timecurrent-timeの値をセットする(時刻を参照)。これはafter-init-timenilをセットすることによりEmacs初期化時にLispプログラムへの合図も行う。
  4. LANGのような環境変数がそれを要するなら言語環境と端末のコーディングシステムをセットする。
  5. コマンドライン引数にたいして基本的なパースをいくつか行う。
  6. ユーザーの早期initファイルをロードするEarly Init File in The GNU Emacs Manual(を参照)。これはオプション‘-q’、‘-Q’、または‘--batch’が指定されていたら行われない。‘-u’オプションが指定されたらEmacsはかわりにそのユーザーのホームディレクトリー内でinitファイルを探す。
  7. インストール済みのオプションのEmacs Lispパッケージをすべてアクティブ化するために関数package-activate-allを呼び出す。パッケージ化の基礎を参照のこと。しかしpackage-enable-at-startupnil、または‘-q’、‘-Q’、‘--batch’のいずれかのオプションで開始時には、Emacsはパッケージのアクティブ化をしない。後者のケースでパッケージをアクティブ化するには、(たとえば‘--funcall’オプションを通じて)明示的にpackage-activate-allを呼び出すこと。
  8. batchモードで実行されていなければ変数initial-window-systemが指定するウィンドウシステムを初期化する(initial-window-systemを参照)。初期化関数window-system-initializationジェネリック関数generic functionであり、本当の実装はサポートされる各ウィンドウシステムごとに異なる(ジェネリック関数を参照)。initial-window-systemの値がwindowsystemなら、ファイルterm/windowsystem-win.el内で適切な初期化関数の実装が定義されている。このファイルはビルド時にEmacs実行可能形式にコンパイルされているはずである。
  9. ノーマルフックbefore-init-hookを実行する。
  10. それが適切ならグラフィカルなフレームを作成する。グラフィカルなフレーム作成の一環としてinitial-frame-alistdefault-frame-alist (フレームの初期パラメーターを参照)により指定されたウィンドウシステム用のwindow-system-initialization関数を呼び出すことにより、そのウィンドウシステムのグラフィカルなフレームを初期化する。これは(非インタラクティブな)batchモードやデーモンモードでは行われない。
  11. 初期フレームのフェイスを初期化して必要ならメニューバーとツールバーをセットする。グフィカルなフレームがサポートされていたら、たとえカレントフレームがグラフィカルでなくても、後でグラフィカルなフレームが作成されるかもしれないのでツールバーをセットアップする。
  12. リストcustom-delayed-init-variables内のメンバーを再初期化するためにcustom-reevaluate-settingを使用する。これらのメンバーは、デフォルト値がビルド時ではなく実行時のコンテキストに依存する、すべての事前ロード済ユーザーオプションである。custom-initialize-delayを参照のこと。
  13. 存在すればライブラリーsite-startをロードする。これはオプション‘-Q’か‘--no-site-file’が指定された場合は行われない。
  14. ユーザーのinitファイルをロードする(initファイルを参照)。これはオプション‘-q’、‘-Q’、または‘--batch’が指定されていたら行われない。‘-u’オプションが指定されたらEmacsはかわりにそのユーザーのホームディレクトリー内でinitファイルを探す。
  15. 存在すればライブラリーdefaultをロードする。これはinhibit-default-initが非nil、あるいはオプション‘-q’、‘-Q’、または‘--batch’指定された場合には行われない。
  16. もしファイルが存在して読み込み可能なら、abbrev-file-nameで指定されるファイルからユーザーのabbrevをロードする(abbrev-file-nameを参照)。オプション‘--batch’が指定されていたら行われない。
  17. 変数after-init-timecurrent-timeの値をセットする。この変数は事前にnilにセットされている。これをカレント時刻にセットすることが初期化フェーズが終わったことの合図となり、かつbefore-init-timeと共に用いることにより初期化に要した時間の計測手段を提供する。
  18. ノーマルフックafter-init-hookdelayed-warnings-hookを実行する。後者はスタートアップの前ステージの間に発せられたが、自動的に遅延された警告メッセージすべてを表示するフック。
  19. バッファー*scratch*が存在して、まだ(デフォルトであるべき)Fundamentalモードならinitial-major-modeに応じたメジャーモードをセットする。
  20. テキスト端末で開始された場合には、端末固有のLispライブラリー(端末固有の初期化を参照)をロードしてフックtty-setup-hookを実行する。これは--batchモード、またはterm-file-prefixnilなら実行されない。
  21. inhibit-startup-echo-area-messageで抑制していなければエコーエリアに初期メッセージを表示する。
  22. これ以前に処理されていないコマンドラインオプションをすべて処理する。
  23. オプション--batchが指定されていたら、ここでexitする。
  24. *scratch*が存在して空ならばバッファーに(substitute-command-keys initial-scratch-message)を挿入する。
  25. initial-buffer-choiceが文字列ならその名前のファイル(かディレクトリー)をvisitする。関数なら引数なしでその関数を呼び出して、それがリターンしたバッファーを選択する。コマンドライン引数として単一のファイルが与えられた場合にはファイルをvisitして、そのバッファーをinitial-buffer-choiceのそばに表示する。複数のファイルが与えられた場合にはすべてのファイルをvisitして、initial-buffer-choiceのそばに*Buffer List*バッファーを表示する。
  26. emacs-startup-hookを実行する。
  27. initファイルの指定が何であれ、それに応じて選択されたフレームのパラメーターを変更するframe-notice-user-settingsを呼び出す。
  28. window-setup-hookを実行する。このフックとemacs-startup-hookの違いは前述したフレームパラメーターの変更後にこれが実行される点のみ。
  29. copyleftとEmacsの基本的な使い方を含んだ特別なバッファースタートアップスクリーン(startup screen)を表示する。これはinhibit-startup-screeninitial-buffer-choiceが非nil、あるいはコマンドラインオプション‘--no-splash’か‘-Q’が指定されていたら行われない。
  30. デーモンが要求された場合にはserver-startを呼び出す(POSIXシステムではバックグラウンドのデーモンが要求された場合には制御端末からデタッチされる)。Emacs Server in The GNU Emacs Manualを参照のこと。
  31. セッションマネージャーにより開始された場合には、以前のセッションのIDを引数としてemacs-session-restoreを呼び出す。セッションマネージャーを参照のこと。

以下のオプションはスタートアップシーケンスにおけるいくつかの側面に影響を与えます。

User Option: inhibit-startup-screen

この変数が非nilならスタートアップスクリーンを抑制する。この場合にはEmacsは通常は*scratch*バッファーを表示する。しかし以下のinitial-buffer-choiceを参照されたい。

新しいユーザーがcopyleftやEmacsの基本的な使い方に関する情報を入手するのを防げるので、新しいユーザーのinitファイル内や複数ユーザーに影響するような方法でこの変数をセットしてはならない。

inhibit-startup-messageinhibit-splash-screenはこの変数にたいするエイリアス。

User Option: initial-buffer-choice

nilならこの変数はスタートアップ後にスタートアップスクリーンのかわりにEmacsが表示するファイルを指定する文字列であること。この変数が関数ならEmacsはその関数を呼び出して、その関数はその後に表示するバッファーをリターンしなければならない。値がtならEmacsは*scratch*バッファーを表示する。

User Option: inhibit-startup-echo-area-message

この変数はエコーエリアのスタートアップメッセージの表示を制御する。ユーザーのinitファイル内に以下の形式のテキストを追加することによりエコーエリアのスタートアップメッセージを抑制できる:

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

Emacsはユーザーのinitファイル内で上記のような式を明示的にチェックする。ユーザーのロフイン名はLispの文字列定数としてこの式内に記述されていなければならない。Customizeインターフェイスを使用することもできる。他の方法で同じ値にinhibit-startup-echo-area-messageをセットしてもスタートアップメッセージは抑制されない。この方法により望むならユーザー自身で簡単にメッセージを抑制できるが、単に自分用のiniファイルを別のユーザーにコピーしてもメッセージは抑制されないだろう。

User Option: initial-scratch-message

この変数が非nilなら、Emacsのスタートアップやこのバッファーの再作成の際に*scratch*バッファーに挿入するドキュメントとして扱われる文字列であること。nilなら*scratch*バッファーは空になる。

以下のコマンドラインオプションはスタートアップシーケンスにおけるいくつかの側面に影響を与えます。Initial Options in The GNU Emacs Manualを参照してください。

--no-splash

スプラッシュスクリーンを表示しない。

--batch

対話的な端末なしで実行する。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のinitファイルを探す際に使用するディレクトリーを指定する。