[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

36. カレンダとダイアリのカスタマイズ

カレンダとダイアリを自分の好みに合わせるカスタマイズにはいろいろあります。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

36.1 カレンダのカスタマイズ

変数view-diary-entries-initiallytに設定すると、カレンダが 呼び出されたとき、自動的に今日の日付のダイアリ・エントリも表示します。 ダイアリの日付は、今日の日付が見える場合のみ表示します。以下の2行を `.emacs'ファイルに加えると、

 
(setq view-diary-entries-initially t)
(calendar)

カレンダとダイアリがEmacsの起動時に表示されます。

同様に、変数view-calendar-holidays-initiallytにすると、 カレンダに入ったとき、自動的に当該3ヵ月の休日表を表示します。休日の一覧は、 別のウインドウに表示します。

変数mark-diary-entries-in-calendartにすると、ダイアリに 登録してある全ての日に印をつけることができます。これは、カレンダ・ウインドウの 内容を再計算するときに作用します。これらの日に印をつける方法は二つあります。 ディスプレイのサポートがある場合にはフェース(see section フェース)を変える方法、 さもなくば、日付の横にプラス・サイン(`+')を置く方法があります。

同様に、変数mark-holidays-in-calendartに設定すると 休日にフェースを変えるか、または、アスタリスク(`*')をつけます。

変数calendar-holiday-markerは、休日となる日付の印のつけ方を 指定します。この値は、休日となる日付の隣に挿入する文字か、その日付を 表示するために使うフェース名になります。同様に、変数diary-entry-markerも ダイアリに登録されている日付に対する印のつけ方を指定します。カレンダは、 この目的のためにholiday-facediary-faceを作成します。 Emacsが 端末で複数のフェースをサポートしている場合、これらのシンボルは、これらの変数の デフォルト値になっています。

変数calendar-load-hookは、カレンダ・パッケージが最初に ロードされたときに(実際にカレンダの表示をはじめようとする前に)実行する 正規フックです。

カレンダが起動するとき、正規フックinitial-calendar-window-hookを 実行します。カレンダ表示の再計算時には、このフックは実行しません。しかし、 qコマンドでカレンダを抜けてから再入した場合、このフックを再度実行します。

変数today-visible-calendar-hookは、今日の日付がウィンドウに 見えるときに、表示するカレンダをカレンダ・バッファに準備した後に実行する 正規フックです。このフックの一つの使い方は、今日の日付をアスタリスクに 置き換えることです。そうするには、フック関数calendar-star-dateを 使います。

 
(add-hook 'today-visible-calendar-hook 'calendar-star-date)

ほかの標準フック関数は今日の日付に、そのフェースを変えるか、アスタリスクを 追加するかして、印をつけます。以下に例を示します:

 
(add-hook 'today-visible-calendar-hook 'calendar-mark-today)

変数calendar-today-markerは、今日を示す印をつける方法を指定します。 この値は、今日の日付の隣に挿入する文字か、日付を表示するために使用する フェースの名前になります。calendar-today-faceという名前のフェースが この目的のために用意されています。使用端末上でEmacsが複数フェースを サポートしている場合、このシンボルが、この変数のデフォルト値になります。

似たような正規フックtoday-invisible-calendar-hookは今日の日付が ウインドウで見えない時に実行します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

36.2 休日のカスタマイズ

Emacsでは、いくつかのリストを用いてあらかじめ休日が定義されています。 必要に応じてこれらの休日リストに休日を追加、削除してカスタマイズできます。 Emacsが使う休日リストは、一般的な休日(general-holidays)、ローカルな休日 (local-holidays)、キリスト教の休日(christian-holidays)、 ヘブライ(ユダヤ)暦の休日(hebrew-holidays)、イスラム教(モスレム)暦の 休日(islamic-holidays)と、そのほかの休日(other-holidays)です。

デフォルトでは、一般的な休日にはアメリカ合州国共通の休日が 定義されています。これらの休日の設定を取り除くには、general-holidaysnilにします。

デフォルトではローカルな休日は設定されていません(しかし、サイトで 設定しているかも知れません)。以下に述べるように、変数local-holidaysに いろいろな休日リストを設定することができます。

デフォルトでは、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 forms)のリストです。各休日形式は、休日 (時には休日リスト)を表します。

以下が、休日形式としてとることができる種類の一覧です。日付と月の数は1から 数えますが、「曜日名」を表す数は日曜日を0と数えます。要素stringは いつでも文字列での休日名です。

(holiday-fixed month day string)

グレゴリオ暦で固定の日付。

(holiday-float month dayname k string)

グレゴリオ暦month月のk番目のdayname曜日 (日曜をdayname0とし、以下同様)。 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日のフランス革命記念日を追加したいとします。 以下のようにすればできます:

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

休日形式(holiday-fixed 7 14 "Bastille Day")が、7番目の月(7月)の 14番目の日を指定します。

多くの休日は、特定の月の特定の週の曜日になります。ここに、Virgin Islandsで 8月の第4月曜日に祝うとされるHurricane Supplication Dayを表す休日形式を挙げます:

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

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

ヘブライ暦やイスラム教暦、ユリウス暦などの固定の日付になる休日も 指定することができます。たとえば、

 
(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日であるThomas Jeffersonの誕生日を追加します。

条件つき休日を含めるには、Emacs Lispのifholiday-sexp形式を 使います。たとえば、アメリカ大統領選挙は4で割り切れる年の11月の最初の月曜日の 次の火曜日に行なわれます:

 
(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") ... )

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

36.3 日付表示フォーマット

calendar-date-display-formを設定することで、モード行、ダイアリや メッセージでの日付の表示の仕方をカスタマイズすることができます。 この変数は、変数month, day, year(これら全て文字列形式 の数)、変数monthname, dayname(どちらもアルファベット文字列)を 含むことができる式のリストを保持しています。 アメリカ・スタイルでの、このリストのデフォルト値は以下のとおりです:

 
((if dayname (concat dayname ", ")) monthname " " day ", " year)

一方、ヨーロッパ・スタイルでのこの値のデフォルトは以下のとおりです:

 
((if dayname (concat dayname ", ")) day " " monthname " " year)

ISO標準日付(ISO standard date)表現は以下のとおりです:

 
(year "-" month "-" day)

以下にアメリカ・フォーマットを示します。

 
(month "/" day "/" (substring year -2))

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

36.4 時刻表示フォーマット

デフォルトではカレンダとダイアリは、1〜12までの時、分、 `am'`pm'のいずれか、というお決まりのアメリカ・スタイルで 時刻を表示します。もし、ヨーロッパ・スタイル、またはアメリカ陸軍スタイル としても知られている、時を00〜23で示す方を好む場合、 変数calendar-time-display-formを変えることができます。 この変数は、変数12-hours24-hoursminutes (全て文字列形式の数)と、am-pmtime-zone(どちらもアルファベット 文字列)を含むことができる式のリストです。 calendar-time-display-formのデフォルト値は以下のようになります:

 
(12-hours ":" minutes am-pm
          (if time-zone " (") time-zone (if time-zone ")"))

ヨーロッパ・スタイルの時刻を与える値です:

 
(24-hours ":" minutes
          (if time-zone " (") time-zone (if time-zone ")"))

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

36.5 夏時間

Emacsは標準時と夏時間(日の出日の入り、夏至冬至、春分秋分、 月の満ち欠けを勘定に入れることで与えられる)の違いを理解します。 夏時間の規則は、地域ごとに、および、年ごとに異なっています。 正確に求めるために、Emacsはどのルールを使うのかを知る必要があります。

いくつかのオペレーティング・システムは、自分のいる地域に応じた規則に 追随しています。これらシステムでは、Emacsは必要な情報をシステムから自動的に 取得します。もし、いくつかあるいは全てのこれらの情報が見つからない場合、 EmacsはGNU世界の中心であるケンブリッジやマサツーセッツで使われている規則を 用いて不足を埋めます。

デフォルト規則の選択が自分の地域では不適当な場合、 変数calendar-daylight-savings-startscalendar-daylight-savings-endsを設定することによって、 Emacsに使うべき規則を教えることができます。 これらの値は、変数yearを参照して、評価結果がグレゴリオ暦の夏時間の 始まる日と終る日をリスト(month day year)の形式 で与える、Lisp式でなければなりません。自分の地域で夏時間が使われて いないときは、この値をnilにしなければなりません。

Emacsは、休日と同様に、夏時間の始まる日、終る日を判別するために、 それから時刻を太陽暦、太陰暦に合わせるために、これらの式を使います。

ケンブリッジ、マサチューセッツでの値は、次のとおりです:

 
(calendar-nth-named-day 1 0 4 year)
(calendar-nth-named-day -1 0 10 year)

即ち、yearで指定する年の第4月(4月)の第1第0曜日(日曜日)、 そして、第10月(10月)の最後の日曜日です。 夏時間が10月1日から始まるように変わったとすると、 calendar-daylight-savings-startsを以下のようにします:

 
(list 10 1 year)

さらに複雑な例として、ヘブライ暦Nisanの1日から夏時間が始まると仮定します。 calendar-daylight-savings-startsを以下の値に設定しなければなりません。

 
(calendar-gregorian-from-absolute
  (calendar-absolute-from-hebrew
    (list 1 1 (+ year 3760))))

これは、Nisanがヘブライ暦で最初の月であり、Nisanにおいて、ヘブライ年は グレゴリオ年と3760の差があるためです。

自分の地域に夏時間がない場合、もしくは、いつも標準時が欲しいときは、 calendar-daylight-savings-startsと、 calendar-daylight-savings-endsnilにします。

変数calendar-daylight-time-offsetは、分単位で夏時間と標準時の差を 指定します。ケンブリッジでの値は60です。

変数calendar-daylight-savings-starts-timeと 変数calendar-daylight-savings-ends-timeは、 夏時間へおよび夏時間から移行するとき、現地時間で深夜以後経過すべき分数を 指定します。ケンブリッジでは、この値は両方とも120です。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

36.6 ダイアリのカスタマイズ

たいてい、ダイアリ・バッファ・ウィンドウのモード行は、ダイアリ・エントリの 日付にあたるなんらかの休日を示しています。休日をチェックする処理は数秒を 要するので、休日に関する情報を含める場合、ダイアリ・バッファの表示は著しく 遅くなります。もし休日の情報がなくてもダイアリ・バッファの表示が速い方が いい場合、変数holidays-in-diary-buffernilに設定します。

変数number-of-diary-entriesは、一度に表示するダイアリ・エントリの 日数を制御します。これはview-diary-entries-initiallytのときに M-x diaryコマンド同様に最初の表示に影響します。たとえば、 デフォルト値が1のとき、今日の日付のダイアリ・エントリのみ表示することを 示しています。この値が2ならば、今日と明日のエントリの両方が表示されます。 値は、七つの要素からなるベクタもとることができます。 たとえば、値が[0 2 2 2 2 4 1]のとき日曜日にはダイアリ・エントリは 表示されず、月曜日から木曜日までは今日と明日のダイアリ・エントリが表示され、 金曜日には金曜日から月曜日のエントリが表示され、 そして土曜日には今日のエントリのみが表示されます。

変数print-diary-entries-hookは、現在ダイアリ・バッファで見える ダイアリ・エントリだけを含む、一時バッファの準備の後に、実行する正規フックです (そのほかの、関係ないダイアリ・エントリは一時バッファには全然存在しません。 ダイアリ・バッファでは、それらはほとんど隠されています)。 このフックのデフォルト値は、コマンドlpr-bufferによる印刷です。 印刷するために別のコマンドを使いたい場合、このフックの値を変えるだけです。 ほかの使用法としてたとえば、日時の順に、行を再配置するなどがあります。

ダイアリ・ファイルでの日付の形式は、標準アメリカ・スタイルでも ヨーロッパ・スタイルでもないものが必要なとき、変数diary-date-formsを 設定することでカスタマイズできます。この変数は、日付を識別するためのパターンの リストです。それぞれの日付パターンは、全要素が正規表現 (see section 正規表現)かシンボルmonth, day, year, monthname, daynameであるリストです。 これらの要素全てはダイアリ・ファイル中のある種のテキストと照合するために使う パターンです。日付パターンが一致するためには、全体としてその要素全てが連続して 一致しなければなりません。

日付パターンの正規表現照合の普通の手法では、 `*'が語構成可能であるように変更した標準構文テーブルを使います。

シンボルmonth, day, year, monthname, daynameは、判断中の日付の月数、日数、年数、月名、曜日名に一致します。 数に一致するシンボルでは、先頭に0がついても大丈夫です。名前に一致するものは、 3字の省略形にしても、頭文字を大文字にしても大丈夫です。全てのシンボルは `*'と一致します。なぜなら、ダイアリ・エントリでの`*'は 「任意の日」、「任意の月」、などを意味するので、判断中の日付に無関係に 一致しなければならないからです。

アメリカ・スタイルでのdiary-date-formsのデフォルト値は以下のように なります:

 
((month "/" day "[^/0-9]")
 (month "/" day "/" year "[^0-9]")
 (monthname " *" day "[^,0-9]")
 (monthname " *" day ", *" year "[^0-9]")
 (dayname "\\W"))

リスト中の日付パターンは相互排他的かつ、ダイアリ・エントリ自身には 一致してはならず、日付と空白文字一つだけに一致しなければなりません。 相互排他的であるために、パターンが(日付の終りの空白を超える) ダイアリ・エントリ・テキストの一部分に一致しなければならないのならば、 日付パターンの第1要素はbackupでなければなりません。 これによって、日付の認識において一致を完了した後、そのダイアリ・エントリの 現在の語頭に戻ることができます。backupを使ったとしても、 その日付パターンは絶対にそのダイアリ・エントリの第1語の一部分以上に一致しては なりません。ヨーロッパ・スタイルでのdiary-date-formsのデフォルト値は、 このリストになります:

 
((day "/" month "[^/0-9]")
 (day "/" month "/" year "[^0-9]")
 (backup day " *" monthname "\\W+\\<[^*0-9]")
 (day " *" monthname " *" year "[^0-9]")
 (dayname "\\W"))

3番目のパターン中でbackupを使っていることに注意してください。 ここでは、4番目のパターンとの区別のために、日付自身を超えて語の一部と 一致しなければならなかったのです。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

36.7 ヘブライ暦やイスラム教暦での日付に基づくダイアリ・エントリ

自分のダイアリ・ファイルで、世界標準のグレゴリオ暦に基づくエントリ同様に、 ヘブライ暦やイスラム教暦の日付に基づくエントリを置くことができます。しかし、 そういったエントリの認識は時間を消費しますし、ほとんどの人は使わないので、 明示的にそれを使用可能にしなければなりません。ダイアリにヘブライ暦の日付の ダイアリ・エントリを認識させたいのなら、たとえば、このようにしなければ なりません:

 
(add-hook 'nongregorian-diary-listing-hook 'list-hebrew-diary-entries)
(add-hook 'nongregorian-diary-marking-hook 'mark-hebrew-diary-entries)

イスラム教暦の日付のエントリを使いたいなら、こうします:

 
(add-hook 'nongregorian-diary-listing-hook 'list-islamic-diary-entries)
(add-hook 'nongregorian-diary-marking-hook 'mark-islamic-diary-entries)

ヘブライ暦やイスラム教暦の日付のダイアリ・エントリはグレゴリオ暦の日付の ダイアリ・エントリと同じフォーマットを持ちますが、ヘブライ暦では`H'が、 イスラム教暦では`I'が前置される点だけが違います。さらに、ヘブライ暦や イスラム教暦の月名は最初の3字では一意に指定できないため、省略してはなりません。 たとえばヘブライ暦の日付Heshvan 25のダイアリ・エントリは、こんな感じになります:

 
HHeshvan 25 Happy Hebrew birthday!

するとこのエントリはヘブライ暦でのHeshvan 25に対応する全ての日付のダイアリに 現れます。そして、これがDhu al-Qada 25に一致するイスラム教暦の日付の ダイアリ・エントリです:

 
IDhu al-Qada 25 Happy Islamic birthday!

グレゴリオ暦の日付のダイアリ・エントリについては、ヘブライ暦や イスラム教暦の日付のエントリにアンパサンド(`&')が前置されていたら、 印をつけません。

これがカレンダで使用する、ヘブライ暦とイスラム教暦で類似する、 選択された日付やほかの日付に一致するダイアリ・エントリを作成するための コマンドの表です:

i h d

選択された日付に対応するヘブライ暦の日付で、ダイアリ・エントリを追加します (insert-hebrew-diary-entry)。

i h m

選択された日付に対応するヘブライ暦の月の同じ日で、ダイアリ・エントリを 追加します(insert-monthly-hebrew-diary-entry)。このダイアリ・エントリは 選択された日付とヘブライ暦で同じ日になる任意の日付に一致します。

i h y

選択された日付に対応するヘブライ暦の年の同じ月日で、ダイアリ・エントリを 追加します(insert-yearly-hebrew-diary-entry)。このダイアリ・エントリは 選択された日付とヘブライ暦で同じ月日になる任意の日付に一致します。

i i d

選択された日付に対応するイスラム教暦の日付で、ダイアリ・エントリを追加します (insert-islamic-diary-entry)。

i i m

選択された日付に対応するイスラム教暦の月の同じ日で、ダイアリ・エントリを 追加します(insert-monthly-islamic-diary-entry)。

i i y

選択された日付に対応するイスラム教暦の年の同じ月日で、ダイアリ・エントリを 追加します(insert-yearly-hebrew-diary-entry)。

これらコマンドは普通のダイアリ・エントリの対応するコマンドと同じように 動作します。実行すると、カレンダ・ウィンドウでポイントがある日付に対して、 自分のダイアリ・ファイルの末尾にダイアリ・エントリの一部分としての 日付部分だけを挿入します。それに続くダイアリ・エントリの残りの部分は、自分で 挿入しなければなりません。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

36.8 ダイアリ表示の飾りつけ

ダイアリは、ダイアリ・バッファを準備してからフック diary-display-hookを実行して、表示されます。このフック (simple-diary-display)のデフォルト値は、関係ないダイアリ・エントリを 隠してダイアリ・バッファを表示します。けれども、自分で次のようにフックを 指定すると、

 
(add-hook 'diary-display-hook 'fancy-diary-display)

これによって、飾りつきダイアリ表示ができます。これは、表示のためだけに存在する 特別なバッファにダイアリ・エントリと休日をコピーして、表示します。 別のバッファにコピーすることで、表示されるテキストをきれいにするための変更を 加えることができます(たとえば、エントリをそれが適用される日付でソートする など)。

単純なダイアリ表示では、print-diary-entriesでバッファの ハード・コピーを印刷できます。1週間分の日ごとのダイアリのハード・コピーを 印刷するには、ポイントをその週の日曜に置いて、7 dとタイプし、 それからM-x print-diary-entriesを実行します。いつものことですが、 休日を含めると表示が若干遅くなります。変数holidays-in-diary-buffernilに設定すれば、速度を稼ぐことができます。

普通は飾りつきダイアリ・バッファはダイアリ・エントリのない日は、 それが休日であっても、表示しません。飾りつきダイアリ・バッファでそういった日を 表示したいならば、変数diary-list-include-blankstに設定して ください。

飾りつきダイアリ表示をするのならば、正規フック list-diary-entries-hookを使って、各日のダイアリ・エントリをその時刻で ソートできます。このようにします

 
(add-hook 'list-diary-entries-hook 'sort-diary-entries t)

各日について、これで認識可能な日時で始まるダイアリ・エントリが、 その時刻でソートされます。日時のないダイアリ・エントリは、各日の中で 最初に来ます。

飾りつきダイアリ表示はインクルードされたダイアリ・ファイルを 処理することもできます。これによって、複数の人が関係するイベントについての ダイアリ・ファイルを彼らの間で共有することができます。 ダイアリ・ファイル中のこの形式の行は:

 
#include "filename"

飾りつきダイアリ・バッファに、ファイルfilenameからダイアリ・エントリを インクルードします。インクルード機構は再帰的なので、インクルード・ファイルが さらにほかのファイルをインクルードし、というようにできます。もちろん、 インクルードが循環しないように気をつけなければなりません。インクルード機能を 可能にするにはこうします:

 
(add-hook 'list-diary-entries-hook 'include-other-diary-files)
(add-hook 'mark-diary-entries-hook 'mark-included-diary-files)

インクルード機構は、飾りつきダイアリ表示に限って働きます。理由は、 普通のダイアリ表示はダイアリ・ファイルのエントリを直接表示するからです。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

36.9 S式のエントリと飾りつきダイアリ表示

S式ダイアリ・エントリは、単にそのダイアリ・エントリに複雑な条件をつけるだけ ではありません。飾りつきダイアリ表示を使う場合は、S式エントリでそのエントリの 日付自体に依存するテキストを生成できます。たとえば、記念日の ダイアリ・エントリは記念日からの年数をダイアリ・エントリのテキストに 挿入できます。そのため、このダイアリ・エントリに`%d'があります:

 
%%(diary-anniversary 10 31 1948) Arthur's birthday (%d years old)

これが年齢に置き換えられるので、飾りつきダイアリ・バッファに現れる 1990年10月31日のエントリは、こうなります:

 
Arthur's birthday (42 years old)

もし、ダイアリ・ファイルが代わりにこのエントリを含んでいたなら:

 
%%(diary-anniversary 10 31 1948) Arthur's %d%s birthday

1990年10月31日の飾りつきダイアリ・バッファのエントリは、こうなります:

 
Arthur's 42nd birthday

同様に、循環ダイアリ・エントリは繰り返しの回数を挿入できます:

 
%%(diary-cyclic 50 1 1 1990) Renew medication (%d%s time)

は、こんな感じになります:

 
Renew medication (5th time)

1990年9月8日の飾りつきダイアリ表示になります。

S式ダイアリ・エントリの一般性により、アルゴリズム的に記述可能な 任意のダイアリ・エントリの指定ができます。S式ダイアリ・エントリは、 そのエントリが任意の与えられた日付に適用されるか否かを計算する式を含みます。 その値が非nilならば、エントリはその日付に適用されます。 そうでなければ、適用されません。式は変数dateを判断中の日付を知るために 使うことができます。この値は、グレゴリオ暦のリスト (month day year)です。

たとえば、毎月21日が平日ならばその日に給料を貰い、21日が週末ならその前の 金曜に貰えると仮定します。こういった日付に一致するS式ダイアリ・エントリは、 このように書きます:

 
&%%(let ((dayname (calendar-day-of-week date))
         (day (car (cdr date))))
      (or (and (= day 21) (memq dayname '(1 2 3 4 5)))
          (and (memq day '(19 20)) (= dayname 5)))
         ) Pay check deposited

以下のS式ダイアリ・エントリで(飾りつきダイアリ表示において)、 テキストが日付によって異なるダイアリ・エントリを調合することができます。

%%(diary-sunrise-sunset)

今日の日の出と日の入りの、現地時間のダイアリ・エントリを作ります。

%%(diary-phases-of-moon)

月の相(1/4)のダイアリ・エントリを作ります。

%%(diary-day-of-year)

今日が1年の何日目かとことと、今年の残り日数つきのダイアリ・エントリを作ります。

%%(diary-iso-date)

今日のISO商業日付(ISO commercial date)つきのダイアリ・エントリを作ります。

%%(diary-julian-date)

今日のユリウス暦日付つきのダイアリ・エントリを作ります。

%%(diary-astro-day-number)

今日の天文(ユリウス)日付のダイアリ・エントリを作ります。

%%(diary-hebrew-date)

今日のヘブライ暦日付つきのダイアリ・エントリを作ります。

%%(diary-islamic-date)

今日のイスラム教暦日付付のダイアリ・エントリを作ります。

%%(diary-french-date)

今日のフランス革命暦日付付のダイアリ・エントリを作ります。

%%(diary-mayan-date)

今日のマヤ暦日付付のダイアリ・エントリを作ります。

よって、ダイアリ・エントリ

 
&%%(diary-hebrew-date)

を含めると、飾りつきダイアリ表示を使ったときに、毎日のダイアリ表示が ヘブライ暦の日付も含むようになります(単純なダイアリ表示では、 行`&%%(diary-hebrew-date)'が任意の日付のダイアリに現れますが、 特に便利なことはしません)。

これら関数は、ヘブライ暦に基づくS式ダイアリ・エントリを構築するために ある程度標準的に使うことができます。

%%(diary-rosh-hodesh)

ヘブライ暦の新しい月が始まるとき、その通知と儀式の案内をする ダイアリ・エントリを作ります。

%%(diary-parasha)

毎週のユダヤの集会で読む教典を教える土曜日のダイアリ・エントリを作ります。

%%(diary-sabbath-candles)

安息日のキャンドルを灯す現地時間を教える金曜日の ダイアリ・エントリを作ります。

%%(diary-omer)

適切なときに、omerの回数を与えるダイアリ・エントリを作ります。

%%(diary-yahrzeit month day year) name

命日を記念日として印づけるダイアリ・エントリを作ります。日付は グレゴリオ暦(法律上の)命日です。適切なヘブライ暦の記念日とその前日に、 このダイアリ・エントリは現れます(ヨーロッパ・スタイルでは、パラメータの順序が day, month, yearに変わります)。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

36.10 約束日時合図のカスタマイズ

Emacsが自分の約束日時の合図をどのように行なうか、そして、どれだけの間、 合図を行なうかを、これら変数の設定で完全に指定できます:

appt-message-warning-time

約束日時のどれだけ前に合図を開始するかの分数。デフォルトは10分。

appt-audible

これが非nilならば、Emacsは端末ベルを約束日時の合図として鳴らします。 デフォルトはt

appt-visible

これが非nilならば、Emacsは約束についてのメッセージをエコー領域に 表示します。デフォルトはt

appt-display-mode-line

これが非nilならば、Emacsは約束日時までの分数をモード行に表示します。 デフォルトはt

appt-msg-window

これが非nilならば、Emacsは約束についてのメッセージを別ウィンドウに 表示します。デフォルトはt

appt-disp-window-function

この変数は、約束についてのメッセージの別ウィンドウを作るために使う関数を 保持します。

appt-delete-window-function

この変数は、時間がきたときに、約束についてのメッセージ・ウィンドウを 取り除くために使う関数を保持します。

appt-display-duration

約束についてのメッセージを表示する秒数です。デフォルトは5秒です。


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Yasutaka SHINDOH on September, 29 2006 using texi2html 1.76.