Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defmacro util:aif (pred then &rest else)
- "PRED を評価し、結果が non-nil ならば THEN、nil ならば ELSE の評価結果を返す.
- THEN、ELSE 内では PRED の評価結果を `it' で参照出来る."
- `(let ((it ,pred))
- (if it ,then ,@else)))
- (defmacro util:awhen (pred &rest body)
- "PRED を評価し、結果が non-nil ならば BODY を評価し、最後の式の結果を返す.
- BODY 内では PRED の評価結果を `it' で参照出来る."
- `(ini:aif ,pred (progn ,@body)))
- (defvar scratch-save-file (locate-user-emacs-file "scratch")
- "`*scratch' バッファの保存先ファイル名.")
- (defvar scratch-buffer-save-interval 1
- "`*scratch*' バッファの自動保存間隔.")
- (defvar prev-scratch-modified-tick 0
- "`*scratch*' バッファの前回保存時の更新状態.")
- (defun resume-scratch-buffer ()
- "`*scratch*' バッファの内容を復帰する."
- (interactive)
- (let ((scratch (get-buffer-create "*scratch*"))
- (file (expand-file-name scratch-save-file))
- (buffer-undo-list t))
- (with-current-buffer scratch
- (when (file-exists-p file)
- (erase-buffer)
- (insert-file-contents file)
- (set-buffer-modified-p nil)
- (setq scratch-modified-tick (buffer-chars-modified-tick))
- ))))
- (defun save-scratch-buffer ()
- "`*scratch*' バッファの内容を保存する."
- (interactive)
- (util:awhen (get-buffer "*scratch*")
- (with-current-buffer it
- (let ((modified-tick (buffer-chars-modified-tick)))
- (unless (eq modified-tick prev-scratch-modified-tick)
- (setq prev-scratch-modified-tick modified-tick)
- (save-restriction
- (widen)
- (write-region (point-min) (point-max)
- (expand-file-name scratch-save-file)
- nil 'slient)
- ))))))
- (add-hook 'after-init-hook
- (lambda ()
- (resume-scratch-buffer)
- ;; 読み込みに成功したら自動保存を有効化
- (run-with-idle-timer scratch-buffer-save-interval t 'save-scratch-buffer)
- (add-hook 'kill-emacs-hook 'save-scratch-buffer)
- ))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement