Go to the first, previous, next, last section, table of contents.


暦と日誌

Emacsには、過去や将来の予定を記録する日誌の機能を持つ カレンダー機能があります。 カレンダーに入るにはM-x calendarと打ちます。 すると、今月を中央月として3か月分のカレンダーが表示され、 ポイントは今日の日付に置かれます。 C-u M-x calendarのように数引数を指定すると、 3か月分のカレンダーの中央に表示する月と年を聞いてきます。 カレンダーは専用のバッファを使い、 そのメジャーモードはカレンダー(calendar)モードです。

カレンダー内でMouse-2をクリックすると、 その日付で使用できる機能のメニューが表示されます。 C-Mouse-3をクリックすると、 特定の日付に関わらずに使える機能のメニューが表示されます。 カレンダーから抜けるにはqと打ちます。 カレンダーと日誌のカスタマイズに関しては、 See section `カレンダーと日誌のカスタマイズ' in Emacs Lisp リファレンスマニュアル

カレンダー内の移動

カレンダー(calendar)モードでは、 日、週、月、年といった論理的単位で移動します。 始めに表示された3か月の外に移動すると、 カレンダーは自動的に『スクロール』して 指定された日付の箇所が表示されるようにします。 ある日付へ移動すると、祝祭日の名称や日誌記録を見たり、 その日付を別の暦に変換したりできます。 カレンダーを単にスクロールすれば、大きな時間単位での移動に便利です。

日/週/月/年単位の移動

カレンダー内を移動するコマンドはテキスト内を移動するコマンドに対比できます。 日、週、月、年を単位として前後に移動できます。

C-f
1日後にポイントを進める(calendar-forward-day)。
C-b
1日前にポイントを戻す(calendar-backward-day)。
C-n
1週間後にポイントを進める(calendar-forward-week)。
C-p
1週間前にポイントを戻す(calendar-backward-week)。
M-}
1か月後にポイントを進める(calendar-forward-month)。
M-{
1か月前にポイントを戻す(calendar-backward-month)。
C-x ]
1年後にポイントを進める(calendar-forward-year)。
C-x [
1年前にポイントを戻す(calendar-backward-year)。

日や週を単位とした移動は、Emacsの通常の文字単位や行単位の移動の類推です。 C-nは通常はつぎの行の同じ桁に移動しますが、 カレンダー(calendar)モードでは つぎの週の同じ曜日に移動します。 また、C-pはまえの週の同じ曜日に移動します。

矢印キーは他のモードと同様に、それぞれ、 C-fC-bC-nC-pに等価です。

月単位や年単位の移動コマンドは週単位の移動と同じように働きますが、 より大きな単位での移動です。 月単位の移動コマンドM-}M-{は、それぞれ、 翌月、前月に移動します。 年単位の移動コマンドC-x ]C-x [は、 それぞれ、1年後、1年前に移動します。

これらのコマンドを簡単に覚えるには、それぞれ、 月と年を段落とページに対比させることです。 しかし、コマンド自体は同じではありません。 Emacsの通常の段落移動コマンドは段落の先頭か末尾に移動しますが、 月単位や年単位の移動コマンドは1か月分や1年分で移動しますから、 月や年の区切りを普通は飛び越します。

これらのコマンドはすべて数引数を反復回数として扱います。 簡単のために、カレンダー(calendar)モードでは Meta修飾なしでも数字とマイナス記号で数引数を指定できます。 たとえば、100 C-fは100日後の日付にポイントを進めます。

週/月/年の始めと終り

週(または、月、年)というのは、単に1日1日が集まったものではありません。 週(月、年)は特定の日で始まると考えます。 そこで、カレンダー(calendar)モードには、 週、月、年の始めや終りに移動するコマンドがあります。

C-a
週の始めにポイントを移動する(calendar-beginning-of-week)。
C-e
週の終りにポイントを移動する(calendar-end-of-week)。
M-a
月の始めにポイントを移動する(calendar-beginning-of-month)。
M-e
月の終りにポイントを移動する(calendar-end-of-month)。
M-<
年の始めにポイントを移動する(calendar-beginning-of-year)。
M->
年の終りにポイントを移動する(calendar-end-of-year)。

これらのコマンドは数引数を反復回数と扱い、 何週、何か月、何年だけ前後に移動するのかを指定します。

デフォルトでは、週は日曜から始まります。 月曜から始めるには、変数calendar-week-start-dayに1を設定します。 (47)

特定の日付

カレンダー(calendar)モードには、 さまざまな方法で指定した特定の日付へ移動するコマンドがあります。

g d
指定した日付へポイントを移動する(calendar-goto-date)。
o
指定した月をカレンダーの中央月にする(calendar-other-month)。
.
ポイントを今日の日付に移動する(calendar-goto-today)。

g dcalendar-goto-date)は、 年、月、日を読み取ってその日付に移動します。 カレンダーには西暦紀元がすべて含まれているため、 西暦年を略さずに打つ必要があります。 つまり、`90'ではなく`1990'です。

ocalendar-other-month)は、 月と年を読み取って、その月を中央月として3か月分のカレンダーを表示します。

.calendar-goto-today)で、今日の日付に戻ることができます。

カレンダーのスクロール

見えている範囲を越えて移動するとカレンダーは自動的にスクロールします。 手動でスクロールすることもできます。 カレンダーを表示しているウィンドウでは、 長い長い紙に月を印刷したものの一部が見えているのだと考えてください。 カレンダーをスクロールするとは、 新しい月が見えるようにこの紙を動かすことに相当します。

C-x <
カレンダーを1か月後にスクロールする(scroll-calendar-left)。
C-x >
カレンダーを1か月前にスクロールする(scroll-calendar-right)。
C-v
NEXT
カレンダーを3か月後にスクロールする (scroll-calendar-left-three-months)。
M-v
PRIOR
カレンダーを3か月前にスクロールする (scroll-calendar-right-three-months)。

カレンダーをスクロールするもっとも基本的なコマンドは、 一度に1か月分スクロールします。 つまり、コマンドの実行前後の表示を比べると、2か月分重複しています。 C-x <はカレンダーを1か月分左にスクロールします。 つまり、時間的に1か月後を表示します。 C-x >コマンドはカレンダーを右にスクロールし、 時間的に1か月前に戻します。

コマンドC-vM-vは、 カレンダーを『1画面分』、つまり、3か月分スクロールします。 これは、通常のモードでのこれらのコマンドと意味的に同じになっています。 C-vは将来の日付を見えるようにし、 M-vは過去の日付を見えるようにします。 これらのコマンドは数引数を反復回数として扱います。 たとえば、C-uは後続のコマンドを4回反復するので、 C-u C-vと打てば1年分先へカレンダーをスクロールし、 C-u M-vと打てば1年分前へカレンダーをスクロールします。

ファンクションキーNEXTPRIORは、 他のモードと同様に、それぞれ、C-vM-vに等価です。

日数計算

M-=
カレントリージョン内の日数を表示する (calendar-count-days-region)。

リージョン内の日数を調べるには、 M-=calendar-count-days-region)と打ちます。 このコマンドで表示される日数は、 マークとポイントで指定した両日を含んだ日数です。

その他のカレンダーコマンド

p d
通年日(1年のうちの何日目の日か)を表示する (calendar-print-day-of-year)。
C-c C-l
カレンダーを表示しているウィンドウを再表示する(redraw-calendar)。
SPC
別のウィンドウをスクロールする (scroll-other-window)。
q
カレンダーから抜ける(exit-calendar)。

年始から数えた日数、あるいは、1年の残り日数を表示するには、 p dcalendar-print-day-of-year)コマンドを打ちます。 すると、上の2つの日数をエコー領域に表示します。 年始からの日数には指定した日が含まれます。 また、残りの日数には指定した日は含まれません。

カレンダーのウィンドウのテキストが壊れた場合には、 C-c C-lredraw-calendar)と打って再表示させます。 (カレンダー(calendar)モード以外の編集用コマンドを使った場合に限り、 表示がおかしくなる。)

カレンダー(calendar)モードでは、 SPCscroll-other-window)を使って 別のウィンドウをスクロールできます。 このコマンドは、 別のウィンドウに祝祭日や日誌記録の一覧を表示しているときに便利です。

カレンダーから抜けるには、 qexit-calendar)と打ちます。 このコマンドはカレンダーに関係したすべてのバッファを閉じ、 別のバッファを選択します。 (カレンダー関連のウィンドウ専用のフレームであった場合には、 カレンダーを終了するとそのフレームをアイコン化する。)

LaTeXカレンダー

カレンダーLaTeXコマンドは、 カレンダーを印刷するLaTeXコードのバッファに作成します。 使用するコマンドに依存して、ポイント位置の日、週、月、年の いずれかを含んだカレンダーを印刷できます。

t m
1か月分のカレンダーを生成する(cal-tex-cursor-month)。
t M
横づかいで1か月分のカレンダーを生成する (cal-tex-cursor-month-landscape)。
t d
1日分のカレンダーを生成する(cal-tex-cursor-day)。
t w 1
1週間分の1ページのカレンダーを生成する(cal-tex-cursor-week)。
t w 2
1週間分の2ページのカレンダーを生成する(cal-tex-cursor-week2)。
t w 3
1週間分のISOスタイルのカレンダーを生成する(cal-tex-cursor-week-iso)。
t w 4
月曜から始まる1週間分のカレンダーを生成する (cal-tex-cursor-week-monday)。
t f w
ファイロファックス(システム手帳)スタイルの見開き2週間分のカレンダーを生成する (cal-tex-cursor-filofax-2week)。
t f W
ファイロファックス(システム手帳)スタイルの見開き1週間分のカレンダーを生成する (cal-tex-cursor-filofax-week)。
t y
1年分のカレンダーを生成する(cal-tex-cursor-year)。
t Y
横づかいで1年分のカレンダーを生成する (cal-tex-cursor-year-landscape)。
t f y
ファイロファックス(システム手帳)スタイルの1年分のカレンダーを生成する (cal-tex-cursor-filofax-year)。

これらのコマンドのいくつかは、横づかい(つまり、『ランドスケープ』)の カレンダーを印刷し、横長になります。 いくつかのコマンドでは、ファイロファックス(システム手帳) サイズ(3.75インチ×6.75インチ、約95.25mm×171.45mm)を使います。 これらのコマンドはすべて、印刷する日数、週数、月数、年数を 数引数で指定できます(つねに選択した日から始まる)。

変数cal-tex-holidaysnil以外(デフォルト)ならば、 印刷されるカレンダーにはcalendar-holidaysの祝祭日が表示されます。 変数cal-tex-diarynil以外 (デフォルトはnil)ならば、 日誌記録も一緒に印刷されます(週間および月間カレンダーの場合だけ)。

祝祭日

Emacsのカレンダーはすべての祝祭日を把握しており、 それらをカレンダーに表示できます。

h
選択された日付の祝祭日を表示する(calendar-cursor-holidays)。
Mouse-2 Holidays
マウスでクリックした日付の祝祭日を表示する。
x
カレンダーウィンドウの祝祭日に印を付ける (mark-calendar-holidays)。
u
カレンダーウィンドウの印を消す(calendar-unmark)。
a
表示中の3か月分のカレンダーの すべての祝祭日を別のウィンドウに表示する (list-calendar-holidays)。
M-x holidays
今日を中心とした3か月間のすべての祝祭日を別のウィンドウに表示する。
M-x list-holidays
指定した範囲の年の祝祭日を別のウィンドウに表示する。

カレンダー上のある日付が祝祭日かどうかを知るには、 その日付にポイントを動かしhコマンドを使います。 あるいは、その日付をMouse-2でクリックし、 立ち上がったメニューからHolidaysを選択します。 いずれの方法でも、その日付に関する祝祭日情報が、 エコー領域に収まればエコー領域に、あるいは、別のウィンドウに表示されます。

カレンダーに表示されている期間内にどれだけの祝祭日があるかを知るには、 xコマンドを使います。 祝祭日である日を異なるフェイスで(複数のフェイスを使えなければ、 日付のあとに`*'を付けて)表示します。 このコマンドは、画面に見えている期間だけでなく、 スクロールすると見えてくる期間にも適用されます。 印を消してもとの状態に戻るにはuコマンドを使いますが、 日誌の印も同時に消えます。 (see section 日誌)。

より詳しい情報を得るには、aコマンドを使います。 これは、現在の3か月間に含まれるすべての祝祭日の一覧を別のバッファに表示します。 カレンダーのウィンドウでSPCを使うと、 その一覧をスクロールできます。

コマンドM-x holidaysは、今月を中央月として前後1か月に含まれる 祝祭日の一覧を表示します。 カレンダーウィンドウがなくてもこのコマンドを使えます。 別の月を中央月とした祝祭日の一覧が必要な場合は、 C-u M-x holidaysを使います。 (中央月の)月と年を聞いてきます。

Emacsが知っている祝祭日は、 アメリカ合衆国の祝祭日、キリスト教の祝祭日、 ユダヤ教の祝祭日、イスラム教の祝祭日、夏至、冬至、春分、秋分です。

コマンドM-x list-holidaysは、 指定した数年間の祝祭日の一覧を表示します。 始めの年と終りの年を聞いてくるので、 すべての祝祭日、ある特定の種類の祝祭日を選べます。 カレンダーウィンドウがなくてもこのコマンドを使えます。

Emacsが祝祭日を決定するために用いる暦は、 歴史的な事実に基づくものではなく、 現在用いているものです。 たとえば、歴史的には夏時間 (48) (daylight savings time)を始める時期や施行するかどうかは、 年ごとにばらばらでした。 現在の合衆国の法律では4月の最初の日曜から始めると定めています。 合衆国の夏時間を適用するかどうかを Emacsは現在の定義に基づいて決定しますので、 昔の年代については誤りである場合もあります。

日出入時刻

カレンダーの特別なコマンドで、 任意の日付の日出入時刻を2分以内の精度で調べられます。

S
選択した日付の日出入時刻を表示する (calendar-sunrise-sunset)。
Mouse-2 Sunrise/Sunset
クリックした日付の日出入時刻を表示する。
M-x sunrise-sunset
今日の日出入時刻を表示する。
C-u M-x sunrise-sunset
指定した日付の日出入時刻を表示する

カレンダー内で地方時(local times)で日出入時刻を表示するには、 目的の日付にポイントを移動してからSと打ちます。 あるいは、目的の日付をMouse-2でクリックすると メニューが立ち上がるのでその中からSunrise/Sunsetを選びます。 カレンダーの外からでも、 今日や指定した日付の日出入時刻を M-x sunrise-sunsetコマンドで調べられます。 今日以外の日付を指定するには、 C-u M-x sunrise-sunsetコマンドを使います。 すると、年月日を聞いてきます。

C-u C-u M-x sunrise-sunsetで、 任意の場所の任意の日付の日出入時刻を表示できます。 経度、緯度、協定世界時(49) からの分単位のずれ、日付の指定を聞いてきます。 すると、その場所でのその日付の日出入時刻が表示されます。

日出入時刻は、地球上の場所に依存しますので、 これらのコマンドを使うまえにEmacsに現在いる場所の緯度/経度と土地の名前を 教えなければなりません。 これにはつぎのようにします。

(setq calendar-latitude 40.1)
(setq calendar-longitude -88.2)
(setq calendar-location-name "Urbana, IL")

変数calendar-latitudecalendar-longitudeの値には、 小数点以下1桁まで指定します。

タイムゾーンは、地方時で表した日出入時刻に影響します。 通常、Emacsはオペレーティングシステムからタイムゾーンを取得しますが、 それがまちがっている場合(あるいは、オペレーティングシステムが その情報を与えない場合)には、自分で設定する必要があります。 つぎは設定例です。

(setq calendar-time-zone -360)
(setq calendar-standard-time-zone-name "CST")
(setq calendar-daylight-time-zone-name "CDT")

calendar-time-zoneの値は、協定世界時(グリニッジ標準時)と 地方標準時との差を分単位で表したものです。 calendar-standard-time-zone-namecalendar-daylight-time-zone-nameは、 現在いる場所のタイムゾーンの省略名称です。 Emacsは夏時間を補正して日出入時刻を表示します。 夏時間をどのように決定するかは、 See section 夏時間

ユーザーとしては、個人の`.emacs'ファイルで カレンダーの位置関連の変数に普段いる場所の値を設定すると便利でしょう。 あるいは、Emacsをマシンにインストールするときに、 そのマシンの大部分のユーザー用に典型的な場所に関する 情報を`default.el'ファイルに設定してもかまいません。 See section 初期化ファイル`~/.emacs'

朔弦望(新月、上弦、満月、下弦)

以下のコマンドは、朔弦望(新月、上弦、満月、下弦)の日付と時刻を表示します。 これらの機能は、『朔弦望に依存する』問題をデバッグするときに重宝します。

M
表示してある3か月間の朔弦望の日付/時刻の一覧を表示する (calendar-phases-of-moon)。
M-x phases-of-moon
今日を中央にした3か月間の朔弦望の日付/時刻の一覧を表示する。

カレンダー内でMコマンドを使うと、 現在の3か月間の朔弦望の日付/時刻を別のバッファに表示します。 一覧内の日付/時刻は数分以内の精度です。

カレンダーの外からでも、 M-x phases-of-moonコマンドを使って、 今月を中央月として前後1か月の朔弦望の日付/時刻を 表示できます。 別の期間に関して調べるにはC-u M-x phases-of-moonを使います。 すると、月と年を聞いてきます。

朔弦望の日付/時刻は(必要ならば夏時間を補正して)地方時で与えられます。 しかし、変数calendar-time-zoneが設定されていなければ、 協定世界時(グリニッジ標準時)が使われます。 See section 夏時間

他の暦との相互変換

Emacsのカレンダーはつねに グレゴリオ暦(Gregorian calendar)で表示します。 この暦は『新暦』とも呼ばれ、今日では世界の大部分で使われています。 しかし、この暦は16世紀以前には存在せず、 18世紀になるまでは普及していませんでした。 ユリウス暦(Julian calendar)に置き替って 世界的に受け入れられたのは20世紀初頭になってからです。 Emacsのカレンダーは西暦1年1月以降の任意のカレンダーを表示できますが、 グレゴリオ暦が存在しなかった時代に関しても グレゴリオ暦に基づいた暦を表示します。

Emacsは他の暦を表示することはできませんが、 指定した日付と他の暦の日付とを相互に変換できます。

参照可能な暦

ISO商用暦はヨーロッパで広く使われています。

ユリウス暦は、ジュリアス・シーザー(ユリウス・カエサル、Julius Caesar)に 因んで命名されたもので、 中世から19世紀にかけてヨーロッパ中で使われていました。

天文学者は、ユリウス暦紀元前4713年1月1日月曜の正午からの経過日数を使います。 この経過日数をユリウス日(Julian day number)とか 天文通算日(Astronomical day number)と呼びます。

ヘブライ暦は昔からユダヤ教で使われてきました。 Emacsのカレンダープログラムは、ユダヤの祝祭日がどの日付かを 決定するのにヘブライ暦を使います。 ヘブライ暦では1日は日没から始まり日没で終ります。 (50)

イスラム暦は多くのイスラム教の国々で使われています。 Emacsはイスラム暦を用いてイスラム教の祝祭日を決定します。 イスラムの世界ではカレンダーについての世界的な取り決めが存在しません。 Emacsは広く受け入れられているものを使用していますが、 イスラム教の祝祭日の正確な日付は、計算によってではなく 宗教上の権威筋の布告によってしばしば決定されます。 そのため、実際の日付とEmacsが計算した日付には少々違いがあります。 イスラム暦の1日は日没から始まり日没で終ります。

フランス革命暦は、1789年の大革命以降にジャコバン党によって作成されました。 より永続的で自然に準じて年周期を捉えることを目的に、 度量衡に類似した合理的な尺度ということで1週間を10日にしています。 フランス政府は、この暦を1805年の終りに公式に放棄しました。

中央アメリカのマヤでは、3種類の別だが重複している暦の体系、 ロングカウント(long count)、ゾルキン(tzolkin)、 ハアブ(haab)を使っていました。 Emacsはこれらの3つの暦をすべて知っています。 専門家はマヤ暦とわれわれの暦が正確にはどのように関連しているか 議論している最中です。 Emacsは、グッドマン・マーチンス・トンプソンの関連付けを用いて計算します。

コプト教徒は古代エジプト太陽暦に基づく暦を使っています。 この暦は、おのおの30日からなる12個の月と、それに続く余分の5日間で構成されます。 4年に一度、余分の5日間に閏日(1日間)を付け加えて6日間とします。 エチオピア暦は構造的にはコプト暦と同一ですが、 コプト暦とは異なった年数と月の名前を用いています。

ペルシア人はオマール・カイヤーム(Omar Khayyam) (51)が 作った暦に基づいた太陽暦を使っています。 この暦は、12個の月から成り、最初の6個の月は31日、 つぎの5個の月は30日、最後の1個の月は平年は29日で閏年には30日となります。 閏年は4年か5年に一度入る複雑なパターンで起こります。

中国暦は、朔望月を太陽年に埋め込んだ複雑なものです。 年は60を単位として一周し、平年は12個の月ですが、閏年は13個の月です。 各月は29日か30日です。 年、平月、日は、10の天の主節(52)と 12の地の副節(53) に従って名付けられ、 60を周期として巡回します。 (54)

他の暦への変換

以下のコマンドは選択した日(ポイントがある日)を他の暦で表示します。

Mouse-2 Other Calendars
クリックした日が、他のさまざまな暦ではどうなるかを表示する。
p c
選択した日をISO商用暦の日付で表示する (calendar-print-iso-date)。
p j
選択した日をユリウス暦の日付で表示する (calendar-print-julian-date)。
p a
選択した日を天文通算日(ユリウス日)で表示する (calendar-print-astro-day-number)。
p h
選択した日をヘブライ暦の日付で表示する (calendar-print-hebrew-date)。
p i
選択した日をイスラム暦の日付で表示する (calendar-print-islamic-date)。
p f
選択した日をフランス革命暦の日付で表示する (calendar-print-french-date)。
p C
選択した日を中国暦の日付で表示する (calendar-print-chinese-date)。
p k
選択した日をコプト暦の日付で表示する (calendar-print-coptic-date)。
p e
選択した日をエチオピア暦の日付で表示する (calendar-print-ethiopic-date)。
p p
選択した日をペルシア暦の日付で表示する (calendar-print-persian-date)。
p m
選択した日をマヤ暦の日付で表示する(calendar-print-mayan-date)。

XウィンドウシステムでEmacsを使っている場合には、 ある日付を他の暦での日付に変換する いちばん簡単な方法は、その日付をMouse-2でクリックし、 立ち上がったメニューからOther Calendarsを選びます。 対応する日付をEmacsが知っているすべての暦でメニューに表示します。 (このメニューは単なる表示用なので、項目を選んでも何も起こらない。)

グレゴリオ暦の目的の日付にポイントを動かして適切なキーを打ちます。 pはprintの意味で、 Emacsはその日を指定された暦でエコー領域に表示します。

他の暦からの変換

Emacsが扱える暦で日付を指定して、カレンダーの対応する日に移動できます。 本節では、マヤ暦を除く暦でこれを行うコマンドを説明します。 マヤ暦については、これに続く節を参照してください。

g c
ISO商用暦で指定した日付に移動する(calendar-goto-iso-date)。
g j
ユリウス暦で指定した日付に移動する(calendar-goto-julian-date)。
g a
天文通算日(ユリウス日)で指定した日付に移動する (calendar-goto-astro-day-number)。
g h
ヘブライ暦で指定した日付に移動する(calendar-goto-hebrew-date)。
g i
イスラム暦で指定した日付に移動する(calendar-goto-islamic-date)。
g f
フランス革命暦で指定した日付に移動する(calendar-goto-french-date)。
g C
中国暦で指定した日付に移動する(calendar-goto-chinese-date)。
g p
ペルシア暦で指定した日付に移動する(calendar-goto-persian-date)。
g k
コプト暦で指定した日付に移動する(calendar-goto-coptic-date)。
g e
エチオピア暦で指定した日付に移動する(calendar-goto-ethiopic-date)。

これらのコマンドは、それぞれの暦での日付を聞いてきて、 それに対応するグレゴリオ暦の日付にポイントを移動します。 また、エコー領域には指定した暦の日付を表示します。 Emacsは月の名前をユーザーに聞くときに強い補完(see section 補完) を使うので、ヘブライ暦/イスラム暦/フランス革命暦などの月の名前の綴りを 気にする必要はないでしょう。

ヘブライ暦で問題となるのが追悼記念祭『ヤールツァイト』(yahrzeit)と 呼ばれる命日の計算です。 Emacsのカレンダーにはその計算機能があります。 カレンダー内にカーソルがあるときにM-x list-yahrzeit-datesコマンドを 実行すると年の範囲を聞いてきます。 そして、ポイントがある日付に対応した追悼記念祭の日付を指定した範囲の年に ついて一覧表示します。 カレンダー内にいないときにこのコマンドを使うと、 まず死亡年月日を聞いてから年の範囲を聞いてきます。 そして、追悼記念祭の日付の一覧を表示します。

マヤ暦からの変換

以下はマヤ暦で日付を指定する方法です。

g m l
ロングカウント暦で指定した日付に移動する (calendar-goto-mayan-long-count-date)。
g m n t
ゾルキン暦のつぎの周期の日に進む (calendar-next-tzolkin-date)。
g m p t
ゾルキン暦のまえの周期の日に戻る (calendar-previous-tzolkin-date)。
g m n h
ハアブ暦のつぎの周期の日に進む (calendar-next-haab-date)。
g m p h
ハアブ暦のまえの周期の日に戻る (calendar-previous-haab-date)。
g m n c
マヤのカレンダーラウンドのつぎの周期の日に進む (calendar-next-calendar-round-date)。
g m p c
マヤのカレンダーラウンドのまえの周期の日に戻る (calendar-previous-calendar-round-date)。

これらのコマンドを理解するには、 マヤ暦を理解しておく必要があります。 ロングカウントは以下の単位に基づいて日付を計算したものです。

1キン(kin) = 1日   1ユイナル(uinal) = 20キン
1タン(tun) = 18ユイナル   1カタン(katun) = 20タン
1バクタン(baktun) = 20カタン

したがって、ロングカウントの12.16.11.16.6は、 12バクタン、16カタン、11タン、16ユイナル、6キンを表しています。 Emacsのカレンダーはマヤ暦ロングカウント7.17.18.13.1 (55) まで遡ることができますが、 それ以前は扱えません。 g m lコマンドを使ってマヤ暦ロングカウントの日付を入力するときには、 バクタン、カタン、タン、ユイナル、キンをピリオドで区切ってください。

マヤ暦ゾルキンは、独立した13日と20日の周期からなる260日周期です。 この周期が永遠に繰り返されるため、 Emacsには、つぎの周期へ進んだりまえの周期へ戻るコマンドがあります。 g m p tと打つと、ゾルキン暦のまえの周期の日に戻ります。 このコマンドは、ゾルキン暦の日付を聞いてきて、 その日付のまえの周期の日にポイントを戻します。 同様に、g m n tは、ゾルキン暦のつぎの周期の日に進めます。

マヤ暦ハアブは365日の周期で、20日からなる18個の月と 月に属さない5日間からなっています。 ゾルキン暦の周期と同様に、この周期が永遠に繰り返されるため、 Emacsにはつぎの周期の日へ進んだりまえの周期の日に戻るコマンドがあります。 g m p hと打つと、ハアブ暦のまえの周期に日に戻ります。 このコマンドは、ハアブ暦の日付を聞いてきて、 その日付のまえの周期の日にポイントを戻します。 同様に、g m n hは、ハアブ暦のつぎの周期の日に進めます。

マヤではゾルキン暦とハアブ暦を組み合わせた暦も使われていました。 組み合わせの1周期は約52年でカレンダーラウンドと呼ばれます。 g m p cと打つと、 Emacsはハアブ暦の日付とゾルキン暦の日付を聞いてきます。 そして、まえの組み合わせ周期の日にポイントを戻します。 つぎの組み合わせ周期の日にポイントを進めるには g m n cを使います。 これらのコマンドは、指定したハアブ暦/ゾルキン暦の日付の組み合わせが不可能であると エラーを通知します。

Emacsはマヤ暦の名前の入力では強い補完(see section 強い補完)を 使うので、綴りを気にする必要はありません。

日誌

Emacsの日誌機能は、カレンダーと連動して、 1日を単位に約束やその他の予定を管理します。 日誌機能を使うには、用事と日付を書き込んだ 日誌ファイル(diary file)をまず作っておく必要があります。 そうしておくと、Emacsは自動的にこのファイルを取り込んで、 今日/数日先/指定した日付の予定を表示します。

デフォルトでは、Emacsは日誌ファイルとして`~/diary'を使います。 これはcalendarプログラムが使うファイルと同じです。 以下に`~/diary'ファイルの例を示します。

12/22/1988  20回目の結婚記念日!
&1/1.       新年おめでとう!
10/22       ルースの誕生日
* 21, *:    給料日
Tuesday  10時から院生たちと週間ミーティング
         スポウイット、シェン、ビットナー、カポールと約束
1/13/89     13日の金曜日!!
&thu 4pm    ロイドとスカッシュをする
mar 16      親父の誕生日
April 15, 1989 所得税の納付期限
&* 15       勤務表の提出期限

この例では、大部分の予定の項目に余分な空白を入れて整列してありますが、 これは純粋に好みの問題です。

日誌を手で作成しようとしているかもしれませんが、 Emacsには、日誌の項目を眺めたり、追加したり、変更したりする コマンドが数多くあります。

日誌項目の表示コマンド

いったん`~/diary'ファイルを作成しておけば、 カレンダーを使ってこれを眺めることができます。 また、カレンダー(calendar)モードの外からでも、 今日の予定を参照できます。

d
選択した日付のすべての日誌項目を表示する(view-diary-entries)。
Mouse-2 Diary
クリックした日付のすべての日誌項目を表示する。
s
日誌ファイル全体を表示する(show-all-diary-entries)。
m
日誌項目が登録されているすべての日付に印を付ける (mark-diary-entries)。
u
カレンダーウィンドウの印を消す(calendar-unmark)。
M-x print-diary-entries
現在表示している日誌項目をそのまま印刷する。
M-x diary
今日の日付の日誌項目すべてを表示する。
M-x diary-mail-entries
これからの予定を自分自身にメイルする。

dで日誌項目を表示すると、 別のウィンドウに選択した日付の日誌項目が表示されます。 新しいウィンドウのモード行には、 日誌項目の日付とその日付の祝祭日情報が表示されます。 dに数引数を指定すると、指定した日数の期間の日誌項目を表示します。 したがって、2 dは、選択した日とそのつぎの日のすべての項目を表示します。

ある日付の日誌項目を表示する別の方法として、 日付をMouse-2でクリックし、 立ち上がったメニューから項目Diaryを選ぶことです。

日誌が記載されている日付を知るにはmコマンドを使います。 このコマンドは、日誌が記載されている日付を別のフェイスで (複数のフェイスを使えなければ、 日付のあとに`+'を付けて)表示します。 このコマンドは、画面に見えている期間だけでなく、 スクロールすると見えてくる期間にも適用されます。 印を消してもとの状態に戻るにはuコマンドを使いますが、 祝祭日の印も同時に消えます。 (see section 祝祭日)。

日誌ファイル内の数項目ではなく全体を見るには、 sコマンドを使います。

選択した日誌項目だけを表示するには、 選択表示機能を用いて他の項目を隠します。

画面で見ている日誌用バッファは幻でしかありません。 そのため、単純にバッファを印刷しても 画面に表示されているようには印刷できません。 画面に表示されている日誌項目をあるがままに印刷するには専用のコマンド M-x print-diary-entriesを使う必要があります。 このコマンドはデータをプリンタに直接送ります。 lpr-regionのようにカスタマイズできます (see section 印刷)。

コマンドM-x diaryは、現在のカレンダー表示とは関係なしに、 場合によっては数日後までを含めて今日の日誌を表示します。 変数number-of-diary-entriesには何日間まで含めるか指定します。 See section `カレンダーと日誌のカスタマイズ' in Emacs Lisp リファレンスマニュアル

個人の`.emacs'ファイルに(diary)と書けば、 Emacsを実行すると自動的に当日の日誌項目をウィンドウに表示します。 そのウィンドウのモード行には、日付と祝祭日情報が表示されます。

多くのユーザーは、日誌に記載した予定を電子メイルで受け取ることを好みます。 自分自身にそのようなメイルを送るには、 コマンドM-x diary-mail-entriesを使います。 数引数で(今日から始めて)何日間を含めるか指定します。 数引数を指定しなければ、変数diary-mail-daysが日数を指定します。

日誌ファイル

個人の日誌ファイルは、用事と日付の対応付けを記録したファイルです。 日誌ファイルの名前は、変数diary-fileで指定します。 デフォルトは`~/diary'です。 calendarプログラムは、 Emacsの日誌機能が扱う形式を部分的に扱えます。 そのため、calendarプログラムでもそれなりに 日誌ファイルを眺められますが、正しく解釈されない項目もあるでしょう。

日誌ファイルの各項目は、1つの用事を表し、1行以上の行から成ります。 項目はつねに行頭の日付指定で始まります。 項目の残りの部分は用事を説明する単なるテキストです。 項目が1行に収まらないときには、後続行の行頭を白文字で始めて 直前の項目の続きであることを示します。 正しい日付指定で始まらない行や 直前の項目の続きの行でないものは無視されます。

カレンダーのウィンドウ内で特定の日誌項目に印を付けないようにできます。 それには、項目の日付指定のまえにアンパーサンド(`&')を付けます。 これは、日誌ウィンドウに項目を表示するのには影響ありません。 カレンダーウィンドウの日付の印だけに影響します。 印付けを禁止した項目は一般的な項目としては便利で、 こうしないと印が付いた日が多くなりすぎます。

項目の最初の行が日付指定や曜日だけの場合には、 最初の行は日誌ウィンドウに表示されません。 後続の行だけが表示されます。 たとえば、つぎの項目は、日誌ウィンドウでは先頭に日付の行は表示されません。

02/11/1989
     本日B. ビルがプリンストンに来る
     2pm 認知研究委員会の会合
     2:30-5:30 ローレンスビルにリズ
     4:00pm 歯医者予約
     7:30pm ジョージの所で夕食
     8:00-10:00pm コンサート

この流儀だと1日分の予定を表示する限りはきちんと見えるのですが、 2日分以上の場合には混乱しかねません。

ウィンドウに表示された日誌項目は編集できますが、 表示されたバッファには日誌ファイル全体が含まれていて、 ある部分が隠されいるのだということを忘れてはなりません。 たとえば、C-fforward-char)コマンドで 表示上の行末にポイントを置けますが、 実際には隠された行の途中にいるのかもしれません。

日誌項目を編集するときには注意してください! 項目に余分な行を追加したり見えている行の途中に文字を追加/削除しても 問題は生じませんが、行末で編集すると予期しないことが起こる可能性があります。 行を削除すると今は見えていない後続の他の項目を 削除してしまうかもしれません。 日誌を編集するまえには、sshow-all-diary-entries)で ファイル全体を表示させるのが最良です。

日付指定の形式

以下は日誌項目の例で、 使用可能ないくつかの日付指定形式を示しています。 この例では日付をアメリカ形式(月、日、年)で指定していますが、 カレンダー(calendar)モードではオプションで ヨーロッパ形式(日、月、年)も使用できます。

4/20/93  新しい計算システムへ切換
apr. 25  年ごとの計算開始 
4/30     4月分の処理完了〆切
*/25     月ごとのサイクル完了
Friday   ファイルのバックアップを忘れないこと

最初の項目は1993年4月20日に一度だけ表示されます。 2番目と3番目は毎年指定した日付に表示され、 4番目は月の指定にワイルドカード(アスタリスク、*)を使っているため、 毎月25日に表示されます。 最後の項目は毎週金曜日に表示されます。

日付には、`month/day'`month/day/year'のように数字だけを使ってもかまいません。 この場合、あとに続く文字は数字であってはいけません。 日付自体のmonth(月)とday(日)は1桁か2桁の数字です。 year(年)は省いてもかまいませんが、これも数字で、 最後の2桁だけに省略してもかまいません。 つまり、`11/12/1989'と書いても`11/12/89'と書いても同じです。

日付を、`monthname day'`monthname day, year'と書くこともできます。 ここで、monthnameは英語の月の名前で 3文字の省略形(ピリオドがあってもなくてもよい)でもかまいません。 大文字小文字は区別しません。

日付の指定は総称的であってもかまいません。 つまり、特定しない部分があってもかまいません。 そうすると、その指定に一致するすべての日付にその項目が適用されます。 年を指定しなければ、それは総称的であり、その項目は毎年に適用されます。 あるいは、monthdayyearのそれぞれに `*'を指定できます。 これは、それぞれ、任意の月、任意の日、任意の年に一致します。 したがって、`3/*/*'という日誌項目は、 任意の年の3月のどの日にも一致します。 `march *'も同じことです。

もし、月のまえに日を書くヨーロッパ形式で日付を指定したいときには、 カレンダー中でM-x european-calendarと打ちます。 あるいは、カレンダー/日誌コマンドを使うまえに 変数european-calendar-styletを設定します。 この状態では、日誌の中のすべての日付指定をヨーロッパ形式で解釈します。 また、日誌の日付を表示するときもヨーロッパ形式です。 (ヨーロッパ形式では、monthnameのあとにはコンマは付けない。) (デフォルトの)アメリカ形式の日付に戻るには、 M-x american-calendarと打ちます。

ある曜日を指定する総称的な日付として曜日の名前を使えます。 曜日の名前は英語で綴り、3文字の省略形 (ピリオドがあってもなくてもよい)でもかまいません。 大文字小文字は問いません。

日誌への追加コマンド

カレンダー(calendar)モードの中には、 日誌の項目を作成するコマンドがいくつかあります。

i d
選択した日に日誌項目を追加する(insert-diary-entry)。
i w
選択した曜日に日誌項目を追加する(insert-weekly-diary-entry)。
i m
選択した月の日に日誌項目を追加する(insert-monthly-diary-entry)。
i y
選択した年の日に日誌項目を追加する(insert-yearly-diary-entry)。

カレンダーウィンドウ内で日を選択してi dコマンドを打てば、 選択した日に日誌項目を作成できます。 このコマンドは、別のウィンドウに日誌ファイルの末尾を表示し、 日付を挿入します。 そうしたら、日誌項目の残りの部分を打ち込みます。

特定の曜日に日誌項目を作成したい場合には、 その曜日を選択して(どの場所でもよい)i wと打ちます。 これで、総称的な日付として曜日名が挿入されます。 そうしたら、日誌項目の残りの部分を打ち込みます。 同様にして、月の特定の日を選択してからi mコマンドを打って、 項目の残りの部分を打ち込みます。 同じように、i yコマンドで、 毎年の特定の日に項目を挿入できます。

これらのコマンドはすべて、デフォルトでは印付けされる項目を作成します。 印付け禁止の項目を作成するには、コマンドに数引数を指定します。 たとえば、C-u i wは毎週の印付け禁止項目を作ります。

日誌ファイルを修正したときには、 Emacsを終了するまえにファイルを必ず保存してください。

特別な日誌項目

カレンダーの日付に基づいて項目を追加する以外に、 毎年の記念日などを表すS式項目(sexp entries)を 日誌ファイルに入れることができます。 これらの項目は、Emacsが日誌ファイルを読み込むときに Lisp式(S式、sexp)を評価することに基づいています。 S式項目では日付のかわりに、`%%'に続けて括弧で括ったLisp式があります。 Lisp式が項目を適用する日付を決定します。

カレンダー(calendar)モードには、 よく使われるS式項目を追加するコマンドがあります。

i a
指定した日付の毎年の記念日の日誌項目を追加する (insert-anniversary-diary-entry)。
i b
カレントリージョンに対してブロック日誌項目を追加する (insert-block-diary-entry)。
i c
指定した日から始まる定期的に巡ってくる日誌項目を追加する (insert-cyclic-diary-entry)。

ある特定の日を毎年の記念日に指定したい場合には、 その日付にポイントを移動してからi aコマンドを使います。 このコマンドは、別のウィンドウに日誌ファイルの末尾を表示し、 記念日を指定するS式を挿入します。 そうしたら、日誌項目の残りの部分を打ち込みます。 以下はその例です。

%%(diary-anniversary 10 31 1948) アーサーの誕生日

この項目は、1948年以降の毎年10月31日に適用されます。 `10 31 1948'は日付を指定します。 (ヨーロッパ形式の日付を使っている場合には、 `31'`10'が入れ替わる。) この式に開始年が必要なのは、日誌関数で経過年数の計算に使うからです。

ブロック日誌項目は、指定した期間に適用されます。 以下は、1990年6月24日から1990年7月10日までに適用される ブロック日誌項目の例です。

%%(diary-block 6 24 1990 7 10 1990) 休暇

`6 24 1990'は開始日付を表し、`7 10 1990'は終了日付を表します。 (ヨーロッパ形式を使っている場合は、月と日が入れ替わる。)

ブロック項目を追加するには、 ポイントとマークを期間の開始日付と終了日付に設定してから i bと打ちます。 このコマンドは、日誌ファイルの末尾を別のウィンドウに表示して、 ブロック項目指定を追加します。 そうしたら、日誌項目の残りの部分を打ち込みます。

周期的な日誌項目は、一定間隔で繰り返します。 これを作るには、開始日を選択してi cコマンドを使います。 このコマンドは、間隔を聞いてきます。 そうしたら、項目を挿入します。 以下のようになります。

%%(diary-cyclic 50 3 1 1990) つぎの投薬

この項目は1990年3月1日から始まり、50日ごとに適用されます。 `3 1 1990'はこの開始日を指定しています (ヨーロッパ形式を使っている場合は、月と日が入れ替わる。)

これら3つのコマンドはいずれも印付けされる項目を作成します。 印付け禁止項目を挿入する場合には、コマンドに数引数を指定します。 たとえば、C-u i aは、印付け禁止の記念日の項目を作ります。

日誌のS式項目をカレンダーに印付けするのは非常に時間がかかります。 なぜなら、カレンダーのウィンドウに見えているすべての日付について 1つ1つ調べる必要があるからです。 したがって、S式項目を登録する際にはできる限り(`&'を付けて) 印付け禁止の日誌項目にするのがよいでしょう。

S式項目の別の利用方法には、流動型日誌項目があります。 これは毎年定期に起きることがらを日数や週数や月数のオフセットで表したものです。 これはcronプログラムが解釈するcrontabの項目と互換性があります。 以下は、毎年11月の最終木曜日に印付け禁止の流動型日誌項目を指定する例です。

&%%(diary-float 11 4 -1) アメリカの感謝祭

この11は11月を表し、4は木曜(日曜を0として週の4番目の日)を表します。 -1は『最後』を表します (1は『最初』、2は『2番目『、-2は『最後の1つまえ』などなど)。 月の指定は1個の月でも月のリストでもかまいません。 たとえば、上の11を`'(1 2 3)'に変更すると、 1月、2月、3月の最終木曜日に適用する項目になります。 月の指定がtならば、すべての月に適用されます。

もっとも一般的には、 日誌のS式項目は適用する日付を決定するために、どんな計算でもできます。 See section `S式項目と装飾日誌表示' in Emacs Lisp リファレンスマニュアル

約束

日誌項目に約束が入っていて、 Emacsが認識可能な形で時刻が指定されている場合には、 その予定の何分かまえに「約束がありますよ。」と警告を出す機能があります。 Emacsはモード行に約束がある旨の警告メッセージを表示します。

約束の警告表示を行わせるには、 まずEmacsの時刻表示機能をオンにする必要があります。 M-x display-time(see section モード行)と打ちます。 さらに、関数appt-make-listを以下のようにして diary-hookに追加する必要があります。

(add-hook 'diary-hook 'appt-make-list)

個人の`.emacs'ファイルに以下のテキストを追加すれば、 これまでのことを行えます。

(display-time)
(add-hook 'diary-hook 'appt-make-list)
(diary 0)

このように準備しておくと、(カレンダーのウィンドウでdコマンドを使うか、 M-x diaryコマンドを使うかして) 日誌を表示したときに、Emacsが認識できる時刻指定のある約束をすべて取り込み、 それらのおのおのについて指定された時刻よりも少しまえに警告を表示します。

たとえば、日誌ファイルに以下のような項目があるとします。

Monday
  9:30am 休憩
 12:00pm 昼食

すると、毎週月曜には、日誌を表示していると午前9時20分に もうすぐ休憩だと表示を出し、午前11時50分には昼食時間だと表示を出します。

時刻指定は、`9:00am'のようにam/pmスタイルでも (`12:00am'は夜中の12時、`12:00pm'はお昼の12時を表す)、 ヨーロッパや軍隊流の24時間制でもかまいません。 また、一貫している必要もなく、 日誌ファイルにこれらが混在していてもかまいません。

Emacsはこれらの約束リストを夜中の12時過ぎに更新します。 変数appt-display-diarynilを設定していない限り、 日誌用バッファにつぎの日の予定を表示します。

約束の警告表示を目覚し時計として利用することもできます。 コマンドM-x appt-addは、個人の日誌ファイルを変更せずに 約束リストに項目を追加します。 M-x appt-deleteは、約束リストから項目を削除します。

変数appt-issue-messagenilを設定すれば、 約束の警告表示はいつでもオフにできます。

夏時間

Emacsは標準時と夏時間の違いを理解していて、 日出入、夏至、冬至、春分、秋分、朔弦望の時刻ではこれを補正しています。 夏時間の規則は、地域によっても、また、歴史的にもさまざまです。 補正を正しく行うには、使用する規則をEmacsに与えておく必要があります。

オペレーティングシステムのなかには、 その設置場所で適用する規則を記録しているものもあります。 このようなシステムでは、Emacsは自動的に必要な情報をシステムから取得します。 情報の一部や全部が欠けている場合には、現在マサチューセッツ州ケンブリッジで 使われている規則でEmacsは欠落部分を補おうとします。 その結果が正しくないならば、 変数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月の最初の日曜日(0番目)から始まり、 その年の10月の最後の月曜まで続くことを表します。 夏時間の開始日が10月1日に変更されたならば、 変数calendar-daylight-savings-startsには以下のように設定します。

(list 10 1 year)

読者の地方で夏時間を採用していなかったり、 すべての時刻を標準時で扱いたい場合には、 変数calendar-daylight-savings-startsと 変数calendar-daylight-savings-endsにはnilを設定してください。

変数calendar-daylight-time-offsetは、 夏時間と標準時の差を分単位で指定します。 マサチューセッツ州ケンブリッジでは60(分)です。

2つの変数calendar-daylight-savings-starts-timeと 変数calendar-daylight-savings-ends-timeは、 夏時間の開始/終了が地方時の真夜中の0時から何分ずれるかを指定します。 マサチューセッツ州ケンブリッジではどちらも120(分)です。


Go to the first, previous, next, last section, table of contents.