vimで休日表示付きのカレンダーを使う

calendar.vimを使うとVim上にカレンダーを表示する事が可能です。
ただデフォルトでは休日表示がされていないため、個人的にはほとんど使っていませんでした。
諸事情から休日表示付きのカレンダーがVim上に欲しいと思って、calendar.vimのソースを見てみたのですが、よくわからないのでcalendar.vimに休日表示を追加するプラグインを作ってみました。
さすがにカレンダーで休日表示がないのも考えにくいのでどっかにあるんだと思いますが、QFixHowmの休日定義をそのまま流用できるように作ったのでそれはそれということで車輪の再発明です。

とりあえず休日の強調表示は今回作成したプラグイン単独で行うのでQFixHowmは特に必要としません。

  • 今日は2011年11月05日で、 11月3日と11月23日が休日のためハイライトされています。
  • その他赤く表示されているのが休日です。
  • +記号がついてハイライトされている日が日記が存在する日で、23日は日記も存在している休日なので#記号で表示されハイライトされています。

インストール

今回作成したhowm-calendar.vimは以下にあります。
runtimepathの通った場所へコピーしてください。
https://sites.google.com/site/fudist/files/howm-calendar.vim


calendar.vimに表示する休日を定義するファイルにはQFixHowmの休日定義ファイルを使用します。
休日定義ファイル
https://sites.google.com/site/fudist/Home/qfixhowm#downloads
日本語部分は表示されないのでutf-8,cp932のどちらでもかまいません。
好みの場所においたらパスを登録します。

" calendar.vimで使う休日定義ファイル(パス等は環境に合わせてください)
let calendar_holidayfile = '~/howm/Sche-Hd-0000-00-00-000000.utf8'


あとは :Calendar でカレンダーを表示すると休日が強調表示されているはずです。

QFixHowmとの連携

休日表示とは関係ないですが、以下を .vimrcへ追加して日付上でを押すとQFixHowmで日記を書くことができます。

let calendar_action = "QFixHowmCalendarDiary"
let calendar_sign   = "QFixHowmCalendarSign"

あとQFixHowmを使っているなら calendar_holidayfileは設定しなくてもQFixHowmの設定から自動で探します(たぶん)

休日を強調表示する

サインは次の表のように表示されます。

普通日
+ 日記が存在する
@ 休日
# 休日で日記が存在する

休日とその他の日は別にシンタックスハイライトで色分けして表示されているはずです。

休日定義のフォーマット

休日定義ファイルで使用可能な定義はQFixHowmの予定・TODOのサブセットです。
現在のところは次の3種類のみサポートされています。

[2010/01/11]@@@(2*Mon)0 成人の日
[2010/02/11]@@@0 建国記念の日
[2011/03/21]@0 春分の日

@@@ は年単位の繰り返しで、第3水曜を指定したい場合は(3*Wed)のように曜日指定オプションを使用します。
つまり@@@では年と日指定は意味がなく月指定と曜日指定から生成されます。
@ は一回限りの指定です。

休日サインのシンタックスハイライト

calendar.vimを併用している場合、カーソルキーの左右等でデフォルト以外の月のカレンダーを表示させるとシンタックスハイライトがデフォルトに戻ってしまい、「休日」と「日記の存在する日」とが色で区別できなくなることがあります。
これはcalendar.vimシンタックスハイライトを毎回リセットしてしまうためですが、気になる場合はcalendar.vimシンタックス作成が終わった後に独自のシンタックス設定を行なってやれば良いということになります。
具体的には calendar.vim Ver.2.5なら1166行目の function Calendar()の最後に CalendarPost()を追加すると良いかと思います。

function! Calendar(...)
...()

  if search("\*","w") > 0
    silent execute "normal! gg/\*\<cr>"
  endif
  call CalendarPost()  " 独自の色分けのためここに追加する
  return ''
endfunction

lispのdefadviceみたいのが欲しいところです。

howm-calendar.vimの休日強調表示が気に入らない場合は次を設定して無効化してください。

" calendar.vimのハイライト表示変更
let calendar_howm_syntax = 0