scratch-pop 20150820.139(in MELPA)
Generate, popup (& optionally backup) scratch buffer(s).

概要

scratch-pop.el は、 popwin.el を使って
*scratch*バッファをポップアップさせます。

C-c cで*scratch*バッファを開き、
メモを書いたらC-gで閉じるだけです。

scratch-pop.elが提供するのはたったこれだけの機能ですが、
短期的なメモにおいては十分です。

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。

(package-initialize)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")
        ("org" . "http://orgmode.org/elpa/")))

初めてscratch-popを使う方は
以下のコマンドを実行します。

M-x package-install scratch-pop

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name scratch-pop

ここではさらに以下のパッケージもインストールします。
M-x package-install auto-save-buffers-enhanced
M-x package-install popwin

短期的なメモと長期的なメモ

*scratch*バッファをメモ用途に
使っている人はけっこういるかと思います。

僕は昨日まで*scratch*バッファをほとんど使っていませんでした。

僕はずっと昔から open-junk-file.el を使っていて、
コードの試行錯誤はすべて ~/junk/ 以下に保存しています。

メモは M-x org-capture を使ってメモファイルに一元管理しています。

しかし、昨日のツイートがきっかけで、
メモには2種類の目的があることに気付きました。

2014/11/23 16:27:39 kai2nenobu > これまじ便利。*scratch*でメモして、強制
終了でメモ紛失という事故がなくなる。 "【自動保存】Emacsから「ファイル保存」
という概念を消し飛ばす。*scratch*も自動保存 | るびきち「日刊Emacs」" -
http://emacs.rubikitch.com/auto-save-buffers-enhanced/ // by
Tsuenobu Kai from KeySnail [Tokyo, Japan]

2014/11/23 20:09:20 rubikitch > なるほど、*scratch*を短期的なメモ用途とし
て使えるわけだ。コードの試行錯誤はやっぱりopen-junk-fileだが、これで
*scratch*の新しい使い方が思い付いたよ。 >> RT // by るびきち@日刊Emacs
from twmode [Emacs on Debian]

org-captureによるものはあくまで永続性のあるメモであり、
作業中における短期的なメモにおいてはいまいち使い勝手がよくないです。

そこで*scratch*に目をつけました。

auto-save-buffers-enhanced.elと組み合わせる

昨日紹介したauto-save-buffers-enhanced.el では
*scratach*バッファが自動保存されるので併用しましょう。

これでメモがなくなる心配はありません。

おまけの機能

ついでに*scratch*バッファを快適に使うために以下の設定もやっています。

  • メジャーモードは org-mode (好みに応じて)
  • C-c C-eでバッファを全消去
  • C-c C-cでバッファの内容をkill-ringに入れて閉じる

scratch*バッファ専用の *マイナーモード を定義しています。

設定 141124043904.scratch-pop.el(以下のコードと同一)

(require 'auto-save-buffers-enhanced)

;;; *scratch*を ~/.emacs.d/scratch に自動保存するだけ
;;; ファイルを自動保存したい人はregexpsの設定をしてください
(setq auto-save-buffers-enhanced-include-regexps nil)
(setq auto-save-buffers-enhanced-exclude-regexps nil)
(setq auto-save-buffers-enhanced-save-scratch-buffer-to-file-p t)
(setq auto-save-buffers-enhanced-file-related-with-scratch-buffer
      (locate-user-emacs-file "scratch"))
(auto-save-buffers-enhanced t)

;;; C-x a sでauto-save-buffers-enhancedの有効・無効をトグル
(global-set-key "\C-xas" 'auto-save-buffers-enhanced-toggle-activity)

;;; scratch-popの設定
(require 'scratch-pop)
(global-set-key (kbd "C-c c") 'scratch-pop)

;;; ついでにscratchバッファを快適にする設定
;; (makunbound 'scratch-ext-minor-mode-map)
(define-minor-mode scratch-ext-minor-mode
  "*scratch*バッファ専用のマイナーモード"
  nil ""
  '(("\C-c\C-c" . scratch-pop-kill-ring-save-exit)
    ("\C-c\C-e" . erase-buffer)))

(with-current-buffer (get-buffer-create "*scratch*")
  (erase-buffer)
  (ignore-errors
    (insert-file-contents auto-save-buffers-enhanced-file-related-with-scratch-buffer))
  (org-mode)                            ;好みに応じて
  (setq header-line-format "scratch!!")
  (scratch-ext-minor-mode 1))

(defun scratch-pop-kill-ring-save-exit ()
  "*scratch*バッファの内容をkill-ringに入れてから閉じる"
  (interactive)
  (kill-new (buffer-string))
  (erase-buffer)
  (funcall (if (fboundp 'popwin:close-popup-window)
               'popwin:close-popup-window
             'quit-window)))

実行方法

$ wget http://rubikitch.com/f/141124043904.scratch-pop.el
$ emacs -Q -f package-initialize -l 141124043904.scratch-pop.el

20141124083446.png
Fig1: *scratch*バッファがポップアップするよ!

本サイト内の関連パッケージ


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。