Skip to content

Latest commit

 

History

History
81 lines (62 loc) · 3.73 KB

1410101151.org-sparse-tree-indirect-buffer.org

File metadata and controls

81 lines (62 loc) · 3.73 KB

Emacs org-modeの検索機能を16倍パワーアップする方法

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になりました。

(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

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