calfwとorg-gcalの連携

NO IMAGE

昨日、紹介したorg-gcal.elですが、calfwと連携して使うことでさらに便利に使うことができます。

Emacs用カレンダー calfw v1.2 リリース – 技術日記@kiwanami

というわけで、今回はcalfwとの連携について紹介します。

新しいcalfw-sourceについて

もともとcalfwにはOrg-mode用のcalfw sourceがすでに定義されています。

calfw の org-agenda 対応 calfw-org.el – 技術日記@kiwanami

kiwanamiさんが書かれているように定義ずみのcalfw sourceはorg-agendaをベースにしています。org-agendaはorg-modeのタイムスタンプデータを管理するにとても便利なツールですが、タスク管理を指向しているきらいがあってスケジュールを管理するには何かと不都合です。

個人的な理由とすれば、せっかくorg-elementの勉強をしたので、org-elementベースのcalfw sourceを書いてみたかったというのもあります。

というわけで、まずはそちらからすでに紹介していこうと思います。

新しいOrg-modeのcalfw-sourceはすでにcalfw本体にマージしてもらっているのですでにMELPAなどでインストールされている方はアップデートすればよいかと思います。

もしまだcalfwを使われてないのであれば、el-getなりpackage.elなりでインストールしてください。Debian/Ubuntuユーザの方であれば、aptでもインストールできるようです。

Debian – sid の emacs-calfw パッケージに関する詳細

新しいcalfw-souceは、対話的に呼びだせる関数を準備していないので、自分でsourceを組み合わせて関数を作る必要があります。

設定例としては次のようになるかと思います。

;;cfw:org-capture-templateはcalfw-orgを
;;requireする前に評価しておいてください。
(setq cfw:org-capture-template
      '("c" "calfw2org" entry 
        (file "~/schedule.org")
        "*  %?\n %(cfw:org-capture-day)"))

(require 'calfw-org)

(defun cfw:open-calendar ()
  (interactive)
  (let ((cp
         (cfw:create-calendar-component-buffer
          :view 'month
          :contents-sources
          (list 
           (cfw:org-create-file-source
            "仕事" "~/schedule.org" "#268bd2")
           (cfw:org-create-file-source
            "遊び" "~/yaschedule.org" "#859900")))))
    (switch-to-buffer (cfw:cp-get-buffer cp))))

これらを評価して、 cfw:open-calendar を実行すると次のようなカレンダーが出てくるはずです。 予定をクリックするか、予定の上にキャレットを置いている状態でエンターキーを押すと該当のOrgファイルに飛びます。この動作は既存のcalfw sourceと同様の動作になります。

screenshot-03.png

サンプルのOrgファイルを二つgistに置きましたので、実際に試してみてください。

org-gcalとの連携

新しいcalfw-sourceでは、org-captureを介して簡便に予定を登録できるようにしました。 上の設定例では cfw:org-capture-template に代入した値で保存先のファイル名や割りあてるキーを決めています。

要は、org-capture-templateに新しいテンプレートを追加しているわけです。

上の設定がなされていれば、新しい予定を登録した日にちにフォーカスがあたっている状態で、c を押すと次のようなバッファがポップアップしてくると思います。

screenshot-06.png

後は、予定の内容を諸々書きこみ C-c C-c とすればOrgファイルに書きこまれます。この時にorg-gcalがすでにインストールされていれば、Googleカレンダーにも自動的に予定が登録されます。

まとめ

昨日から今日にわたり、Emacs、Org-mode、Googleカレンダーを使ったスケジュール管理法を紹介させてもらいました。

今回の日記をきっかけに素敵なOrgersが増えてくれれば幸いです。