QFixHowm - howmの予定とTODO

なお休日定義ファイルを使用していない場合は休日シフトなど一部の機能は使えません。

このページでは QFixHowm のキーマップを g と設定したものとして説明しています。

その他にもカレンダー表示した日記を簡単な予定・TODO機能として使うことができるかもしれません。
メニューとカレンダー

予定とTODOの書式とコマンド


予定とTODOは、通常のエントリのように g,c で新規ファイルを作成するか、適当なhowmファイルを開いて追加して下さい。
予定しかないファイルを作成したい場合は、タイトル行を削除してもかまいません。

howmの予定・TODOは次のフォーマットで作成します。
[タイムスタンプ](識別子){オプション} 具体的な予定やTODO
(例)
[2009-10-10 14:00]@ 今日は芋煮会
[2009-10-03]+7 ユミル=テミルにお手紙を書く
タイムスタンプの後の @ や + が、予定とTODOの識別子で、識別子の後には各種オプションを指定します。
予定・TODOのタイムスタンプは「時刻あり」と「時刻なし」どちらの書式でも動作します。

予定・TODOの詳しい内容については、通常のエントリのように予定・TODOの定義行の次に書いておく事も出来ます。
TODOなどでは「処理リスト」を利用するのも便利です。
次の例では、10日前から表示される「海外旅行の準備」の「処理リスト」付き締め切りを定義しています。
[2009-08-08 08:00]@9 9日間の海外旅行
[2009-08-07]!10 海外旅行の準備(10日前から準備開始)
{ } 航空券の予約
{ } ホテルの予約
{*} パスポートの用意

[2009-10-10 14:00]@ 今日は芋煮会
[2009-10-03]+7 ユミル=テミルにお手紙を書く
  • g,d や g,Tを使用すると入力が楽です。
  • 一つのファイルに複数の予定・TODOを定義して、詳しい内容も書くときは g,o の「アウトラインモード」を使用すると便利です。
  • g,x で予定・TODO単位の削除も出来ます。
  • 日付以外の予定・TODOの定義部分はアクションロックになっています。
    カーソルを合わせて<CR>を押すと、単発の予定・TODOは対処済に、繰り返し予定・TODOは次の予定日に変わります。


予定とTODO一覧

予定とTODOは6種類有ります。
以下の説明でデフォルト値が7日の場合、-「設定値」日は-7日のように読み替えてください。
数値オプションを設定した場合は、設定した数値が適用されます。
@の場合だけ、デフォルト設定値と予定定義に設定値を指定した場合とでは優先度の下がり方が異なります。

優先度は基準日(西暦0000年1月1日)からの経過日数で表され、優先度0日は本日までの経過日数になります。
優先度-2日とは、今日の日付-2日(つまり一昨日)の予定と同じ優先度で扱われるということです。
優先度+2日だと今日の予定より 2日分 優先順位が高い事になります。
ただし指定日が未来でも、アクティブ化されていない場合は、アクティブ化されたものより優先度が低くなります。

 種類  識別子  デフォルト  
 予定  @ 0日  何も指定しない場合は指定日から「デフォルト設定値」日を過ぎると、優先度が最低に設定され表示されなくなります。
 日付が優先度なので、表示期間中の優先度は一日ごとに低くなります。

下記の予定では 2009-01-12に当日の予定として表示され、更に「デフォルト設定値」日経過した時点で表示されなくなります。
[2009-01-12]@ 芋煮会
連続した予定も定義可能です。
下記の予定では 2009-01-12から2009-01-14まで3日間、当日の予定として表示され、14日から更に「デフォルト設定値」日経過した時点で表示されなくなります。
[2009-01-12]@3 2009年1月12日から3日間続く芋煮会

 予定定義時に数値が 2 以上に設定されている場合は「設定値」日の連続予定として扱い、期間中の優先度は常に優先度0(当日の予定扱い)に設定されます。
 期間終了後は更に「デフォルト設定値」日経過した時点で優先度が最低に設定されて表示されなくなります。
 なお予定定義時に数値が 0 に設定されている場合は、指定日を超えるとすぐに表示されなくなります。
 
 締め切り  !  7日  締め切り7日前(デフォルトの場合)から表示されるようになります。
 文字通り、締め切りや納期などに使用します。

下記の締め切りは 2009-08-07から表示され、2009-08-17以降は最も優先度の高い予定として表示されます。
[2009-08-17]!10 海外旅行の準備(10日前から準備開始)
 指定日の「設定値」日前に優先度が -「設定値」でアクティブ化されます。
 その後、一日ごとに優先度が上がっていきます。
 指定日に達しても優先度は上がっていくので、常に一番上に表示されることになります。

 リマインダ  -  1日  やらなくてもかまわないけれど、覚えておきたいような事を登録します。
 指定日から1日(デフォルトの場合)の間は優先度0に設定され、優先度が下がる事はありません。
 気になるけれど、買うかどうか決めていない本の発売日などに、気にかけておきたい期間を指定して使用します。

 下記のリマインダでは 2009-01-01から 2009-01-03まで3日間、当日の予定として表示され、2009-01-04日以降は優先度が2009-01-03の予定として表示されます。
[2009-01-01]-3 3日間は覚えておきたいリマインダ
 
リマインダは指定日に優先度0でアクティブ化されます。
 指定日から(指定日+「設定値」-1)日の間は優先度0に設定され、以降は優先度が(指定日+「設定値」-1)に固定されます。
 従って(指定日+「設定値」-1日)以降は、相対的に優先度が下がっていくことになります。
特定の期間を過ぎてしまったリマインダを削除する」こともできます。

TODO
 +  7日  指定日から7日間(デフォルトの場合)ぐらいまでの間に実行したい事を登録します。

 指定日に優先度が -「設定値」でアクティブ化されます。
 その後、一日ごとに優先度が上がっていきます。
 優先度0より高くなる事はないので、破ってしまった締め切りより優先度が高くなる事はありません。
 浮沈TODO  ~  30日  適当に優先度が変わるので、いつかやろうと思っている事などを登録します。

 指定日に優先度0でアクティブ化されます。
 その後「設定値」日を一周期として、優先度が浮き沈みを始めます。
 「設定値」日後には優先度が0に戻ってきます。

 対処済  .  なし  対処済みで不要になった予定やTODOに使用します。
 優先度が最低に設定され、一覧表示で表示されなくなります。
 先頭に & を付けて予定・TODOの終了指定にも使います。



予定・TODOの終了

予定・TODOの定義行に、 &[2009-08-12]. のように終了日を指定する事が出来ます。
終了指定日を過ぎると予定は表示されなくなります。
[2009-08-08]@7 &[2009-08-12]. 2009年8月8日から7日間の予定ですが、12日を過ぎると終了します
予定・TODOの定義行なら何処にあっても有効です。
時間指定をすると指定時刻以降は表示されません。
[2009-08-08]@7 2009年8月8日から7日間の予定ですが、12日の18:00を過ぎると終了します &[2009-08-12 18:00].

また、日付以外の予定・TODOの定義部分はアクションロックになっています。
単発の予定やTODOはアクションロックで対処済みに変更することが出来ます。

終了日の指定

時刻を指定しない終了日は指定日の翌日ではなく、指定日に終了するようにも出来ます。
"終了日指定のオフセット
let QFixHowm_EndDateOffset = -1
[2009-08-08]@7 &[2009-08-12]. 2009年8月8日から7日間の予定ですが、12日になると終了します


予定とTODOのコマンド

キーマップリーダーを g にした場合、予定の一覧表示は g,y になります。

 ,y  予定の一覧表示
 ,t  TODOの一覧表示
,,
 メニュー画面で予定・TODO表示
 ,ry  予定の一覧表示(再検索)
,rt  TODOの一覧表示(再検索)
,r,  メニュー画面で予定・TODO表示(再検索)

g,y を実行すると予定が表示され、以降はg,yを実行するとキャッシュされた予定・TODOが表示されます。
キャシュを無効にして再検索した最新の予定・TODOを表示するには g,ry を実行します。
キャッシュを無効にする必要があるのは日付が変わった時と予定・TODO自体を変更した場合で、それ以外は常にキャッシュ表示でも問題ありません。

通常のエントリ同様に予定・TODOを検索してからのプレビューやジャンプで予定の定義行を参照できます。
デフォルトで非表示にしたい場合はQFixHowm_SchedulePreview で変更出来ます。
"予定・TODOでのプレビュー表示ON/OFF
let QFixHowm_SchedulePreview = 0

予定一覧表示では、予定と締め切りが表示されます。
TODO一覧表示では、予定以外のTODO全種類が表示されます。
メニュー画面の一覧表示では、予定・TODOの全種類が表示されます。

それぞれ表示したい予約・TODOは次のオプションで変更可能です。
,t では 予定表示期間が -1 なので、デフォルトで予定は表示されません。
表示する予定・TODOパターンは正規表現ですので、- を指定したいときは一番前に設定しないと動作がおかしくなります。

",yでの予定表示期間
let QFixHowm_ShowSchedule = 10
",tでの予定表示期間
let QFixHowm_ShowScheduleTodo = -1
",,での予定表示期間
let QFixHowm_ShowScheduleMenu = 10

",y で表示される予定・TODOパターン
let QFixHowm_ListReminder_ScheExt = '[@!.]'
",t で表示される予定・TODOパターン
let QFixHowm_ListReminder_TodoExt = '[-@+!~.]'
",, で表示される予定・TODOパターン
let QFixHowm_ListReminder_MenuExt = '[-@+!~.]'
g,y g,t g,, での予定の表示日数をコマンド実行時にも指定可能です。
365g,y とすると365日分の予定を表示します。
以降は g,y で365日分表示するようになります。

なお同一日付で同一内容の予定・TODOは一つにまとめて表示されます。

また予定で表示されるパターンに - のリマインダーを追加して使用するのをおすすめします。
本家(Emacs版)ではリマインダーはTODOになっていますが、リマインダーは特定の日付に紐付けられている予定の一種でありTODOではないと考えるからです。
",y で表示される予定・TODOパターン
let QFixHowm_ListReminder_ScheExt = '[-@!]'

本家(Emacs版)の作者も予定とTODOを分けているのを失敗だと考えているようなので、予定に全部表示するのも良いかもしれません。
",y で表示される予定・TODOパターン
let QFixHowm_ListReminder_ScheExt = '[-@+!~]'



実行することなく特定の期間を過ぎてしまったリマインダを削除する事も出来ます。
以下のように設定すると、100日以上たったリマインダは表示しません。
"優先度が今日より指定以下の予定とリマインダを削除する。
let QFixHowm_RemovePriorityDays = 100

予定・TODOの時刻表示行のタイプは @ ですが、 任意のタイプに変更することが出来ます。
"予定・TODOの時刻表示行タイプ
let QFixHowm_TodayLineType = '@'



予定・TODOの表示順

予定・TODOの表示は、タイプ別にソートしてからタイプごとに時間でソートしています。
"予定・TODOのソート優先度
let QFixHowm_ReminderPriority = {'@' : 1'!' : 2'+' : 3'-' : 4'~' : 5'.' : 6}
"予定・TODOソートの昇順/降順
let QFixHowm_ReminderSortMode = 1

@ と ! だけは同じタイプとしてソートしたいような場合は優先度を同じに設定します。
こうすると時間単位の予定と締め切りが時間順に並ぶので、個人的にはおすすめです。
"予定・TODOのソート優先度
let QFixHowm_ReminderPriority = {'@' : 1'!' : 1'+' : 3'-' : 4'~' : 5'.' : 6}

予定・TODOのキャッシュ表示

一度表示した予定・TODOはキャッシュを使用して再検索なしに表示することができます。
キャッシュの保持時間(秒数)は QFixHowm_ListReminderCacheTime で指定します。
"予定・TODO表示のキャッシュ保持時間(秒)
let QFixHowm_ListReminderCacheTime = 5*60
例は5分(デフォルト)ですが、0 にするとキャッシュは使用しません。
キャッシュ保持時間内でも ,ry ,rt を使用することで再検索して最新の結果を表示可能です。

キャッシュは vimを終了すると無効になります。

予定・TODO表示の高速化

キャッシュ表示時でも現在時刻に応じた予定・TODOのソートが行われます。
したがって「キャッシュ表示」と「通常の検索表示」の違いは基本的に「grep処理を行う/行わない」だけということになります。
このため「予定・TODO定義部分をアクションロックで終了したり編集する」か、「日付が変わる」かしない限り「キャッシュ表示」と「通常の検索表示」に差は生まれません。
「通常の検索表示」で予定・TODOのgrep実行時間が気になる方はキャッシュ保持時間を長めにしてキャッシュ表示を基本にしてみると良いかもしれません。

長期間howmを使用していて古い予定・TODOが大量にある場合は以下が有効かもしれません。
予定・TODO表示の高速化

予定・TODOの繰り返し


繰り返す予定やTODOは次のように指定します。
[2009-01-12]@ 2009年1月12日は、舞踏会の日(単発予定)
[2009-01-12]@@ 2009年1月12日から、毎月12日は舞踏会の日
[2009-01-12]@@@ 2009年1月12日から、毎年1月12日は舞踏会の日
[2009-01-12]@(7) 2009年1月12日から、7日おきに(毎週月曜は)舞踏会の日

 定義  例
 指定日から始まる、月単位の繰り返し
 [タイムスタンプ]識別子x2
 [2009-01-12]@@
 2009年1月12日から始まる、毎月12日の予定

 指定日から始まる、年単位の繰り返し
 [タイムスタンプ]識別子x3
 [2009-01-12]@@@
 2009年1月12日から始まる、毎年1月12日の予定

 指定日から始まる、指定日間隔の繰り返し
 [タイムスタンプ]識別子(繰り返し間隔)

 [2009-01-12]@(7)
 2009年1月12日から始まる、7日おき(毎週月曜)の予定


(毎年)毎月などの特定曜日指定

毎月第2水曜の予定等を指定したい事もあると思います。
[2009-01-01]@(2*Wed) 2009年1月12日は舞踏会の日(単発予定)
[2009-01-01]@@(2*Wed) 2009年1月から毎月第2水曜は舞踏会の日
[2009-01-01]@@@(2*Wed) 2009年1月から、毎年1月の第2水曜は舞踏会の日

(毎年)毎月特定曜日指定の予定は({数値}*{曜日指定})のように、
数値と * 、 {曜日指定子} で指定します。

 {曜日指定子}   Sun Mon Tue Wed Thu Fri Sat

曜日指定

 指定月の指定曜日  [2009-12-01]@(3*Wed)
 2009年12月第3水曜の単発予定

 毎月の指定曜日
 [2009-12-01]@@(1*Wed)
 2009年12月以降の、毎月第1水曜の繰り返し予定

 毎年特定月の指定曜日
 [2009-12-01]@@@(2*Mon)
 2009年12月以降の、毎年12月の第2月曜の繰り返し予定


次のような書き方では、繰り返し予定にはなりません。
[2009-04-01]@(2*Sat) 繰り返し予定にならない例
結果的に2009年4月11日(土)の単発予定として扱われます。

これを利用すると、期間限定の曜日指定に使えます。
たとえば2009年4月の第2土曜と第3土曜だけの予定は日付指定する必要が無く、次のように書けます。
[2009-04-01]@(2*Sat) 2009年4月の第2土曜と第3土曜だけの予定
[2009-04-01]@(3*Sat) 2009年4月の第2土曜と第3土曜だけの予定
実際には [ や @ などの日付、時刻以外の予定・TODO定義部分にカーソルを合わせて<CR>を押すと、アクションロックが実行されて該当日付に変更されるので日付を確認して使用するのが望ましいでしょう。



月末指定

00日を指定すると月末として扱われます。
主に毎月の繰り返し予定での使用を想定しています。
[2009-01-00]@ 2009年1月末は舞踏会の日
[2009-01-00]@@ 2009年1月から毎月末は舞踏会の日


休日シフト

もしも繰り返し予定日が「日曜または休日」と重なったら、一日前の予定に変更したいというような事があると思います。
そのような場合、(-Holiday) か (+Holiday) を指定すると自動で予定日を「日曜または休日」でない日に変更します。
"毎月繰り返すリマインダの例 雑誌の発売日など
[2009-01-25]--(-Holiday) 月刊アフタヌーンは毎月25日発売で、25日が日曜か休日なら一番近い休日以外の日に発売されます

 (-Holiday)
  日曜でも休日でもない前の日
 (+Holiday)   日曜でも休日でもない後の日

もしも繰り返し予定日が「土日または休日」と重なったら、一日前の予定に変更したいというような事があると思います。
そのような場合、(-Weekday) か (+Weekday) を指定すると自動で予定日を「土日または休日」でない日に変更します。
"毎月繰り返すリマインダの例 土日祝が休みの金融機関への振込など 
[2009-01-25]--(-Weekday) 毎月25日が振込日ですが、25日が土日か休日なら一番近い平日(月~金)に振り込みます

 (-Weekday)
  土日でも休日でもない前の日
 (+Weekday)   土日でも休日でもない後の日

休日とみなされるのは QFixHowm_HolidayFileで指定されるファイルの休日定義です。
休日定義ファイル(インストール)

曜日シフト

また予定日が水曜だったら、木曜に変更したいというような場合もあるかもしれません。
そのような場合、(+Wed)を指定する と自動で予定日を木曜に変更します。
[2009-01-10]@@(+Wed) 毎月10日はサービスデーですが水曜定休なので、10日が水曜なら11日になります
曜日シフトは ({シフト指定子}{曜日指定})で行います。

 {シフト指定子}
  + -
 {曜日指定子}   Sun Mon Tue Wed Thu Fri Sat Hdy

特定曜日の予定を翌日にしたい場合は(+Wed)の様に + を前に、前日にしたい場合は(-Sun)の様に - を前に付けます。
ただし指定間隔の繰り返しを使用する場合だけは、次のように間隔指定の中に書きます。
[2009-01-12]@(5+Mon) 2009年1月12日から、5日おきに舞踏会の日で、もし月曜なら火曜に変更

曜日シフト

 予定日が指定曜日なら前日
 [2009-01-12]@@(-Sun) 毎月12日の予定で、日曜なら土曜に変更
 [2009-01-12]@@@(-Tue) 毎年1月12日の予定で、火曜なら月曜に変更

 予定日が指定曜日なら翌日
 [2009-01-12]@@(+Mon) 毎月12日の予定で、月曜なら火曜に変更
 [2009-01-12]@@@(+Sat) 毎年1月12日の予定で、土曜なら日曜に変更

 指定間隔の繰り返しの場合
 [2009-01-12]@(5-Wed)  2009年1月12日から5日おきの予定で、水曜なら火曜に変更
 [2009-01-12]@(9+Fri) 2009年1月12日から9日おきの予定で、金曜なら土曜に変更


次のような書き方では、繰り返し予定にはなりません。
[2009-01-11]@(+Sun) 繰り返し予定にならない例
2009年1月11日が日曜なので、結果的に2009年1月12日(月)の単発予定として扱われます。
実際には [ や @ などの日付、時刻以外の予定・TODO定義部分にカーソルを合わせて<CR>を押すと、アクションロックが実行されて該当日付に変更されるので、日付を確認して使用するのが望ましいでしょう。


指定日の n日前/後

指定日の前日など特定日の n日前/後という指定も可能です。
()内指定の最後に -1 や +10 などシフト日数を指定します。
主に繰り返し予定のオプションとして使用します
[2009-01-00]@@(-5) 毎月末の5日前は舞踏会の日
[2009-01-01]@@(2*Wed-1) 2009年1月から毎月第2水曜の前日は舞踏会の日
[2009-01-01]@@@(2*Wed-1) 2009年1月から、毎年1月の第2水曜の前日は舞踏会の日
たとえば Microsoft Windowsの定期アップデートは「毎月第2火曜日の翌日」に行われる事になっています。
それなら「第2水曜日」の指定でもよさそうですが、その月が水曜日から始まっている場合の「第2火曜日の翌日」は第3水曜日になります。
[2009-01-01]@@(2*Tue+1) Windowsアップデートは「毎月第2火曜日の翌日」


予定・TODOの自動繰り返し仕様

アクティブ化された予定・TODOの繰り返しは自動で内部的に日付変換されます。

予定・TODOは予定を終了すると、自動的に次の一番近い未来の予定日へ内部的に変換されます。
締め切り ! とTODO + は自動的に終了しないので、アクションロック等を使用して手動で変更する必要があります。
これは締め切りやTODOが何時終わったかは、howm側からは知り得ないからです。
アクティブ化された予定・TODOは以下のように内部的に変換されます

 予定  今日が予定日ならそのままで、その他は一番近い未来の予定日に変換します。
 具体例としては休日定義ファイル(「インストール」)をみて下さい。
 リマインダ  今日が予定日ならそのままで、その他は一番近い過去の予定日に変換します。
 締め切り
 TODO
 曜日シフトだけ行い、常に指定日を使用します。
 繰り返し指定はアクションロックの時だけ意味を持ちます。

リマインダの自動繰り返し

たとえば毎月25日に発売される雑誌のチェックをリマインダとして自動繰り返しで設定するとします。
[2009-01-25]--(-Hdy)5 毎月25日に発売される雑誌のチェック
こうすると25日から30日まで当日の予定としてリマインダが表示され、以降はどんどん優先度が下がっていきます。
雑誌のチェックを実行し終わった場合はアクションロックで来月のリマインダとして変更します。
雑誌のチェックを実行するにせよしないにせよ、25日になると沈んでいたリマインダが当日の予定として表示され……というように自動的に繰り返す事になります。
また、「休日シフト」を使用しているので25日が休日であれば前日に変更されます。



繰り返し予定・TODOの展開

予定・TODOの定義行にカーソルを合わせて、 ,rdを実行すると予定・TODOが展開されます。
10g,rdのようにカウント指定可能です。

今日の日付が5月5日だとして、次の予定・TODOの定義行で 3g,rdを実行します。
[2009-01-12]@ 今日は芋煮会
この行が3行分展開されて以下のようになります。
今日の日付が5月5日なので5月5日から始まります。
[2009-01-12]@ 今日は芋煮会
[2009-05-05]@ 今日は芋煮会
[2009-05-06]@ 今日は芋煮会
[2009-05-07]@ 今日は芋煮会

繰り返し予定は、定義に応じて展開されます。
[2009-01-12]@@(2*Mon) 毎月第2月曜はパジャマパーティー
3g,rdで、この行が3行分展開されて以下のようになります。
月単位の繰り返しなので月単位に展開されます。
単発予定に変更されるとき、曜日シフトも自動的に行われます。
[2009-01-12]@@(2*Mon) 毎月第2月曜はパジャマパーティー
[2009-05-11]@ 毎月第2月曜はパジャマパーティー
[2009-06-08]@ 毎月第2月曜はパジャマパーティー
[2009-07-13]@ 毎月第2月曜はパジャマパーティー


通常の数値オプション

通常の数値オプションも指定できます。
全て組み合わせると次のような指定が出来ます。
  • このイベントは2009年10月10日から開始される。
  • 毎月10日から3日間開催
  • 10日が日曜の場合は月曜(11日)から3日間開催される。
[2009-10-10]@@(+Sun)3 パジャマパーティ


アクションロック

日付以外の予定・TODOの定義部分はアクションロックになっています。
単発の予定やTODOはカーソルを合わせて<CR>を押すとアクションロックで対処済みに変更されますが、 繰り返し予定では日付が次の一番近い未来の予定日に変わります。
曜日のアクションロックとして、 Sun) Mon) などの曜日表示の上で<CR>を押すと、以下のようにループして変化します。
Sun) → Mon) → Tue) → Wed)→ Thu) → Fri) → Sat) → Hdy)


繰り返し予定・TODOをまとめる

繰り返し予定・TODOは特定の howmファイルにまとめて書いておく事も出来ます。
デフォルトなら howm_dirに、Sche-00-0000-00-00-000000.howm などのファイルを作成して、繰り返し予定・TODOを書くと表示も揃います。

(スクリーンショット:拡大)
Sche-00-0000-00-00-000000.howmに書かれた繰り返し予定が表示されている様子。
  • この予定が表示された日付は 2009年4月21日 で、予定が自動的に更新されている。
  • 4月21日の単発予定は曜日指定で日付がずれている。
  • 毎月18日の予定は数値オプションによって5日間継続している。
  • 祝日が強調表示されている。

予定・TODOの検索場所指定 (予定・TODO表示の高速化)

QFixHowm_ScheduleSearchDir で予定・TODOの検索に使用するディレクトリを指定することが出来ます。
後述しますがファイルが多くなりgrepが遅くなってきて、予定・TODOの表示に時間がかかるような場合に使用する事を主に想定しています。

指定場所以下しか予定・TODOの検索が行われないので予定・TODOを定義する際はファイルのディレクトリに気をつける必要があります。
検索場所を限定する時には「複数のクイックメモ」で予定・TODO専用のファイルを用意して簡単にアクセスできるようにすると便利です。
QFixHowm_ScheduleSearchDirを利用すると仕事用の予定やプライベートの予定を「タイトルタグフィルタ」を使用しないで切り替えたりも出来ます。

予定・TODOの検索場所は以下の順番で最初に見つかった、空でない指定ディレクトリ以下が使用されます。
  1. QFixHowm_ScheduleSearchDir
  2. howm_dir

howm_dirの下に scheduleというディレクトリを作り、そこに予定・TODOを定義したファイルを置く場合は次のようにします。
"予定・TODOの検索場所指定
let QFixHowm_ScheduleSearchDir = howm_dir.'/schedule'
"予定・TODOの検索ファイル名指定
let QFixHowm_ScheduleSearchFile = ''
予定・TODOのファイルを作成する場所は howm_dir以下に設定すると、通常の検索でも引っかかるので便利かと思います。
QFixHowm_ScheduleSearchDir 以下の特定ファイルだけ検索したい場合は更に QFixHowm_ScheduleSearchFile でファイル名を指定します。
デフォルトでは共に空文字列が指定されています。

祝日や特別な日を強調表示する

日本語環境の場合はデフォルトで休日定義ファイルが読み込まれます。
もし会社や学校等の個人的な休日を追加したい場合は、休日定義ファイルを適当な場所へコピーしてQFixHowm_HolidayFileへ登録してください。
休日の定義は以下を参照してください。

休日定義ファイルはmisc/holidayにあります。
" 休日定義ファイル
let QFixHowm_HolidayFile = 'path/to/Sche-Hd-0000-00-00-000000.txt'

ユーザー定義の休日や特別な日を強調表示する事も出来ます。
"ユーザー定義の休日
let QFixHowm_UserHolidayName  = '創立記念日\|有給休暇\|代休'
"ユーザー定義の特別な日
let QFixHowm_UserSpecialdayName = '誕生日\|記念日'
創立記念日などを正規表現で適当に追加して下さい。

一日一度だけ起動時に自動で予定・TODOを表示する

一日一度だけ起動時に自動で予定・TODOを表示することが出来ます。

起動したいコマンドを予定なら 'y'、 TODOなら 't' のように QFixHowm_VimEnterCmdにコマンド指定します。
デフォルトは ''(空文字列)なので何も実行されません。
"初回起動時に実行したいコマンド
let QFixHowm_VimEnterCmd = 'y'
QFixHowm_VimEnterMsg を定義するとコマンド実行前に確認するようになります。
"自動起動コマンド表示の確認用メッセージ
let QFixHowm_VimEnterMsg = '今日の予定を表示します'
デ フォルトでは表示する基準時間が 07:00で、初回起動時間を保存するファイルは '~/.vimenter.qf' として定義されています
"初回起動チェックの基準時間指定
let QFixHowm_VimEnterTime = '07:00'
"初回起動時間を保存するファイル名
let QFixHowm_VimEnterFile = '~/.vimenter.qf'

vimで予定・TODOを時間になったらアラーム表示する

,yで表示される予定・TODOのうち時間表示まで指定してあるものは、Vimでアラーム表示させる事が出来ます。
howm-alarm.vim
https://raw.githubusercontent.com/fuenor/qfixhowm/master/misc/howm-alarm.vim
(もしくはzipアーカイブ内のmisc/howm-alarm.vim)

pluginディレクトリにコピーすると、24時間に一回QFixHowmから予定を取り込み、分数まで指定している予定の時間になるとアラーム表示します。
内容についてはファイル内のドキュメントを参照してください。

Vim 7.4.1578以降であれば非同期タイマーを利用します(7.4.1578以前ではCursorHoldを使用するため表示に制限があります)

予定・TODOのエクスポート

,y や ,t で予定・TODOを表示した後に、 ! を押すと現在表示されている予定・TODOを iCalendar形式で出力することが出来ます。
iCalendar形式は Googleカレンダー などに登録することが可能です。
予定・TODOのエクスポート
 

予定とTODOのオプション

予定とTODOのデフォルト値の指定

"予定
let QFixHowm_ReminderDefault_Schedule = 0
"締め切り
let
 QFixHowm_ReminderDefault_Deadline = 7
"TODO
let QFixHowm_ReminderDefault_Todo     = 7
"リマインダ
let QFixHowm_ReminderDefault_Reminder = 1
"浮沈TODO
let QFixHowm_ReminderDefault_UD       = 30


今日の日付行と時刻行

予定やTODO表示の際に、現在日付行や現在時刻行を表示することが出来ます。
時刻付きの予定・TODOを多用しているなら時刻行も表示するようにしてみて下さい。
時刻行が日付行の一行前にくる場合には非表示になり、時刻行と日付行が連続して表示されることはありません。


予定やTODO表示の際には現在日付行や現在時刻行、境界行が表示されます。
現在時刻行や境界行が連続して表示される場合は適宜非表示にされます。
"予定やTODOに現在日付行や現在時刻行、境界行を表示する
let QFixHowm_ShowTodayLine = 3

 0  何も表示しない
 1  日付行のみ
 2  日付行と時刻行
3
 日付行と時刻行と境界行

QFixHowmの予定・TODO表示の際、Quickfixウィンドウ上では g. か g,. で現在日行へ移動できます。
なお現在日行と現在時刻行で howm_dir の QFixHowm_TodayFnameの内容がプレビュー表示され、<CR>で開く事が出来ます。
簡単なTodoリスト代わりなどに使用してください。

ファイル名等は以下のオプションで変更可能です。
let QFixHowm_TodayFname = '='
let QFixHowm_ShowTodayLineStr = '------------------------------'


予定・TODOの曜日表示

Quickfixウィンドウ上での予定・TODOの曜日表示を日本語表記に変更可能です。
以下を .vimrcに追加すると 日、月、火、水、木、金、土のように表示します。
let QFixHowm_JpDayOfWeek = 1

実際には以下のオプションが定義されて使用されます。
let QFixHowm_DayOfWeekDic = {'Sun' : "日", 'Mon' : "月", 'Tue' : "火", 'Wed' : "水", 'Thu' : "木", 'Fri' : "金", 'Sat' : "土"}
let QFixHowm_DayOfWeekReg = "\(日\|月\|火\|水\|木\|金\|土\)"
Su Mo Tu など好みの曜日表記に変更したい場合は QFixHowm_DayOfWeekDicと QFixHowm_DayOfWeekRegを .vimrcで定義して下さい。
QFixHowm_DayOfWeekDicと QFixHowm_DayOfWeekRegを設定する場合QFixHowm_JpDayOfWeekは必要はありません。

なおQuickfixウィンドウ上での表示が変更されるだけで、予定・TODOの定義には使用できません。


特定の期間を過ぎてしまったリマインダを削除する

実行することなく特定の期間を過ぎてしまったリマインダを削除出来ます。
以下のように設定すると、100日以上たったリマインダは表示しません。
"優先度が今日よりこれ以上低い予定とリマインダを削除する。
let QFixHowm_RemovePriorityDays = 100


アクティブ化されていない予定やTODOを表示する

let QFixHowm_RemovePriority  = 0
処理済みの予定やTODOも表示したい場合は-1に設定して下さい。
デフォルト値は1です。


予定とTODOの色

色分けはqfixapp/syntax/howm_memo.vimで定義されています。
直接 howm_memo.vimを書き換えても問題ないのですが、howmのファイルタイプを変更してから対応するシンタックスファイルを作成する方法もあります。

howmのファイルタイプは howm-mode.vimとの互換性のため、howm_memo に設定されています。
.vimrcに追加することでファイルタイプを QFixHowm_FileTypeで howm など好みのファイルタイプへ変更可能です。
"howmのファイルタイプ
let QFixHowm_FileType = 'howm'
この時有効になるのは ファイルタイプ howm のシンタックスです。
qfixapp/syntaxの howm_memo.vimから、howm.vimへファイル名を変更しないと、QFixHowm独自の色分けは有効になりません。
これを利用してhowm.vimにリネームしてから howm.vimを書き換えすると、アップデート時にファイルを上書きしても変更したシンタックスファイルは上書きされません。


タイムゾーン

GMTとの差を指定します。
デフォルト値は日本用の -9時間です。
"GMTとの時差
let QFixHowm_ST = -9

個人的なおすすめ

@ と ! だけは同じタイプとしてソートしたいような場合は優先度を同じに設定します。
こうすると時間単位の予定と締め切りが時間順に並ぶので、個人的にはおすすめです。
"予定・TODOのソート優先度
let QFixHowm_ReminderPriority = {'@' : 1'!' : 1'+' : 3'-' : 4'~' : 5'.' : 6}


また予定で表示されるパターンに - のリマインダーを追加して使用するのをおすすめします。
本家(Emacs版)ではリマインダーはTODOになっていますが、リマインダーは特定の日付に紐付けられている予定の一種でありTODOではないと考えるからです。
",y で表示される予定・TODOパターン
let QFixHowm_ListReminder_ScheExt = '[-@!]'

本家(Emacs版)の作者も予定とTODOを分けているのを失敗だと考えているようなので、予定に全部表示するのも良いかもしれません。
",y で表示される予定・TODOパターン
let QFixHowm_ListReminder_ScheExt = '[-@+!~]'


デバッグ用オプション

予定やTODOの優先度が、今ひとつよくわからない場合のためにデバッグ用オプションを公開します。
let QFixHowmToday='2009-01-10'
この環境変数をコマンドモードから設定すると、今日の日付が QFixHowmToday だとして、予定やTODOを扱います。
この例だと西暦2009年1月10日です。
QFixHowmTodayに今日の日付を設定してから g,t や g,y を実行すると、 (730554) の様にテキストの末尾に優先度が表示された状態で予定やTODOが表示されます。
作成したファイルに予定やTODOを追加して、どの様に表示されるか確認して下さい。

なお、今日の日付でない値を設定しても現在日付行には「本当の今日の日付と時刻」が表示されます。


より詳細な予定・TODOの目次




Comments