Kentaro Kuribayashi's blog

Software Engineering, Management, Books, and Daily Journal.

scratchバッファとファイルを同期する

*scratch*バッファを自動保存する」からもらってきたのと合わせてやった。

  • *scratch*バッファと同期するファイルはひとつだけ
  • バッファ削除時、Emacs終了時にファイルに保存
  • Emacs起動時に*scratch*バッファにそのファイルの内容をロードする
  • 定期保存するほどのものでもないのでやらない。Emacsが落ちたら内容なくなる
(setq scratch-map-file "~/.scratch")

(defun scratch-save-kill-emacs-hook ()
  (let ((scratch-buf (get-buffer "*scratch*")))
    (when scratch-buf
      (with-current-buffer scratch-buf
        (when (not (string= initial-scratch-message (buffer-string)))
          (write-file scratch-map-file nil))))))

(defun scratch-save-kill-buffer-hook ()
  (when (equal (current-buffer) (get-buffer "*scratch*"))
    (unless (string= initial-scratch-message (buffer-string))
      (write-file scratch-map-file nil))))

(defun scratch-read-after-init-hook ()
  (let ((scratch-buf (get-buffer "*scratch*")))
    (when scratch-buf
      (with-current-buffer scratch-buf
        (erase-buffer)
        (insert-file-contents scratch-map-file)))))

(add-hook 'kill-emacs-hook  'scratch-save-kill-emacs-hook)
(add-hook 'kill-buffer-hook 'scratch-save-kill-buffer-hook)
(add-hook 'after-init-hook  'scratch-read-after-init-hook)