Next: , Previous: , Up: The Emacs Editor   [Contents][Index]


45 Emacsセッションの保存

デスクトップライブラリーを使用して、あるセッションから別のセッションにEmacsの状態を保存することができます。保存されるEmacsのデスクトップ構成(desktop configuration)にはバッファーとそのファイル名、メジャーモード、バッファー位置、ウィンドウおよびフレームの構成、それにいくつかの重要なグローバル変数が含まれます。

この機能を有効にするにはCustomizationバッファー(Easy Customizationインターフェースを参照)を使用してdesktop-save-modetにセットするか、initファイル(Emacs初期化ファイルを参照)に以下の行を追加します:

(desktop-save-mode 1)

initファイルでdesktop-save-modeをオンにしていれば、Emacsが起動時にdesktop-path (デフォルトはまずuser-emacs-directory、次にホームディレクトリー)から保存されたデスクトップを探して、見つかった最初のデスクトップを使用します。desktop-save-modeがオンの状態でEmacsが実行されている間は、デスクトップ構成の変更時は常にデスクトップが自動的に保存されます。Emacsがデスクトップの変更をチェックする頻度は、変数desktop-auto-save-timeoutによって決定されます。デスクトップはEmacsをexitする際にも保存されます。

保存されたデスクトップ構成をリロードしたくないときは、Emacsを実行するコマンドラインでオプション‘--no-desktop’を指定します。これはカレントセッションにたいして、desktop-save-modeをオフにします。‘--no-init-file’オプションを指定してEmacsを開始することにより、通常desktop-save-modeをオンにしているinitファイルをバイパスして、デスクトップのリロードを無効にすることもできます。

別のディレクトリーに別個にデスクトップ構成を保存することができます。desktop-pathにセットされているディレクトリーの前に. (カレントディレクトリー)を追加するようカスタマイズすることによって、保存済みのデスクトップ構成のあるディレクトリーからEmacsを起動した際にその構成がリストアされるようになります。M-x desktop-change-dirとタイプすれば、カレントのデスクトップを保存して別のディレクトリーに保存されているデスクトップをリストアできます。前にリロードしたデスクトップをリバートするにはM-x desktop-revertとタイプしてください。

Emacsがデスクトップを保存するファイルは、他のEmacsセッションによる意図せぬ上書きを防ぐためにそのセッションの実行中はロックされます。このロックは通常はEmacsのexit時に解除されますが、Emacsまたはシステムがクラッシュするとそのロックが残ってしまい、デフォルトではEmacsの再起動時にロックされたデスクトップファイルのどちらを使用するか尋ねます。この質問は変数desktop-load-locked-desktopnil (デスクトップをロードしない)、またはt (確認なしでデスクトップをロードする)のいずれかにカスタマイズすることにより抑止できます。check-pidという特別な値にカスタマイズすることもできます。これはローカルマシン上でそのデスクトップをロックしたEmacsが実行されていなければそのファイルをロードすることを意味します。この値はロックしたEmacsが別のマシンでまだ実行中という状況で使用するべきではありません。マルチユーザー環境において、NFS等を用いてホームディレクトリーがリモートにマウントされているのかもしれません。

Emacsがデーモンモードで起動する際にはユーザーに質問することができないので、ロックされたデスクトップが見つかってもdesktop-load-locked-desktopt以外であればロードしません。デーモンモードでのデスクトップのリストアは、その他の理由により問題になりがちなことに注意してください。たとえばデーモンはGUI機能を使用できないので、フレーム位置やサイズ、装飾のようなパラメーターはリストアできません。この理由によりserver-after-make-frame-hookにフック関数desktop-read (下記参照)を追加して、それが呼び出されることにより最初のクライアントが接続するまで、デスクトップのリストアを遅延させたいと思うかもしれません(Creating Frames in The Emacs Lisp Reference Manualを参照)。

カレントデスクトップを即座に強制的に保存したければ、任意のタイミングでコマンドM-x desktop-saveを使うことができます。これはデスクトップを自動リストアしたくないのでdesktop-save-modeをオンにしていない、あるいはデスクトップに重要な変更を施し、その構成をEmacsやシステムのクラッシュで失わないよう確実にしたい場合に役に立ちます。Emacsのカレントセッションがまだデスクトップを何もロードしていなければ、M-x desktop-readを使用して以前に保存したデスクトップをリストアできます。

デフォルトでは、デスクトップはフレームとウィンドウの構成の保存とリストアを試みます。これを無効にするには、desktop-restore-framesnilにセットしてください(この振る舞いを調整するためにマスタマイズできる関連オプションについては変数のドキュメントを参照のこと)。

desktopがフレームとウィンドウの設定をリストアするときは、フレームパラメーターの記録された値を使用します。initファイル(Emacs初期化ファイルを参照)でそれらのパラメーターに何をセットしていても無視されます。これは、リストアされたフレームにたいするフォントやフェイスのようなフレームパラメーターは、前のEmacsセッションを終了したときに保存されたdesktopファイルから取得され、initファイルでのそれらのパラメーターにたいするセッティングは無視されることを意味します。これを無効にするには、リストアしたくないフレームパラメーターを除外するように、frameset-filter-alistの値をカスタマイズしてください。その後はinitファイルで行ったカスタマイズに応じてパラメーターがセットされる筈です。

デフォルトでは、リモートファイルをvisitしているバッファーに関する情報は保存されません。変数desktop-files-not-to-saveをカスタマイズして、これを変更することができます。

デフォルトでは、デスクトップのすべてのバッファーは1度に復元されます。しかし、デスクトップにたくさんのバッファーがあるときは遅くなるかもしれません。変数desktop-restore-eagerで、即座に復元するバッファーの最大数を指定できます。残りのバッファーはEmacsのアイドル時に、ゆっくり(lazily)と復元されます。

Emacsのデスクトップを空にするには、M-x desktop-clearとタイプします。これはたとえば次にM-x desktop-readを呼び出して別のデスクトップに切り替えたい場合に役に立つかもしれません。desktop-clearコマンドは内部バッファーを除くすべてのバッファーをkillして、desktop-globals-to-clearにリストされたグローバル変数をクリアーします。特定のバッファーを残したい場合は、変数desktop-clear-preserve-buffers-regexpをカスタマイズします。この変数の値には、killしないバッファーの名前にマッチする正規表現を指定します。

あるセッションから別のセッションにミニバッファーのヒストリーを保存したければ、savehistライブラリーを使用してください。選択されているミニバッファーヒストリーの変数をdesktop-globals-to-saveの値として追加して、desktop-save-modeに属する変数として保存することもできます。