hnwの日記

Emacsの自動セーブに頼るくらいなら本当にセーブしよう

Dropbox管理のファイルをEmacsで編集していると、Emacsの自動セーブファイル(ファイル名が#からはじまる謎のファイル)までDropboxに保存されてしまって悲しい気分になります。この問題に対して「ubulog: Emacsでオートセーブファイルの作成場所を変える」などで、自動セーブファイルをtemporary-file-directoryに保存する設定が紹介されています。これはナイスな設定だと思って僕も使っていたんですが、本当に良い手なのでしょうか。


そもそも自動セーブファイルが不要or邪魔なら作らなければいいのではないでしょうか。一方で、万一の保険として必要ということであれば、もっと素晴らしい保険があります。それが高林さんの記事「Emacsでファイルの自動保存 (auto-save-buffers)」で紹介されているauto-save-buffersです。


auto-save-buffersを使うと、Emacsが確認もなくセーブするようになります。30秒に1回くらい自動セーブファイルを作る代わりに、ファイル本体に勝手に上書き保存します。紹介されている設定に従えば、0.5秒間タイプをサボるとセーブします。少しでも悩んだらセーブされる勢いです。


最初にこの話を聞いたときは「そんなキモい設定で使えるか」と思ったのですが、せっかく時間と頭を使ったコードや文章を失う恐怖に比べたら、どんな気持ち悪さでも我慢できると考え直しました。実際に使ってみると、思ったほどはキモくないです。


こんな設定でDropboxを使って大丈夫なのかが不安ですが、画像ファイルをガンガン置くのに比べたら数秒おきにテキストファイルをセーブするくらいは許されるのではないでしょうか。これだけ頻繁にセーブするとDropboxのRevisionからファイルを救い出すのが困難な気がしますが、今までの僕の使い方だとRevisionが必要になったことは無いので良いことにします。


本稿の内容からすると蛇足ですが、MacOSXCarbon Emacsだとtemporary-file-directoryは"/var/folders/DT/なぞの文字列/-Tmp-/"のような場所になります。そして、このディレクトリは起動時にクリアされてしまいます。不慮の事故でOSごと死んだ場合を想定すると、保険のつもりの自動セーブファイルが再起動時に削除されてしまうわけです。つまり、何にせよMacOSXではtemporary-file-directoryに自動セーブする設定はお勧めできません。


最後に、僕の現在の.emacsの設定を紹介します。多分意味は無いと思いますが、自動セーブファイルの設定も残してあります。

;; auto-save-buffers: Emacsでファイルの自動保存
;; http://0xcc.net/misc/auto-save/
(when (require 'auto-save-buffers nil t)
  (run-with-idle-timer 0.5 t 'auto-save-buffers))

;; 自動セーブファイル(#ファイル名#)の設定
(setq auto-save-file-name-transforms
      `((".*/Dropbox/.*" ,(expand-file-name "~/tmp/") t)))