もうちょっと早く紹介記事を書くつもりだったのですが、orgmode の本家 ML から召喚されて、２週間ほど ML での対応やパッチ取り込み、細かい機能追加などを行っておりました。ということで、 v1.0 から飛んで v1.2 になりました。

以前の記事もある程度参考になると思いますが、設定方法が変わっていますので気をつけてください。

cfw:calendar-mode-map で以下のように定義しています。

SPC キーで Mac の クイックル ックのように、その日の詳細バッファをさっと開いて確認することが出来ます。もう一度 SPC を押すと引っ込みます。

カレンダーの表示内容は以下のようです。（以前のものの再掲）

今のところ以下の４種類のビューがあります。

既に calfw を使われている方は以下の点を確認して必要があれば設定を修正してください。先日紹介いただいた Ubuntu Recipe の記事 の内容からも変更が有ります。

calfw 自体はカレンダーが必要なアプリケーションのための コンポーネント という立場なので、それ自体ではカレンダーが表示されるだけで余りうれしくありません。

以下のコードを評価すると今月のカレンダーが表示されます。

後、 Gentoo や Debian にはパッケージがあるそうです。メンテナーの皆さんありがとうございます。

他の拡張も合わせて使うような人は git clone しておくと便利かもしれません。

カレンダー本体 calfw.el については auto-install.elで以下の式を評価して入れるか、ダウンロードしてload-pathの場所に置いてください。

必要なものは Emacs 本体（手元では23.2で試しています）だけです。

スケジュール管理との組み合わせ

howm howmのスケジュールやTODOをカレンダー内に表示することが出来ます。まず以下の追加プログラムをインストールします。 howm 連携プログラム https://github.com/kiwanami/emacs-calfw/raw/master/calfw-howm.el

最小限の連携コードは以下のようです。 ( require ' calfw-howm ) ( cfw:install-howm-schedules ) ( define-key howm-mode-map ( kbd "M-C" ) ' cfw:open-howm-calendar ) これで、 howm-mode 使用時（howmのメニューなど）で M-C で howm のカレンダーを表示することが出来ます。

また、予定のある日付で Enter キーを押すと、日付で howm の記事を検索します。ここから予定の編集などが出来ます。qでカレンダーバッファを終了（kill-buffer）します。 HowmとElscreenの連携を使っている人は、バインド先のコマンドはこちらの方が良いかもしれません。 ( define-key howm-mode-map ( kbd "M-C" ) ' cfw:elscreen-open-howm-calendar ) こちらは新しいスクリーンを作成してそちらでカレンダーを表示します。 さらに、howmのメニューファイルに以下の行を追加すると、そこにカレンダーを表示させます。 %here%(cfw:howm-schedule-inline) この場合、以下のような画面になります。



Howm のメニューに表示！ さらに、このカレンダー内部では前述の日付移動のキーバインドが使えますので、メニュー内で日付や月の移動、またその日の予定一覧の表示が出来ます。 さらに、自分は予定は一つのメモ（「2010年予定」とか）に集約しているのですが、そうするとカレンダーから日付を選んで予定を入力するように出来ます。自分が使っているHowm連携のコードは以下のようです。 ( defvar my-howm-schedule-page "2011年予定" ) ( defun my-cfw-open-schedule-buffer () ( interactive ) ( let* (( date ( cfw:cursor-to-nearest-date )) ( howm-items ( howm-folder-grep howm-directory ( regexp-quote my-howm-schedule-page )))) ( cond (( null howm-items ) ( howm-create-file-with-title my-howm-schedule-page nil nil nil nil )) ( t ( howm-view-open-item ( car howm-items )))) ( goto-char ( point-max )) ( unless ( bolp ) ( insert "

" )) ( insert ( format "[%04d-%02d-%02d]@ " ( calendar-extract-year date ) ( calendar-extract-month date ) ( calendar-extract-day date ))))) ( eval-after-load "howm-menu" '( progn ( require 'calfw-howm ) ( cfw:install-howm-schedules ) ( define-key howm-mode-map ( kbd "M-C" ) 'cfw:elscreen-open-howm-calendar ) ( define-key cfw:howm-schedule-map ( kbd "i" ) 'my-cfw-open-schedule-buffer ) ( define-key cfw:howm-schedule-inline-keymap ( kbd "i" ) 'my-cfw-open-schedule-buffer ) )) ( setq cfw:howm-schedule-summary-transformer ( lambda ( line ) ( split-string ( replace-regexp-in-string "^[^@!]+[@!] " "" line ) " / " ))) これで普通のスケジュール管理（Google Calendar, iCal, Outlookなど）と同じように、「カレンダーから開いている日を探して予定を入れる」というユースケースが実現できるようになりました。

org Emacs の万能情報管理ツール orgmode との連携です。現在、 orgmode の本家 ML で機能追加などが議論されています。 org 連携プログラム https://github.com/kiwanami/emacs-calfw/raw/master/calfw-org.el

org-agenda をカレンダーで表示するには、 Emacs の設定ファイルの適当なところに以下のように1行加えます。 ( require ' calfw-org ) 後は、 M-x cfw:open-org-calendar とすると、カレンダーで表示されるはずです。グローバルキーバインドに割り当てておけば、一発で開くことが出来て多分便利です。



org-agenda のカレンダー表示 org-agenda のカレンダー表示 cfw:org-agenda-schedule-args の変数に :scheduled :sexp :closed :deadline :todo :timestamp などを入れることによって、表示する内容を多少絞ることが出来ます。

混ぜて表示 org と ical のスケジュールを混ぜて表示させることが出来ます。以下のような感じで cfw:open-calendar-buffer を使います。 ( require ' calfw-org ) ( require ' calfw-ical ) ( defun my-open-calendar () ( interactive ) ( cfw:open-calendar-buffer :view ' month :contents-sources ( list ( cfw:org-create-source "Seagreen4" ) ( cfw:ical-create-source "my calendar" "https://www.google.com/calendar/ical/../basic.ics" "Pink" ) ( cfw:ical-create-source "共有スケジュール" "https://www.google.com/calendar/ical/../basic.ics" "#2952a3" )))) M-x my-open-calendar とすると、org と ical を一緒に表示することが出来ます。 cfw:open-calendar-buffer やカスタマイズの詳細については次回の記事に書く予定です。