vimでhowm形式の予定・TODOをアラーム表示する

vim/gvimのCursorHoldを使用した、テキトーな予定・TODOアラーム表示プラグインです。
howm形式の予定・TODOで指定した時間になると、コマンドラインに予定やTODOなどのメッセージを表示します。
アラーム時間指定にhowmの予定・TODO形式を使用しているだけなので、howmは必要としません。

CursorHoldを利用するので、予定・TODO表示チェックはキー入力から updatetime(デフォルトは4秒)が経過した時に行われます。
放置しっぱなしでは、CursorHold イベントが呼び出されないのでアラームが表示されません。
つまり予定時間を超えた後、何かキー操作やウィンドウ切替などを行っている事が必要になります。


vimで作業している時のみアラーム表示される、という仕様的にはなかなか微妙な感じですが、意外と使えたりします。
当然タイミングによってはアラームが遅れて表示されるので、動作を理解して、あまり信用せずに使用してください。


またQFixHowmを使用しているなら、QFixHowmの当日の予定も取り込むことも出来ます。

インストール

howm-alarm.vim
vimfiles/plugin(.vim/plugin)やランタイムパスの通った場所へコピーしてください。
QFixHowmを使用している場合は、同じディレクトリでもかまいません。
QFixHowmは2009/07/22以降のバージョンを使用してください。
時刻のアクションロックが追加されているので、予定時刻の変更も楽になります。

設定

アラーム定義をするファイルとファイルエンコーディングを設定してください。

"使用するファイル名(デフォルトは '~/alarm.howm')
let HowmAlarmFile = 'd:/usr/alarm.howm'
"使用するファイルエンコーディング(デフォルトは &encoding)
let howm_fileencoding = 'cp932'

QFixHowmの予定をアラーム表示させるだけなら設定は不要です。

使い方

HowmAlarmFileで指定したファイルに予定を書き込みます。
時刻まで指定しているhowm形式の予定・TODOを、指定時刻になると表示します。
HowmAlarmFileで指定したファイルに以下のような感じでアラーム定義してみてください。

[2009-07-07 18:00]@ 表示される予定。今日の日付で近い時間に設定してみてください。

アラーム定義に必要なのは行頭の [2009-07-07 18:00]@ だけなので後は好きに書いて下さい。
この例だと2009年7月7日の18:00を過ぎた後に、vimで何か作業しているとアラーム表示されます。
アラームの機能的には意味がありませんが、予定・TODOの識別子には -@+!~ が使用できます。
プラグインを使用するだけならさほど意味はありませんが、本プラグインで対応するhowm形式の予定・TODOの詳しい事は「howmの予定・TODO」を参照して下さい。


また日付に 0000-00-00 を指定すると、毎日の繰り返しになります。
繰り返し予定では後述するオプションの時間オフセットは無視されます。

[0000-00-00 18:00]@ 毎日18:00に繰り返す予定

また [R:]を定義に含めても1日ごとの繰り返しになります。

[2009-07-08 18:00]@ 2009年07月08日以降は毎日18:00に繰り返す予定 [R:]


予定・TODOを再読込するには

:HowmAlarmReadFile

を実行します。

:HowmAlarmReadFileを実行するとHowmAlarmFileで指定したファイルを読み込みます。
また取り込むファイル名の指定も可能で、その際 :HowmAlarmReadFile! のように!を付けると登録済みのアラームを削除せずに追加登録出来ます。

アラーム表示はで消す事が出来て、表示されたのに見逃したアラームは:messages で確認できます。

アラームのオプション定義

予定の中に以下の文字列があると、表示形式と時間のオフセットを指定できます。
時間については+-の両方が指定可能です。

[T:+10] 指定時間の10分後にコマンドラインにデフォルト表示(時間のオフセット指定)
[N:] 指定時間にコマンドラインにノーマル表示
[S:-30] 指定時間の30分前にコマンドラインに強調表示
[D:10] 指定時間の10分後にダイアログを出して表示
[R:] 指定時間以降は、1日ごと同時刻の繰り返し
[R:10] 指定時間以降は10分ごとにリピート表示。
[2000-01-01 18:00]@ なにか予定を書きます [T:-30]

この例では18:00の30分前にアラーム表示されます。

QFixHowmの予定を取り込む

QFixHowmを使用しているなら、起動時に自動で予定を取り込みます。
登録されるのは g,yで表示される予定・TODOのうち [2000-01-01 18:00]@ のように時刻まで含まれた予定です。
取り込むのは一日一回だけです。
QFixHowmの予定・TODOのうち、登録したくないものは QFixHowmAlarmFilterReg に適当な正規表現を指定してやると登録されません。
取り込まれた予定はQFixHowmAlarmFileで指定されるファイルに保存されています。

"QFixHowmからの予定取り込みファイル
let QFixHowmAlarmFile = '~/.qfh-alarm.howm'
"必要なら再取り込みをキーマップしてください
nnoremap <silent> g,Y :QFixHowmAlarmReadFile!<CR>

以下を設定すると、QFixHowmの予定を自動取り込みしません。

"1以上を指定するとQFixHowmから一日一回だけ予定を取り込む
let HowmAlarmUseQFixHowm = 0

QFixHowmからの取り込みを利用している場合、再読込には以下のコマンドを使用して下さい。
HowmAlarmReadFile同様にファイル名を指定する事も出来ます。

QFixHowmAlarmReadFile HowmAlarmReadFileで指定したファイルの予定・TODOを変更した場合
QFixHowmAlarmReadFile! QFixHowmの予定・TODOを変更した場合

オプション一覧

"使用する定義ファイル
let HowmAlarmFile = '~/alarm.howm'
"QFixHowmからの予定取り込みファイル
let QFixHowmAlarmFile = '~/.qfh-alarm.howm'
"1以上を指定するとQFixHowmから一日一回だけ予定を取り込む
"2を指定すると取り込み後に予定をを表示したままにする
let HowmAlarmUseQFixHowm = 2
"HowmAlarmに登録しない正規表現(QFixHowmの予定のみ)
let QFixHowmAlarmFilterReg = ''
"デフォルトの表示形式
"0:表示しない 1:ノーマル 2:強調表示 3:ダイアログ
let HowmAlarmDispMode = 2
"アラームが表示される時間のデフォルトオフセット
"-10なら、時間オフセット指定のない予定は10分前に表示される
let HowmAlarmTimeOffset = 0
"時間オフセットが定義されている時、予定時間にもアラーム表示する
let HowmAlarmDefaultAlarm = 0
"起動時に登録するときの時間オフセット
"-10なら 登録時の10分前の予定も登録される
let HowmAlarmRegOffset = -10