Next: Date Display Format, Previous: Calendar Customizing, Up: 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") ... )