今更ながらorg-modeを勉強してみる

まとまった時間がとれるんだから、とりあえずEmacsのorg-modeでも始めてみようか。org-modeは何年も前から知っていたんだけどあまりに大規模でどこから手をつけていいのかわからず、試してすらいなかった。
Emacs22にも標準添付なのだが、バージョン4.67dなのでかなり古い。しかし日本語訳が4.60ベースなのでまずは標準添付バージョンから試してみる。古いとはいってもソースが2万行あるからめちゃくちゃ大規模だ。
アウトラインを中心としてTODO管理やら予定表やらGTDやらもうなんでもありらしい。ハイパーリンクとかも使えるし。初org-modeでアウトラインがめちゃくちゃ便利なのがわかったので、うまく活用していけば文章を書くスタイルも改善されていくだろう。大規模な文章であってもひとつのファイルで作業できるので、「前どんなの書いてたかな」とか「前書いたところの言い回しどうだったかな」なんて情報はisearchやらanything-moccurやらですぐに呼び出せるな。メモの大原則「ポケットひとつの法則」も遵守できるな。ファイルを分けるよりも管理が楽だし検索性が上がる。

「C-c /」でorg-occurが実行される。マッチした部分にハイライトがつき、アウトラインを適宜展開してくれる。これを知っただけでも嬉しい。

最新版はgitで得られる。分散バージョン管理システムだから改善とかはすぐできるな、よし。

git clone git://repo.or.cz/org-mode.git

とりあえずMakefileがあるのでmake一発でバイトコンパイルできるな。
ソースコードの分量を見てみると恐しいばかり。ファイルがいくつも増えている。行数は45000行かぁ…

$ wc lisp/*.el
   5693   24389  221316 lisp/org-agenda.el
    422    1812   15388 lisp/org-archive.el
    350    1582   13320 lisp/org-attach.el
    332    1495   12110 lisp/org-bbdb.el
    204    1061    8280 lisp/org-bibtex.el
   1191    4985   43692 lisp/org-clock.el
   1571    6393   62331 lisp/org-colview-xemacs.el
   1343    5533   52149 lisp/org-colview.el
    294    1286   11151 lisp/org-compat.el
   4829   18756  171639 lisp/org-exp.el
   1537    5135   53267 lisp/org-export-latex.el
    532    2587   22668 lisp/org-faces.el
    195     824    7378 lisp/org-gnus.el
    589    2786   20916 lisp/org-id.el
     82     357    2785 lisp/org-info.el
   1002    5598   39154 lisp/org-install.el
    256    1119    9120 lisp/org-irc.el
    208    1010    7925 lisp/org-jsinfo.el
   1091    4203   36286 lisp/org-list.el
     84     440    3181 lisp/org-mac-message.el
    224     966    7764 lisp/org-macs.el
    130     535    5084 lisp/org-mew.el
    220     875    7949 lisp/org-mhe.el
   1145    4043   39315 lisp/org-mouse.el
    345    1502   12483 lisp/org-plot.el
    755    3201   30029 lisp/org-publish.el
    997    4313   39459 lisp/org-remember.el
    109     426    3807 lisp/org-rmail.el
   4072   18060  157160 lisp/org-table.el
    181     846    6511 lisp/org-timer.el
    131     560    4974 lisp/org-vm.el
    168     753    6501 lisp/org-w3m.el
    145     573    5489 lisp/org-wl.el
  14831   64815  563158 lisp/org.el
  45258  192819 1703739 合計

org.el自体は20klocから15klocに減少しているので、おそらくorg.elは中核部分にしぼって、付加機能は外に追い出しているようだ。

その中には俺が使っているモードとの連携がある。気になるものはorg-mew.el、org-w3m.elあたりだな。ともに100行ちょいだからすぐに読めそうだ。

最終的には文章を書くmodeをorg-modeに統一したいのだが、決められたフォーマットで書かないといけない文章があるのが問題だ。原稿執筆にはその出版社のフォーマットを、ブログははてな記法を、RubyによるプロジェクトのドキュメントはRDocを…って具合に。それに10年来RDで書いてきたから捨てるのも忍びない。う〜ん……org-exp.elやorg-publish.elが鍵を握っているのだろうか。こいつも750行しかないから解析に困ることはなさそう。新たなフォーマットへ対応させることを学ぶのが急務だろう。

Webフレームワークでいえばmerbというよりrailsっぽい印象だな、初見の印象だけど。全部与えられてるから規約に従えみたいな。どうなんだろうね。

キーバインドがおそろしいほど定義されているが、わからなくなったらdescbinds-anything.elで調べられるし、なんとかなりそうだ。describe-bindingsをkey-chord.elを使ってdfに割り当ててみた。id:buzztaiki++

(require 'key-chord)
(key-chord-define-global "df" 'describe-bindings)

describe-bindings.elについては→descbinds-anything.elを使ってみた - http://rubikitch.com/に移転しました
key-chord.elについては→Ctrl+中指か薬指を使うキー操作が多いEmacsで指の負担を軽くする方法 - http://rubikitch.com/に移転しました