org-mode使っていますかー?

アウトラインスケジュール管理文書作成
大車輪の働きをするorg-mode、
これに独自の検索機能がついていることは知っていますか?

C-c /M-x org-sparse-tree が割り当てられています。

クエリに対応する見出しとその内容だけが表示され、
クエリの部分がハイライトされます。

実行すると

Sparse tree: [/]regexp [t]odo [T]odo-kwd [m]atch [p]roperty
             [d]eadlines [b]efore-date [a]fter-date [D]ates range
             [c]ycle through date types: scheduled/deadline

のようなメニューがエコーエリアに出てきます。

とくに C-c / / は検索語(正規表現)が含まれるツリーのみを表示してくれます。

org文書のうち、検索語に関連するところだけを拾い読みするのに便利です。

しかし、これは元のバッファの表示を変えてしまうので、
再び元の表示に戻すのが面倒です。

そこで、 indirect-buffer を用いることにします。

indirect-bufferとは、バッファの内容を共有したバッファであり、
1つのバッファに別なメジャーモードや表示状態を持てるようにするものです。

indirect-bufferを編集すると、元のバッファにも編集が反映されるので、
バッファにおけるシンボリックリンクみたいなものと考えてください。

この設定ではC-c /の結果をindirect-bufferで表示するようにして、
閲覧後はindirect-bufferを削除するだけで元のバッファに戻れるようにします。

ほんと、なんでindirect-bufferで結果表示しないのか不思議でなりません。

これによりストレスが1/16になりました。

設定 141010120124.org-sparse-tree-indirect-buffer.el(以下のコードと同一)

(require 'org)
(defun org-sparse-tree-indirect-buffer (arg)
  (interactive "P")
  (let ((ibuf (switch-to-buffer (org-get-indirect-buffer))))
    (condition-case _
        (org-sparse-tree arg)
      (quit (kill-buffer ibuf)))))
(define-key org-mode-map (kbd "C-c /") 'org-sparse-tree-indirect-buffer)

実行方法

$ wget http://rubikitch.com/f/141010120124.org-sparse-tree-indirect-buffer.el
$ emacs -Q -f package-initialize -l 141010120124.org-sparse-tree-indirect-buffer.el

20141010120351.png
Fig1: C-c / /で検索!バッファ名に-1とついている点に注目!

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