Next: , Previous: , Up: Advanced Calendar/Diary Usage   [Contents][Index]


31.15.2 休日のカスタマイズ

Emacsが知る、デフォルト休日のリスト変数がいくつかあります。それはholiday-general-holidaysholiday-local-holidaysholiday-solar-holidaysholiday-bahai-holidaysholiday-christian-holidaysholiday-hebrew-holidaysholiday-islamic-holidaysholiday-oriental-holidaysholiday-other-holidaysです。変数の名前は自己説明的であるべきです。たとえば、holiday-solar-holidaysは、太陽と月に関連した休日のリストです。

これらの休日リストにたいして、必要に応じて、下記で説明しているように休日を削除したり追加してカスタマイズできます。これらをnilにセットすると、関連する休日は表示されなくなります。

一般的な休日、すなわちholiday-general-holidaysは、デフォルトではUnited Statesで一般的な休日です。対照的に、holiday-local-holidaysholiday-other-holidaysは、デフォルトでは空です。前者はシステムワイドなセッティング、後者は個人的な使用を意図しています。

デフォルトでは、Emacsは世俗的なカレンダーに一般的に見出されるものを除き、宗教的な休日のすべてを含んではいません。宗教的な休日の、より広範なコレクションのために、変数calendar-bahai-all-holidays-flagcalendar-christian-all-holidays-flagcalendar-hebrew-all-holidays-flagcalendar-islamic-all-holidays-flagのどれか(またはすべて)をtにセットできます。

それぞれの休日の変数はholiday formsのリストです。各formは休日(休日のリストの場合もある)を記述します。以下は利用可能なholiday formの表です。日付と月は1から数えますが、“曜日名(dayname)”は日曜日を0として数えます。引数stringは、その休日を説明する文字列です。

(holiday-fixed month day string)

グレゴリオ暦(Gregorian calendar)の固定日付です。

(holiday-float month dayname k string &optional day)

グレゴリオ暦のmonthday日の前または後のk番目の曜日dayname(dayname=0の場合は日曜日)です。kが負の場合、月の最後から数えます。オプションのdayのデフォルトは、kが正のときは1、負のときはmonthの最後の日になります。

(holiday-chinese month day string)

旧暦(Chinese calendar)の固定日付です。

(holiday-hebrew month day string)

ヘブライ暦(Hebrew calendar)の固定日付です。

(holiday-islamic month day string)

イスラム暦(Islamic calendar)の固定日付です。

(holiday-julian month day string)

ユリウス暦(Julian calendar)の固定日付です。

(holiday-sexp sexp string)

Lisp式sexpにより計算される日付です。式は計算に変数yearを使い、(month day year)の形式のリストを返すか、その年に休日が発生しない場合はnilを返すべきです。

(if condition holiday-form)

条件conditionが真のときだけ休日が発生します。

(function [args])

引数argsを指定して関数functionを呼び出すことにより計算される日付のリストです。

たとえばフランスで有名な7月14日のパリ革命記念日(Bastille Day)を追加したいとしましょう。以下でこれを行なうことができます:

(setq holiday-other-holidays '((holiday-fixed 7 14 "Bastille Day")))

多くの休日は、特定の月の特定の曜日に発生します。以下はVirgin Islandsで有名な8月第4月曜日のHurricane Supplication Dayを記述します。

(holiday-float 8 1 4 "Hurricane Supplication Day")

ここで8は8月、1は月曜日(日曜日は0、火曜日は2です)、4はその月の4番目(1は1番目、2は2番目、-1は最後、-2は最後から2番目)を指定しています。

Bahá’í暦、旧暦、ヘブライ暦、イスラム暦、ユリウス暦の固定日付に発生する休日を指定することもできます。たとえば、

(setq holiday-other-holidays
      '((holiday-hebrew 10 2 "Last day of Hanukkah")
        (holiday-islamic 3 12 "Mohammed's Birthday")
        (holiday-julian 4 2 "Jefferson's Birthday")))

これは、Hanukkahの最後の日(ヘブライ暦の月はNisanを1として数えられます)、Mohammedの誕生日を祝うイスラムの祭日(イスラム暦の月はMuharramを1として数えられます)、そしてユリウス暦の1743年4月2日のThomas Jeffersonの誕生日を記述したものです。

条件付きの休日を含めるには、Emacs Lispのifか、holiday-sexp形式を使用します。たとえばアメリカ大統領選挙は、4で割りきれる年の11月の第1月曜日の後の、最初の火曜日に発生します:

(holiday-sexp '(if (zerop (% 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 (zerop (% displayed-year 4))
    (holiday-fixed 11
           (calendar-extract-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関数を記述しなければなりません。たとえば食(eclipses)を含めるにはholiday-other-holidays(eclipses)を追加して、以下のような、カレンダーウィンドウに表示されている月に関連するグレゴリオ暦の日付のリスト(空の場合もあり得る)を返す、Emacs Lisp関数(eclipses)を記述します。

(((6 4 2012) "Lunar Eclipse") ((11 13 2012) "Solar Eclipse") ... )