Next: Recursive Edit, Previous: Editing Binary Files, Up: Top [Contents][Index]
Emacsの状態を1つのセッションから別のセッションのために保存するためには、desktopライブラリーを使用します。一度Emacsのデスクトップ(desktop)
— バッファーと、それらのファイル名、メジャーモード、バッファーでの位置など —
を保存すると、後のEmacsセッションで、保存されたデスクトップをリロードできます。デフォルトでは、デスクトップはフレームとウィンドウ構成も保存しようと試みます。これを無効にするには、desktop-restore-frames
をnil
にセットします(この振る舞いを調整するためにマスタマイズできる関連オプションについては、変数のドキュメントを参照してください)。
デフォルトでは、リモートファイルを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-mode
をt
にセットするか、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-desktop
をnil
(その場合はデスクトップをロードしない)、またはt
(確認なしでデスクトップをロードする)のいずれかにカスタマイズすることにより、抑止することができます。
Emacsがデーモンモードで起動する際はユーザーに質問することができないので、ロックされたデスクトップが見つかった場合は、desktop-load-locked-desktop
がt
以外であれば、それをロードしません。デーモンモードでのデスクトップのリストアは、その他の理由により問題になりがちなことに注意してください。たとえば、デーモンはGUI機能を使用できないので、フレーム位置やサイズ、装飾のようなパラメーターはリストアできません。この理由により、デスクトップのリストアを、server-after-make-frame-hook
にフック関数desktop-read
を追加して、それが呼び出されることにより、最初のクライアントが接続するまで、遅延させたいと思うかもしれません(Creating
Frames in The Emacs Lisp Reference Manualを参照)。