Alt Text

Emacsのメモ環境としては、howm や open-junk-file を使っているのですが、チョコッとした付箋メモは、作業エリアに常時見えていてほしい。そこでScratchバッファーを使った付箋メモ機能を試してみました。

やっているのは下記の通り。決して難しいことはしていない。

  1. defaultのScratch messageは、非表示にする。
  2. Scratchバッファーを Killさせない。(M-x package install unkillable-buffers)
  3. Emacsを終了するときにScratchの内容を自動保存し、次回起動時それを読み込んで表示させる。
  4. Timestamp付きのメモは、上へ上へ書き足される。不要になったメモは、手動で消す。
  5. どのバッファーを開いていてもScratch-popでメモを表示できる。(M-x package install scratch-pop)

設定

;;---------------------------------------------------------------------------
;; 20_scratch-memo.el                                last updated: 2017/10/02
;;---------------------------------------------------------------------------
;; Hide scratch message
(setq initial-scratch-message "")

;; Do not kill Scratch buffers
(setq unkillable-buffers
      '("^\\*scratch\\*$"))
(unkillable-scratch 1)

;; Write Scratch buffers to a file and keep it
(defun save-scratch-data ()
  (let ((str (progn
       (set-buffer (get-buffer "*scratch*"))
       (buffer-substring-no-properties
        (point-min) (point-max))))
(file "~/Dropbox/emacs.d/.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 "~/Dropbox/emacs.d/.scratch"))
    (when (file-exists-p file)
      (set-buffer (get-buffer "*scratch*"))
      (erase-buffer)
      (insert-file-contents file))))
(read-scratch-data)

;; Insert scratch-memo
(defun scratch-memo-new-post()
  (interactive)
   (goto-char (point-min)) 
   (insert (format-time-string "%Y-%m-%d(%a) %H:%M:%S\n・\n" (current-time)))
   (forward-line -1)
   (forward-char 1))
(bind-key "C-c m" 'scratch-memo-new-post) 

;; Scratch-pop setting
(require 'scratch-pop)
(bind-key "C-c s" 'scratch-pop) 

Scratch-popの使い方

scratch-popを起動させると、作業中のバッファーの下部にScratch-memoがpopup表示されますので、新しいメモの追加などがスピーディーに行えます。書き終わったら C-g で閉じてくれます。これが実に便利なんです。

Scratchの保存先

~/.emacs.dに保存するという事例が多いですが、私の場合は、複数環境(macOS,Linux)でEmacsを使うので、Emacsの設定ファイル群も含めてDropboxに保存して、どの環境からでも共有して使えるようにしています。