Next: , Previous: , Up: Top   [Contents][Index]


44 Emacsセッションの保存

Emacsの状態を1つのセッションから別のセッションのために保存するためには、desktopライブラリーを使用します。1度Emacsのデスクトップ(desktop) — バッファーと、それらのファイル名、メジャーモード、バッファーでの位置など — を保存すると、後のEmacsセッションで、保存されたデスクトップをリロードできます。デフォルトでは、デスクトップはフレームとウィンドウ設定も保存しようと試みます。これを無効にするには、desktop-restore-framesnilにセットします(この振る舞いを調整するためにマスタマイズできる関連オプションについては、変数のドキュメントを参照してください)。

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

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

コマンドM-x desktop-saveで、デスクトップを手動で保存できます。Emacs終了時のデスクトップの自動保存を有効にすることもできます。またEmacs開始時に最後に保存されたデスクトップを自動的に復元することもできます。将来のセッションのためには、Customizationバッファー(Easy Customizationを参照してください)を使用して、desktop-save-modetにセットするか、initファイル(Init Fileを参照してください)に以下の行を追加します:

(desktop-save-mode 1)

initファイルでdesktop-save-modeをオンにした場合、Emacsはカレントディレクトリーで保存されたデスクトップを探します(より正確には、desktop-pathで指定されたディレクトリーを探して、最初に見つかったデスクトップを使用します)。したがって異なるディレクトリーに別のデスクトップを保存でき、開始ディレクトリーによりEmacsがリロードするデスクトップを決定できます。M-x desktop-change-dirとタイプすることにより、カレントデスクトップを保存して、他のディレクトリーに保存されたデスクトップをリロードできます。M-x desktop-revertとタイプすることにより、前にリロードされたデスクトップをリバートできます。

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

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

Emacsのデスクトップを空にするには、M-x desktop-clearとタイプします。これは内部バッファーを除いてすべてのバッファーをkillし、desktop-globals-to-clearにリストされたグローバル変数をクリアーします。特定のバッファーを残したい場合は、変数desktop-clear-preserve-buffers-regexpをカスタマイズします。この変数の値には、killしないバッファーの名前にマッチする正規表現を指定します。

あるセッションから別のセッションへ、ミニバッファーのヒストリーを保存したい場合は、savehistライブラリーを使用してください。

desktop-save-modeがオンの状態でEmacsが実行されているとき、デフォルトでは何らかの変更があった際は、常にデスクトップを自動保存します。変数desktop-auto-save-timeoutは、デスクトップ変更をEmacsがチェックする頻度を決定します。

Emacsがデスクトップを保存するファイルは、他のEmacsセッションによる不意の上書きを防ぐために、そのセッションの実行中はロックされます。このロックは、通常はEmacsのexit時に解除されますが、Emacsまたはシステムがクラッシュした場合、そのロックは残り、Emacsを再スタートする際に、デフォルトではロックされたデスクトップファイルのどちらを使用するか尋ねます。この質問は、変数desktop-load-locked-desktopnil(その場合はデスクトップをロードしない)、またはt(確認なしでデスクトップをロードする)のいずれかにカスタマイズすることにより、抑止することができます。

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