Next: , Previous: Calendar Customizing, Up: Calendar


39.2 祝祭日のカスタマイズ

Emacsは、複数のリストの中の1つのリストに入っている項目群で 定義される祝祭日を把握しています。 これらの祝祭日のリストに祝祭日を追加したり削除して 個人の目的に合うようにカスタマイズできます。 Emacsが使用する祝祭日のリストは、 一般祝祭日(general-holidays)、 地域祝祭日(local-holidays)、 キリスト教祝祭日(christian-holidays)、 ヘブライ(ユダヤ教)祝祭日(hebrew-holidays)、 イスラム(回教徒)祝祭日(islamic-holidays)、 その他の祝祭日(other-holidays)です。

一般祝祭日は、デフォルトでは、合州国に共通の祝祭日です。 これらの祝祭日を削除するには、general-holidaysnilを設定します。

デフォルトの地域祝祭日はありません(サイトによってはある)。 以下に述べるように、 変数local-holidaysに祝祭日の任意のリストを設定できます。

デフォルトでは、Emacsが承知している宗教のすべての祝祭日が Emacsに入っているのではなく、世俗的なカレンダーに共通するものだけです。 宗教上の祝祭日を網羅的に入れるには、 all-christian-calendar-holidaysall-hebrew-calendar-holidaysall-islamic-calendar-holidaysの変数のいずれか(あるいは、すべて)に tを設定します。 宗教上の祝祭日を削除するには、対応する christian-holidayshebrew-holidaysislamic-holidaysの変数のいずれか(あるいは、すべて)に nilを設定します。

変数other-holidaysには、祝祭日の任意のリストを設定できます。 このリストは、普通は空ですが、個人的な使用を意図しています。

リスト(general-holidayslocal-holidayschristian-holidayshebrew-holidaysislamic-holidaysother-holidays)のおのおのは、 祝祭日(あるいは祝祭日のリスト)を記述する 祝祭日形式(holiday form)から成るリストです。

可能な祝祭日形式の一覧をつぎに示します。 月と日は1から数えますが、『曜日』は日曜日を0と数えます。 要素stringは、文字列で表した祝祭日の名称です。

(holiday-fixed month day string)
グレゴリオ暦の固定した日付。
(holiday-float month dayname k string)
グレゴリオ暦のmonth月のk番目の曜日dayname。 (日曜日はdayname=0、…。) kが負であると、月末から数える。
(holiday-hebrew month day string)
ヘブライ暦の固定した日付。
(holiday-islamic month day string)
イスラム暦の固定した日付。
(holiday-julian month day string)
ユリウス暦の固定した日付。
(holiday-sexp sexp string)
Lisp式sexpで計算される日付。 計算式では、年として変数yearを使い、祝祭日の日付を返す。 あるいは、その年に該当する祝祭日がなければnilを返す。 sexpの値は、(month day year)の形の リストで表した日付であること。
(if condition holiday-form)
条件conditionが真である場合にのみ祝祭日になる。
(function [args])
引数argsで関数functionを呼び出して計算される日付のリスト。

たとえば、フランスで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のifholiday-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") ... )