org-modeをoutliner(iPhoneアプリ)と同期←個人的には最高の環境!
org-mode(emacs上で使えるアウトラインエディタ)とCabonFin Otliner(iphone上で使えるアウトラインエディタ)を連携させるrubyスクリプトを作ってみました。
名前はopml2org.rbとorg2opml.rbです。
このスクリプトを使えばiPhone上で以下のようなことが可能になります。
1. ノードを移動
2. todoをワンクリックでチェック
MobileOrg
org-modeをiPhoneで見る方法としては公式アプリのMobileOrgが有ります。しかし、MobileOrgは基本的に閲覧用でemacs上のorg-modeに比べるとかなり機能が制限されています。個人的に致命的だったのが、アウトラインファイルなのにiPhone上でノードの移動ができなかった点です。
2010年10月30日からアップデートされておらず、今後機能が追加される可能性も低いため、必要な条件を満たした環境を自分で作ることにしました。
仕組み
outlinerはDropbox内にopml形式でファイルをエクスポートできます。rubyスクリプトでopmlファイルとorgファイルを相互に変換できるようにしました。
使用方法
注意!:スクリプトの使用は自己責任でお願いします。また、使用する前には下の注意点もご確認ください。
前提
Windows側:ruby実行環境
iPhone側:outlinerの保存場所をDropboxに指定してある
スクリプト用意
1. rubyスクリプトをここからダウンロード
2. フォルダを解凍して好きな場所に置く
3. .emacsなりinit.elなりに以下のelispを追加
基本的にはrubyスクリプトを読み出しているだけです。
スクリプトやorgファイル、outlinerフォルダのアドレスは各自の環境にあわせて修正してください。
(defun opml2org ()
(interactive)
(let* ((script "c:/Users/"ユーザー名"/Dropbox/emacs/scripts/opml2org.rb") ;script file
(input-dir "c:/Users/"ユーザー名"/Dropbox/Outliner/") ;input
(output-file "c:/Users/"ユーザー名"/Dropbox/memo/org/outliner.org") ;output
(command (concat "ruby -Ku " script " " input-dir " " output-file)))
(shell-command command)
(if (not (eq (get-buffer "outliner.org") nil)) ;もし、ファイルが開かれていれば
(find-file-noselect output-file) ;ファイルを開き直すか聞く
())
))
(defun org2opml ()
(interactive)
(let* ((script "c:/Users/"ユーザー名"/Dropbox/emacs/scripts/org2opml.rb") ;script file
(outliner-dir "c:/Users/"ユーザー名"/Dropbox/Outliner/") ;input
(org-file "c:/Users/"ユーザー名"/Dropbox/memo/org/outliner.org") ;output
(command (concat "ruby -Ku " script " " org-file " " outliner-dir)))
(shell-command command)
))
実行
1. M-x opml2org :opmlのファイルをorgファイルに変換
M-x org2opml :orgファイルをopmlファイルに変換
2. 好みに応じて起動や終了にhook
(add-hook 'kill-emacs-hook 'org2opml)
(add-hook 'emacs-startup-hook 'opml2org)
注意!
1. かなりいい加減なコードです
2. orgファイルで無駄に深いノードが有るとエラーが発生します
例:
** title
********* memo
*** memo
3. 同期のたびにすべてのノードが閉じてしまいます。
org2opmlは<expansionState>を作らない
活用方法
blog下書き
外で大まかな目次を考えておき、家に帰ったらemacsで清書。このblogもそうやって書きました。めっちゃ便利!
チェックリスト
例1)買い物リストなどをemacs上で作っておき、iPhoneで確認しながら買い物。
例2)旅行で必要なものリストを作っておきiPhone上でチェックしながら作業
MobileOrgでも似たようなことはできますが、org2opmlならタップ一回でチェックを付けれる上、iPhone上で新しい項目を追加できることができます。
このiphone上で新しい項目というのはすごく大切。作業中に「あ! あれも必要」と気付いたときにすぐメモできます。
参考URL
OPML 1.0 Specificationの勝手な日本語訳
http://hail2u.net/documents/opml_spec.html
RubyでXML操作 | Netsphere Laboratories
http://www.nslabs.jp/ruby-rexml.rhtml