私自身は scratchバッファはほとんど使わないのですが、
会社の同僚が scratchバッファにいろいろ書いている最中
Emacsが落ちてしまってえらい目にあっていたので書いてみました。
同様のコードはいろんなところにあるんだけど、定期的に保存って
いうのはあまりなかったので、そこが新しいかなと。
コード
こんな具合です。
elispは全然詳しくないので、指摘していただけると嬉しく思います。
追記 バッファサイズが 0の場合保存しないようにしました。
(defun scratch-buffer-save-periodically () (let ((pid (emacs-pid)) (save-dir (expand-file-name "~/.emacs.d")) (scratch-buffer (get-buffer "*scratch*"))) (when scratch-buffer (with-temp-buffer (erase-buffer) (insert-buffer scratch-buffer) (unless (= (- (point-max) (point-min)) 0) (write-region (point-min) (point-max) (format "%s/scratch-%s-%d" save-dir (format-time-string "%Y-%m-%d") pid) nil 'silent)))))) (run-at-time t 60 'scratch-buffer-save-periodically)
run-at-timeに第二引数を好きな秒数にしてもらえれば、その秒ごとに
保存されます。ファイル名は何でもいいかなと思ったんですが、複数の
Emacsの scratchでごにょごにょしている人のことを考慮して、日付と pidを
付けるようにしました。
まとめ
scratchバッファを定期的に保存する方法を示しました。
scratchバッファを使うことは個人的にはおすすめしません。
ちょっと面倒でもファイル作ってやった方がいいと思います。
もしくは open-junk-file等を使うようにすべきだと思います。
EmacsWiki: open-junk-file.el