scratch バッファでプログラムをテストしてると、まれに xyzzy がフリーズしてしまうことがある。フリーズすると、いままで scratch バッファで書いてたものがパーになるのでつらい。
そこで scratch バッファだけを RAM ディスクに自動保存するようにしてみた。
tips/xyzzyでファイルの自動保存をパクらせてもらった。
;;; auto-save-scratch-buffer
;;;
;;; *scratch* バッファ専用の auto-save-buffers
;;; 保存先は RAM disk を想定
;;;
;;; インストール (下の一行を .xyzzy に書く)
;;; (require "auto-save-scratch-buffer")
(provide "auto-save-scratch-buffer")
(in-package "editor")
(export '(auto-save-scratch-buffer
*auto-save-scratch-buffer-interval*
*auto-save-scratch-buffer-path*))
(defvar *auto-save-scratch-buffer-p* nil
"auto-save-scratch-buffer で保存中なら non-nil")
(defvar *auto-save-scratch-buffer-interval* 10
"自動保存するまでのアイドル時間")
(defvar *auto-save-scratch-buffer-path* "R:/scratch"
"自動保存するファイルの path")
(defun auto-save-scratch-buffer ()
"scratch バッファを自動セーブする"
(let ((buf (find-buffer "*scratch*")))
(when (and (eq (selected-buffer) buf)
(buffer-modified-p buf)
(check-valid-pathname (directory-namestring *auto-save-scratch-buffer-path*)))
(setf *auto-save-scratch-buffer-p* t)
(set-buffer buf)
(write-file *auto-save-scratch-buffer-path* t)
(set-buffer-modified-p nil buf)
(refresh-screen 0)
(message "saved scratch.")
(setf *auto-save-scratch-buffer-p* nil))))
(add-hook '*post-command-hook*
#'(lambda ()
(stop-timer 'auto-save-scratch-buffer)
(start-timer *auto-save-scratch-buffer-interval* 'auto-save-scratch-buffer t)))
;;; auto-save-scratch-buffer ends here
インストール
- 上記を auto-save-scratch-buffer.l として site-lisp に保存。byte-compile。
- .xyzzy に (require "auto-save-scratch-buffer") を足す。
デフォでは 10秒おきに保存。
そういえば、emacs でも同じようなのを書いたような・・・。
0 コメント :
コメントを投稿