fc2ブログ

ochiaiの備忘録

読んだ本や、パソコン関係の話などまとまり無く

org-modeをoutliner(iPhoneアプリ)と同期←個人的には最高の環境!

emacs_blog下書き 2012-07-14 22.09.25


 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

Home