- 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
本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。