sexp( s-expression:
S式)ダイアリーエントリーにより、どのダイアリーエントリーに適用するか、複雑な条件判定以上のことができます。sexpエントリーは、ダイアリーファイルでdiary-sexp-entry-symbol
(デフォルトは‘%%’)が前置されている行です。fancy
diary表示では、sexpエントリーはエントリーの日付に応じて、エントリーのテキストを生成できます。
たとえば記念日のダイアリーエントリーでは、記念日から経過した年数をダイアリーエントリーのテキストに挿入できます。したがって、以下のダイアリーエントリーの‘%d’:
%%(diary-anniversary 10 31 1948) Arthur's birthday (%d years old)
は年齢に置換されるので、1990年10月31日のfancy diaryバッファーでは、以下のように表示されます:
Arthur's birthday (42 years old)
かわりに、ダイアリーファイルに以下のようなエントリーが含まれている場合:
%%(diary-anniversary 10 31 1948) Arthur's %d%s birthday
は1990年10月31日のfancy diaryバッファーで、以下のように表示されます:
Arthur's 42nd birthday
同様に、周期的なダイアリーエントリーは、それが繰り返し発生した回数を挿入できます:
%%(diary-cyclic 50 1 1 2012) Renew medication (%d%s time)
これは以下のように表示されます:
Renew medication (5th time)
これは2012年9月7日のfancy diary表示です。
発生する日付だけでなく、それより前のダイアリーエントリーを含めるための、事前リマインダー(early-reminder)となるsexpダイアリーエントリーもあります。たとえば記念日の1週間前にリマインダーが欲しいときは、以下を使用します
%%(diary-remind '(diary-anniversary 12 22 1968) 7) Ed's anniversary
これにより、fancy diaryは12月15日と12月22日に、‘Ed's anniversary’を表示します。
関数diary-date
は、整数またはt
(すべての値を意味します)からなるmonth、day、yearの組み合わせで日付を指定します。たとえば、
%%(diary-date '(10 11 12) 22 t) Rake leaves
これによりfancy diaryは
Rake leaves
を毎年10月22日、11月22日、12月22日に表示します。
関数diary-float
を使って、11月の第3金曜日や、4月の最後の火曜日といった日付をダイアリーエントリーに記述することができます。パラメーターはmonth、dayname、およびインデックスnです。エントリーはmonthの最初の日の後のn番目の曜日daynameに表示されます。ここでdayname=0は日曜日、1は月曜日、…です。nが負の場合、monthの最後から後方に数えます。monthの値に指定できるのは、月のリスト、単一の月、t
の場合はすべての月を意味します。オプションのパラメーターdayを使用して、monthのday日目の後または前の、n番目の曜日daynameを指定することもできます。dayのデフォルト値は、nが正のときは1で、nが負のときはと気はの最後の日です。たとえば、
%%(diary-float t 1 -1) Pay rent
これによりfancy diaryは
Pay rent
を毎月最後の月曜日に表示します。
sexpダイアリーエントリーの一般性により、アルゴリズム的に記述したダイアリーエントリーを指定できます。sexpダイアリーエントリーには、任意の与えられた日付にたいして、エントリーを適用するかどうかを計算する式が含まれます。値が非nil
の場合はその日付にエントリーが適用され、そうでない場合は適用されません。式では判定する日付を変数date
で使用することができます。この変数の値は、グレゴリオ暦を参照するリスト(month
day year)です。
sexpダイアリーエントリーは、式の値が非nil
のときはその日付に適用されますが、いくつかの値は特別な意味をもちます。値が文字列の場合、その文字列はその日に発生するイベントを説明する文字列です。値は(mark
.
string)
という形式をもつこともできます。markは、カレンダーでその日をどのようにマークするかを指定し、stringはそのイベントの説明です。markが1文字の文字列の場合、その文字はカレンダーの日付の隣に表示されます。markがフェイス名の場合、その日はそのフェイスで表示されます。markがnil
の場合、その日を特にハイライト表示しません。
21日がウィークデイのときは21日、21日が週末のときは前の日の金曜日に給料が支払われるとしましょう。以下はそのような日付にマッチするsexpダイアリーエントリーです:
&%%(let ((dayname (calendar-day-of-week date)) (day (cadr date))) (or (and (= day 21) (memq dayname '(1 2 3 4 5))) (and (memq day '(19 20)) (= dayname 5))) ) Pay check deposited
以下のsexpダイアリーエントリーは、(fancy diary表示において)日付により異なるテキストをもつダイアリーエントリーを作成することができます:
%%(diary-sunrise-sunset)
地方時で、今日の日の出と日の入りの時刻のダイアリーエントリーを作成します。
%%(diary-lunar-phases)
月の位相にたいするダイアリーエントリーを作成します。
%%(diary-day-of-year)
その年での通算日数と、その年の残り日数でダイアリーエントリーを作成します。
%%(diary-iso-date)
今日と等価な、ISO商用日付のダイアリーエントリーを作成します。
%%(diary-julian-date)
今日と等価な、ユリウス暦日のダイアリーエントリーを作成します。
%%(diary-astro-day-number)
今日と等価な、天文日(ユリウス日)のダイアリーエントリーを作成します。
%%(diary-bahai-date)
今日と等価な、Bahá’í暦日のダイアリーエントリーを作成します。
%%(diary-chinese-date)
今日と等価な、旧暦日のダイアリーエントリーを作成します。
%%(diary-coptic-date)
今日と等価な、Copticカレンダー日のダイアリーエントリーを作成します。
%%(diary-ethiopic-date)
今日と等価な、エチオピア暦日のダイアリーエントリーを作成します。
%%(diary-french-date)
今日と等価な、フランス革命暦の日付のダイアリーエントリーを作成します。
%%(diary-hebrew-date)
今日と等価な、ヘブライ暦の日付のダイアリーエントリーを作成します。
%%(diary-islamic-date)
今日と等価な、イスラム暦の非助のダイアリーエントリーを作成します。
%%(diary-mayan-date)
今日と等価な、マヤ暦の日付のダイアリーエントリーを作成します。
%%(diary-persian-date)
今日と等価な、Persian calendarの日付のダイアリーエントリーを作成します。
例えば、以下のようなダイアリーエントリーを含めると
&%%(diary-hebrew-date)
fancy diary表示を使用している場合は、毎日のダイアリー表示に、その日に対応するヘブライ暦の日付が含まれるようになります(simple diary表示を使用している場合は、任意の日付のダイアリーにリテラル行‘&%%(diary-hebrew-date)’が表示されます)。
以下の関数は、特定の標準的なヘブライsexpダイアリーエントリーを構築するために使用されます:
%%(diary-hebrew-rosh-hodesh)
新しいヘブライ月にたいして、礼拝の発生と告知を告げるダイアリーエントリーを作成します。
%%(diary-hebrew-parasha)
毎週のシナゴーグ経典(synagogue scripture)の読書会を告げる、土曜日のダイアリーエントリーを作成します。
%%(diary-hebrew-sabbath-candles)
安息日のキャンドルライトを告げる、地方時のダイアリーエントリーを作成します。
%%(diary-hebrew-omer)
適切な場合は、omerを数えるダイアリーエントリーを作成します。
%%(diary-hebrew-yahrzeit month day year) name
命日をマークするダイアリーエントリーを作成します。命日の日付はグレゴリオ暦の日付です。ダイアリーエントリーは適切なヘブライ暦の命日、およびその前日に表示されます(カレンダーの日付様式に対応してパラメーターの順序は変化します。たとえばヨーロッパ標識ではday、month、yearの順です)。
%%(diary-hebrew-birthday month day year)
ヘブライ暦での誕生日のダイアリーエントリーを作成します。
上記でドキュメントされたすべての関数は、オプションの引数markを受け取ります。これはカレンダー表示で、その日をどのようにマークするかを指定します。上記の関数の1つが特定の日付に適用されると決定された場合、上述したようにmarkを含んだ値を戻します。