Previous: Adding to Diary, Up: Diary
カレンダーの日付に基づいて項目を追加する以外に、 毎年の記念日などを表すS式項目(sexp entries)を 日誌ファイルに入れることができます。 これらの項目は、Emacsが日誌ファイルを読み込むときに Lisp式(S式、sexp)を評価することに基づいています。 S式項目では日付のかわりに、‘%%’に続けて括弧で括ったLisp式があります。 Lisp式が項目を適用する日付を決定します。
カレンダー(calendar)モードには、 よく使われるS式項目を追加するコマンドがあります。
insert-anniversary-diary-entry
)。
insert-block-diary-entry
)。
insert-cyclic-diary-entry
)。
ある特定の日を毎年の記念日に指定したい場合には、 その日付にポイントを移動してからi aコマンドを使います。 このコマンドは、別のウィンドウに日誌ファイルの末尾を表示し、 記念日を指定するS式を挿入します。 そうしたら、日誌項目の残りの部分を打ち込みます。 以下はその例です。
%%(diary-anniversary 10 31 1948) アーサーの誕生日
この項目は、1948年以降の毎年10月31日に適用されます。 ‘10 31 1948’は日付を指定します。 (ヨーロッパ形式の日付を使っている場合には、 ‘31’と‘10’が入れ替わる。) この式に開始年が必要なのは、日誌関数で経過年数の計算に使うからです。
ブロック日誌項目は、指定した期間に適用されます。 以下は、1990年6月24日から1990年7月10日までに適用される ブロック日誌項目の例です。
%%(diary-block 6 24 1990 7 10 1990) 休暇
‘6 24 1990’は開始日付を表し、‘7 10 1990’は終了日付を表します。 (ヨーロッパ形式を使っている場合は、月と日が入れ替わる。)
ブロック項目を追加するには、 ポイントとマークを期間の開始日付と終了日付に設定してから i bと打ちます。 このコマンドは、日誌ファイルの末尾を別のウィンドウに表示して、 ブロック項目指定を追加します。 そうしたら、日誌項目の残りの部分を打ち込みます。
周期的な日誌項目は、一定間隔で繰り返します。 これを作るには、開始日を選択してi cコマンドを使います。 このコマンドは、間隔を聞いてきます。 そうしたら、項目を挿入します。 以下のようになります。
%%(diary-cyclic 50 3 1 1990) つぎの投薬
この項目は1990年3月1日から始まり、50日ごとに適用されます。 ‘3 1 1990’はこの開始日を指定しています (ヨーロッパ形式を使っている場合は、月と日が入れ替わる。)
これら3つのコマンドはいずれも印付けされる項目を作成します。 印付け禁止項目を挿入する場合には、コマンドに数引数を指定します。 たとえば、C-u i aは、印付け禁止の記念日の項目を作ります。
日誌のS式項目をカレンダーに印付けするのは非常に時間がかかります。 なぜなら、カレンダーのウィンドウに見えているすべての日付について 1つ1つ調べる必要があるからです。 したがって、S式項目を登録する際にはできる限り(‘&’を付けて) 印付け禁止の日誌項目にするのがよいでしょう。
S式項目の別の利用方法には、流動型日誌項目があります。
これは毎年定期に起きることがらを日数や週数や月数のオフセットで表したものです。
これはcron
プログラムが解釈するcrontabの項目と互換性があります。
以下は、毎年11月の最終木曜日に印付け禁止の流動型日誌項目を指定する例です。
&%%(diary-float 11 4 -1) アメリカの感謝祭
この11は11月を表し、4は木曜(日曜を0として週の4番目の日)を表します。
−1は『最後』を表します
(1は『最初』、2は『2番目『、−2は『最後の1つまえ』などなど)。
月の指定は1個の月でも月のリストでもかまいません。
たとえば、上の11を‘'(1 2 3)’に変更すると、
1月、2月、3月の最終木曜日に適用する項目になります。
月の指定がt
ならば、すべての月に適用されます。
もっとも一般的には、 日誌のS式項目は適用する日付を決定するために、どんな計算でもできます。 See S式項目と装飾日誌表示。