Emacs で最近開いたファイルのリストを自動保存する。

Emacs はずっと起動しっぱなしが常なので、終了するときはいつだって強制終了です。
まぁ、ヘビーなEmacsユーザーは、タイマーによる自動バックアップで、強制終了しても焦らず元の状態に復元できるようにしていると思うので、強制終了も正常終了とそんなに違いがないし、強制終了してこそ Emacs を使い熟しているというのが専らの噂です。

Emacs で最近使ったファイルを実現する recentf。

最近使ったファイルは非常に便利です。Emacs にも recentf というものがあり、これで実現しています。
本体付属ですので、有効にするには、以下の設定を書くだけです。

(require 'recentf)
(recentf-mode 1)

有効にしておくと、M-x recentf-open-files というコマンドから、もしくは File メニューから過去に開いたファイルが選択できるようになりますが、普通は anything から利用します。これについては今回は割愛。
開いたファイルは、recentf-save-file に設定されているファイル (デフォルトでは ~/.recentf) につらつらと記録されていき、次回起動時も参照できるわけですが、このファイルの保存のタイミングは、Emacs の終了時か、recentf-mode をオフにしたときなので、強制終了した場合は、残念ながら保存されません。

アイドルタイマーを利用して .recentf ファイルを自動的に保存する。

Emacs には操作していない時間に、何か裏で作業をさせるためのアイドルタイマーという機能があります。これを利用すると、ぼーっと考えている時間を利用して、自動的にあれこれ保存させることが出来るというわけです。
そんなわけで、自動保存を導入した僕の設定はこんな感じです。

(when (require 'recentf nil t)
  (setq recentf-max-saved-items 2000)
  (setq recentf-exclude '(".recentf"))
  (setq recentf-auto-cleanup 10)
  (setq recentf-auto-save-timer
        (run-with-idle-timer 30 t 'recentf-save-list))
  (recentf-mode 1))

recentf-exclude は、正規表現を利用して .recentf に含めないファイルを指定することができます。
recentf-auto-cleanup は、ファイルに保存する前に .recentf に保存するための情報を整理してくれます。これもアイドルタイマーを利用してくれます。
実際に自動保存の部分は (run-with-idle-timer 30 t 'recentf-save-list) という記述となっています。run-with-idle-timer 関数に「時間」と「2度目も実行するかどうか」、そして実行したい関数を指定します。
変数につっこんでいるのは、オンオフをコマンド化しようとして止めた名残りです。どうでも良くなったんですね。

これで Emacs がまたひとつ強制終了に強くなりました。

というわけで、recentf が消えてがっかりしたことのある人は、サクっと設定を追加して自動保存しておきましょう。何か久しぶりの Emacs 記事でした。