[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

39. カレンダーと日誌のカスタマイズ

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp&node=Calendar"
"elisp/カレンダーと日誌のカスタマイズ"へのコメント(無し)

カレンダーや日誌を個人の好みに合わせるための カスタマイズ項目がたくさんあります。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

39.1 カレンダーのカスタマイズ

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp&node=Calendar%20Customizing"
"elisp/カレンダーのカスタマイズ"へのコメント(無し)

変数view-diary-entries-initiallytを設定しておくと、 カレンダーを呼び出すと現在の日に対する日誌記録を自動的に表示できます。 その日がウィンドウで見える場合に限って日誌記録が表示されます。 つぎの行、

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

を個人のファイル`.emacs'に入れておくと、 Emacsを起動するたびに、カレンダーと日誌の両者のウィンドウを表示します。

同様に、変数view-calendar-holidays-initiallytを設定しておくと、 カレンダーに入ると自動的に3か月分の祝祭日一覧を表示します。 祝祭日一覧は別のウィンドウに現れます。

変数mark-diary-entries-in-calendartを設定すると、 日誌に入れてある日付に印を付けられます。 カレンダーのウィンドウ内容を再計算するときにこの効果が現れます。 これらの日付に印を付ける方法は2つあります。 ディスプレイで使えるならばフェイス(see 節 38.10 フェイス)を変更するか、 日付にプラス記号(`+')を付加します。

同様に、変数mark-holidays-in-calendartを設定すると、 フェイスを変えるかアスタリスク(`*')を付加することで 祝祭日に印を付けられます。

変数calendar-holiday-markerは、 祝祭日の日付にどのように印を付けるかを指定します。 その値は、日付に付加する文字か日付の表示に使うフェイス名です。 同様に、変数diary-entry-markerは、 日誌に入っている日付にどのように印を付けるかを指定します。 カレンダー(calendar)モードは、このような目的のために holiday-facediary-faceという名前のフェイスを作成します。 Emacsが端末で複数のフェイスを扱える場合には、 これらの変数のデフォルト値はこれらのシンボルです。

変数calendar-load-hookは、 (カレンダーを実際に表示し始めるまえに)カレンダーパッケージを初めて ロードしたときに実行されるノーマルフックです。

カレンダーを開始するとノーマルフックinitial-calendar-window-hookを 実行します。 カレンダーの表示を再計算してもこのフックは実行されません。 しかし、コマンドqでカレンダーを抜けてから再度カレンダーに入ると このフックを再度実行します。

変数today-visible-calendar-hookは、 今日の日付がウィンドウで見えるときに カレンダーバッファにカレンダーの準備を終えてから実行される ノーマルフックです。 このフックの1つの用途は、今日の日付をアスタリスクで置き換えることです。 それにはフック関数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 ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

39.2 祝祭日のカスタマイズ

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp&node=Holiday%20Customizing"
"elisp/祝祭日のカスタマイズ"へのコメント(無し)

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



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

39.3 日付表示書式

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp&node=Date%20Display%20Format"
"elisp/日付表示書式"へのコメント(無し)

日誌、モード行、メッセージに現れる日付の表示方法は、 calendar-date-display-formを設定することでカスタマイズできます。 この変数は、 文字列で表した数字が入ったmonthdayyearの各変数と、 英字の文字列が入ったmonthnamedaynameの各変数を 用いた式のリストを保持しています。 アメリカスタイルでは、このリストのデフォルト値はつぎのようになります。

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

一方、ヨーロッパスタイルでは、この値のデフォルトはつぎのようになります。

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

ISO規格の日付の表記法はつぎのとおりです。

 
(year "-" month "-" day)

典型的なアメリカの書式はつぎのとおりです。

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



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

39.4 時刻表示書式

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp&node=Time%20Display%20Format"
"elisp/時刻表示書式"へのコメント(無し)

カレンダーと日誌はデフォルトではアメリカスタイル、 つまり、12時制で時刻を表示します。 ヨーロッパスタイルやアメリカ軍の24時制を好むならば、 変数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 ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

39.5 夏時間

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp&node=Daylight%20Savings"
"elisp/夏時間"へのコメント(無し)

Emacsは、標準時間と夏時間の違いを理解しています。 つまり、日出入時刻、夏至冬至、春分秋分、朔弦望ではその違いを考慮します。 夏時間の規則は、地域ごと、年ごとに変わりえます。 正しく扱うためには、どの規則が適用されるかをEmacsが知っている必要があります。

読者の居住地域に適用される規則を記録している オペレーティングシステムもあります。 これらのシステム上では、Emacsは自動的にシステムから必要な情報を得られます。 この情報の一部やすべてが欠落していると、 GNU世界の中心であるマサチューセッツ州ケンブリッジで 現在使用している規則で補います。

デフォルトで選んだ規則が読者の地域に適切でないときには、 変数calendar-daylight-savings-startscalendar-daylight-savings-endsに設定してEmacsに伝えます。 これらの値は、変数yearを使ったLisp式である必要があります。 これらの式を評価すると、夏時間を開始/終了するグレゴリオ暦の日付を表す (month day year)の形のリストに なる必要があります。 夏時間をとらない場合には、値はnilであるべきです。

Emacsは、これらの式を用いて夏時間の開始と終了を判定し、 祝祭日や太陽/月に関する時刻を補正します。

マサチューセッツ州ケンブリッジに対する値は、つぎのとおりです。

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

つまり、指定されたyear年の4月の最初の日曜日と その年の10月の最後の日曜日です。 10月1日に夏時間を始めると変更したとすると、 変数calendar-daylight-savings-startsに つぎのように設定します。

 
(list 10 1 year)

より複雑な例として、ヘブライ暦のニサンの初日に夏時間が始まるとしましょう。 calendar-daylight-savings-startsには、 つぎの値を設定します。

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

これは、ニサンはヘブライ暦の最初の月であり、 ヘブライ暦年とグレゴリオ暦年はニサンで3760年違うからです。

読者の地域で夏時間をとっていなかったり、 つねに標準時間を望む場合には、 calendar-daylight-savings-startscalendar-daylight-savings-endsnilを設定します。

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

変数calendar-daylight-savings-starts-timecalendar-daylight-savings-ends-timeは、 夏時間と標準時間との移行が行われる 地方時の真夜中の0時からの経過分を指定します。 ケンブリッジでは、どちらの変数の値も120です。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

39.6 日誌のカスタマイズ

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp&node=Diary%20Customizing"
"elisp/日誌のカスタマイズ"へのコメント(無し)

通常、日誌用バッファのウィンドウのモード行には、 日誌記録の日付に一致する祝祭日があれば表示されます。 祝祭日を検査する処理には数秒を要するので、 祝祭日情報を含めると日誌用バッファの表示に遅れが生じます。 祝祭日情報をなくして日誌用バッファの表示を速くしたい場合には、 変数holidays-in-diary-buffernilを設定します。

変数number-of-diary-entriesは、 一度に表示する日誌記録の日数を制御します。 これは、view-diary-entries-initiallytであるときの 最初の表示に影響します。 たとえば、デフォルト値は1で、現在の日付の日誌記録のみを表示します。 値が2であると、現在とつぎの日付の日誌記録を表示します。 この値は7要素のベクトルでもかまいません。 たとえば、値が[0 2 2 2 2 4 1]であると、 日曜日には日誌記録をなにも表示せず、 月曜日から木曜日には現在とつぎの日付の日誌記録を表示し、 金曜日には金曜日から月曜日の日誌記録を表示し、 土曜日にはその日だけの日誌記録を表示します。

変数print-diary-entries-hookは、 日誌用バッファで現在見えている日誌記録のみを収めた一時的なバッファの 準備ができると実行されるノーマルフックです。 (他の関係ない日誌記録は一時的なバッファには入っていない。 日誌用バッファではそれらは隠されている。) このフックのデフォルト値は、コマンドlpr-bufferで印刷します。 別のコマンドで印刷したい場合には、単にこのフックの値を変更します。 別の用途は、たとえば、行を日付と時刻で並び替えることです。

diary-date-formsに設定すれば、 目的に合うように個人の日誌ファイル内の日付の書式を アメリカスタイルやヨーロッパスタイルにカスタマイズできます。 この変数は、日付を認識するパターンのリストです。 各パターンは、正規表現(see 節 33.2 正規表現)や monthdayyearmonthnamedaynameのシンボルを要素とするリストです。 これらの要素すべては、日誌ファイル内の特定種類のテキストに一致する パターンとして働きます。 全体として日付パターンとして一致するには、 すべての要素が順に一致する必要があります。

日付パターンの正規表現は、`*'を単語構成文字に変更した 標準の構文テーブルを用いて通常どおりに一致をとります。

monthdayyearmonthnamedaynameの シンボルは、対象にしている月、日、年、月の名前、曜日です。 数に一致するシンボルは、数の先頭にある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を使ったとしても、 日付パターンは日誌本体の最初の単語を越えて一致してはいけません。 ヨーロッパスタイルの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 ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

39.7 ヘブライ暦日付やイスラム暦日付の日誌記録

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp&node=Hebrew/Islamic%20Entries"
"elisp/ヘブライ暦日付やイスラム暦日付の日誌記録"へのコメント(無し)

日誌ファイルには、世界標準のグレゴリオ暦日付に加えて、 ヘブライ暦日付やイスラム暦日付を入れることもできます。 しかし、そのような記録の認識には時間がかかり、 ほとんどの人はそれらを使わないので、 それらは明示的にオンにする必要があります。 日誌でヘブライ暦日付の日誌記録を認識できるように望むなら、 たとえば、つぎのようにする必要があります。

 
(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-islamic-diary-entry)。

これらのコマンドは、日誌記録の対応する普通のコマンドと同様に働きます。 カレンダーウィンドウにおいてポイントがある日付に作用し、 日誌記録の日付に関する部分のみを挿入します。 日誌記録の本文は自分で入力する必要があります。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

39.8 装飾日誌表示

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp&node=Fancy%20Diary%20Display"
"elisp/装飾日誌表示"へのコメント(無し)

日誌表示は、日誌用バッファを準備してからフック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 ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

39.9 S式項目と装飾日誌表示

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp&node=Sexp%20Diary%20Entries"
"elisp/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)

は、1990年9月8日の装飾日誌表示ではつぎのようになります。

 
Renew medication (5th time)

当日の日誌項目としてだけでなく、 それよりまえの日の日誌項目にも含めるためのS式日誌項目があります。 たとえば、記念日の1週間前に督促がほしいときには、 つぎのようにします。

 
%%(diary-remind '(diary-anniversary 12 22 1968) 7) Ed's anniversary

すると、装飾日誌には、12月15日と12月22日に

 
Ruth & Ed's anniversary
と表示されます。

関数diary-dateは、整数や整数のリストやtで指定した 月、日、年の組み合わせで表される日付に適用されます。 たとえば、

 
%%(diary-date '(10 11 12) 22 t) Rake leaves

により、装飾日誌には、各年の10月22日、11月22日、12月22日には

 
Rake leaves

と表示されます。

関数diary-floatにより、 11月の第3金曜日とか4月の最後の火曜日といった 日付に適用する日誌記録を記述できます。 パラメータは、月month、曜日dayname、添字nです。 日曜日をdayname=0、月曜日をdayname=1、…として、 month月のn番目の曜日daynameに項目が現れます。 nが負であると、month月の月末から数えます。 monthは、月のリストでも、1つの月でも、全部の月を指定するtでも かまいません。 省略可能なパラメータdayを指定して、 month月のn番目の曜日daynameの 前後のday日を指定できます。 nが正だとdayのデフォルトは1であり、 nが負だとdayのデフォルトはmonth月の月末です。 たとえば、

 
%%(diary-float t 1 -1) Pay rent

は、装飾日誌に各月の最後の月曜日に

 
Pay rent

を表示します。

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)
月に朔弦望に対する日誌項目を作る。
%%(diary-day-of-year)
年内の通算日数と残り日数で今日の日誌項目を作る。
%%(diary-iso-date)
今日に対応するISO商用暦の日誌項目を作る。
%%(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)
適切ならばオーメル(13) の回数を与える日誌項目を作る。
%%(diary-yahrzeit month day year) name
命日に対応した日誌項目を作る。 命日の日付はグレゴリオ暦で指定する。 正しいヘブライ暦の追悼日とその前日に日誌項目が現れる。 (ヨーロッパスタイルでは、パラメータの順序を daymonthyearと変える。)



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

39.10 約束の警告表示のカスタマイズ

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp&node=Appt%20Customizing"
"elisp/約束の警告表示のカスタマイズ"へのコメント(無し)

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秒である。


[ << ] [ >> ]           [表紙] [目次] [索引] [検索] [上端 / 下端] [?]