[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Emacsには、過去や将来の予定を記録する日誌の機能を持つ カレンダー機能があります。 カレンダーに入るにはM-x calendarと打ちます。 すると、今月を中央月として3か月分のカレンダーが表示され、 ポイントは今日の日付に置かれます。 C-u M-x calendarのように数引数を指定すると、 3か月分のカレンダーの中央に表示する月と年を聞いてきます。 カレンダーは専用のバッファを使い、 そのメジャーモードはカレンダー(calendar)モードです。
カレンダー内でMouse-2をクリックすると、 その日付で使用できる機能のメニューが表示されます。 C-Mouse-3をクリックすると、 特定の日付に関わらずに使える機能のメニューが表示されます。 カレンダーから抜けるにはqと打ちます。 カレンダーと日誌のカスタマイズに関しては、 See Emacs Lisp リファレンスマニュアル。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
カレンダー(calendar)モードでは、 日、週、月、年といった論理的単位で移動します。 始めに表示された3か月の外に移動すると、 カレンダーは自動的に『スクロール』して 指定された日付の箇所が表示されるようにします。 ある日付へ移動すると、祝祭日の名称や日誌記録を見たり、 その日付を別の暦に変換したりできます。 カレンダーを単にスクロールすれば、大きな時間単位での移動に便利です。
AD.1.1 日/週/月/年単位の移動 Moving by days, weeks, months, and years. AD.1.2 週/月/年の始めと終り Moving to start/end of weeks, months, and years. AD.1.3 特定の日付 Moving to the current date or another specific date.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
カレンダー内を移動するコマンドはテキスト内を移動するコマンドに対比できます。 日、週、月、年を単位として前後に移動できます。
calendar-forward-day
)。calendar-backward-day
)。calendar-forward-week
)。calendar-backward-week
)。calendar-forward-month
)。calendar-backward-month
)。calendar-forward-year
)。calendar-backward-year
)。日や週を単位とした移動は、Emacsの通常の文字単位や行単位の移動の類推です。 C-nは通常はつぎの行の同じ桁に移動しますが、 カレンダー(calendar)モードでは つぎの週の同じ曜日に移動します。 また、C-pはまえの週の同じ曜日に移動します。
矢印キーは他のモードと同様に、それぞれ、 C-f、C-b、C-n、C-pに等価です。
月単位や年単位の移動コマンドは週単位の移動と同じように働きますが、 より大きな単位での移動です。 月単位の移動コマンドM-}とM-{は、それぞれ、 翌月、前月に移動します。 年単位の移動コマンドC-x ]とC-x [は、 それぞれ、1年後、1年前に移動します。
これらのコマンドを簡単に覚えるには、それぞれ、 月と年を段落とページに対比させることです。 しかし、コマンド自体は同じではありません。 Emacsの通常の段落移動コマンドは段落の先頭か末尾に移動しますが、 月単位や年単位の移動コマンドは1か月分や1年分で移動しますから、 月や年の区切りを普通は飛び越します。
これらのコマンドはすべて数引数を反復回数として扱います。 簡単のために、カレンダー(calendar)モードでは Meta修飾なしでも数字とマイナス記号で数引数を指定できます。 たとえば、100 C-fは100日後の日付にポイントを進めます。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
週(または、月、年)というのは、単に1日1日が集まったものではありません。 週(月、年)は特定の日で始まると考えます。 そこで、カレンダー(calendar)モードには、 週、月、年の始めや終りに移動するコマンドがあります。
calendar-beginning-of-week
)。
calendar-end-of-week
)。
calendar-beginning-of-month
)。
calendar-end-of-month
)。
calendar-beginning-of-year
)。
calendar-end-of-year
)。これらのコマンドは数引数を反復回数と扱い、 何週、何か月、何年だけ前後に移動するのかを指定します。
デフォルトでは、週は日曜から始まります。 月曜から始めるには、変数calendar-week-start-day
に1を設定します。 (44)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
カレンダー(calendar)モードには、 さまざまな方法で指定した特定の日付へ移動するコマンドがあります。
calendar-goto-date
)。calendar-other-month
)。calendar-goto-today
)。 g d(calendar-goto-date
)は、 年、月、日を読み取ってその日付に移動します。 カレンダーには西暦紀元がすべて含まれているため、 西暦年を略さずに打つ必要があります。 つまり、`90'ではなく`1990'です。
o(calendar-other-month
)は、 月と年を読み取って、その月を中央月として3か月分のカレンダーを表示します。
.(calendar-goto-today
)で、今日の日付に戻ることができます。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
見えている範囲を越えて移動するとカレンダーは自動的にスクロールします。 手動でスクロールすることもできます。 カレンダーを表示しているウィンドウでは、 長い長い紙に月を印刷したものの一部が見えているのだと考えてください。 カレンダーをスクロールするとは、 新しい月が見えるようにこの紙を動かすことに相当します。
scroll-calendar-left
)。scroll-calendar-right
)。scroll-calendar-left-three-months
)。scroll-calendar-right-three-months
)。カレンダーをスクロールするもっとも基本的なコマンドは、 一度に1か月分スクロールします。 つまり、コマンドの実行前後の表示を比べると、2か月分重複しています。 C-x <はカレンダーを1か月分左にスクロールします。 つまり、時間的に1か月後を表示します。 C-x >コマンドはカレンダーを右にスクロールし、 時間的に1か月前に戻します。
コマンドC-vとM-vは、 カレンダーを『1画面分』、つまり、3か月分スクロールします。 これは、通常のモードでのこれらのコマンドと意味的に同じになっています。 C-vは将来の日付を見えるようにし、 M-vは過去の日付を見えるようにします。 これらのコマンドは数引数を反復回数として扱います。 たとえば、C-uは後続のコマンドを4回反復するので、 C-u C-vと打てば1年分先へカレンダーをスクロールし、 C-u M-vと打てば1年分前へカレンダーをスクロールします。
ファンクションキーNEXTとPRIORは、 他のモードと同様に、それぞれ、C-vとM-vに等価です。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
calendar-count-days-region
)。 リージョン内の日数を調べるには、 M-=(calendar-count-days-region
)と打ちます。 このコマンドで表示される日数は、 マークとポイントで指定した両日を含んだ日数です。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
calendar-print-day-of-year
)。redraw-calendar
)。scroll-other-window
)。exit-calendar
)。 年始から数えた日数、あるいは、1年の残り日数を表示するには、 p d(calendar-print-day-of-year
)コマンドを打ちます。 すると、上の2つの日数をエコー領域に表示します。 年始からの日数には指定した日が含まれます。 また、残りの日数には指定した日は含まれません。
カレンダーのウィンドウのテキストが壊れた場合には、 C-c C-l(redraw-calendar
)と打って再表示させます。 (カレンダー(calendar)モード以外の編集用コマンドを使った場合に限り、 表示がおかしくなる。)
カレンダー(calendar)モードでは、 SPC(scroll-other-window
)を使って 別のウィンドウをスクロールできます。 このコマンドは、 別のウィンドウに祝祭日や日誌記録の一覧を表示しているときに便利です。
カレンダーから抜けるには、 q(exit-calendar
)と打ちます。 このコマンドはカレンダーに関係したすべてのバッファを閉じ、 別のバッファを選択します。 (カレンダー関連のウィンドウ専用のフレームであった場合には、 カレンダーを終了するとそのフレームをアイコン化する。)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
カレンダーLaTeXコマンドは、 カレンダーを印刷するLaTeXコードのバッファに作成します。 使用するコマンドに依存して、ポイント位置の日、週、月、年の いずれかを含んだカレンダーを印刷できます。
cal-tex-cursor-month
)。cal-tex-cursor-month-landscape
)。cal-tex-cursor-day
)。cal-tex-cursor-week
)。cal-tex-cursor-week2
)。cal-tex-cursor-week-iso
)。cal-tex-cursor-week-monday
)。cal-tex-cursor-filofax-2week
)。cal-tex-cursor-filofax-week
)。cal-tex-cursor-year
)。cal-tex-cursor-year-landscape
)。cal-tex-cursor-filofax-year
)。これらのコマンドのいくつかは、横づかい(つまり、『ランドスケープ』)の カレンダーを印刷し、横長になります。 いくつかのコマンドでは、ファイロファックス(システム手帳) サイズ(3.75インチ×6.75インチ、約95.25mm×171.45mm)を使います。 これらのコマンドはすべて、印刷する日数、週数、月数、年数を 数引数で指定できます(つねに選択した日から始まる)。
変数cal-tex-holidays
がnil
以外(デフォルト)ならば、 印刷されるカレンダーにはcalendar-holidays
の祝祭日が表示されます。 変数cal-tex-diary
がnil
以外 (デフォルトはnil
)ならば、 日誌記録も一緒に印刷されます(週間および月間カレンダーの場合だけ)。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Emacsのカレンダーはすべての祝祭日を把握しており、 それらをカレンダーに表示できます。
calendar-cursor-holidays
)。mark-calendar-holidays
)。calendar-unmark
)。list-calendar-holidays
)。カレンダー上のある日付が祝祭日かどうかを知るには、 その日付にポイントを動かしhコマンドを使います。 あるいは、その日付をMouse-2でクリックし、 立ち上がったメニューからHolidaysを選択します。 いずれの方法でも、その日付に関する祝祭日情報が、 エコー領域に収まればエコー領域に、あるいは、別のウィンドウに表示されます。
カレンダーに表示されている期間内にどれだけの祝祭日があるかを知るには、 xコマンドを使います。 祝祭日である日を異なるフェイスで(複数のフェイスを使えなければ、 日付のあとに`*'を付けて)表示します。 このコマンドは、画面に見えている期間だけでなく、 スクロールすると見えてくる期間にも適用されます。 印を消してもとの状態に戻るにはuコマンドを使いますが、 日誌の印も同時に消えます。 (see 節 AD.10 日誌)。
より詳しい情報を得るには、aコマンドを使います。 これは、現在の3か月間に含まれるすべての祝祭日の一覧を別のバッファに表示します。 カレンダーのウィンドウでSPCを使うと、 その一覧をスクロールできます。
コマンドM-x holidaysは、今月を中央月として前後1か月に含まれる 祝祭日の一覧を表示します。 カレンダーウィンドウがなくてもこのコマンドを使えます。 別の月を中央月とした祝祭日の一覧が必要な場合は、 C-u M-x holidaysを使います。 (中央月の)月と年を聞いてきます。
Emacsが知っている祝祭日は、 アメリカ合衆国の祝祭日、キリスト教の祝祭日、 ユダヤ教の祝祭日、イスラム教の祝祭日、夏至、冬至、春分、秋分です。
コマンドM-x list-holidaysは、 指定した数年間の祝祭日の一覧を表示します。 始めの年と終りの年を聞いてくるので、 すべての祝祭日、ある特定の種類の祝祭日を選べます。 カレンダーウィンドウがなくてもこのコマンドを使えます。
Emacsが祝祭日を決定するために用いる暦は、 歴史的な事実に基づくものではなく、 現在用いているものです。 たとえば、歴史的には夏時間 (45) (daylight savings time)を始める時期や施行するかどうかは、 年ごとにばらばらでした。 現在の合衆国の法律では4月の最初の日曜から始めると定めています。 合衆国の夏時間を適用するかどうかを Emacsは現在の定義に基づいて決定しますので、 昔の年代については誤りである場合もあります。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
カレンダーの特別なコマンドで、 任意の日付の日出入時刻を2分以内の精度で調べられます。
calendar-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で、 任意の場所の任意の日付の日出入時刻を表示できます。 経度、緯度、協定世界時(46) からの分単位のずれ、日付の指定を聞いてきます。 すると、その場所でのその日付の日出入時刻が表示されます。
日出入時刻は、地球上の場所に依存しますので、 これらのコマンドを使うまえにEmacsに現在いる場所の緯度/経度と土地の名前を 教えなければなりません。 これにはつぎのようにします。
(setq calendar-latitude 40.1) (setq calendar-longitude -88.2) (setq calendar-location-name "Urbana, IL") |
変数calendar-latitude
とcalendar-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-name
と calendar-daylight-time-zone-name
は、 現在いる場所のタイムゾーンの省略名称です。 Emacsは夏時間を補正して日出入時刻を表示します。 夏時間をどのように決定するかは、 See 節 AD.12 夏時間。
ユーザーとしては、個人の`.emacs'ファイルで カレンダーの位置関連の変数に普段いる場所の値を設定すると便利でしょう。 あるいは、Emacsをマシンにインストールするときに、 そのマシンの大部分のユーザー用に典型的な場所に関する 情報を`default.el'ファイルに設定してもかまいません。 See 節 AE.6 初期化ファイル`~/.emacs'。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
以下のコマンドは、朔弦望(新月、上弦、満月、下弦)の日付と時刻を表示します。 これらの機能は、『朔弦望に依存する』問題をデバッグするときに重宝します。
calendar-phases-of-moon
)。カレンダー内でMコマンドを使うと、 現在の3か月間の朔弦望の日付/時刻を別のバッファに表示します。 一覧内の日付/時刻は数分以内の精度です。
カレンダーの外からでも、 M-x phases-of-moonコマンドを使って、 今月を中央月として前後1か月の朔弦望の日付/時刻を 表示できます。 別の期間に関して調べるにはC-u M-x phases-of-moonを使います。 すると、月と年を聞いてきます。
朔弦望の日付/時刻は(必要ならば夏時間を補正して)地方時で与えられます。 しかし、変数calendar-time-zone
が設定されていなければ、 協定世界時(グリニッジ標準時)が使われます。 See 節 AD.12 夏時間。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Emacsのカレンダーはつねに グレゴリオ暦(Gregorian calendar)で表示します。 この暦は『新暦』とも呼ばれ、今日では世界の大部分で使われています。 しかし、この暦は16世紀以前には存在せず、 18世紀になるまでは普及していませんでした。 ユリウス暦(Julian calendar)に置き替って 世界的に受け入れられたのは20世紀初頭になってからです。 Emacsのカレンダーは西暦1年1月以降の任意のカレンダーを表示できますが、 グレゴリオ暦が存在しなかった時代に関しても グレゴリオ暦に基づいた暦を表示します。
Emacsは他の暦を表示することはできませんが、 指定した日付と他の暦の日付とを相互に変換できます。
(aside from Gregorian).
AD.9.1 参照可能な暦 The calendars Emacs understands
AD.9.2 他の暦への変換 Converting the selected date to various calendars. AD.9.3 他の暦からの変換 Moving to a date specified in another calendar. AD.9.4 マヤ暦からの変換 Moving to a date specified in a Mayan calendar.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
ユリウス暦は、ジュリアス・シーザー(ユリウス・カエサル、Julius Caesar)に 因んで命名されたもので、 中世から19世紀にかけてヨーロッパ中で使われていました。
天文学者は、ユリウス暦紀元前4713年1月1日月曜の正午からの経過日数を使います。 この経過日数をユリウス日(Julian day number)とか 天文通算日(Astronomical day number)と呼びます。
ヘブライ暦は昔からユダヤ教で使われてきました。 Emacsのカレンダープログラムは、ユダヤの祝祭日がどの日付かを 決定するのにヘブライ暦を使います。 ヘブライ暦では1日は日没から始まり日没で終ります。 (47)
イスラム暦は多くのイスラム教の国々で使われています。 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) (48)が 作った暦に基づいた太陽暦を使っています。 この暦は、12個の月から成り、最初の6個の月は31日、 つぎの5個の月は30日、最後の1個の月は平年は29日で閏年には30日となります。 閏年は4年か5年に一度入る複雑なパターンで起こります。
中国暦は、朔望月を太陽年に埋め込んだ複雑なものです。 年は60を単位として一周し、平年は12個の月ですが、閏年は13個の月です。 各月は29日か30日です。 年、平月、日は、10の天の主節(49)と 12の地の副節(50) に従って名付けられ、 60を周期として巡回します。 (51)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
以下のコマンドは選択した日(ポイントがある日)を他の暦で表示します。
calendar-print-iso-date
)。
calendar-print-julian-date
)。
calendar-print-astro-day-number
)。
calendar-print-hebrew-date
)。
calendar-print-islamic-date
)。
calendar-print-french-date
)。
calendar-print-chinese-date
)。
calendar-print-coptic-date
)。
calendar-print-ethiopic-date
)。
calendar-print-persian-date
)。
calendar-print-mayan-date
)。XウィンドウシステムでEmacsを使っている場合には、 ある日付を他の暦での日付に変換する いちばん簡単な方法は、その日付をMouse-2でクリックし、 立ち上がったメニューからOther Calendarsを選びます。 対応する日付をEmacsが知っているすべての暦でメニューに表示します。 (このメニューは単なる表示用なので、項目を選んでも何も起こらない。)
グレゴリオ暦の目的の日付にポイントを動かして適切なキーを打ちます。 pはprintの意味で、 Emacsはその日を指定された暦でエコー領域に表示します。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Emacsが扱える暦で日付を指定して、カレンダーの対応する日に移動できます。 本節では、マヤ暦を除く暦でこれを行うコマンドを説明します。 マヤ暦については、これに続く節を参照してください。
calendar-goto-iso-date
)。calendar-goto-julian-date
)。calendar-goto-astro-day-number
)。calendar-goto-hebrew-date
)。calendar-goto-islamic-date
)。calendar-goto-french-date
)。calendar-goto-chinese-date
)。calendar-goto-persian-date
)。calendar-goto-coptic-date
)。calendar-goto-ethiopic-date
)。これらのコマンドは、それぞれの暦での日付を聞いてきて、 それに対応するグレゴリオ暦の日付にポイントを移動します。 また、エコー領域には指定した暦の日付を表示します。 Emacsは月の名前をユーザーに聞くときに強い補完(see 節 E.3 補完 (2005/03/24)) を使うので、ヘブライ暦/イスラム暦/フランス革命暦などの月の名前の綴りを 気にする必要はないでしょう。
ヘブライ暦で問題となるのが追悼記念祭『ヤールツァイト』(yahrzeit)と 呼ばれる命日の計算です。 Emacsのカレンダーにはその計算機能があります。 カレンダー内にカーソルがあるときにM-x list-yahrzeit-datesコマンドを 実行すると年の範囲を聞いてきます。 そして、ポイントがある日付に対応した追悼記念祭の日付を指定した範囲の年に ついて一覧表示します。 カレンダー内にいないときにこのコマンドを使うと、 まず死亡年月日を聞いてから年の範囲を聞いてきます。 そして、追悼記念祭の日付の一覧を表示します。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
以下はマヤ暦で日付を指定する方法です。
calendar-goto-mayan-long-count-date
)。calendar-next-tzolkin-date
)。calendar-previous-tzolkin-date
)。calendar-next-haab-date
)。calendar-previous-haab-date
)。calendar-next-calendar-round-date
)。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 (52) まで遡ることができますが、 それ以前は扱えません。 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 節 E.3.3 強い補完)を 使うので、綴りを気にする必要はありません。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
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には、日誌の項目を眺めたり、追加したり、変更したりする コマンドが数多くあります。
AD.10.1 日誌項目の表示コマンド Viewing diary entries and associated calendar dates. AD.10.2 日誌ファイル Entering events in your diary. AD.10.3 日付指定の形式 Various ways you can specify dates. AD.10.4 日誌への追加コマンド Commands to create diary entries. AD.10.5 特別な日誌項目 Anniversaries, blocks of dates, cyclic entries, etc.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
いったん`~/diary'ファイルを作成しておけば、 カレンダーを使ってこれを眺めることができます。 また、カレンダー(calendar)モードの外からでも、 今日の予定を参照できます。
view-diary-entries
)。show-all-diary-entries
)。mark-diary-entries
)。calendar-unmark
)。dで日誌項目を表示すると、 別のウィンドウに選択した日付の日誌項目が表示されます。 新しいウィンドウのモード行には、 日誌項目の日付とその日付の祝祭日情報が表示されます。 dに数引数を指定すると、指定した日数の期間の日誌項目を表示します。 したがって、2 dは、選択した日とそのつぎの日のすべての項目を表示します。
ある日付の日誌項目を表示する別の方法として、 日付をMouse-2でクリックし、 立ち上がったメニューから項目Diaryを選ぶことです。
日誌が記載されている日付を知るにはmコマンドを使います。 このコマンドは、日誌が記載されている日付を別のフェイスで (複数のフェイスを使えなければ、 日付のあとに`+'を付けて)表示します。 このコマンドは、画面に見えている期間だけでなく、 スクロールすると見えてくる期間にも適用されます。 印を消してもとの状態に戻るにはuコマンドを使いますが、 祝祭日の印も同時に消えます。 (see 節 AD.6 祝祭日)。
日誌ファイル内の数項目ではなく全体を見るには、 sコマンドを使います。
選択した日誌項目だけを表示するには、 選択表示機能を用いて他の項目を隠します。
画面で見ている日誌用バッファは幻でしかありません。 そのため、単純にバッファを印刷しても 画面に表示されているようには印刷できません。 画面に表示されている日誌項目をあるがままに印刷するには専用のコマンド M-x print-diary-entriesを使う必要があります。 このコマンドはデータをプリンタに直接送ります。 lpr-region
のようにカスタマイズできます (@xref{Hardcopy})。
コマンドM-x diaryは、現在のカレンダー表示とは関係なしに、 場合によっては数日後までを含めて今日の日誌を表示します。 変数number-of-diary-entries
には何日間まで含めるか指定します。 See Emacs Lisp リファレンスマニュアル。
個人の`.emacs'ファイルに(diary)
と書けば、 Emacsを実行すると自動的に当日の日誌項目をウィンドウに表示します。 そのウィンドウのモード行には、日付と祝祭日情報が表示されます。
多くのユーザーは、日誌に記載した予定を電子メイルで受け取ることを好みます。 自分自身にそのようなメイルを送るには、 コマンドM-x diary-mail-entriesを使います。 数引数で(今日から始めて)何日間を含めるか指定します。 数引数を指定しなければ、変数diary-mail-days
が日数を指定します。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
個人の日誌ファイルは、用事と日付の対応付けを記録したファイルです。 日誌ファイルの名前は、変数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-f(forward-char
)コマンドで 表示上の行末にポイントを置けますが、 実際には隠された行の途中にいるのかもしれません。
日誌項目を編集するときには注意してください! 項目に余分な行を追加したり見えている行の途中に文字を追加/削除しても 問題は生じませんが、行末で編集すると予期しないことが起こる可能性があります。 行を削除すると今は見えていない後続の他の項目を 削除してしまうかもしれません。 日誌を編集するまえには、s(
show-all-diary-entries
)で ファイル全体を表示させるのが最良です。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
以下は日誌項目の例で、 使用可能ないくつかの日付指定形式を示しています。 この例では日付をアメリカ形式(月、日、年)で指定していますが、 カレンダー(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文字の省略形(ピリオドがあってもなくてもよい)でもかまいません。 大文字小文字は区別しません。
日付の指定は総称的であってもかまいません。 つまり、特定しない部分があってもかまいません。 そうすると、その指定に一致するすべての日付にその項目が適用されます。 年を指定しなければ、それは総称的であり、その項目は毎年に適用されます。 あるいは、month、day、yearのそれぞれに `*'を指定できます。 これは、それぞれ、任意の月、任意の日、任意の年に一致します。 したがって、`3/*/*'という日誌項目は、 任意の年の3月のどの日にも一致します。 `march *'も同じことです。
もし、月のまえに日を書くヨーロッパ形式で日付を指定したいときには、 カレンダー中でM-x european-calendarと打ちます。 あるいは、カレンダー/日誌コマンドを使うまえに 変数european-calendar-style
にt
を設定します。 この状態では、日誌の中のすべての日付指定をヨーロッパ形式で解釈します。 また、日誌の日付を表示するときもヨーロッパ形式です。 (ヨーロッパ形式では、monthnameのあとにはコンマは付けない。) (デフォルトの)アメリカ形式の日付に戻るには、 M-x american-calendarと打ちます。
ある曜日を指定する総称的な日付として曜日の名前を使えます。 曜日の名前は英語で綴り、3文字の省略形 (ピリオドがあってもなくてもよい)でもかまいません。 大文字小文字は問いません。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
カレンダー(calendar)モードの中には、 日誌の項目を作成するコマンドがいくつかあります。
insert-diary-entry
)。insert-weekly-diary-entry
)。insert-monthly-diary-entry
)。insert-yearly-diary-entry
)。カレンダーウィンドウ内で日を選択してi dコマンドを打てば、 選択した日に日誌項目を作成できます。 このコマンドは、別のウィンドウに日誌ファイルの末尾を表示し、 日付を挿入します。 そうしたら、日誌項目の残りの部分を打ち込みます。
特定の曜日に日誌項目を作成したい場合には、 その曜日を選択して(どの場所でもよい)i wと打ちます。 これで、総称的な日付として曜日名が挿入されます。 そうしたら、日誌項目の残りの部分を打ち込みます。 同様にして、月の特定の日を選択してからi mコマンドを打って、 項目の残りの部分を打ち込みます。 同じように、i yコマンドで、 毎年の特定の日に項目を挿入できます。
これらのコマンドはすべて、デフォルトでは印付けされる項目を作成します。 印付け禁止の項目を作成するには、コマンドに数引数を指定します。 たとえば、C-u i wは毎週の印付け禁止項目を作ります。
日誌ファイルを修正したときには、 Emacsを終了するまえにファイルを必ず保存してください。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
カレンダーの日付に基づいて項目を追加する以外に、 毎年の記念日などを表すS式項目(sexp entries)を 日誌ファイルに入れることができます。 これらの項目は、Emacsが日誌ファイルを読み込むときに Lisp式(S式、sexp)を評価することに基づいています。 S式項目では日付のかわりに、`%%'に続けて括弧で括ったLisp式があります。 Lisp式が項目を適用する日付を決定します。
カレンダー(calendar)モードには、 よく使われるS式項目を追加するコマンドがあります。
insert-anniversary-diary-entry
)。insert-block-diary-entry
)。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 Emacs Lisp リファレンスマニュアル。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
日誌項目に約束が入っていて、 Emacsが認識可能な形で時刻が指定されている場合には、 その予定の何分かまえに「約束がありますよ。」と警告を出す機能があります。 Emacsはモード行に約束がある旨の警告メッセージを表示します。
約束の警告表示を行わせるには、 まずEmacsの時刻表示機能をオンにする必要があります。 M-x display-time(see 節 B.3 モード行)と打ちます。 さらに、関数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-diary
にnil
を設定していない限り、 日誌用バッファにつぎの日の予定を表示します。
約束の警告表示を目覚し時計として利用することもできます。 コマンドM-x appt-addは、個人の日誌ファイルを変更せずに 約束リストに項目を追加します。 M-x appt-deleteは、約束リストから項目を削除します。
変数appt-issue-message
にnil
を設定すれば、 約束の警告表示はいつでもオフにできます。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Emacsは標準時と夏時間の違いを理解していて、 日出入、夏至、冬至、春分、秋分、朔弦望の時刻ではこれを補正しています。 夏時間の規則は、地域によっても、また、歴史的にもさまざまです。 補正を正しく行うには、使用する規則をEmacsに与えておく必要があります。
オペレーティングシステムのなかには、 その設置場所で適用する規則を記録しているものもあります。 このようなシステムでは、Emacsは自動的に必要な情報をシステムから取得します。 情報の一部や全部が欠けている場合には、現在マサチューセッツ州ケンブリッジで 使われている規則でEmacsは欠落部分を補おうとします。 その結果が正しくないならば、 変数calendar-daylight-savings-starts
と calendar-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(分)です。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
gnusは主にネットニュースを読んだり投稿するためのEmacsパッケージです。 電子メイル、リモートディレクトリ、ダイジェストなどの ネットニュース以外のメッセージを読んだりそれらに応答するのにも使えます。
以下ではgnusについて紹介し、いくつかの基本的な機能について説明します。 詳しくは、The Gnus Manualを参照してください。
gnusを起動するには、M-x gnus RETと打ちます。
AD.13.1 gnusのバッファ The group, summary, and article buffers. AD.13.2 gnusの起動時の動作 What you should know about starting Gnus. AD.13.3 gnusコマンドのまとめ (2005/05/04) A short description of the basic Gnus commands.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
ふつうのEmacsのパッケージと違って、 gnusは多数の異なるバッファを使って情報を提示したり ユーザーのコマンドを受け取ります。 ユーザーがもっとも多くの時間を使うことになるバッファは、 グループバッファ、サマリバッファ、 記事バッファの3つです。
グループバッファはニュースグループの一覧です。 gnusが起動すると、まずこのバッファが表示されます。 通常はユーザーが購読していて、かつ、 未読記事が存在するグループだけが表示されます。 このバッファでグループを選択します。
サマリバッファは選択したグループ内の1つの記事につき 1行の情報を表示します。 デフォルトでは、各記事の投稿者、題目、行数が表示されますが、 gnusのほとんどの表示内容と同様にこの表示内容はカスタマイズできます。 グループバッファでグループを選択するとサマリバッファが作られ、 グループから出ると削除されます。 サマリバッファを使って記事を選択します。
記事バッファは記事を表示します。 gnusの普通の使い方では、このバッファを選択することはありません。 記事を操作対象とするコマンド群はサマリバッファで動作します。 しかし、望むなら、記事バッファに切り替えて、 そこでgnusのコマンドを実行することも可能です。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
gnusが起動すると、個人のニュース初期化ファイル`.newsrc'を読み込み、 ニュース記事を蓄えているローカルのニュースサーバーと通信しようとします。 ニュースサーバーは、 ユーザーがログインしているマシンと同じである必要はありません。
gnusを起動してニュースサーバーと通信したあとでも グループバッファにグループが1つも表示されないときは、 LやA kと打ってすべてのグループを表示させます。 つぎに各グループの行でuと打って 個々のグループの購読/非購読を切り替えます。
初めてgnusを起動したときは、ごく少数の選ばれたグループのみが 購読状態にあります。 他のグループは非購読グループ(killed groups)になっていて、 A kを使うと表示されます。 最初の起動以後にニュースサーバー上に追加されたグループはすべて、 ゾンビグループ(zombie groups)になっていて、 A zを使うと表示されます。 uを使えばこれらのグループを購読状態にできます。
qでgnusを終了すると、初期化ファイル`.newsrc'と `.newsrc.eld'にすべてのグループの購読/非購読を自動的に記録します。 通常はこれらのファイルを手で編集すべきではありませんが、 やりかたがわかっているならかまいません。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
ニュースを読むにはつぎの2つの段階を踏みます。
gnusの各バッファにはそれぞれ独自のコマンドがあります。 しかし、gnusのさまざまなバッファのどんなキーの意味も、 等価ではないにせよ、だいたい同じです。 以下は、グループバッファとサマリバッファのコマンドです。
サマリバッファでは、 カレントグループから抜け出てグループバッファに戻る。 したがって、qを2回打つとgnusを終る。
qでgnusを終了すると、 gnusはファイル`.newsrc'に 抹消したグループを除くすべてのグループの情報を書き出す。
サマリバッファでは、つぎのようになる。
すなわち、繰り返しSPCを打と、すべての記事を順に見ていくことができる。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Emacsには、 1つのコマンド行を下位のシェルプロセスに渡して実行させる機能があります。 また、入出力を`*shell*'という名前のEmacsバッファに接続して 対話的にシェルを実行する機能やターミナルウィンドウ内でシェルを走らせる機能もあります。
完全に Emacs 内で実現された shell もあります.ドキュメントは別のマニュアルにあり ます.See Eshell: The Emacs Shell を参照ください.
shell-command
)。shell-command-on-region
)。
AD.14.1 単一のシェルコマンド (2005/05/04) How to run one shell command and return. AD.14.2 対話的な下位のシェル (2005/05/08) Permanent shell taking input via Emacs. AD.14.3 シェルモード(Shellモード) (2005/05/05) Special Emacs commands used with permanent shell. AD.14.4 シェルコマンド履歴 (2005/05/08) Repeating previous commands in a shell buffer. AD.14.5 ディレクトリ追跡機能 (2005/05/07) Keeping track when the subshell changes directory. AD.14.6 シェルモードのオプション (2005/05/07) Options for customizing Shell mode. AD.14.7 Emacs ターミナルエミュレータ (2005/05/07) An Emacs window as a terminal emulator. AD.14.8 Term モード (2005/05/07) Special Emacs commands used in Term mode. AD.14.9 ページ出力 (2005/05/07) Paging in the terminal emulator. AD.14.10 リモートホストのシェル (2005/05/07) Connecting to another computer.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
M-!(shell-command
)は、新たに作ったサブシェルにて、 ミニバッファで読み取った1行のテキストをシェルコマンドとして実行します。 シェルコマンドの標準入力はnull装置(つまり空)です。 シェルコマンドの出力があれば、エコー領域に表示される(もし出力が短かければ)か `*Shell Command Output*'という名前の Emacsバッファに入れて別のウィンドウに表示しますが、 (カレントバッファには)選択しません(もし出力が長ければ).
例えば,Emacs からファイル `foo.gz' を解凍する方法として,M-! gunzip foo.gz RET を実行する方法があります.このシェルコマンドは普通ファイル `foo' 作り,出力は生成しません.
M-1 M-!のように数引数を指定すると、 別バッファに表示するかわりに,シェルコマンドの出力をカレントバッファに挿入します。 ポイントは(挿入された)出力の先頭に置かれ、マークは出力の末尾に置かれます。例え ば,M-1 M-! gunzip < foo.gz RET を実行すると,現在のバッファに `foo.gz' を解凍した内容が表示されます.
シェルコマンドの末尾が`&'になっていると、 シェルコマンドは非同期に実行されます。 同期実行のシェルコマンドでは、Lispプログラムから呼ばれたときには、 shell-command
はコマンドの終了状態(0は成功を意味する)を返します。非同期 コマンドは,まだ終了していませんので,状態の情報は得られません.
M-|(shell-command-on-region
)はM-!と同様ですが、 シェルコマンドの標準入力は空ではなくリージョンの内容が引き渡されます。 数引数を指定すると、それまでのリージョンは削除され シェルコマンドの出力で置き換わり新たなリージョンになります。 このコマンドは、Lispプログラムから呼ばれたときには、 コマンドの終了状態を返します。
M-| の1つの使い方は uudecode
を実行することです.例えば,バッファに uuencode されたテキストが含まれていれば, C-x h M-| uudecode RET を 実行すると,バッファ全体の内容がプログラム uudecode
に送られます.プログ ラムはエンコードされたテキスト以外はすべて無視をし,デコードされたテキストをエン コードされたテキストに特有な名前のファイルに保存されます.
M-!もM-|も、使用するシェルはshell-file-name
で指定します。 この変数は、Emacs起動時の環境変数SHELL
をもとに初期設定されます。 ファイル名にディレクトリが指定されていなければ、 exec-path
に指定されているディレクトリ群を探索します。 exec-path
の値は、Emacs起動時の環境変数 PATH
を もとに初期設定されます。 個人のファイル`.emacs'で これらの変数の初期値を自由に変更してかまいません。
M-!もM-|もシェルコマンドの実行完了を待ち合わせます。 待つのをやめたい場合は、C-gで中断できます。 この場合、シェルコマンドはシグナルSIGINT
で終了させられます。 このシグナルは、シェルを使用中にC-cが普通に送るシグナルと同じです。 Emacsはシェルコマンドが実際に終了するまで待ちます。 シェルコマンドが(シグナルSIGINT
を無視して)停止しない場合は、 再度C-gを打ちます。 すると、無視できないシグナルSIGKILL
をシェルコマンドに送ります。
M-!やM-|で使用するコーディングシステムを指定するには、 これらのコマンドの直前にコマンドC-x RET cを使います。 See 節 R.9 コーディングシステムの指定。
コマンドからのエラー出力は、通常、普通の出力と混ざり合ってしまいます。 変数shell-command-default-error-buffer
に バッファ名の文字列を設定すると、 その名前のバッファのポイント位置のまえにエラー出力が挿入されます。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
サブシェルを対話的に実行し、その対話記録をEmacsバッファに残すには、 M-x shellを使います。 このコマンドは、`*shell*'という名前のバッファを作成(または再使用)し、 このバッファに入出力するサブシェルを実行します。 つまり、サブシェルの『端末出力』はバッファに挿入されポイントを進め、 サブシェルの『端末入力』はバッファから取られます。 サブシェルに入力を与えるには、バッファの末尾へ移動して 入力を打ち込み最後にRETを打ちます。
Emacsはサブシェルが何かするのを待つことはしません。 シェルが待っていようがシェルコマンドを実行していようが、 ウィンドウやバッファを切り替えて編集できます。 サブシェルからの出力は、 Emacsがそれを取り込む処理を実行できるまで待たされます。 取り込み処理は、Emacsがキーボード入力を待ったり、 時間待ちに入ったときに行われます。
行を入力し,それを一旦送ると,そのコマンドはフェイス comint-highlight-input
を使って表示され,プロンプトはフェイス comint-highlight-prompt
を使って表示されます.これにより,前に入力したコ マンドを簡単に見つけることができます.See 節 Q.13 複数タイプフェイスの利用.
複数のサブシェルを使うには、M-x shell を数引数付きで実行します(例えば C-u M-x shell のように).実行すると,バンファ名を求められ,そのバッファに サブシェルを作成(あるいは,再使用)します.M-x rename-uniquely を使って, `*shell*' バッファを別のものに変更することもできます.この時,M-x shell を実行すると,新しく `*shell*' バッファが作成されます.個々のバッファ で,すべてのサブシェルは独立かつ並行に実行されます。
サブシェルとして実行するファイル名は、変数explicit-shell-file-name
の値がnil
以外ならば、この変数の値で指定します。 nil
のときは、環境変数ESHELL
の値が使われますが、 これが存在しない場合は環境変数SHELL
の値が使われます。 指定されたファイル名が相対名の場合は、 exec-path
に指定されているディレクトリ群を探索します。 変数exec-path
は、 Emacs起動時の環境変数PATH
をもとに初期設定されます。 個人のファイル`.emacs'でこれらの変数を自由に変更してかまいません。
Emacs は,ファイル `~/.emacs_shellname' が存 在して,shellname が読み込まれたシェルの名前であれば,新しいシェルに入力と してその内容を送ります.例えば, bash を使っていれば `~/.emacs_bash' の内容 を送ります.
シェルに対するコーディングシステムを指定するには、 M-x shellの直前にコマンドC-x RET cを使います。 または、シェルを開始したあとにシェルバッファでC-x RET pを 使っても指定できます。 See 節 R.9 コーディングシステムの指定。
もし環境変数 EMACS
が設定されていなければ,Emacs はサブシェル内で t
の値で定義します.シェルスクリプトはこの変数を確認して, Emacs のサブシェルから 実行されているかどうかを確認します.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
シェルバッファではシェル(shell)モードが使われ、 プレフィックスキーC-cを持つ特別なキーをいくつか定義しています。 これらは、まずC-cを打つことを除けば、 Emacsの外でシェルを使うときの通常のコマンド行編集や ジョブ制御のキーに似せて定義してあります。 以下は、シェル(shell)モードでの特別なバインディングの一覧です。
comint-send-input
)。 行をコピーするとき、行の先頭部分のプロンプト(入力の前にあるプログラムによって出 力されるテキスト)は無視されます (変数 comint-use-prompt-regexp-instead-of-fields
も参照のこと).
comint-dynamic-complete
)。 TABは、履歴参照(see 節 AD.14.4.3 シェル履歴の参照 (2005/05/07))や 環境変数名も補完できる。
変数shell-completion-fignore
には、 シェル(shell)モードでの補完において 無視したいファイル名の拡張子のリストを指定する。 デフォルトの設定では、nil
ですが,ユーザによっては名前が、`~'、`#'、`%'で 終るファイルを無視するために ("~" "#" "%")
に設定することを好みます。 関連する他のcomintモードではかわりに 変数comint-completion-fignore
を使う。
comint-dynamic-list-filename-completions
)。
comint-delchar-or-maybe-eof
)。 シェルバッファの末尾でC-dを打つとサブシェルに EOF を送る。 バッファのそれ以外の位置では、C-dを打つと通常どおり1文字削除する。
comint-bol-or-process-mark
)。 同じ行でこのコマンドを2回繰り返すと、2回目ではプロセスマークへ戻る。 プロセスマークとは、サブシェルへまだ送っていない入力の開始位置のこと。 (通常、これは同じ場所であり、 プロセスマークはその行のプロンプトの終りにある。 ただし、C-c SPCのあとでは、 プロセスマークはまえの行にあるかもしれない。)
comint-kill-input
)。
backward-kill-word
)。
comint-interrupt-subjob
)。 また、このコマンドは シェルバッファ内のまだシェルに送っていないテキストもキルする。
comint-stop-subjob
)。 また、このコマンドは シェルバッファ内のまだシェルに送っていないテキストもキルする。
comint-quit-subjob
)。 また、このコマンドは シェルバッファ内のまだシェルに送っていないテキストもキルする。
comint-delete-output
)。 シェルコマンドが大量の出力を出してしまったときなどに有効です。このコマンドは comint-kill-output
が呼ばれるべき時に使われます.
comint-write-output
).数引数を付けると,かわりに追加されます.出力の最後 にあるプロンプトは書き込まれません.
comint-show-output
)。
comint-show-maximum-output
)。
shell-forward-command
)。 変数shell-command-regexp
には、 シェルコマンドの終りの探し方(正規表現)を指定する。
shell-backward-command
)。
comint-dynamic-list-input-ring
)。
かわりに、つぎのようにして、 Emacsにパスワードプロンプトを認識させてエコーバックを抑制する方法もある。
(add-hook 'comint-output-filter-functions 'comint-watch-for-password-prompt) |
(add-hook 'comint-output-filter-functions 'comint-strip-ctrl-m) |
comint-buffer-maximum-size
で指定した大きさに シェルバッファの行数を切り詰める。 サブシェルから出力を受け取るたびに これを自動的に行うにはつぎのようにする。
(add-hook 'comint-output-filter-functions 'comint-truncate-buffer) |
シェル(shell)モードでは段落コマンドにも修正を加えてあり、 シェルプロンプトでのみ新しい段落が始まるようになっています。 つまり、シェルバッファでは、 1つの段落はシェルコマンドとその出力から成るのです。
シェル(shell)モードは、対話的なサブプロセスと通信するための汎用モードである comintモードからの派生です。 ここまでにあげてきたコマンドの名前からもわかるように、 シェル(shell)モードの数多くの機能は、実は、comintモードからきています。 シェル(shell)モードに固有な特別な機能は、 カレントディレクトリの追跡、および、少数のユーザーコマンドに限られます。
comintモードから派生したEmacsのほかの機能としては、 GUD(see 節 W.5 Emacs下でのデバッガの実行 (2004/09/07))と M-x run-lisp(see 節 W.10 外部Lispの実行 (2004/08/16))があります。
M-x comint-runを使うと、 シェル(shell)モード固有の機能を持たないcomintモードで、 任意のプログラムをサブプロセスとして実行できます。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
シェルバッファでは、以前に使ったシェルコマンドを再実行する方法が3つあります。 1つめは、ミニバッファと同じキーを使う方法です。 すなわち、ミニバッファの場合と同様に、 ポイントはつねにバッファの末尾にある状態で、 以前に使ったシェルコマンドをバッファに挿入できます。 2つめは、バッファ内で以前のシェルコマンドの箇所に移動して、 それをそのまま再実行するかバッファの末尾にコピーします。 3つめは、`!'形式の履歴参照を使うことです。
AD.14.4.1 シェル履歴リング (2005/05/08) Fetching commands from the history list. AD.14.4.2 シェル履歴のコピー Moving to a command and then copying it. AD.14.4.3 シェル履歴の参照 (2005/05/07) Expanding `!'-style history references.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
シェルバッファには、それまでに入力したシェルコマンドの履歴があります。 この履歴からシェルコマンドを再利用するには、編集コマンド、 M-p、M-n、M-r、M-sを使います。 これらはミニバッファの履歴コマンドと同様に働きますが、 (普通はシェルに送るテキストを挿入する) シェルバッファの末尾にあるテキストに作用する点が異なります。
M-pは、1つまえのシェルコマンドをシェルバッファの末尾に持ってきます。 M-pを連続して使うと、次々にそれよりまえに実行したシェルコマンドを 持ってきて、それまでのシェルへの入力用テキストを置き換えます。 M-nも同様ですが、 次々にそれよりあとのシェルコマンドを持ってくる点が異なります。
履歴探索コマンドM-rとM-sは、 正規表現を読み取り、それに一致するシェルコマンドを履歴の中から探します。 どのシェルコマンドを持ってくるかという点を除けば、 それらの働きはM-pやM-nと同じです。 正規表現として空文字列を入力すると、直前に使用した正規表現を再使用します。
再使用したいシェルコマンドを探したならば、 RETを打ってそのシェルコマンドを再実行するか、 必要なら編集してから実行します。
以前に連続して実行した一連のシェルコマンドをまとめて再実行できると便利な ことがあります。 それには、まず、一連のシェルコマンドの最初のものを探して再実行します。 そうしてからC-c C-xと打ちます。 これは、直前に再実行したシェルコマンドの(履歴内で) つぎにあるシェルコマンドを持ってきます。 RETと打って再実行します。 このように、C-c C-x RETを繰り返し打てば一連のシェルコマンドを 再実行できます。
コマンド C-c . (comint-input-previous-argument
) は Bash での ESC . のように,前のコマンドからそれぞれの引数をコピーします.最も単純な使 い方は前のシェルコマンドから最近の引数をコピーすることです.数引数 n を付 けると,かわりに n 番目の引数をコピーします.C-c . を繰り返し実行す ると,さらに前のシェルコマンドの引数をコピーできます.この時,いつも n の 値を使います (C-c . を繰り返す時には引数を与えないでください).
これらのコマンドは過去に実行したシェルコマンドを専用の履歴リストから 持ってくるのであって、シェルバッファからとってくるのではありません。 したがって、シェルバッファを編集したり、その大部分をキルしたとしても、 これらのコマンドが参照する履歴には影響しません。
いくつかのシェルは、コマンド履歴をファイルに保管して 以前のセッションの履歴を引き継げるようになっています。 Emacsは、自分の履歴リストを初期設定するために、 ユーザーが使うシェルの履歴ファイルを読み込みます。 ファイル名は、bashであれば`~/.bash_history'、 kshであれば`~/.sh_history'、 その他のシェルであれば`~/.history'です。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
comint-previous-prompt
)。
comint-next-prompt
)。
comint-copy-old-input
)。 このコマンドはポイントを古いシェルコマンドへ移動したときに役立つ。 シェルコマンドをコピーしたら、RETでそれを(シェルへ)送る。 必要ならシェルコマンドを修正してから送ってもよい。ポイントをまえの入力箇所に移動してからC-c RETでコピーしても、 M-pを必要な回数使って履歴リストからまえのコマンドを持ってきたのと (バッファの内容が同じという意味で)同じ結果になります。 ただし、C-c RETはバッファからテキストをコピーするので、 シェルへ送ったあとでそれをバッファ上で編集した場合には、 履歴リストにあるものとは異なることもあります。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
cshやbashをはじめ多くのシェルは、 `!'や`^'で始まる履歴参照の機能を提供しています。 シェル(shell)モードでもこれらの指定を認識して、履歴置換を行えます。
履歴参照を入力してTABを打つと、 履歴リストから一致するシェルコマンドを探し、 必要なら置換を行い、履歴参照をその結果で置き換えます。 たとえば、`mv'で始まるいちばん最近のシェルコマンドを持ってくるには ! m v TABと打ちます。 必要ならシェルコマンドを編集し、RETと打ってシェルへ送ります。
シェル(shell)モードでは、シェルに送る際にバッファ内で履歴参照を 展開するようにも指定できます。 それには、変数compint-input-autoexpand
にinput
を設定します。 SPCをコマンドcomint-magic-space
にバインドすれば、 SPCで履歴展開が行えるようになります。
テキストがプロンプトの後にあれば,シェルモードはそれを履歴として認識します.通常, 入力の前にあるプログラムによって出力されたテキストはすべてプロンプトとして認識さ れます.しかし,変数 comint-use-prompt-regexp-instead-of-fields
が 非-nil
であると,プロンプトを識別するために正規表現が使われます.普通, comint-prompt-regexp
で正規表現を指定します.シェルモードでは,変数 shell-prompt-pattern
を comint-prompt-regexp
に設定して使っていま す.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
シェルモードは `cd' や `pushd',`popd' コマンドで移動したことを記 録します.これにより,`*shell*' バッファのデフォルトディレクトリはシェルの 作業ディレクトリと同じになります.これらのコマンドは入力された行を調べて認識して います.
こういったコマンドのエイリアスを用いているのであれば,Emacs にそのエイリアスも認 識させることができます.例えば,シェルコマンドが変数 shell-pushd-regexp
の値に一致すれば,その行は pushd
コマンドとして認識されます.pushd
のエイリアスを追加する時に,この変数も変更すればいいのです.同様に, shell-popd-regexp
と shell-cd-regexp
は `popd' と `cd' の意味を持つコマンドとして認識させるために使います.これらのコマンドはコマンド行の 最初にある時だけ認識されます.
サブシェルのカレントディレクトリに変更したことで混乱したら,現在のカレントディレ クトリを確認するために,コマンド M-x dirs を使います.このコマンドは一般的 なシェルであれば動作します.しかし,普通でないシェルでは動作しないかもしれません.
M-x dirtrack-mode で有効 (あるいは,無効)にすることができます. 無効にして,代わりの,より積極的なカレントディレクトリ追跡機能を使うこともできる でしょう.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
変数comint-scroll-to-bottom-on-input
がnil
以外の場合には、 挿入およびヤンクコマンドは、 選択されているウィンドウを末尾までスクロールしてから挿入します。
comint-scroll-show-maximum-output
が nil
以外の場合、ポイントが最 後にある時, 出力で、 最後の行ができるだけウィンドウのいちばん下にくるようにし、 なるべく多くの有用なテキストが見えるようにします (これは多くの端末のスクロール動作の真似)。 デフォルトはnil
です。
comint-move-point-for-output
を設定すると、 ポイントがどこにあろうと、 出力が到着するたびにバッファの末尾へポイントがジャンプするように設定できます。 この変数の値がthis
であれば、 ポイントは選択されたウィンドウでジャンプします。 値がall
であれば、Comintバッファを表示している各ウィンドウで ポイントはジャンプします。 値がother
であれば、カレントバッファを表示しているすべての 選択されていないウィンドウでポイントはジャンプします。 デフォルトはnil
ですから、ポイントはジャンプしません。
変数comint-input-ignoredups
は、 連続する同一の入力を履歴に格納するかどうかを制御します。 値がnil
以外のときは、直前の入力と同じ入力は履歴に格納しません。 デフォルトはnil
ですから、直前と同じ入力でもすべて履歴に格納します。
3つの変数でファイル名の補完をカスタマイズします。 変数comint-completion-addsuffix
は、 ファイル名やディレクトリ名を補完するとき、 名前を完全に補完できたことを示すために 末尾に空白やスラッシュを挿入するかどうかを指定します (nil
以外のとき、空白やスラッシュを挿入)。 comint-completion-recexact
は、 その値がnil
以外の場合、Emacsの通常の補完アルゴリズムで1文字も 追加できないときにはTABで可能なもっとも短い補完文字列を 挿入するようにします。 comint-completion-autolist
は、その値がnil
以外の場合、 補完が完全でないときに可能な補完候補の一覧を表示することを指定します。
Command completion normally considers only executable files. If you set shell-completion-execonly
to nil
, it considers nonexecutable files as well. コマンド補完は、通常、実行可能なファイルだけを対象とします。 shell-completion-execonly
を nil
にすると、 実行可能でないファイルも対象となります。
`pushd'の動作をカスタマイズできます。 引数が与えられないと`cd'と同様にふるまう (shell-pushd-tohome
)、 数引数を指定するとpop
ではなく巡回する (shell-pushd-dextract
)、 ディレクトリスタックにないディレクトリだけを ディレクトリスタックに加える (shell-pushd-dunique
) を制御できます。 これらの値は当然、使っているシェルの動作と一致するように設定すべきです。
もしシェルモードにスエルコマンドからのカラー出力を処理するようにさせたければ, ANSI カラーモードを利用できます.以下のように設定します.
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on) |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
M-x term を実行することで,ターミナルエミュレータ上でサブシェルを起動し, Emacs バッファに文字を表示させることができます.このコマンドは `*terminal*' のような名前のバッファを作成 (あるいは,再利用)します.そして,サブシェルを走ら せ,キーボードからの入力とバッファへの出力を表示させるのです.
ターミナルエミュレータは 2つの入力モードを持つ Term モードを使います.line mode(行モード)では,端末は基本的にシェルモードのように動作します.AD.14.3 シェルモード(Shellモード) (2005/05/05) を参照ください.
char mode(文字モード)では,それぞれの文字が"端末の入力"として直接下位のシェルに 送られます.入力に対する"エコーバック"もサブシェルの責務になります.唯一の例外は 端末のエスケープ文字で,デフォルトでは C-c (see 節 AD.14.8 Term モード (2005/05/07)) です.サブ シェルからの端末出力はバッファのポイントの前に表示されます.
いくつかのプログラム(例えば Emacs 自身) は端末上での外観を細かく制御する必要があ ります.このために,特別なコードを送っています.この時必要となるコードは端末によっ て異なりますが,最近では大抵の端末やターミナルエミュレータ (xterm
を含む) は ANSI 標準 (VT100-スタイル) のエスケープシーケンスを理解します.Term モードは これらのエスケープシーケンスを認識し,それぞれを適切に処理し,ウィンドウの外観が 本当の端末であるべき姿になるようにバッファを変更するのです.これにより,Emacs Term ウィンドウの中で Emacs を起動することができるのです.
サブシェルを読み込むために使われるファイル名はシェルモードと同じように決定され ます.複数のターミナルエミュレータを使うためには,バッファ `*terminal*' を シェルモードの時と同じように M-x rename-uniquely を実行して何か別の物に変 更します.
シェルモードとは違い,Term モードは入力を調べることでカレントディレクトリを追跡 することはしません.しかし,いくつかのシェルは Term にカレンドディレクトリがどこ か教えることができます.これは,bash
バージョン 1.15 以降であれば自動的に 行われます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
ターミナルエミュレータは2つの入力モードを持つ Term モードを使います.行モードで は,基本的にシェルモードのように動作します.AD.14.3 シェルモード(Shellモード) (2005/05/05)を参照ください.文字 モードでは,それぞれの文字が下位のシェルに直接送られますが,端末のエスケープキャ ラクタ (通常は C-c) は例外です.
行モードと文字モードを切り替えるためには,以下のコマンドを使います.
以下のコマンドは文字モードの時だけ利用できます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Term モードはページ出力機能を持っています.この機能を有効にすると,画面の終わり までくると,出力を停止します.
ページ出力機能が有効であれば,端末が画面よりも多くのテキストを受け取ると,出力を 停止し,モードラインに `**MORE**' と表示します.次のテキストを表示するため には SPC を入力します.? を入力すると,他のオプションを見ることがで きます.このインターフェイスはプログラム more
と似たものです.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
通常の端末から入力するどんなコマンドでも(例えば,telnet
や rlogin
コマンド) 端末ウィンドウからリモートコンピュータにログインできます.
通常パスワードを求めるプログラムではパスワードは隠される.そのため,バッファにも パスワードは表示されません.この機能はバッファが文字モードであれば,本当の端末を 使っているのと同じようになります.行モードであれば,パスワードは一時的に表示され ますが,リターンを入力した時に消されます(この機能は自動的に機能します.特別なパ スワードの処理機能はありません).
別のマシンにログインする時には,使っている端末を指定する必要があります.端末のタ イプ `ansi' か `vt100' は大抵のマシンで機能するでしょう.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
mail
を始めとする多くのプログラムは、 送信メッセージなどのテキストを編集するために ユーザーが指定したエディタを起動します。 これらのプログラムは、 習慣として、環境変数EDITOR
で指定されたエディタを起動します。 EDITOR
に`emacs'を設定しておけばEmacsが起動しますが、 新たに別のEmacsプロセスが開始されるので不便です。 というのは、新しいEmacsプロセスは既存のどんな Emacsプロセスもバッファを 共有しないからです。
EmacsクライアントとEmacsサーバーを用いて、 mail
などのプログラムが既存のEmacsプロセスを エディタとして使うようにできます。 以下のようにします。
まずは準備です。 Emacsの中で関数server-start
を呼び出します。 (個人のファイル`.emacs'に式(server-start)
を書いておけば、 これを自動的に行える。) つぎに、Emacsの外で環境変数 EDITOR
に `emacsclient' を設定します。 (プログラムによっては別の環境変数を使う。 たとえば、TeX に `emacsclient' を使わせるには、 環境変数 TEXEDIT
に `emacsclient +%d %s' と設定する。)
こうすると、どのプログラムが EDITOR
に指定されたプログラムをエディタ として起動しても、結果としては、訪れるべきファイルを伝える メッセージが現在動いているEmacsに送られます。 (これがemacsclient
の役割。) Emacsはただちにバッファを表示し、ユーザーはすぐに編集を開始できます。
そのバッファの編集が終ったら、C-x #と打ちます(server-edit
)。 これにより、ファイルが保存され、 終了せよとのメッセージをemacslient
に送り返します。 EDITOR
を参照したプログラムは 『エディタ』(実際にはemacsclient
)が終了するのを待ちます。 C-x #は複数のファイルに対する外部からの編集要求で 他に残っているものがないかどうかも検査し、 もしあればつぎのファイルを訪問します。
望むなら手でサーバーバッファに切り替えてもかまいません。 必ずC-x #を使わなければならないということはありません。 ただし、C-x #はサーバーバッファの編集が終ったということを 告げる方法です。
サーババッファを終えると,サーバに接続前に Emacs に既に存在したのでなければ,バッ ファもキルされます.しかし,server-kill-new-buffers
を nil
に設定 していると,別の動作が行われます.サーババッファを終えると,ファイル名の正規表現 が server-temp-file-regexp
に一致していれば,そのバッファがキルされます. これはある種の一時ファイルを識別するための仕組みです.
変数server-window
にウィンドウやフレームを設定してあれば、 C-x #はサーバーバッファをそのウィンドウやフレームに表示します。
mail
やその他のアプリケーションがemacsclient
の終了を 待っているあいだ、emacsclient
は端末入力を読みません。 したがって、mail
が使っている端末は、そのあいだ実質的に ブロックされた状態にあります。 サーバーとして使うEmacsで編集をするためには、 その(ブロックしている)端末を使わずに行う必要があります。 それには3つの方法があります。
mail
とEmacsとを別のウィンドウで動かす。 mail
がemacsclient
を待っているあいだ、 mail
が動いてるウィンドウはブロックされるが、 他のウィンドウに切り替えればEmacsを使える。
mail
を起動したり,他の端末で Emacs を動かす.
mail
などのプログラムを動かす。 こうすれば、emacsclient
はEmacsの下で動いている サブシェルのみをブロックするので、 Emacsを使ってファイルを編集するのは通常どおり行える。オプション `--no-wait' を指定して emacsclient
を起動すると、 Emacs上でバッファを編集し終るのを待たずにただちに終了します。サーババッファをこ の方法で作ると,それを終えた時に自動的にキルされます.
AD.16 emacsclient
の起動 (2005/05/07)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
emacsclient
の起動 (2005/05/07)
emacsclient
の起動"へのコメント(無し)
emacsclient
を起動する時には,引数としてファイル名や行数などが 利用されます.例えば,以下のようになります.
emacsclient {[+line[column]] filename}... |
この行は Emacs に指定されたファイルを開き,個々のファイルで行数の指定があれば, その行へ移動することを意味しています.もし,桁数も指定されていれば,Emacs は指定 された行の指定された桁へポイントを移動します.
普通,emacsclient
は個々のバッファでコマンド C-x # を実行するまで, 返ることはありません.このため,Emacs は emacsclient
にそのことを伝えます.
しかし,もし emacsclient
を起動する時に,オプション `-n' や `--no-wait' を使っていれば,すぐに返ります (Emacs でファイルを編集したいだ けの時間を取ることができる).
オプション `--alternate-editor=command' は emacsclient
をスク リプトで起動する時に便利です.emacsclient
が Emacs に接続するのを失敗した 時に起動すべきコマンドを特定します.例えば,以下のように環境変数 EDITOR を 設定しておけば,例え Emacs が起動しなくても,いつも何らかのエディタを利用できる でしょう.
EDITOR="emacsclient --alternate-editor vi +%d %s" |
環境変数 ALTERNATE_EDITOR も同じ効果を持ちますが, `--alternate-editor' で指定した値が優先されます.
代わりに,ファイル `etc/emacs.bash' は Emacs サーバを起動する方法や失敗した 時に起動すべきものを定義します.
もし複数のディスプレイがあれば,オプション `--display=DISPLAY' を使う ことで,個々のディスプレイで指定したファイルを開くことができます.この機能はよく 作業場にあるマシンで動作している Emacs サーバに家から接続する時に使われます.
オプション `--eval' を使うことで,emacsclient
に Emacs Lisp コードの 一片を実行させることもできます.このオプションが与えられると,残りの引数が開くべ きファイルとしては処理されず,評価すべき式のリストとして処理されます.
印刷用のEmacsコマンドには、バッファ全体ないしその一部を、 ページヘッダ付き/なしのどちらででも出力する機能があります。 dired(see 節 N.10 その他のファイル操作)とdiary(see 節 AD.10.1 日誌項目の表示コマンド)の 印刷機能についても参照してください。
print-buffer
と同様だが、現在のリージョンのみを印刷する。lpr-buffer
と同様だが、現在のリージョンのみを印刷。 (Postscriptコマンドを除く)印刷コマンドは、 lpr-switches
の値をもとに追加オプションをlpr
に渡します。 この変数の値は文字列のリストであり、 各文字列は`-'で始まるオプションである必要があります。 たとえば、Emacsから行う印刷で1行を80文字に設定するには、 lpr-switches
をつぎのように設定します。
(setq lpr-switches '("-w80")) |
変数printer-name
を設定すれば、使うプリンタを指定できます。
変数lpr-command
は、実行すべきプリンタプログラムを指定します。 デフォルトの値はオペレーティングシステムに依存します。 多くのシステムでは、デフォルトは"lpr"
です。 変数lpr-headers-switches
も同様に、 ページヘッダを作るための追加オプションを指定します。 変数lpr-add-switches
は、 プリンタプログラムに(lpr
には適した) オプション`-T'とオプション`-J'を指定するかどうか制御します。 この変数の値がnil
ならこれらのオプションを指定しません。 プリンタプログラムがlpr
と互換性がないなら、 変数lpr-add-switches
はnil
にすべきです。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
これらのコマンドは、バッファの内容をPostScriptに変換し、 プリンタへ送るか他のEmacsバッファに入れます。
PostScriptコマンドps-print-buffer
およびps-print-region
は バッファの内容をPostScript形式で出力します。 前者はバッファ全体を出力しますが、後者はリージョンのみです。 これらに対応した`-with-faces'コマンドである ps-print-buffer-with-faces
およびps-print-region-with-faces
は、 出力するテキストのテキスト属性のフェイス(フォントと表示色)を PostScriptの機能を用いて再現します。
カラーディスプレイを使っている場合、 バッファでフォントロック(font-lock)モードを使って色付けしたプログラムコードを ps-print-buffer-with-faces
で(そのまま)印刷できます。
コマンド名が`print'のかわりに`spool'であるものは、 変換したPostscript出力をプリンタに送るかわりにEmacsバッファに置きます。
M-x handwrite はもっとお遊び的な機能です.このコマンドはカレントバッファを 手書きのドキュメントのように演出した PostScript を生成します.グループ handwrite
でカスタマイズできます.この関数は ISO 8859-1 の文字だけをサポー トしています.
つぎの節では、これらのコマンドをカスタマイズする変数について説明します。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
すべてのPostScriptの印刷コマンドは、出力をどのように印刷するかを 変数ps-lpr-command
とps-lpr-switches
で指定できます。 ps-lpr-command
には印刷のため実行するシェルコマンド、 ps-lpr-switches
にはそのシェルコマンドに指定するオプション、 ps-printer-name
にはプリンタを指定します。 始めの2つの変数を設定しなかった場合は、 lpr-command
とlpr-switches
に基づいて初期値が設定されます。 ps-printer-name
がnil
だとprinter-name
を使います。
変数 ps-print-header
はこれらのコマンドが各ページにヘッダを追加するかどう かを制御します.ヘッダをオフにしたい時には nil
にします.
もしプリンタがカラー印刷をサポートしていなければ,ps-print-color-p
を nil
に設定することでカラー処理を無効にすべきです.デフォルトでは,ディス プレイがカラーをサポートしていれば,Emacs はカラーでの印刷をサポートします.白黒 プリンタでは,カラーはグレースケールで印刷されます.これにより,画面でグレイの陰 を使っていても,読みにくい出力になるかもしれません.
デフォルトでは,ps-use-face-background
が 非 nil
でなければ, PostScript は背景を無視します.これは,背景の画像やテキストが縞々になって望まな い干渉が出ることを避けるためです.
変数ps-paper-type
は、印刷用紙サイズを指定します。 指定できる値は、a4
、a3
、a4small
、 b4
、b5
、executive
、ledger
、legal
、 letter
、letter-small
、statement
、tabloid
です。 デフォルトはletter
です。 変数ps-page-dimensions-database
を変更すれば 別の用紙サイズを定義できます。
変数ps-landscape-mode
は用紙の向きを指定します。 デフォルトはnil
で、『縦づかい』(ポートレート)です。 nil
以外の値を指定すると『横づかい』(ランドスケープ)です。
変数ps-number-of-columns
は段数を指定します。 縦づかいでも横づかいでも有効で、デフォルトは1です。
変数ps-font-family
は、 通常のテキストの印刷に使うフォントファミリを指定します。 指定できる値は、Courier
、Helvetica
、 NewCenturySchlbk
、Palatino
、Times
です。 変数ps-font-size
は、 通常のテキスト印刷に使うフォントのサイズを指定します。 デフォルトは8.5ポイント(54)です。
Emacs は典型的な PostScript プリンタよりも多くのスクリプトや文字をサポートします. バッファにあるいくつかの文字はプリンタに組込まれたフォントでは印刷できないかもし れません.プリンタに組込まれたフォントに GNU Intlfonts パッケージからのフォント を組み込むことで増強したり,Intlfonts を使うように指示することができます.変数 ps-multibyte-buffer
はこの機能を制御しています.デフォルトは nil
で,ASCII や Latin-1 の文字を印刷するのに最適です. non-latin-printer
の値は ASCII や Latin-1,日本語,韓国語のフォ ントを持つプリンタです.bdf-font
の値は Intlfonts パッケージから す べての文字を使えるようにするために必要となります.最後に bdf-font-except-latin
の値は組込まれた ASCII と Latin-1 を使い, 残りには Intlfonts BDF フォントを使うように指示します.
BDF フォントを使うことができるようにするために,Emacs はどこにフォントがあるか知 る必要があります.変数 bdf-directory-list
は Emacs がフォントを探すべきディ レクトリのリストになります.デフォルト値は1つのディレクトリ `/usr/local/share/emacs/fonts/bdf' を持ちます.
これらのコマンドには他にも多くのカスタマイズ可能な変数があり、 それらはLispファイル`ps-print.el' や `ps-mule.el' で定義されています。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Emacsには、バッファ中のテキストをソートするコマンドがいくつかあります。 すべてはリージョン(ポイントとマークのあいだのテキスト)に働きます。 これらのコマンドは、リージョン中のテキストを 多数のソートレコードにわけ、 各レコードについてソートキーを識別し、 一連のレコードをソートキーによって定まる順序に並べ替えます。 レコードはキーのアルファベット(辞書)順にも、 また数値に基づく数値順にも並べられます。 アルファベット順の場合は、ASCII 文字の順序に基づいて すべての大文字「A」〜「Z」は小文字「a」よりまえにきます。
各種のソートコマンドの違いは、テキストをソートレコードに分ける方法と、 各レコードのどの部分をソートキーに使うかです。 ほとんどのコマンドは各行をソートレコードとして扱いますが、 段落やページをソートレコードとして扱うコマンドもあります。 ほとんどのソートコマンドは各ソートレコード全体を それ自身のソートキーとして扱いますが、 ソートレコードの一部分だけをソートキーとして扱うコマンドもあります。
どの欄をキーとしてソートするかは、 1を指定すれば第1欄、というように数引数で指定する。 負の値を指定したときは左からでなく右から欄を数える。 つまり、-1は最後の欄でソートする。 複数の行において欄の値が同一の場合、 バッファ上のもとの順序が保存される。
sort-numeric-base
によって解釈されますが,`0x' か `0' で始まる 数であればそれぞれ16進数や8進数として解釈されます.
たとえば、バッファにつぎのような内容が入っていたとします。
On systems where clash detection (locking of files being edited) is implemented, Emacs also checks the first time you modify a buffer whether the file has changed on disk since it was last visited or saved. If it has, you are asked to confirm that you want to change the buffer. |
バッファ全体にM-x sort-linesを適用すると、 つぎのようになります。
On systems where clash detection (locking of files being edited) is implemented, Emacs also checks the first time you modify a buffer saved. If it has, you are asked to confirm that you want to change the buffer. whether the file has changed on disk since it was last visited or |
ここで、`O'は大文字なのですべての小文字よりまえにきます。 上記のかわりにC-u 2 M-x sort-fileldsを使ったとすると、 結果はつぎのようになります。
implemented, Emacs also checks the first time you modify a buffer saved. If it has, you are asked to confirm that you want to change the buffer. On systems where clash detection (locking of files being edited) is whether the file has changed on disk since it was last visited or |
この例ではソートキーは、`Emacs'、`If'、`buffer'、 `systems'、`the'だったわけです。
M-x sort-columnsには少々説明が必要です。 文字位置の範囲を指定するには、ポイントを文字位置の一方に、 マークを他方の文字位置に置きます。 このため、ポイントやマークをソートしたい最初の行の先頭に 置くことができませんから、このコマンドでは変わった 「リージョン」の定義を用います。 ポイントがある行全体はリージョンに含まれ、 同様に、マークがある行全体もリージョンに含まれ、 この2つの行のあいだにある行はすべてリージョンに含まれるとみなすのです。
たとえば、ある表を10文字目から15文字目までの情報をもとにソートする場合、 表の最初の行の10文字目にマークを置き、 表の最後の行の15文字目にポイントを置き、 そしてsort-column
を実行します。 あるいは、マークを最初の行の15文字目、 ポイントを最後の行の10文字目に置いても同じことです。
これは、ポイントとマークで指定された矩形領域をソートするものと考えられます。 ただし、矩形領域の右側や左側にある各行のテキストも一緒に移動します。
sort-fold-case
がnil
以外の場合、 ソートコマンドのほとんどは比較に際して大文字小文字を区別しません。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
ナロイング(narrowing)とは、バッファのある部分だけに焦点を当て、 残りの部分を一時的に参照できなくすることです。 扱える部分のことを参照可能範囲と呼びます。 ナロイングを取り消して、バッファ全体を参照できるように戻すことを ワイドニング(widening)と呼びます。
ナロイングすると、他の部分に煩わされることなく、 1つのサブルーチンや段落などに集中できます。 また、置換コマンドやキーボードマクロの適用範囲を制限するのにも利用できます。
narrow-to-region
)。widen
)。narrow-to-page
)。narrow-to-defun
)。バッファの一部分へナロイングすると、その部分だけしかないように見えます。 残りの部分は見えませんし、そこへポイントを移動することもできません (移動コマンドは参照可能範囲から外へ出られない)し、 見えない部分はどのようにしても変更できません。 しかし、その部分がなくなったわけではないので、 ファイルに保存すれば参照できないテキストも保存されます。 ナロイングしているあいだは、モード行に`Narrow'と表示されます。
主要なナロイングコマンドはC-x n n(narrow-to-region
)です。 現在のリージョンだけが参照可能で、その前後のテキストは参照できないように カレントバッファに制限を課します。 ポイントとマークは変化しません。
別のやり方として、C-x n p(narrow-to-page
)は現在のページ だけが見えるようにナロイングします。 ページの定義については、See 節 U.4 ページ。 C-x n d(narrow-to-defun
)はポイントを含む関数定義の範囲に ナロイングします(see 節 V.4 関数定義(defun))。
ナロイングを取り消すには、C-x n wでワイドニングします。 これによってバッファ中の全テキストが再度参照可能になります。
バッファ中のどの部分にナロイングしているかは、 コマンドC-x =で調べることができます。 See 節 D.9 カーソル位置の情報 (2004/03/27)。
ナロイングは、それについて知らないユーザーを簡単に混乱させますので、 narrow-to-region
は、通常、使用禁止コマンドになっています。 このコマンドを使おうとすると、Emacsは確認を求めてきて、 コマンドを使えるようにするかどうか問い合わせてきます。 コマンドを利用可能にすると、それ以後は確認は必要なくなります。 See 節 AE.3.11 使用禁止コマンド。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
2段組み(two-column)モードは、左右の段に分けたテキストを編集するのに便利です。 このモードでは、左右に並んだ2つのウィンドウを使用し、 それぞれに別のバッファを表示します。
2段組み(two-column)モードに入るには、3つの方法があります。
2C-two-columns
)。 右側のバッファがまだ存在しなければ空のバッファで始まり、 カレントバッファの内容は変化しない。
このコマンドはカレントバッファが空か、または1段目の内容だけを持っていて、 これから2段目を作成しようとするときに使う。
2C-split
)。 カレントバッファは左側のバッファになるが、 右側の段の内容は右側のバッファに移される。 分割位置はポイントのある文字位置で指定する。 現在行からバッファの末尾を分割する。
このコマンドはバッファにすでに2段組みのテキストが入っていて、 一時的に左右の段を分けて編集したいときに用いる。
2C-associate-buffer
)。F2 sとC-x 6 sは、 各行を2つの段に分ける文字列である「段区切り文字列」を探します。 段区切り文字列の文字数は、F2 sへの数引数で指定できます。 ポイントの直前のその文字数分の文字列が段区切り文字列になります。 デフォルトでは幅は1ですから、ポイントの直前の文字が段区切り文字列になります。
各行の正しい位置に段区切り文字列があれば、 F2 sは各行の段区切り文字列のうしろの文字列を右側のバッファに移し、 段区切り文字列を削除します。 段区切り文字列が正しい位置にない行は分割されずに左側のバッファに残り、 対応する右側のバッファの内容は空行になります。 (これは、『2段組み(two-column)モードで両側の段にまたがった行』の書き方。 つまり、左側のバッファにそのような行を書き、 右側のバッファは空行にしておく)。
コマンドC-x 6 RETやF2 RET (2C-newline
)は、 左右の2つのバッファの対応する位置に改行を挿入します。 バッファを分割して編集しているときに2段組みテキストに 新しい行を追加するにはこれがもっとも簡単な方法です。
左右のバッファを望むように編集し終えたら、 それらをF2 1またはC-x 6 1(2C-merge
)で 再度併合します。 右側バッファの内容を左側バッファに第2段目としてコピーします。 再度2段組み編集に戻るには、F2 sを使います。
2つのバッファ間の関連を解消するには、 F2 dまたはC-x 6 d(2C-dissociate
)を使います。 コマンドを入力したときにカレントバッファでない側のバッファが空であれば、 そのバッファは削除します。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
バイナリファイルを編集するための特別なメジャーモード、 hexlモードがあります。 このモードを使うには、ファイルを訪問するC-x C-fのかわりに M-x hexl-find-fileを使います。 このコマンドはファイルの内容を16進数表現に変換し、 変換したものを編集するようにします。 ファイルを保存すると自動的にバイナリに戻されます。
M-x hexl-modeを使えば、既存のバッファを16進数表現に変換できます。 普通にファイルを訪問してみたら、実はバイナリファイルだとわかった場合に便利です。
hexlモードでは通常のテキスト文字は上書きします。 これはファイル中のデータの配置をまちがって壊してしまう危険を減らすためです。 特別な挿入コマンドがあります。 以下は、hexlモードで使えるコマンドの一覧です。
hexl-mode
実行前のこのバッファのメジャーモードに戻る。他の Hexl コマンドはバイナリバイトの文字 (文字列) を挿入し,short
や int
での移動を可能にします.C-h a hexl-RET を参照ください.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
あるセッションから他のセッションへ Emacs の状態を保存するためにはデスクトップライ ブラリを使います.一旦 Emacs のデスクトップ(desktop)―バッファ,個々のファ イル名,メジャーモード,バッファ位置など―を保存しておけば,別の Emacs セッショ ンで保存されたデスクトップを読み込むことができるのです.
コマンド M-x desktop-save で手動でデスクロップを保存できます.Emacs を終了 する時に自動的にデスクトップを保存することもできます.そのためには,カスタマイズ (see 節 AE.2.2 簡便なカスタマイズ方法を参照) を使って desktop-save-mode
を t
に設定するか,`~/.emacs' に以下を追加します.
(desktop-save-mode 1) |
Emacs が起動された時,現在のディレクトリに保存されたデスクトップが無いか探します. こうして,別々のディレクトリに別々のデスクトップを保存することができます.そして, 開始ディレクトリを変えることで,どのデスクトップを読み込むべきか指定できます. M-x desktop-change-dir を実行することで,現在のディスクトップを保存し,別 のディレクトリに保存されたデスクトップを読み込ませることができます.M-x desktop-revert を入力することで,前に読み込まれたデスクトップに戻ることができま す.
コマンドでオプション `--no-desktop' を指定することで,保存されたデスクトッ プを読み込ませないようにできます.
M-x desktop-clear を入力することで Emacs のデスクストップを空にすることが できます.このコマンドは内部で用いられているもの以外のバッファをすべてキルし, desktop-globals-to-clear
にリストされているグローバル変数をすべて初期化し ます.もしあるバッファを残したければ,変数 desktop-clear-preserve-buffers-regexp
をカスタマイズします.この変数の値 はキルしないバッファ名に一致する正規表現になります.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
再帰編集とは、あるEmacsコマンドの実行途中で 任意のEmacsコマンドを使って編集を行う状況をいいます。 たとえば、query-replace
の途中でC-rを打つと、 再帰編集に入りカレントバッファを自由に変更できます。 再帰編集から抜けると、query-replace
の続きに戻ります。
再帰編集から脱出するとは、 実行途中のコマンドに戻ってその続きを行うことを意味します。 脱出のためのコマンドはC-M-c(exit-recursive-edit
)です。
再帰編集をアボートすることもできます。 これは脱出と似ていますが、実行途中だったコマンドも一緒に中断します。 アボートするには、 C-](abort-recursive-edit
)を使います。 See 節 AE.7 中断とアボート (2004/03/29)。
再帰編集中は、モード行のメジャー/マイナモード名を 囲む丸括弧の外側に中括弧`[...]'が表示されます。 各ウィンドウのモード行すべてにこのように表示されます。 というのは、特定のウィンドウやバッファではなくEmacs全体が再帰編集に 入っているからです。
再帰編集中にさらに再帰編集に入ることもできます。 たとえば、query-replace
の途中でC-rを打ってから デバッガを起動するコマンドを打ったとします。 すると、C-rによる再帰編集の中でさらにデバッガのための再帰編集に 入ることになります。 モード行には、現在の再帰編集レベルの数だけ中括弧の対が表示されます。
内側の再帰編集を(たとえばデバッガのコマンドcで)脱出すると、 1つ上のレベルでのコマンドが再開されます。 そのコマンドが終わったところでC-M-cを使うと そのレベルの再帰編集を脱出する、 というようにして再帰編集を終わらせていくことができます。 脱出はつねにもっとも内側のレベルに対して起こります。 また、アボートも1つのレベルの再帰編集から脱出し、 1つまえの再帰編集のコマンドレベルに戻ります。 必要ならそこでつぎの再帰編集レベルをアボートする、 というように続けることができます。
あるいは、 コマンドM-x top-levelですべてのレベルの再帰編集をアボートし、 ただちにトップレベルのコマンド入力に戻ることができます。
再帰編集の中で編集しているテキストは トップレベルで編集しているテキストと同じであるとは限りません。 再帰編集の目的によって変わってきます。 再帰編集を起動するコマンドがまず別のバッファに切り替えるものなら、 そのバッファを再帰的に編集することになるでしょう。 いずれにせよ、再帰編集の内側でも (バッファを切り替えるキーが再定義されていない限り) 通常どおりバッファを切り替えることができます。 残りの編集作業をすべて再帰編集の内側でやってしまい、 別のファイルを訪問したりもできます。 しかしそのようなことをすると、 ときどき(スタックオーバーフローなどの)痛い目に合う可能性があります。 ですから、再帰編集が不要になったら忘れずに脱出かアボートしてください。
一般に、GNU Emacsでは再帰編集レベルを最小限に抑えるように努めています。 というのは、再帰編集では特定の順、つまり、 最内側レベルからトップレベルに向かう順で戻るように強いられるからです。 このため、別の作業は別のバッファでするようにして、 ユーザーがそれらの間を自由に行き来できるようにしています。 たとえば、あるコマンドは新しいメジャーモードに切り替えますが、 もとのモードに戻るコマンドを用意しておきます。 このようにしたほうが、やりかけの作業に戻る順番を自由に選べ、 柔軟性を提供できます。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
GNU Emacsは、他のほとんどのエディタの(程度の差はありますが) エミュレート(真似を)するようにプログラムできます。 標準の機能では、以下のものをエミュレートできます。
crisp-override-meta-x
を変更し ます.CRiSP のscroll-all 機能(すべてのウィンドウを一緒にスクロールさせる機能)を 実現するためには,コマンド M-x scroll-all-mode を実行したり,ユーザオプション crisp-load-scroll-all
を設定します.
EDTエミュレーションコマンドの大部分はキーパッドのキーであり、 大部分のEmacsのキーバインディングはそのまま使える。 EDTエミュレーションのバインディング変更はグローバルキーマップに対して行われ、 EDTエミュレーションの状態でバッファやメジャーモードを切り替えても問題ない。
list-buffers
を実行することです.
PC 選択モード (PC selection モード)では移動するための標準的なキー (移動キーである right,left,up,down, home,end,prior,next) はマークを無効にします.しかし, 移動キーと一緒に Shift を使うと,移動した領域をリージョンにできます.コピー やカット,ペーストはそれぞれ C-insert,S-delete,S-insert で利 用できます.
pc-selection-mode
をオフにすると,古いキーバインドを再現します.
viエミュレーションはメジャーモードとして動くので、 エミュレーション中にバッファを切り替えることはできない。 バッファを切り替えたければ、まず通常のEmacsに戻る。
viエミュレーションを多用するつもりなら、 vi-mode
コマンドにキーをバインドしたほうがよいだろう。
このエミュレータはメジャーモードとして動くのではないので、 エミュレータを動かしたままさまざまな方法でバッファを切り替えることができる。 vi-mode
のようにコマンドvi-mode
で 入力モードを終了するのではないので、 vip-mode
にキーを割り当てる必要はない。
より詳しくはSee Info file `vip', node `Top'。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
ドキュメントのモードによってはハイパーテキスト機能を持ちます.大抵リンクの上で Mouse-2 をクリックしたり,リンク上にポイントがある時に RET を入力す ることで,リンクを辿ることができます.Info モードや Help モード,Dired のような モードがこの例になります.タグ機能はソースファイルで利用方法とその定義をリンクし ます.X.2 タグテーブル を参照ください.Imenu は現在のバッファで収集されたアイテムの間 を移動する機能です.@xref{Imenu}を参照ください.Info-lookup は モードに特有な検索 機能です.V.11 説明文書用コマンド を参照ください.Speedbar はファイルやファイルのあ る位置にリンクしたフレームが表示されます.Q.7 スピードバーフレームの作成と使い方 を参照ください.
この章で紹介する他のモードに特有でない機能は現在のバッファからある種のテキストを 用いたリンクを実現します.
AD.26.1 URL を辿る (2005/05/08) Following URLs. AD.26.2 URL を活性化 (2005/05/08) Activating URLs. AD.26.3 ポイントのファイルや URL を開く (2005/05/08) Finding files etc. at point. AD.26.4 関数や変数の定義を探す (2005/05/08) Finding function and variable definitions.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Browse-URL パッケージを使うと,WWW の URL を開く機能を実現できます.この機能は大 抵ブラウザを起動しますが,例えば,`mailto:' に対して compose-mail
を 起動することもできます.
この機能を使う一般的な方法は M-x browse-url を入力し,URLを入力することで す.もし,ポイントが URL らしき文字列上にあれば,その URL がデフォルトとして使わ れます.browse-url-at-point
や browse-url-at-mouse
のようなコマン ドはキーに割り当てるのに利用できるでしょう.
browse-url
のカスタマイズグループを使って,さまざまなオプション,特に browse-url-browser-function
を設定することで Browse-URL の動作を変えるこ とができます.browse-url-browser-function
で連想リストとして定義しておく と,URL に依存した関数を起動できます.C-h p で見ることのできるパッケージの コメントにはもっと多くの情報があります.URL を辿る機能を持つパッケージは Browse-URL を使うべきです.そうすれば,Browse-URL のオプションをカスタマイズする ことで,Emacs でURL を辿るすべての動作を変更できるのです.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
M-x goto-address で現在バッファのURLを活性化できます.このコマンドはバッ ファですべてのURLを探し,それらのリンクに Mouse-2 と C-c RET のキーバインドを付けます.活性化後,URL 上で Mouse-2 をクリックしたり,URL へポイントを動かして C-c RET を入力すると,URL を開きそのページが表 示されます.`mailto' URL の場合には,指定されたメール作成方法 (see 節 AA.6 メイル作成方式) を使って,メールを送ります.
goto-address
をモードのフックや受け取ったメッセージを表示するフックに追加 しておくと便利でしょう.Rmail のフックであれば rmail-show-message-hook
, MH-E であれば mh-show-mode-hook
が適切でしょう.Gnus では似た機能を独自に 持っていますので,必要ありません.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
FFAP mode は C-x C-f を含めたファイルを開くキーバインドをより敏感なものに 置き換えます.このコマンドは数引数を与えると普通のものと同じように振舞います.さ もなければ,ポイント周辺からデフォルトのファイル名や URL を得ます.もしバッファ で見付かったものがファイル名ではなく URL であったら,browse-url
を使って 表示します.
この機能はメールやニュースバッファ,`README' ファイル,`MANIFEST' ファ イルなどで出典を辿るのに役立ちます.C-h p を使うことで,`ffap' パッケー ジのコメントを見ることができます.また,カスタマイズグループ ffap
もあり ます.
FFAP マイナーモードを有効にすると,以下のキーバインドを割り当て,ffap
を Rmail,Gnus,VM の記事バッファで有効にするフックを設定します.
ffap-other-window
.find-file-other-window
と同じ.ffap-other-frame
. find-file-other-frame
と同じ.ffap-dired-at-point
).ffap-at-mouse
はマウスをクリックした位置付近のテキストからファイル名を探 し開きます.ffap-menu
).[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
これらのコマンドを使うと簡単に Emacs Lisp の関数や変数の定義を探すことができます. 目的としては, Tags 機能 (see 節 X.2 タグテーブルを参照) と似ていますが,これはタグテーブル を必要としません.また,Emacs にすでに読み込まれた関数や変数の定義だけに有効です.
関数の定義を探すためには M-x find-function を使います.M-x find-variable は指定された変数の定義を探します.M-x find-function-on-key は指定されたキーに割り当てられた関数の定義を探します.
これらのコマンドを使うためには,コンパイルされたファイル (`.elc') と一緒に Lisp のソースファイル (`.el') が load-path
に無ければいけません. Auto Compression モードが有効であれば,圧縮されたソースファイルを使うことができ ます.Lisp で書かれたコマンドだけを扱い,C で書かれた初歩的な関数や変数は扱いま せん.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
M-x dissociated-pressはテキストを、単語単位、または、文字単位で 混ぜ合わせるコマンドです。 普通の英語をバッファに入れた状態でこれを実行すると、 きわめておもしろい結果が生成されます。 入力はカレントバッファから取り、 出力は`*Dissociation*'というバッファに書き込みます (およそ2、3行生成するごとにバッファが再表示されるので、 生成内容を順次読めます)。
M-x dissociated-pressは定期的にもっと出力を続けるかどうか聞いてきます。 nと答えると生成をやめます。 また、C-gを打てばいつでも止められます。 出力はバッファ`*Dissociation*'に残っていますから、 必要ならどこへでもコピーできます。
M-x dissociated-pressはバッファ中のある箇所からランダムに 別の箇所にジャンプすることを繰り返していきます。 ただのゴミではなくおもしろい出力が得られるように、 ある一連の単語列からつぎの一連の単語列に移る際に、 それらのあいだに一定の重複があるようにします。 つまり、たとえばpresidentと出力したところで別の場所にジャンプすることに 決めたら、最後にあったentと同じ文字列のある単語、 たとえばpentagonのところに飛んでそこから続けるので、 結果としてpregidentagon (55) というのが生成されるわけです。 元テキストが長いとたいへんおもしろい結果を得られます。
M-x dissociated-pressに正の数引数を渡すと 文字単位で動作し、その数値は重複する文字数を指定します。 また、負の数引数を渡すと単語単位で動作し、その数値(の絶対値)で重複する 単語数を指定します。 引数を指定しないと「2」を指定したのと同じになります。 繰り返しますが、出力はつねにバッファ`*Dissociation*'に現れます。 もとのバッファは変更されません。
M-x dissociated-pressは、入力テキストから頻度表を作って マルコフ連鎖を適用したのに近い結果をもたらしますが、 それ自体はきわめてオリジナルな発明です。 というのは、マルコフ連鎖では単に乱数に基づいて文字や語を選ぶだけなのに対し、 このコマンドでは乱数に基づいて連続した文字や語をコピーしてくるからです。 このため、より高速な実行が可能ですし、読んでおもしろい結果が得られます。
M-x dissociated-pressの使いすぎは仕事に差し支え、 場合によっては重大な障碍となりますから注意しましょう。 また、ユーザーに受け入れてもらうためにも、 マニュアルにこのコマンドの出力を利用するのはやめたほうがよいです。 でも、せいぜい楽しんで、よかったらバグの提案もよろしく。 (56)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
退屈なときは、M-x hanoiを試してください。 ひどく退屈なら、数引数を指定してください。 ものすごく、ひどく退屈なら、「9」を指定するとよいでしょう。 まあやってみてください。
もう少し積極的に何かしたいなら、M-x gomokuを試してください。 これは五目並べのプログラムです。
M-x blackbox, M-x mpuz and M-x 5x5 are kinds of puzzles. blackbox
challenges you to determine the location of objects inside a box by tomography. mpuz
displays a multiplication puzzle with letters standing for digits in a code that you must guess--to guess a value, type a letter and then the digit you think it stands for. The aim of 5x5
is to fill in all the squares. M-x blackboxとM-x mpuz,M-x 5x5 はパズルゲームです。 blackbox
は箱の中の物の位置を当てるゲームです。 mpuz
は掛け算の覆面算で、英字に対応している数字を当てるゲームです。 英字を打ってからその英字に対応していると思う数字を打ち込みます。 5x5
は四 角のすべてを埋めることです.
M-x decipher は単純なアルファベット置換で暗号化されたバッファを解読するの に役立ちます.
M-x dunnetはアドベンチャー風の探検ゲームで、 大きなパズルだと思えばよいでしょう。
M-x lm は見るだけのゲームです.ロボットがウィンドウの中心にある木に向かっ て4つの方向からの嗅覚の指示だけで動こうとするものです.
M-x life は Conway の人工生命シミュレーションを実行します.
M-x morse-region はリージョンのテキストをモールス信号にコンバートします. M-x unmorse-region で解読します.No cause for remorse.
M-x pong はボールを対向したバットでバウンドさせるゲームです.
M-x solitaire は solitaire で遊べます.これは他のコマを飛び越して,コマを ジャンプさせ,間のコマを消していくものです.
M-x studlify-region は以下のように一部を大文字にすることで,リージョンをかっ こよくします.
M-x stUdlIfY-RegioN stUdlIfY-CaSeS thE region. |
M-x tetris はテトリスとしてよく知られたゲームを実現します.同様に M-x snake は Snake を実現します.
いらいらするときは、有名なElizaプログラムを試してみてください。 M-x doctorと打つだけです。 1つの入力の終りにはRETを2回打ちます。
奇妙な感じがするときは、M-x yowと打ってみてください。
M-x zone は Emacs が待機状態の時に表示させるゲームです.
[ << ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |