sync-recentf 20160326.1301(in MELPA)
Synchronize the recent files list between Emacs instances

概要

複数のEmacsを同時に立ち上げていると、
最近開いたファイルが上書きされてしまう恐れがあります。

なぜなら、最近開いたファイルは変数 recentf-list に記憶されており、
その内容が変数 recentf-save-file が示すファイル(~/.emacs.d/recentf) に
記憶されるからです。

複数のEmacsがそのファイルを取り合いすると、上書きされてしまうのです。

これは僕自身も体験したことであり、この事故により
貴重な最近開いたファイルの情報が失われてしまいました。

recentfを含むパッケージの動作確認をしているときに、
その事故は起きました。

この事故を防ぐには2つの方法があります

1つはメインで使うEmacsの recentf-save-file を別なファイルにすることで、
僕自身がやっている方法です。

僕のように1つのEmacsインスタンスを使い回す人はこれでいいのですが、
常に複数のEmacsを立ち上げている人は別のアプローチが必要です。

それは、 sync-recentf.el を使って複数のEmacs間の
recentf-list を同期させることです。

最近開いたファイルは recentf-save-list によってファイルに書き出されますが、
sync-recentf.el はファイル書き出し前に同期処理を加えるよう挙動を変更します。

同期は recentf-save-file に保存された内容を読み込み、
前回の同期時から追加されたファイルを加えて recentf-save-file に
書き出すことで行います。

また、 recentf-cleanup にも同期処理を行うようアドバイスがかけられており、
recentf-auto-cleanup を設定することで一定時間おきに同期されることになります。

最近開いたファイルに限らず、複数のEmacsインスタンスで
ファイルの取り合いになるときにどのように解決しているのかを
見ていくのはおもしろいのではないでしょうか。

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。

(package-initialize)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")
        ("org" . "http://orgmode.org/elpa/")))

初めてsync-recentfを使う方は
以下のコマンドを実行します。

M-x package-install sync-recentf

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name sync-recentf

設定 151008073113.sync-recentf.el(以下のコードと同一)

(require 'sync-recentf)
(setq recentf-auto-cleanup 60)
(recentf-mode 1)

実行方法

$ wget http://rubikitch.com/f/151008073113.sync-recentf.el
$ emacs -Q -f package-initialize -l 151008073113.sync-recentf.el


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。