EmacsのScratchバッファに設定を追加してみた

Emacsのscratchバッファってすごく便利ですよね。

特に以下のことによく使います。

  • ちょっとしたメモしたり
  • URLメモを取ったり
  • ちょっとした引用メモの整形とか
  • マクロの実験とか

まぁよく使うわけです・・・ が、ついうっかりでEmacsを終了したりとか、Emacs本体がゾンビプロセスになったりとかでロストしてしまうことがあります。
自分はこれでよく泣きました(> <;)

また、メモを保存しておこうと思った時にバッファの先頭にある初期メッセージが鬱陶しくなってきます。

今回は、これらの問題を解決してしまいます。

まずは、scratchの初期メッセージ消去します。
以下の内容を「.emacs/init.el」に追加します。

1
(setq initial-scratch-message "")

この設定を加えて、Emacsを再起動するとscratchバッファの初期メッセージがなくなります。 即座に反映したければ、評価してもいいとおもいます。

次に、Emacsが終了してしまったときにScratchバッファの保存と再起動時にScratchバッファの内容を復元する方法ですが・・・

以下の内容を「.emacs/init.el」に追加します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
(defun save-scratch-data ()
  (let ((str (progn
               (set-buffer (get-buffer "*scratch*"))
               (buffer-substring-no-properties
                (point-min) (point-max))))
        (file "~/.emacs.d/backups/.scratch"))
    (if (get-file-buffer (expand-file-name file))
        (setq buf (get-file-buffer (expand-file-name file)))
      (setq buf (find-file-noselect file)))
    (set-buffer buf)
    (erase-buffer)
    (insert str)
    (save-buffer)
    (kill-buffer buf)))

(defadvice save-buffers-kill-emacs
  (before save-scratch-buffer activate)
  (save-scratch-data))

(defun read-scratch-data ()
  (let ((file "~/.emacs.d/backups/.scratch"))
    (when (file-exists-p file)
      (set-buffer (get-buffer "*scratch*"))
      (erase-buffer)
      (insert-file-contents file))
    ))

(read-scratch-data)

上のEmacsLispが何をやっているかと言うと・・・
終了時にScratchの内容をファイルに書き込み、起動時に書き出したScratchバッファの内容を読み込みしているだけです。

これで、Scratchバッファをちょっとしたメモ帳として大いに活用できますね。