org-notify.elでスケジュールとかTODOのリマインダを通知


公私ともども、TODOやスケジュールはorg-modeを中心に管理しています。

管理していると言っても、常にorg-modeのバッファを見ているわけではなく、そもそもずっとEmacsを触っているわけではありません。

Emacsは常に起動しているものの、ブラウザを見ている時もありますし、ExcelやWordと戯れている時もあります。となれば、org-modeの中でTODO、スケジュールを管理してくれる秘書さんが必要です。

それが今回紹介するorg-notify.elです。

deadlineが近いアイテムをお知らせ

org-notify.elは、org-modeにバンドルされている拡張で、contribディレクトリに配置されています。package.elでインストールしたい場合は、org-modeの公式アーカイブを package-archives に追加して、=org-plus-contrib= をインストールしてください。

Org Emacs lisp Package Archive

org-notify では、deadlineが近づいてきたアイテムに対するリマインダをplistで定義します。以下に簡単な例を示します。

(org-notify-add 'appt
                '(:time "15m" :period "2m" :duration 100
                        :actions -notify)
                '(:time "3d" :actions -email))

ここでは、二つのリマインダが定義されています。それぞれのプロパティで、:timeはdeadlineまでの時間、:periodは次のリマインダを表示させるまでの期間、:duration はリマインダを表示させておく時間を示しています。

:action はリマインダの種類を示しています。 -notifyではnotifications.elを使ったデスクトップ通知の形でリマインダが表示されます。 -emailでは user-mail-address で設定されたメールアドレスにメールが送信されます。

:actionはデフォルトで6つ定義されています。詳しくは、org-notify-api.org を確認してください。

リマインダの定義がすめば、 (org-notify-start) を実行することで、リマインダのタイマが起動します。

独自のアクションを定義する

アクションは独自に定義することもできます。例として、前回紹介したgntp.elを使ったアクションを定義してみます。

(defun org-notify-action-growl (plist)
  "Pop up desktop notification via gntp."
  (gntp-notify 'org-notify (encode-coding-string (plist-get plist :heading) 'utf-8)
               (encode-coding-string  (org-notify-body-text plist) 'utf-8) "localhost"))

ここでsuffixがアクション名として認識されます。後は、追加するだけです。

(org-notify-add 'default '(:time    "60m"
                           :actions -growl
                           :period  "60m"))

というわけで、org-notify.elの紹介でした。独自のアクションを定義できるというのが、面白い所だと思います。 IFTTT なんかと連携させてみるのも面白いかもしれません。