次: Date Display Format, 前: Calendar Customizing, 上: Calendar
Emacsは、複数のリストの中の1つのリストに入っている項目群で
定義される祝祭日を把握しています。
これらの祝祭日のリストに祝祭日を追加したり削除して
個人の目的に合うようにカスタマイズできます。
Emacsが使用する祝祭日のリストは、
一般祝祭日(general-holidays)、
地域祝祭日(local-holidays)、
キリスト教祝祭日(christian-holidays)、
ヘブライ(ユダヤ教)祝祭日(hebrew-holidays)、
イスラム(回教徒)祝祭日(islamic-holidays)、
その他の祝祭日(other-holidays)です。
一般祝祭日は、デフォルトでは、合州国に共通の祝祭日です。
これらの祝祭日を削除するには、general-holidaysにnilを設定します。
デフォルトの地域祝祭日はありません(サイトによってはある)。
以下に述べるように、
変数local-holidaysに祝祭日の任意のリストを設定できます。
デフォルトでは、Emacsが承知している宗教のすべての祝祭日が
Emacsに入っているのではなく、世俗的なカレンダーに共通するものだけです。
宗教上の祝祭日を網羅的に入れるには、
all-christian-calendar-holidays、
all-hebrew-calendar-holidays、
all-islamic-calendar-holidaysの変数のいずれか(あるいは、すべて)に
tを設定します。
宗教上の祝祭日を削除するには、対応する
christian-holidays、hebrew-holidays、
islamic-holidaysの変数のいずれか(あるいは、すべて)に
nilを設定します。
変数other-holidaysには、祝祭日の任意のリストを設定できます。
このリストは、普通は空ですが、個人的な使用を意図しています。
リスト(general-holidays、local-holidays、
christian-holidays、hebrew-holidays、
islamic-holidays、other-holidays)のおのおのは、
祝祭日(あるいは祝祭日のリスト)を記述する
祝祭日形式(holiday form)から成るリストです。
可能な祝祭日形式の一覧をつぎに示します。 月と日は1から数えますが、『曜日』は日曜日を0と数えます。 要素stringは、文字列で表した祝祭日の名称です。
(holiday-fixed month day string)(holiday-float month dayname k string)(holiday-hebrew month day string)(holiday-islamic month day string)(holiday-julian month day string)(holiday-sexp sexp string)yearを使い、祝祭日の日付を返す。
あるいは、その年に該当する祝祭日がなければnilを返す。
sexpの値は、(month day year)の形の
リストで表した日付であること。
(if condition holiday-form)(function [args])たとえば、フランスで7月14日に祝われる革命記念日(Bastille Day)を 扱えるようにするにはつぎのようにします。
(setq other-holidays '((holiday-fixed 7 14 "Bastille Day")))
祝祭日形式 (holiday-fixed 7 14 "Bastille Day")は、
7の月(7月)の14日目を指定します。
多くの祝祭日は、特定の月の特定の週にあります。 バージン諸島で4月の第4月曜日に祝われる ハリケーン祈願日(Hurricane Supplication Day)を記述する 祝祭日形式はつぎのようになります。
(holiday-float 8 1 4 "Hurricane Supplication Day")
ここで、8は8月、1は月曜日(日曜日は0、火曜日は2といった具合)、4は その月の4回目(1は最初、2は2回目、−1は最後、−2は最後の1つまえ といった具合)を意味します。
ヘブライ暦、イスラム暦、ユリウス暦の固定した日付の祝祭日も指定できます。 たとえば、
(setq other-holidays
'((holiday-hebrew 10 2 "Last day of Hanukkah")
(holiday-islamic 3 12 "Mohammed's Birthday")
(holiday-julian 4 2 "Jefferson's Birthday")))
は、ハヌカー祭の最終日(ヘブライ暦の月はニサンNisanを1と数える)、 イスラムが祝うモハメッドの誕生日 (イスラム暦の月はムハラMuharramを1と数える)、 ユリウス暦の1743年4月2日のトーマスジェファーソンの誕生日を 追加します。
条件付きの祝祭日を含めるには、Emacs Lispのifやholiday-sexpを
使います。
たとえば、アメリカ大統領選挙は、4で割り切れる年の11月の第1月曜日の
あとの最初の火曜日に行われます。
(holiday-sexp (if (= 0 (% year 4))
(calendar-gregorian-from-absolute
(1+ (calendar-dayname-on-or-before
1 (+ 6 (calendar-absolute-from-gregorian
(list 11 1 year))))))
"US Presidential Election"))
あるいは、
(if (= 0 (% displayed-year 4))
(fixed 11
(extract-calendar-day
(calendar-gregorian-from-absolute
(1+ (calendar-dayname-on-or-before
1 (+ 6 (calendar-absolute-from-gregorian
(list 11 1 displayed-year)))))))
"US Presidential Election"))
特別な計算を必要とする祝祭日は、これまでの形式にあてはまりません。
そのような場合、計算を行うLisp関数を書く必要があります。
たとえば、日食月食を含めるには、
other-holidaysに(eclipses)を追加して、
以下のような形でカレンダーウィンドウの見えている範囲の期間内の
対応するグレゴリオ暦の日付の(空である可能性もある)リストを
返すEmacs Lisp関数(eclipses)を書きます。
(((6 27 1991) "Lunar Eclipse") ((7 11 1991) "Solar Eclipse") ... )