Org-modeとToodledoを連携させるorg-toodledo.elを非同期実行に対応させました
- 2015.02.15
- Emacs

ToodledoとOrg-modeを連携させることができるorg-toodledo.el、大変便利で愛用させてもらってます。
Emacsで書いたorg文書とToodledoを同期するorg-toodledo – 勉強日記
WeBlowg Side:org-modeとToodledoを連携してどこでもタスク管理
元々は、Org-mode界隈では有名なSacha chua さんが作っていたものをChristopher さんがforkしたものがMELPAにも登録されていました。
が、どうやらChristopherさんもメンテをしなくなってしまったようで、不具合が残ったままになっていました。
というわけで、そちらをまたforkしまして、org-toodledoをメンテしていくことにしました。MELPAにはすでに私のリポジトリに切りかえてもらいましたので、package.el等をお使いの方は、更新してもらえればいいと思います。
主な変更点は以下の4点です。
xml解析をxml-parse-regionからlibxml-parse-xml-regionに切りかえました
Emacs24.1からサポートされたlibxml2によりxml解析の関数として libxml-parse-xml-region
が追加されています。この関数は処理が高速なのがウリでして、Emacs24.4から同梱されるようになったWebブラウザ eww
でもその多大な恩恵を受けいます。
というわけで、org-toodledoでもその恩恵があるかもと切りかえてみることにしました。
Toodledoとの通信バックエンドをrequest.elに切りかえました
本家では、=url-http= パッケージをバックエンドに使う http-post-simple.elを使っています。
EmacsWiki: http-post-simple.el
このライブラリは、確かにシンプルで環境にも依存せず良いライブラリではあるのですが、今時使うならやっぱり request.elかなと思いましてこっちに切りかえました。
Request.el – Easy HTTP request for Emacs Lisp — Request.el 0.2.0 documentation
環境によってCurlなどに自動で切りかえてくれる便利なライブラリです。また、後述するdeferred.elとの親和性も高いため、こちらを使うことにしました。
Travis CI導入
それなりに大きなプログラムなので、Travis CIを導入してみました。とは言うもののあまりテスト書けてません。。。 まあ、おいおい。
ToodledoとOrg-modeの同期が非同期に実行できるようになりました
これがもっとも大きな変更点です。
本家では、通信周りが同期的に動作するようになっていて、同期するたびにガッツリブロックするその仕様に度々イライラしておりました。
今回の変更では、deferred.elを使ってToodledoとの通信からxmlの処理諸々が非同期に行なえるようになっています。また、deferrd.elの機能を使ってサーバとの通信を並列化したりしているので、高速化も期待できます。
deferred.el リリース – 技術日記@kiwanami
emacs-deferred/README.ja.markdown at master · kiwanami/emacs-deferred
ただ、いろいろと動作が不安定なところもあるため、非同期関連の変更については、asyncブランチで作業を行なっています。
dogfood eaterの皆様におかれましては、是非お召しあがりください。
今回の変更で気になっていた点は、ほぼ修正できたように思います。今後は、テストの追加やリファクタリングなどこまごまとした所に手を加えていこうかと思っています。
苦情、ご相談はGitHubのIssueにお願いします。不具合などはついでにテスト書いてプルリクもらえれば、大変ありがたいです。
-
前の記事
棚を自作した 2015.01.11
-
次の記事
アーカイブを透過的に操作できるAVFSが素敵だったし、dired-avfs.elを使えば展開とかしなくて良くなると思った 2015.02.21