Emacsの desktop というパッケージを使うと、Emacsの終了状態を、再起動後に自動で復元することができます。

保存される範囲

保存の対象として

  • いくつかのグローバル変数
  • ファイルバッファ(特定のファイルを開いているバッファ)
    • メジャーモード
    • ディレクトリ
    • ポイント(カーソル)の位置
    • 選択範囲
    • バッファ読取専用の状態
    • いくつかのロカール変数
  • フレームとウィンドウの設定

があります。さらに設定を追加することで

  • kill-ring(コピーの履歴)

も保存されます。

注意すべき点は、復元できる情報に制限があることです。

例えば、org-agendaのように動的に生成されるバッファは復元されません。

またtext-scale-modeを使って文字サイズを大きくしていたとしても復元されませんでした。

desktop機能を使う

この機能を有効にする手順は

まず M-x customize-option を実行して、カスタマイズ変数 desktop-save-mode を ONに変更します。

次に M-x desktop-save を実行します。状態が記録されるディレクトリを聞かれますので指定してください。現地点でのEmacsの状態が保存されます。

もし kill-ring も保存の対象にする場合、カスタマイズ変数 desktop-globals-to-savekill-ring を追加します。

30秒毎に自動保存

desktop-save-mode が有効な場合、標準の設定では30秒毎に保存されます。 この秒数の変更するには、 desktop-auto-save-timeout をカスタマイズしてください。

desktop-auto-save-timeout をOFFにして自動保存を無効にすることもできます。無効にした場合、 M-x desktop-save をその都度、手動で実行する必要があります。Emacsの起動時、固定した内容で復元する場合に使えそうです。

一時的に機能を無効にする

desktopの復元を行わずに、Emacsを起動したい場合、 Emacsのコマンドラインに --no-desktop を指定します。 代りに初期設定ファイルの読み込まないオプション --no-init-file を指定しても復元されません。

Mac OS XのCocoa版Emacsを使っている場合は、

$ open -a Emacs --args --no-desktop

$ open /Applications/Emacs.app/ --args --no-desktop

のように実行します。

複数の保存先を切り換える

保存先は切り替えられるので、複数の環境を切り替えて使うことも可能です。

M-x desktop-save を実行して任意のディレクトリへ保存しておきます。

ディレクトリを変更するコマンド M-x desktop-change-dir を実行して、そのディレクトリを復元できます。

覚えるべきコマンド

desktop-revert

保存された最新の状態に戻します。

desktop-save-in-desktop-dir

現在、使用されているディレクトリへ上書きします。

desktop-change-dir

保存先のディレクトリを変更して内容を復元します。

他にも desktop-removedesktop-clear などもあります。詳しくは EmacsのInfo、44 Saving Emacs Sessions を参照してください。

動作確認環境

動作環境に使用したEmacsのバージョンは次の通りです。

GNU Emacs 25.0.50.2 (x86_64-apple-darwin14.5.0, NS appkit-1348.17 Version 10.10.5 (Build 14F27))