This is the GNU Emacs Manual, updated for Emacs version 27.1.
Copyright © 1985–1987, 1993–2020 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being “The GNU Manifesto,” “Distribution” and “GNU GENERAL PUBLIC LICENSE,” with the Front-Cover Texts being “A GNU Manual,” and with the Back-Cover Texts as in (a) below. A copy of the license is included in the section entitled “GNU Free Documentation License.”
(a) The FSF’s Back-Cover Text is: “You have the freedom to copy and modify this GNU manual. Buying copies from the FSF supports it in developing GNU and promoting software freedom.”
Published by the Free Software Foundation
51 Franklin Street, Fifth Floor
Boston, MA 02110-1301 USA
ISBN 978-0-9831592-5-4
Cover art by Etienne Suvasa; cover design by Matt Lee.
[ < ] | [ > ] | [Contents] | [Index] | [ ? ] |
Emacsは、拡張可能で、カスタマイズ可能な、セルフドキュメント方式のリアルタイム画面エディターです。このinfoファイルでは、Emacsでの編集方法や Emacsのカスタマイズ方法について説明します。GNU Emacs 27.1に対応します。
Emacsの拡張に関しては、Emacs Lisp in The Emacs Lisp Reference Manualを参照してください。
This is the GNU Emacs Manual, updated for Emacs version 27.1.
Copyright © 1985–1987, 1993–2020 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being “The GNU Manifesto,” “Distribution” and “GNU GENERAL PUBLIC LICENSE,” with the Front-Cover Texts being “A GNU Manual,” and with the Back-Cover Texts as in (a) below. A copy of the license is included in the section entitled “GNU Free Documentation License.”
(a) The FSF’s Back-Cover Text is: “You have the freedom to copy and modify this GNU manual. Buying copies from the FSF supports it in developing GNU and promoting software freedom.”
ディストリビューション | 最新のEmacsディストリビューションを入手する方法。 | |
イントロダクション | Emacsの概念についてのイントロダクション | |
重要な一般的概念 | ||
---|---|---|
1 画面の構成 | スクリーンで目にするものの使い方。 | |
2 ユーザー入力の種類 | さまざまな入力イベント(文字、ボタン、ファンクションキー) | |
3 キー | キーシーケンス: 編集アクションをリクエストするための入力。 | |
4 キーとコマンド | 編集を行うキーシーケンスにより実行される名前付きの関数。 | |
5 Emacsの起動 | シェルからのEmacsの起動。 | |
6 Emacsからのexit | Emacsの停止と終了。 | |
基本的な編集コマンド | ||
7 基本的な編集コマンド | もっとも基本的な編集コマンド。 | |
8 ミニバッファー | 入力プロンプトにたいして引数を入力する。 | |
9 名前を指定してコマンドを実行する | コマンドを名前で呼び出す。 | |
10 ヘルプ | コマンドについてEmacsに尋ねるコマンド。 | |
テキストを変更する重要コマンド | ||
11 マークとリージョン | mark: どうやってテキストのリージョンを区切るか。 | |
12 テキストのkillと移動 | テキストのkill(切り取り)とyank(コピー)。 | |
13 レジスター | バッファーのテキストや位置の保存。 | |
14 ディスプレーの制御 | テキストの表示の制御。 | |
15 検索と置換 | 文字列の検索と置換。 | |
16 タイプミスを訂正するコマンド | タイプミスを訂正するのに特に有用なコマンド。 | |
17 キーボードマクロ | 再生するためにキーストロークのシーケンスを記録する。 | |
Emacsの主要な構造 | ||
18 ファイルの処理 | ファイルの処理に関するすべて。 | |
19 複数バッファーの使用 | 複数バッファー — 1度に複数のファイルを編集する。 | |
20 複数ウィンドウ | 1つのフレームでの複数のテキスト片の閲覧。 | |
21 フレームとグラフィカルなディスプレー | ディスプレーで複数のウィンドウを使用する。 | |
22 国際化文字セットのサポート | 非ASCII文字セットの使用。 | |
上級の機能 | ||
23 メジャーモードとマイナーモード | Emacsの基本動作を変更するメジャーモードとマイナーモード。 | |
24 インデント | 行の先頭にある空白スペースの編集。 | |
25 人間の言語のためのコマンド | 人間の言語のためのコマンドとモード。 | |
26 プログラムの編集 | プログラム編集のためのコマンドとモード。 | |
27 プログラムのコンパイルとテスト | プログラムのコンパイル、実行、デバッグ。 | |
28 大きなプログラムの保守 | 大きなプログラムを保守するための機能。 | |
29 abbrev(略語) | タイプ量を減らすための略語の定義。 | |
30 Dired (ディレクトリーエディター) | ディレクトリー・ファイルマネージャー。 | |
31 カレンダーとダイアリー | カレンダーおよびダイアリー機能。 | |
32 メールの送信 | Emacsでのメールの送信。 | |
33 Rmailでメールを読む | Emacsでのメールの閲覧。 | |
34 GnusによるEメールとUsenetニュース | 柔軟なメール・ニュースリーダー。 | |
35 ホストのセキュリティ | 単独のコンピューターでのセキュリティー問題。 | |
36 ネットワークのセキュリティ | ネットワークセキュリティーの管理。 | |
37 ドキュメントの閲覧 | PDF、PS、DVIファイルの閲覧。 | |
38 Emacsからのシェルコマンドの実行 | ||
39 サーバーとしてのEmacsの使用 | Emacsを編集サーバーとして使用する。 | |
40 ハードコピーの印刷 | バッファーまたはリージョンのハードコピーの印刷。 | |
41 テキストのソート | Emacsでの行、パラグラフ、ページのソート。 | |
42 ピクチャーの編集 | テキスト文字で作られたピクチャーの編集。 | |
43 バイナリーファイルの編集 | Hexlモードでのバイナリーファイルの編集。 | |
44 Emacsセッションの保存 | あるセッションから次のセッションへ、Emacsの状態を保存する。 | |
45 再帰編集レベル | 他のコマンドを実行中に編集を行なう。 | |
46 ハイパーリンクとWebナビゲーション機能 | バッファー内のリンクをフォローする。 | |
47 ゲーム、その他の娯楽 | さまざまなゲームとhack。 | |
48 Emacs Lispパッケージ | 追加機能のインストール。 | |
49 カスタマイズ | Emacsの動作を変更する。 | |
問題からのリカバリー | ||
50 中止と中断 | 中止(quit)と中断(abort)。 | |
51 Emacsのトラブルへの対処 | Emacsがハングしたり誤動作するとき何を行なうか。 | |
52 バグの報告 | バグを報告すべきとき、そしてその方法について。 | |
53 Emacs開発への貢献 | Emacsの改良に貢献する方法。 | |
54 GNU Emacsにたいして助けを得る方法 | あなた独自のEmacsのニーズにたいして助けを得る方法。 | |
Appendices | ||
Appendix A GNU GENERAL PUBLIC LICENSE | GNU General Public Licenseは特定の条件に置いてGNU Emacsを再配布する許可をあなたに与えます。そして保証がないことも説明します。 | |
Appendix B GNU Free Documentation License | このドキュメントのライセンス。 | |
Appendix C Emacs呼び出しにたいするコマンドライン引数 | hairy(身の毛もよだつ、恐ろしい、困難な、難しい、危険な、やばい)な開始オプション。 | |
Appendix D Xのオプションとリソース | EmacsをカスタマイズするためのXリソース。 | |
Appendix E Emacs 26 アンチニュース | Emacsバージョン26についての情報。 | |
Appendix F EmacsとmacOS / GNUstep | macOSおよびGNUstepでのEmacsの使用。 | |
Appendix G EmacsとMicrosoft Windows/MS-DOS | Microsoft WindowsおよびMS-DOSでのEmacsの使用。 | |
The GNU Manifesto | What’s GNU? Gnu’s Not Unix! — GNUとはなんだ? => Gnu’s Not Unix!(GNUはUnixではない!)。 | |
Glossary | このマニュアルで使用されている用語。 | |
Acknowledgments | GNU Emacsの主要な貢献者。 | |
インデックス(各インデックスは大きなメニューを含みます) | ||
Key (Character) Index | 標準的なEmacsキーシーケンス。 | |
Command-Line Options Index | コマンドラインオプション。 | |
Command and Function Index | 標準的なコマンド名。 | |
Variable Index | ドキュメントされた変数。 | |
Concept Index | 概念およびその他の一般的な項目のインデックス。 | |
— 詳細なノードリスト — —————————————- 以下は実際にはすでにリストされたノードのサブノードです。それらをここで記述するので、1ステップで移動できます: スクリーンの構成 | ||
1.1 ポイント | テキスト内で編集コマンドが作用する場所 | |
1.2 エコーエリア | スクリーンのいちばん下で、短いメッセージが表示されます | |
1.3 モードライン | モードを説明するライン | |
1.4 メニューバー | メニューバーの使い方 | |
基本的な編集コマンド | ||
7.1 テキストの挿入 | 単純に入力してテキストを挿入する。 | |
7.2 ポイント位置の変更 | 何か修正したい場所にカーソルを移動する。 | |
7.3 テキストの消去 | テキストの削除とkill。 | |
7.4 変更のアンドゥ | テキストの最近の変更を取り消す。 | |
7.5 ファイル | ファイルの読み込み、作成、保存。 | |
7.6 ヘルプ | 文字が何を行うか尋ねる。 | |
7.7 空行 | 空行の作成と削除 | |
7.8 継続行 | Emacsがスクリーンに収まりきれない行を表示する方法。 | |
7.9 カーソル位置の情報 | ポイントのある場所の行と列は何か? | |
7.10 数引数 | コマンドをN回繰り返すための数引数。 | |
7.11 コマンドの繰り返し | 素早く前のコマンドを繰り返す。 | |
ミニバッファー | ||
8.1 ミニバッファーを使う | ミニバッファーの基本的な使い方。 | |
8.2 ミニバッファーでのファイル名 | ミニバッファーでファイル名を入力する。 | |
8.3 ミニバッファーでの編集 | ミニバッファーで編集する方法。 | |
8.4 補完 | ミニバッファーでの入力のための略語機能。 | |
8.5 ミニバッファーヒストリー | 最近のミニバッファー引数の再使用。 | |
8.6 ミニバッファーでのコマンドの繰り返し | ミニバッファーを使ったコマンドの再実行。 | |
8.7 パスワードの入力 | エコーエリアでパスワードを入力する。 | |
8.8 Yes or No プロンプト | エコーエリアでyes/noにこたえる。 | |
Completion | ||
8.4.1 補完の例 | 補完の使い方の例。 | |
8.4.2 補完コマンド | 補完コマンドのリスト。 | |
8.4.3 補完の終了 | 補完とミニバッファーでのテキストの確定。 | |
8.4.4 補完候補が選択される方法 | 補完のマッチが選ばれる方法。 | |
8.4.5 補完オプション | 補完のオプション。 | |
Help | ||
10.1 ヘルプの概要 | すべてのヘルプコマンドの要約リスト。 | |
10.2 キーのドキュメント | Emacsでキーが何を行うか尋ねる。 | |
10.3 コマンドと変数名のヘルプ | コマンド、変数、関数名を尋ねる。 | |
10.4 Apropos(適切な) | 与えられたトピックに関係があるものを尋ねる。 | |
10.5 ヘルプモードのコマンド | へルポモードとヘルプバッファーの特別な機能。 | |
10.6 パッケージのキーワード検索 | キーワード(トピック)でLispライブラリーを探す。 | |
10.7 国際化言語のサポートに関するヘルプ | 国際的な言語サポートに関するヘルプ。 | |
10.8 その他のヘルプコマンド | その他のヘルプコマンドについて。 | |
10.9 ヘルプファイル | 追加のヘルプファイルを表示するコマンド。 | |
10.10 アクティブテキストのヘルプとツールチップ | アクティブなテキストのヘルプとツールチップ。 | |
マークとリージョン | ||
11.1 マークのセット | マークをセットするコマンド。 | |
11.2 テキストオブジェクトをマークするコマンド | テキスト単位の周辺にリージョンをセットするコマンド。 | |
11.3 リージョンを操作する | リージョンの内容を操作する方法の要約。 | |
11.4 マークリング | 後で戻れるように保存された以前のマーク位置。 | |
11.5 グローバルマークリング | さまざまなバッファーの以前のマーク位置。 | |
11.6 シフト選択 | シフトを押してカーソル移動キーを使う。 | |
11.7 Transient Markモードを無効にする | デフォルトでリージョンをハイライトせずにおく。 | |
テキストのkillと移動 | ||
12.1 削除とkill | テキストを削除するコマンド。 | |
12.2 yank | テキストを挿入するコマンド。 | |
12.3 グラフィカルなディスプレーでのカットアンドペースト | グラフィカルなディスプレーにおけるクリップボードと選択。 | |
12.4 テキストの追加 | バッファーにテキストを追加する他の方法。 | |
12.5 矩形領域(Rectangles) | 矩形領域のテキストの操作。 | |
12.6 CUAバインド | killとyankでC-x/C-c/C-vを使う。 | |
Deletion and Killing | ||
12.1.1 削除 | 少量のテキストや空の領域を削除するコマンド。 | |
12.1.2 行のkill | テキスト行を一度にkillする方法。 | |
12.1.3 その他のkillコマンド | 大きなリージョン、および単語やセンテンスのような構文単位をkillするコマンド。 | |
12.1.4 killのオプション | killに影響を与えるオプション。 | |
Yanking | ||
12.2.1 killリング | killされたテキストが格納される場所。 | |
12.2.2 過去にkillしたテキストをyankする | もっと前にkillしたものをyankする。 | |
12.2.3 killしたテキストの追加 | 数回のkillを一緒にまとめてyankする。 | |
グラフィカルなディスプレーでのカットアンドペースト操作 | ||
12.3.1 クリップボードを使う | Emacsがシステムクリップボードを使う方法。 | |
12.3.2 他のウィンドウアプリケーションにたいするカットアンドペースト | 一時的に選択されたテキストの選択。 | |
12.3.3 セカンダリー選択 | ポイントとマークを変化させずに切り取る。 | |
Registers | ||
13.1 レジスターに位置を保存する | 位置をレジスターに保存する。 | |
13.2 レジスターにテキストを保存する | テキストをレジスターに保存する。 | |
13.3 レジスターに矩形領域を保存する | 矩形領域をレジスターに保存する。 | |
13.4 レジスターにウィンドウ設定を保存する | ウィンドウの設定をレジスターに保存する。 | |
13.5 レジスターに数字を保存する | レジスターの中の数字。 | |
13.6 レジスターにファイル名を保存する | レジスターの中のファイル名。 | |
13.7 キーボードマクロのレジスター | レジスターの中のキーボードマクロ。 | |
13.8 ブックマーク | レジスターと似ているが永続性があるブックマーク。 | |
ディスプレーの制御 | ||
14.1 スクロール | ウィンドウのテキストを上下に移動させるコマンド。 | |
14.2 センタリング | カレント行を中央にするスクロールコマンド。 | |
14.3 自動スクロール | 必要なときテキストをスクロールして再表示する。 | |
14.4 水平スクロール | ウィンドウの左右にテキストを移動させる。 | |
14.5 ナローイング | 表示を制限してバッファーの一部を編集する。 | |
14.6 Viewモード | 読み取り専用バッファーの表示。 | |
14.7 Followモード | Followモードで2つのウィンドウを1つとしてスクロールさせる。 | |
14.8 テキストのフェイス | フェイスを使って表示スタイルを変更する方法。 | |
14.9 フェイスのカラー | フェイスのカラーを指定する。 | |
14.10 標準フェイス | 主要な既定のフェイス。 | |
14.11 テキストのスケール | バッファーのテキストサイズの拡大と縮小。 | |
14.12 Font Lockモード | フェイスを使って文法をハイライトするマイナーモード。 | |
14.13 インタラクティブなハイライト | Emacsにハイライトするテキストを指示する。 | |
14.14 ウィンドウのフリンジ | ウィンドウフリンジの有効と無効。 | |
14.15 バウンダリーの表示 | バッファーの先頭と最後を表示する。 | |
14.16 不要なスペース | 行末の不要な空白文字の表示。 | |
14.17 選択的な表示 | インデントの大きな行を隠す。 | |
14.18 モードラインのオプション | モードラインの表示機能のオプション。 | |
14.19 テキストが表示される方法 | テキスト文字が通常表示される方法。 | |
14.20 カーソルの表示 | カーソル表示の機能。 | |
14.21 行の切り詰め | 複数のスクリーン行で継続表示させずにスクリーン幅に行を切り詰める。 | |
14.22 Visual Lineモード | 単語の折り返しとスクリーン行にもとづく編集。 | |
14.23 ディスプレーのカスタマイズ | ディスプレーをカスタマイズする変数の情報。 | |
検索と置換 | ||
15.1 インクリメンタル検索 | 文字列をタイプすることにより始まる検索。 | |
15.2 非インクリメンタル検索 | 文字列全体を指定してから検索する。 | |
15.3 単語検索 | 単語の並びを検索する。 | |
15.4 シンボル検索 | ソースコードのシンボルを検索する。 | |
15.5 正規表現検索 | 正規表現にマッチする検索。 | |
15.6 正規表現の構文 | 正規表現の構文について。 | |
15.7 正規表現でのバックスラッシュ | ‘\’で開始される正規表現の構築。 | |
15.8 正規表現の例 | 複雑な正規表現の解説。 | |
15.9 検索中のLaxマッチング | 大文字小文字のように、似た文字にたいするいくつかの相違を検索で無視する。 | |
15.10 置換コマンド | 一部またはすべてのマッチを検索または置換する。 | |
15.11 その他の検索およびループコマンド | いくつかの正規表現にマッチするすべてを処理する。 | |
15.12 必要に応じて検索を調整する | 検索のさまざまなカスタマイズ。 | |
Incremental Search | ||
15.1.1 インクリメンタル検索の基本 | 基本的なインクリメンタル検索コマンド。 | |
15.1.2 インクリメンタル検索の繰り返し | 同じ文字列を再度検索する。 | |
15.1.3 インクリメンタル検索でのyank | 検索文字列にテキストを取り込んだり、検索文字列を編集するコマンド。 | |
15.1.4 インクリメンタル検索でのエラー | 文字列が見つからなかったとき。 | |
15.1.5 インクリメンタル検索の特別な入力 | インクリメンタル検索での特別な入力。 | |
15.1.6 インクリメンタル検索を終了させない | プレフィクス引数とスクロールコマンド。 | |
15.1.7 ミニバッファーの検索 | ミニバッファーヒストリーのインクリメンタル検索。 | |
置換コマンド | ||
15.10.1 無条件の置換 | 文字列にマッチするすべてを置換する。 | |
15.10.2 正規表現の置換 | regexpにマッチするすべてを置換する。 | |
15.10.3 置換コマンドとLaxマッチ | 置換するテキストにたいするLax検索。 | |
15.10.4 問い合わせつき置換 | 問い合わせの使い方。 | |
タイプミス訂正のためのコマンド | ||
16.1 Undo(取り消し) | Undoコマンド。 | |
16.2 テキストの入れ替え | 2つの文字、単語、行、リスト、...の入れ替え。 | |
16.3 大文字小文字の変換 | 最後に入力した文字の大文字小文字を訂正する。 | |
16.4 スペルのチェックと訂正 | 単語またはファイル全体へのスペルチェッカーの適用。 | |
Keyboard Macros | ||
17.1 基本的な使い方 | キーボードマクロの定義と実行。 | |
17.2 キーボードマクロリング | 以前のキーボードマクロが保存される場所。 | |
17.3 キーボードマクロカウンター | マクロに増加する番号を挿入する。 | |
17.4 変化のあるマクロの実行 | 毎回違うことを行うマクロの作成。 | |
17.5 キーボードマクロの命名と保存 | キーボードマクロの命名とファイルへの保存。 | |
17.6 キーボードマクロの編集 | キーボードマクロを編集するには。 | |
17.7 キーボードマクロのステップ編集 | キーボードマクロのインタラクティブな実行と編集。 | |
ファイル処理 | ||
18.1 ファイルの名前 | ファイル名引数をタイプ、編集する方法。 | |
18.2 ファイルのvisit(訪問) | ファイルをvisitしてEmacsが編集する準備をする。 | |
18.3 ファイルの保存 | 保存して変更を永続化する。 | |
18.4 バッファーのリバート | 保存されていないすべての変更を取り消して前の状態に戻す。 | |
18.5 自動リバートーバッファーを自動的に最新に保つ | バッファーを自動的に最新に維持する。 | |
18.6 自動保存-災害にたいする防御 | 定期的な自動保存によりデータを失うことから守る。 | |
18.7 ファイルのエイリアス | 1つのファイルにたいする複数の名前を処理する。 | |
18.8 ファイルディレクトリー | ファイルディレクトリーの削除、作成、一覧。 | |
18.9 ファイルの比較 | 2つのファイルの異なる部分を探す。 | |
18.10 Diffモード | ファイルの異なる部分を編集するモード。 | |
18.11 ファイルのコピー、命名、リネーム。 | ファイルのvisit、作成、保存。 | |
18.12 その他のファイル操作 | ファイルにたいして行うその他のコマンド。 | |
18.13 圧縮ファイルへのアクセス | 圧縮されたファイルへのアクセス。 | |
18.14 ファイルアーカイブ | tar、zip、jar、...などのアーカイブファイルにたいする操作。 | |
18.15 リモートファイル | 他のマシンにあるファイルへのアクセス。 | |
18.16 ファイル名のクォート | ファイル名に含まれる特別な文字のクォート。 | |
18.17 ファイル名キャッシュ | よく使うファイルのリストにたいする補完。 | |
18.18 ファイル検索の便利な機能 | ファイルを探すための便利な機能。 | |
18.19 イメージファイルのvisit | イメージファオイルの閲覧。 | |
18.20 ファイルセット | 複数ファイルの処理。 | |
Saving Files | ||
18.3.1 ファイルを保存するコマンド | ファイルを保存するコマンドについて。 | |
18.3.2 バックアップファイル | Emacsがファイルの古いバージョンを保存する方法。 | |
18.3.3 ファイル保存のカスタマイズ | ファイルの保存のカスタマイズ。 | |
18.3.4 同時編集からの保護 | Emacsが2人のユーザーによる1つのファイルへの同時編集から保護する方法。 | |
18.3.5 ファイルのシャドーイング | ファイルを自動的にshadowコピーする。 | |
18.3.6 タイムスタンプの自動更新 | Emacsによる保存されたファイルのタイムスタンプの更新。 | |
バックアップファイル | ||
18.3.2.1 単一または番号つきバックアップ | バックアップファイルの命名方法。 | |
18.3.2.2 バックアップの自動削除 | Emacsによる余分な番号つきバックアップの削除。 | |
18.3.2.3 コピー vs. リネーム | コピーとリネームによるバックアップの作成。 | |
非ファイルバッファーの自動リバート | ||
18.5.1.1 Buffer Menuの自動リバート | バッファーメニューの自動リバート。 | |
自動保存 — 災害にたいする保護 | ||
18.6.1 自動保存ファイル | ファイルを保存するまでの間、自動保存された変更が実際に保存されるファイル。 | |
18.6.2 自動保存の制御 | 自動保存をいつ、どのような間隔で行うかの制御。 | |
18.6.3 自動保存からのデータ復旧 | 自動保存ファイルからのテキストの復旧。 | |
複数バッファーの使用 | ||
19.1 バッファーの作成と選択 | 新しいバッファーの作成と既存のバッファーの再選択。 | |
19.2 既存のバッファーを一覧する | 既存のバッファーリストの取得。 | |
19.3 その他のバッファー操作 | リネーム、読み取り専用属性の変更、テキストのコピー。 | |
19.4 バッファーのkill | 不必要なバッファーのkill。 | |
19.5 複数バッファーにたいする操作 | すべてのバッファーにたいするリストの操作と、複数バッファーにたいする操作。 | |
19.6 インダイレクトバッファー | 他のバッファーのテキストを共有するインダイレクトバッファー。 | |
19.7 バッファー処理の便利な機能とカスタマイズ | バッファー操作のための便利な機能とカスタマイズ。 | |
バッファー処理の便利な機能とカスタマイズ | ||
19.7.1 バッファー名を一意にする | ディレクトリー部分でバッファー名を一意にする。 | |
19.7.2 素早いミニバッファーの選択 | 素早いミニバッファーの選択について。 | |
19.7.3 バッファーメニューのカスタマイズ | バッファーメニューの設定。 | |
複数ウィンドウ | ||
20.1 Emacsウィンドウの概念 | Emacsウィンドウの紹介。 | |
20.2 ウィンドウの分割 | 既存のウィンドウを分割して新しいウィンドウを作る。 | |
20.3 他のウィンドウの使用 | 他のウィンドウへの移動と操作。 | |
20.4 他のウィンドウでの表示 | 他のウィンドウのファイルまたはバッファーの検索。 | |
20.5 ウィンドウの削除とリサイズ | ウィンドウの削除とサイズ変更。 | |
20.6 ウィンドウでのバッファーの表示 | Emacsがバッファーを表示するためにウィンドウを選択する方法。 | |
20.6.2 編集不可バッファーの表示 | ||
20.7 ウィンドウ処理のための便利な機能 | ウィンドウ処理の便利な機能。 | |
20.8 ウィンドウのタブライン | ウィンドウタブライン | |
ウィンドウでのバッファーの表示 | ||
20.6.1 display-buffer が機能する方法 | ||
フレームとグラフィカルなディスプレー | ||
21.1 編集のためのマウスコマンド | マウスによる移動、切り取り、貼り付け。 | |
21.2 単語と行にたいするマウスコマンド | 単語または行全体を選択するマウスコマンド。 | |
21.3 マウスで参照をフォローする | リストからアイテムを選択するのにマウスを使う。 | |
21.4 メニューにたいするマウスクリック | メニューを表示させるマウスクリック。 | |
21.5 モードラインのマウスコマンド | モードライン上でのマウスクリック。 | |
21.6 フレームの作成 | さまざまな内容とともに追加のEmacsフレームを作成する。 | |
21.7 フレームコマンド | フレームのアイコン化とフレームの切り替え。 | |
21.8 フォント | フレームフォントの変更。 | |
21.9 スピードバーフレーム | スピードバーフレームの作り方と使い方。 | |
21.10 複数ディスプレー | 1つのEmacsインスタンスが複数ディスプレーと通信する方法。 | |
21.11 フレームパラメーター | フレームのカラーや他のモードの変更。 | |
21.12 スクロールバー | スクロールバーの有効と無効、および使い方。 | |
21.13 ウィンドウdivider | マウスでドラッグできるウィンドウセパレーター。 | |
21.14 ドラッグアンドドロップ | ファイルを開いたりテキストを挿入するのにドラッグアンドドロップを使う。 | |
21.15 メニューバー | メニューバーの有効と無効。 | |
21.16 ツールバー | ツールバーの有効と無効。 | |
21.17 タブバー | タブバーの有効と無効。 | |
21.18 ダイアログボックスの使用 | ダイアログボックス使用の制御。 | |
21.19 ツールチップ | マウスの現在位置の情報の表示。 | |
21.20 マウスの回避 | マウスポインターがテキストを隠すのを防ぐ。 | |
21.21 非ウィンドウ端末 | フレームを1つだけ表示する端末での複数フレーム。 | |
21.22 テキスト端末でのマウスの使用 | テキスト端末でのマウスの使用について。 | |
国際化文字セットのサポート | ||
22.1 国際化文字セットのイントロダクション | マルチバイト文字の基本的な概念。 | |
22.2 言語環境 | 使用する言語のためのセットアップ事項。 | |
22.3 インプットメソッド | キーボードにないテキスト文字の入力。 | |
22.4 インプットメソッドの選択 | インプットメソッド選択を指定する。 | |
22.5 コーディングシステム | ファイルを読み書きしたりするときの文字セット変換。 | |
22.6 コーディングシステムの認識 | どの変換を使用するかをEmacsが解決する方法。 | |
22.7 ファイルのコーディングシステムの指定 | ファイルのコーディングシステムの明示的な指定。 | |
22.8 出力のためのコーディングシステムの選択 | 出力のためのコーディングシステムの選択について。 | |
22.9 ファイルのテキストにたいするコーディングシステムの指定 | ファイルのテキストに使う変換の選択。 | |
22.10 プロセス間通信にたいするコーディングシステム | プロセス間通信のためのコーディングシステム。 | |
22.11 ファイル名にたいするコーディングシステム | ファイル名のコーディングシステム。 | |
22.12 端末入出力にたいするコーディングシステム | 端末の入出力の変換のためのコーディングシステムの指定。 | |
22.13 フォントセット | フォントセット、それは文字の全範囲をカバーするフォントのコレクション。 | |
22.14 フォントセットの定義 | 新しいフォントセットの定義。 | |
22.15 フォントセットの修正 | 既存のフォントセットの修正。 | |
22.16 表示できない文字 | 文字が表示されないとき。 | |
22.17 Unibyte編集モード | マルチバイト文字を使わずに1つの英文字セットを選択する。 | |
22.18 文字セット | Emacsが内部の文字コードをグループ化する方法。 | |
22.19 双方向の編集 | 右から左に記述する言語のサポート。 | |
メジャーモードとマイナーモード | ||
23.1 メジャーモード | Textモード vs. Lispモード vs. Cモード... | |
23.2 マイナーモード | マイナーモードは他と独立して有効にできる機能です。 | |
23.3 ファイルのモードを選択する | ファイルをvisitしたときにモードが選択される方法。 | |
Indentation | ||
24.1 インデントコマンド | インデントを処理するほかのコマンド。 | |
24.2 タブストップ | Textモードのインデントのストップポイント。 | |
24.3 タブ vs. スペース | インデントにスペース文字だけを使用する。 | |
24.4 インデントの便利な機能 | インデントのオプション機能。 | |
人間の言語にたいするコマンド | ||
25.1 単語 | 単語単位の移動とkill。 | |
25.2 センテンス | センテンス単位の移動とkill。 | |
25.3 パラグラフ | パラグラフ単位の移動。 | |
25.4 ページ | ページ単位の移動。 | |
25.5 クォーテーションマーク | クォーテーションマークの挿入。 | |
25.6 テキストのフィル | テキストのフィルと調整。 | |
25.7 大文字小文字変換コマンド | テキストの大文字小文字の変更。 | |
25.8 Textモード | テキストファイルを編集するためのメジャーモード。 | |
25.9 Outlineモード | アウトラインの編集。 | |
25.10 Orgモード | Emacsオーガナイザー。 | |
25.11 TeXモード | TeXおよびLaTeXファイルの編集。 | |
25.12 SGMLモードとHTMLモード | HTMLおよびSGMLファイルの編集。 | |
25.13 Nroffモード | nroffフォーマッターへの入力の編集。 | |
25.14 Enrichedテキスト | フォント、カラーなどでenrichedテキストを編集する。 | |
25.15 テキストベーステーブルの編集 | テキストベースのテーブルを編集するためのコマンド。 | |
25.16 2列編集 | テキスト列を分割して別のウィンドウに表示する。 | |
テキストのフィル | ||
25.6.1 Auto Fillモード | Auto Fillモードは長い行を自動的に分割します。 | |
25.6.2 明示的なフィルコマンド | パラグラフの再フィルと行の中央揃えコマンド。 | |
25.6.3 フィルプレフィクス | インデントされていたり、コメントであるパラグラフのフィル。 | |
25.6.4 適応型フィル | Emacsがフィルプレフィクスを自動的に決定する方法。 | |
Outline Mode | ||
25.9.1 アウトラインのフォーマット | アウトラインのテキストがどのように見えるか。 | |
25.9.2 アウトライン移動コマンド | アウトラインを移動するための特別なコマンド。 | |
25.9.3 アウトライン表示コマンド | なにを表示するか制御するコマンド。 | |
25.9.4 複数ビューによるアウトラインの閲覧 | アウトラインと複数ビュー。 | |
25.9.5 折り畳み編集 | アウトラインをズームする折り畳み。 | |
Org Mode | ||
25.10.1 オーガナイザーとしてのOrg | TODOリストとアジェンダの管理。 | |
25.10.2 オーサリングシステムとしてのOrg | Orgバッファーをさまざまなフォーマットでエクスポートする。 | |
TeXモード | ||
25.11.1 TeX編集コマンド | TeXモードで編集するための特別なコマンド。 | |
25.11.2 LaTeX編集コマンド | LaTeX入力ファイルのための追加のコマンド。 | |
25.11.3 TeX印刷コマンド | ファイルの一部をTeXで印刷するコマンド。 | |
25.11.4 TeXモード、その | TeXモードのカスタマイズと関連する機能。 | |
Enriched Text | ||
25.14.1 Enrichedモード | Enrichedモードの開始と終了。 | |
25.14.2 ハード改行とソフト改行 | 改行には2つの種類があります。 | |
25.14.3 フォーマット情報の編集 | テキストプロパティーの編集方法。 | |
25.14.4 Enrichedテキストのフェイス | 太字、斜体、下線、など。 | |
25.14.5 Enrichedテキストのインデント | 左余白と右余白の変更。 | |
25.14.6 Enrichedテキストの位置調整 | テキストの中央揃え、左揃え、右揃え、など。 | |
25.14.7 その他のテキストプロパティーのセッティング | 特別な“テキストプロパティー”サブメニュー。 | |
テキストベースの表の編集 | ||
25.15.1 テキストベーステーブルとは? | テキストベースのテーブルとは何か。 | |
25.15.2 テーブルの作成 | テーブルを作成する方法。 | |
25.15.3 テーブルの認識 | テーブルをアクティブまたは非アクティブにする方法。 | |
25.15.4 テーブルセルにたいするコマンド | テーブルのセル指向のコマンド。 | |
25.15.5 セルの位置調整 | セル内容の位置調整。 | |
25.15.6 テーブルの行と列 | 行と列の追加と削除。 | |
25.15.7 プレーンテキストとテーブルの変換 | プレーンテキストとテーブルの変換について。 | |
25.15.8 テーブル、その他 | ||
プログラムの編集 | ||
26.1 プログラミング言語のためのメジャーモード | プログラムを編集するためのメジャーモード。 | |
26.2 トップレベルの定義、またはdefun | プログラムの主要なトップレベル要素を操作するためのコマンド。 | |
26.3 プログラムのインデント | ネスティングを示すためのインデントの調整。 | |
26.4 カッコに付随する編集のためのコマンド | カッコを操作するコマンド。 | |
26.5 コメントの操作 | コメントの挿入、kill、位置揃え。 | |
26.6 ドキュメントの照会 | 関数ドキュメントの取得。 | |
26.7 Hideshowマイナーモード | ブロックの選択的な表示。 | |
26.8 シンボル名の補完 | プログラムまたは言語でのシンボルの補完。 | |
26.9 大文字小文字の混ざった単語 | identifiersLikeThisのような識別子の処理。 | |
26.10 Semanticとは | ソースコードのパースにもとづいた編集ツール。 | |
26.11 プログラムを編集するための他の便利な機能 | その他、プログラムを編集するための便利なEmacs機能。 | |
26.12 Cおよび関連するモード | C、C++、Objective-C、Java、IDL、Pike、AWKモードの特別なコマンド。 | |
26.13 Asmモード | Asmモードと特別な機能。 | |
26.14 Fortranモード | Fortranモードと特別な機能。 | |
トップレベルの定義とdefun | ||
26.2.1 左端の慣習 | 開きカッコまたは同様の開始を意味する区切りは、それが左端にある場合はdefunの開始です。 | |
26.2.2 defunの移動 | 主要な定義を移動したりマークするコマンド。 | |
26.2.3 Imenuとは | バッファーのインデックスをメニューにする。 | |
26.2.4 Which Functionモード | Which Functionモードはどの関数にいるか表示します。 | |
プログラムのインデント | ||
26.3.1 プログラムの基本的なインデントコマンド | 1行のインデント。 | |
26.3.2 複数行のインデント | 複数行を1度に再インデントするコマンド。 | |
26.3.3 Lispのインデントのカスタマイズ | Lisp関数がどのようにインデントされるべきか指定する。 | |
26.3.4 Cのインデントのためのコマンド | Cおよび関連するモードのインデントのための追加機能。 | |
26.3.5 Cのインデントのカスタマイズ | Cおよび関連するモードのインデントスタイルの制御。 | |
カッコの編集にたいするコマンド | ||
26.4.1 対応が取れたカッコの式 | ||
26.4.2 カッコ構造の移動 | カッコ構造を上、下、横断して移動するコマンド。 | |
26.4.3 マッチするカッコ | 終了区切りの挿入による、マッチする開始区切りのフラッシュ表示。 | |
コメントの操作 | ||
26.5.1 コメントコマンド | コメントの挿入、kill、位置揃え。 | |
26.5.2 複数行のコメント | 複数行のコメントを追加・編集するコマンド。 | |
26.5.3 コメントを制御するオプション | コメント機能のカスタマイズ。 | |
ドキュメントのルックアップ | ||
26.6.1 Infoドキュメントの照会 | Infoファイルからライブラリー関数やコマンドを探す。 | |
26.6.2 man-pageの照会 | manからライブラリー関数やコマンドを探す。 | |
26.6.3 Emacs Lispドキュメントの照会 | Emacs関数を探す、その他。 | |
Cモードと関連するモード | ||
26.12.1 Cモードの移動コマンド | Cステートメント単位での移動、その他。 | |
26.12.2 エレクトリックC文字 | コロンおよび他の文字による、自動的な再インデント。 | |
26.12.3 Cの欲張りな削除機能 | より強力なDELコマンド。 | |
26.12.4 Cモードのその他のコマンド | コメントのフィル、マクロ展開の閲覧、その他のクールな機能。 | |
Fortranモード | ||
26.14.1 移動コマンド | 命令文またはサブプログラムごとにポイントを移動する。 | |
26.14.2 Fortranのインデント | Fortranのためのインデントコマンド。 | |
26.14.3 Fortranのコメント | コメントの挿入と位置揃え。 | |
26.14.4 FortranモードでのAuto Fill | FortranをサポートするAuto Fill。 | |
26.14.5 Fortranでの列のチェック | 有効なFortranのための列の計算。 | |
26.14.6 FortranキーワードのAbbrev | Fortranキーワードのためのビルトインのabbrevs。 | |
Fortranのインデント | ||
26.14.2.1 Fortranのインデントおよびフィルコマンド | Fortranをインデントおよびフィルするコマンド。 | |
26.14.2.2 継続行 | 継続行がインデントされる方法。 | |
26.14.2.3 行番号 | 行番号が自動インデントされる方法。 | |
26.14.2.4 構文的な慣習 | トラブル防止のためにしたがわなければならない慣習。 | |
26.14.2.5 Fortranのインデントのための変数 | Fortranのインデントスタイルを制御する変数。 | |
プログラムのコンパイルとテスト | ||
27.1 Emacs下でのコンパイルの実行 | Lisp以外の言語(C、Pascal、など)のプログラムのコンパイル。 | |
27.2 Compilationモード | コンパイラーのエラーをvisitするモード。 | |
27.3 コンパイルのためのサブシェル | compilationバッファーで使えるように、シェルを適切にカスタマイズする。 | |
27.4 Emacs下でのGrepによる検索 | grepによる検索。 | |
27.5 オンザフライで構文エラーを見つける | オンザフライでの構文エラーの検索。 | |
27.6 Emacs下でのデバッガーの実行 | 非Lispプログラムのための、シンボルデバッガーの実行。 | |
27.7 Lisp式の実行 | Lispプログラムを編集するためのさまざまなモードと、Lispプログラムを実行する異なる機能。 | |
27.8 EmacsのためのLispコードによるライブラリー | LispプログラムがEmacsにロードされる方法。 | |
27.9 Emacs Lisp式の評価 | Emacsで1つのLisp式を実行する。 | |
27.10 Lisp Interactionバッファー | EmacsバッファーでLispを実行する。 | |
27.11 外部Lispの実行 | Emacsを通じて別のLispと通信する。 | |
Emacsの下でデバッガーを実行する | ||
27.6.1 GUDの開始 | デバッガーサブプロセスを開始する方法。 | |
27.6.2 デバッガーの操作 | デバッガーとソースバッファーの関係。 | |
27.6.3 GUDのコマンド | 一般的なコマンドのキーバインディング。 | |
27.6.4 GUDのカスタマイズ | GUDにたいして独自のコマンドを定義する。 | |
27.6.5 GDBのグラフィカルインターフェース | GDB機能を使用して、グラフィカルなデバッグ環境を実装する拡張モード。 | |
GDB Graphical Interface | ||
27.6.5.1 GDBのユーザーインターフェースのレイアウト | 複数表示されたバッファーの制御。 | |
27.6.5.2 Sourceバッファー | プログラムを制御するためにフリンジ・余白でマウスを使う。 | |
27.6.5.3 Breakpointsバッファー | ブレークポイントのコントロールパネル。 | |
27.6.5.4 Threadsバッファー | スレッドの表示。 | |
27.6.5.5 Stackバッファー | callスタックからのフレームの選択。 | |
27.6.5.6 その他のGDBバッファー | GDBの状態を制御するその他のバッファー。 | |
27.6.5.7 ウォッチ式 | speedbarで変数の値をモニターする。 | |
27.6.5.8 マルチスレッドのデバッグ | 複数スレッドのプログラムのデバッグ。 | |
大きなプログラムの保守 | ||
28.1 バージョンコントロール | バージョンコントロールシステムの使用。 | |
28.2 プロジェクトで作業する | プロジェクト内のソースファイルを処理するコマンド。 | |
28.3 変更ログ | プログラムの変更履歴をメンテナンスする。 | |
28.4 識別子のリファレンスを探す | プログラムの中の関数、メソッド、構造体、マクロ、...の定義と参照を探す。 | |
28.5 Emacs開発環境 | Emacsのための統合開発環境。 | |
28.6 Emergeでのファイルのマージ | 2つのバージョンのプログラムをマージする便利な方法。 | |
Version Control | ||
28.1.1 バージョンコントロールの紹介 | バージョンコントロールが機能する一般的な方法。 | |
28.1.2 バージョンコントロールとモードライン | モードラインがバージョンコントロールの状態を表示する方法。 | |
28.1.3 バージョンコントロール下での基本的な編集 | バージョンコントロール下のファイルの編集方法。 | |
28.1.4 Log Entryバッファーの機能 | logエントリーバッファーで利用可能な機能。 | |
28.1.5 バージョンコントロールへのファイルの登録 | バージョンコントロール下にファイルを置く。 | |
28.1.6 古いリビジョンの調査と比較 | 古いバージョンの調査と比較。 | |
28.1.7 VC Change Log | VC Change Logの閲覧。 | |
28.1.8 バージョンコントロール操作のアンドゥ | コミット前後の変更の取り消し。 | |
28.1.9 バージョンコントロールファイルを無視する | バージョンコントロール下のファイルの無視。 | |
28.1.10 VC Directoryモード | バージョンコントロールで管理されたファイルの一覧。 | |
28.1.11 バージョンコントロールのブランチ | 開発における複数行。 | |
28.1.12 VCのその他のコマンドと機能 | その他のVCのさまざまなコマンドと機能。 | |
28.1.13 VCのカスタマイズ | VCの動作を変更する変数。 | |
バージョンコントロールの紹介 | ||
28.1.1.1 問題の背景を理解する | 問題が示すところを理解するには。 | |
28.1.1.2 サポートされるバージョンコントロールシステム | バックエンドシステムとしてサポートされるバージョンコントロール。 | |
28.1.1.3 バージョンコントロールの概念 | バージョンコントロールに関連する単語と概念。 | |
28.1.1.4 バージョンコントロールにおけるマージベースとロックベース | ファイルの衝突を処理する方法。 | |
28.1.1.5 バージョンコントロールに置ける変更セットベースとファイルベース | 変更がグループ化される方法。 | |
28.1.1.6 リポジトリーにおける分散型と集中型 | バージョンコントロールのリポジトリーが格納される場所。 | |
28.1.1.7 ログファイルのタイプ | VCS logとChangeLogの違い。 | |
バージョンコントロール下での基本的な編集 | ||
28.1.3.1 マージでの基本的なバージョンコントロール | ロックしない: CVSのデフォルトモード。 | |
28.1.3.2 ロックでの基本的なバージョンコントロール | RCSのデフォルトモード、SCCS、オプションでCVS。 | |
28.1.3.3 C-x v vの高度な制御 | プレフィクス引数で利用可能な上級機能。 | |
VC Directory Mode | ||
28.1.10.1 VC Directoryバッファー | バッファーの外観と意味。 | |
28.1.10.2 VC Directoryコマンド | VC directoryバッファーで使用するコマンド。 | |
ブランチのバージョンコントロール | ||
28.1.11.1 ブランチ間の切り替え | 既存のブランチを取得する方法。 | |
28.1.11.2 ブランチへ/からの変更のpull/push | 別の場所から変更を受け取る、別の場所に変更を送る。 | |
28.1.11.3 ブランチのマージ | ブランチ間での変更の転送。 | |
28.1.11.4 新しいブランチの作成 | 新しいブランチを開始する方法。 | |
VCのその他の機能とコマンド | ||
28.1.12.1 変更ログとVC | logエントリーからChangeLogファイルを生成する。 | |
28.1.12.2 バージョンコントロールされたファイルの削除とリネーム | バージョンコントロールされたファイルの削除とリネームとは | |
28.1.12.3 リビジョンタグ | リビジョンにたいするシンボリック名。 | |
28.1.12.4 バージョンコントロールヘッダーの挿入 | 作業ファイルへのバージョンコントロールヘッダーの挿入。 | |
VCのカスタマイズ | ||
28.1.13.1 一般的なオプション | 複数のバックエンドに適用されるオプション。 | |
28.1.13.2 RCSとSCCSにたいするオプション | RCSとSCCSのためのオプションについて。 | |
28.1.13.3 CVSに特有のオプション | CVSにたいするオプションについて。 | |
変更ログ(ChangeLog) | ||
28.3.1 変更ログコマンド | 変更ログファイルを編集するためのコマンド。 | |
28.3.2 ChangeLogの書式 | 変更ログファイルがどのように見えるか。 | |
Xref | ||
28.4.1 識別子を探す | 識別子をリストする等のために、識別子が定義(または参照)されている場所を探すコマンド。 | |
28.4.2 tagsテーブル | シンボルがどのファイルで定義されているかを記録するTagsテーブル。 | |
28.4.3 タグテーブルの選択 | 特定のタグテーブルをvisitする方法。 | |
Find Identifiers | ||
28.4.1.1 識別子の照合 | 特定のタグの定義を見つけるコマンド。 | |
28.4.1.2 *xref*バッファーで利用可能なコマンド | *xref*バッファーでのコマンド。 | |
28.4.1.3 識別子の検索と置換 | 検索と置換 | |
28.4.1.4 識別子の照会 | 識別子をリストして<、それらから補完する。 | |
Tags Tables | ||
28.4.2.1 ソースファイルタグの構文 | さまざまなタイプのコードおよびテキストファイルにたいするタグ構文。 | |
28.4.2.2 タグテーブルの作成 | etags によるタグテーブルの作成。
| |
28.4.2.3 etagsのregexp | 正規表現を使用した任意タグの作成。 | |
Emergeでのファイルのマージ | ||
28.6.1 Emergeの概要 | Emergeを開始する方法と基本的な概念。 | |
28.6.2 Emergeのサブモード | Fastモード vs. Editモード。Skip PrefersモードとAuto Advanceモード。 | |
28.6.3 相違の状態 | 各相違にたいしてAまたはBの状態を指定することによりマージを行う。 | |
28.6.4 マージコマンド | 相違を選択したり相違の状態を変更するコマンドなど。 | |
28.6.5 Emergeの終了 | マージを終えた後に行うこと。 | |
28.6.6 2つのバージョンの合成 | 相違にたいする両方の候補を維持する方法。 | |
28.6.7 Emergeの細かい注意点 | その他の問題。 | |
Abbrevs | ||
29.1 abbrevの概念 | 定義されたabbrevの基本。 | |
29.2 abbrevの定義 | abbrevを定義することにより、タイプしたとき展開されるようになります。 | |
29.3 abbrev展開の制御 | 展開の制御 — プレフィクス、展開の取り消し。 | |
29.4 abbrevのテストと編集 | 定義されたabbrevのリスト全体の閲覧と編集。 | |
29.5 abbrevの保存 | 他のセッションのためにabbrevのリスト全体を保存する。 | |
29.6 動的abbrev展開 | すでにバッファーにある単語にたいする略語。 | |
29.7 動的abbrevのカスタマイズ | 動的abbrevのための単語とは何か。ケースごとの処理。 | |
ピクチャーの編集 | ||
42.1 Pictureモードでの基本的な編集 | Pictureモードの基本概念と簡単なコマンド。 | |
42.2 挿入後の移動の制御 | 自己挿入文字の後のカーソル移動方向の制御。 | |
42.3 Pictureモードでのタブ | タブストップとインデントにたいするさまざまな機能。 | |
42.4 Pictureモードの矩形領域コマンド | 矩形領域のクリアーと重ね合わせ。 | |
ディレクトリーエディターDired | ||
30.1 Diredの起動 | Diredの呼び出し方。 | |
30.2 Diredバッファーでの移動 | Diredバッファーでの特別な移動コマンド。 | |
30.3 Diredでのファイルの削除について | Diredでのファイルの削除。 | |
30.4 大量のファイルに一度にフラグをつける | ファイル名にもとづくファイルへのフラグ付け。 | |
30.5 Diredのファイルをvisitする | Diredによるその他のファイル操作。 | |
30.6 Diredでのマークとフラグ | 削除のためのフラグとマーク。 | |
30.7 ファイルにたいする操作 | 1つまたは複数ファイルにたいするコピー、リネーム、プリント、圧縮など。 | |
30.8 Diredでのシェルコマンド | マークしたファイルにたいするシェルコマンドの実行。 | |
30.9 Diredでのファイル名の変更 | 複数ファイルのリネームにパターンを使う。 | |
30.10 Diredでのファイル比較 | Diredの様式でdiff を実行する。
| |
30.11 Diredでのサブディレクトリー | Diredバッファーにたいするサブディレクトリーの追加。 | |
30.12 Diredでのサブディレクトリーにたいするスイッチ | Diredでのサブディレクトリーのスイッチ。 | |
30.13 サブディレクトリー間の移動 | サブディレクトリー間の移動、上下への移動。 | |
30.14 サブディレクトリーを隠す | サブディレクトリーの表示・非表示。 | |
30.15 Diredバッファーの更新 | 重要でないファイル行の削除。 | |
30.16 Diredとfind | Diredでファイルを選択するためにfind を使う。
| |
30.17 Diredバッファーの編集 | Diredバッファーの編集によりファイルを操作する。 | |
30.18 Diredでのイメージとサムネイルの閲覧 | Diredでのイメージサムネイルの閲覧。 | |
30.19 その他のDiredの機能 | その他のさまざまな機能。 | |
カレンダーとダイアリー | ||
31.1 カレンダーでの移動 | カレンダー内の移動、日付の選択。 | |
31.2 カレンダーでのスクロール | 過去または将来の月をスクリーンに表示する。 | |
31.3 日付のカウント | 2つの日付の間の日数は? | |
31.4 その他のカレンダーコマンド | カレンダーの終了と再計算。 | |
31.5 カレンダーファイルの記述 | さまざまなフォーマットで、カレンダーをファイルに書き込む。 | |
31.6 休日 | 休日の日付を表示する。 | |
31.7 日の出と日の入りの時刻 | 日の出と日の入りの時間を地方時間で表示する。 | |
31.8 月の位相 | 月の位相の表示。 | |
31.9 他のカレンダーとの間の変換 | 他のカレンダーシステムへの日付の変換。 | |
31.10 ダイアリー | ダイアリーからイベントを表示する。 | |
31.11 サマータイム | 夏時間がアクティブな期間を指定する方法。 | |
31.12 時間間隔の加算 | 時間間隔の追跡。 | |
31.13 カレンダーとダイアリーの上級な機能 | カレンダーとダイアリーの上級のカスタマイズ。 | |
カレンダー内での移動 | ||
31.1.1 標準的な時間間隔での移動 | 日、週、月、年単位での移動。 | |
31.1.2 週、月、年の開始と終了 | 週、月、年の開始と終了への移動。 | |
31.1.3 日付の指定 | 今日の日付や、特定の日付への移動。 | |
他のカレンダーへ/からの変換 | ||
31.9.1 サポートされるカレンダーシステム | (グレゴリオ歴以外の)Emacsが理解するカレンダー。 | |
31.9.2 他のカレンダーへの変換 | 選択された日付をさまざまなカレンダーに変換する。 | |
31.9.3 他のカレンダーからの変換 | 他のカレンダーで指定された日付に移動する。 | |
ダイアリー | ||
31.10.1 ダイアリーファイル | ダイアリーにイベントを入力する。 | |
31.10.2 ダイアリーの表示 | ダイアリーのエントリーと、それに関連するカレンダーの日付を閲覧する。 | |
31.10.3 日付のフォーマット | 日付を指定するさまざまな方法。 | |
31.10.4 ダイアリーに追加するコマンド | ダイアリーのエントリーを作成するコマンド。 | |
31.10.5 特別なダイアリーエントリー | 記念日、日付ブロック、周期的なエントリーなど。 | |
31.10.6 アポイントメント | 何かを行なう時刻のためのリマインダー。 | |
31.10.7 ダイアリーエントリーのインポートとエクスポート | ダイアリーのイベントと他のフォーマットの変換。 | |
カレンダーとダイアリーのさらに上級の機能 | ||
31.13.1 カレンダーのカスタマイズ | カレンダーのレイアウトとフック。 | |
31.13.2 休日のカスタマイズ | 独自の休日を定義する。 | |
31.13.3 マヤ暦からの変換 | マヤ暦で指定された日付への移動。 | |
31.13.4 日付の表示フォーマット | フォーマットの変更。 | |
31.13.5 時刻の表示フォーマット | フォーマットの変更。 | |
31.13.6 ダイアリーのカスタマイズ | セットできるデフォルト。 | |
31.13.7 非グレゴリオ暦を使用するカレンダーエントリー | 他のカレンダーにもとづくダイアリーエントリー。 | |
31.13.8 ダイアリーの表示 | ダイアリーを表示する方法の選択。 | |
31.13.9 Fancy Diary表示 | インクルードされたダイアリーファイルを使ったダイアリーエントリーのソート。 | |
31.13.10 sexpエントリーとFancy Diary表示 | より柔軟なダイアリーエントリー。 | |
Sending Mail | ||
32.1 メールバッファーのフォーマット | メールメッセージのフォーマット。 | |
32.2 メールヘッダーフィールド | いくつかの標準的なメールヘッダーフィールドの詳細。 | |
32.3 メールエイリアス | メールアドレスの短縮とグループ化。 | |
32.4 メールコマンド | 作成するメールを編集するための特別なコマンド。 | |
32.5 メール署名 | 各メッセージに署名を追加する。 | |
32.6 アミューズメント | NSAを混乱させるキーワードや、fortuneのメッセージを累加する。 | |
32.7 メール作成方法 | 他のメール作成方法を使用する。 | |
Mail Commands | ||
32.4.1 メールの送信 | メッセージを送信するコマンド。 | |
32.4.2 メールヘッダーの編集 | ヘッダーフィールドに移動して編集するコマンド。 | |
32.4.3 メールの引用 | 返信するメッセージのクォート。 | |
32.4.4 メール、その他 | ファイル添付、スペルチェックなど。 | |
Rmailでメールを読む | ||
33.1 Rmailの基本的な概念 | Rmailの基本的な概念と簡単な使い方。 | |
33.2 メッセージのスクロール | メッセージをスクロールする。 | |
33.3 メッセージ間の移動 | 他のメッセージへの移動。 | |
33.4 メッセージの削除 | メッセージの削除と完全な削除。 | |
33.5 Rmailファイルとinbox | メールがRmailファイルに取り込まれる方法。 | |
33.6 複数のRmailファイル | 複数のRmailファイルの使用。 | |
33.7 外部ファイルへのメッセージのコピー | メッセージを外部ファイルにコピーする。 | |
33.8 ラベル | メッセージにラベルをつけて分類する。 | |
33.9 Rmailの属性 | 属性と呼ばれる標準的なラベル。 | |
33.10 返信の送信 | 閲覧しているメッセージにたいして返信する。 | |
33.11 サマリー | 多くのメッセージの簡単な情報の要約。 | |
33.12 Rmailファイルのソート | Rmailでのメッセージのソート。 | |
33.13 メッセージの表示 | Rmailがメッセージを表示する方法とカスタマイズ。 | |
33.14 Rmailとコーディングシステム | Rmailがデコードされた文字セットを扱う方法。 | |
33.15 メッセージの編集 | Rmailでのメッセージのテキストとヘッダーの編集。 | |
33.16 ダイジェストメッセージ | メッセージのダイジェストからメッセージを抽出する。 | |
33.17 Rot13メッセージを読む | rot13コードでエンコードされたメッセージの閲覧。 | |
33.18 movemail program | 新たなメールのフェッチに関する詳細。 | |
33.19 リモートmailboxからのメールの取得 | リモートmailboxからのメールの取得について。 | |
33.20 さまざまな形式のローカルmailboxからのメールの取得 | さまざまなフォーマットのローカルmailboxからのメールの取得。 | |
Rmailのサマリー | ||
33.11.1 サマリーの作成 | さまざまな種類のサマリーの作成。 | |
33.11.2 サマリーでの編集 | サマリーからのメッセージの操作。 | |
Gnus | ||
34.1 Gnusバッファー | グループ、サマリー、アーティクルバッファー。 | |
34.2 Gnusを起動したとき | Gnusの開始するにあたって知っておくべきこと。 | |
34.3 Gnus Groupバッファーの使用 | Gnusグループコマンドの短い説明。 | |
34.4 Gnus Summaryバッファーの使用 | Gnusサマリーコマンドの短い説明。 | |
ドキュメントの閲覧 | ||
37.1 DocViewの操作 | DocViewバッファーの操作。 | |
37.2 DocViewの検索 | ドキュメント内の検索。 | |
37.3 DocViewのスライス | ページのどの部分を表示するか指定する。 | |
37.4 DocViewの変換 | 変換に影響を与えたり、それを誘発するもの。 | |
Emacsからシェルコマンドを実行する | ||
38.1 単一のシェルコマンド | シェルコマンドを実行してから、戻る方法。 | |
38.2 対話的なサブシェル | Emacsを通じて入力を行なう永続的なシェル。 | |
38.3 Shellモード | 永続的なシェルで使用される特別なEmacsコマンド。 | |
38.4 Shellプロンプト | シェルプロンプトを認識する2つの方法。 | |
38.5 Shellコマンドヒストリー | シェルバッファーで前のコマンドを繰り返す。 | |
38.6 ディレクトリーの追跡 | サブシェルでのディレクトリーの変更の追跡。 | |
38.7 Shellモードのオプション | Shellモードをカスタマイズするオプション。 | |
38.8 Emacsの端末エミュレーター | 端末エミュレーターとしてのEmacsウィンドウ。 | |
38.9 Termモード | Termモードで使用される特別なEmacsコマンド。 | |
38.10 リモートホストのシェル | 他のコンピューターへの接続。 | |
38.11 シリアル端末 | シリアルポートへの接続。 | |
シェルコマンドヒストリー | ||
38.5.1 Shellヒストリーリング | ヒストリーリストからコマンドを取り出す。 | |
38.5.2 Shellヒストリーのコピー | コマンドに移動してそれをコピーする。 | |
38.5.3 Shellヒストリーの参照 | ‘!’スタイルのヒストリー参照の展開。 | |
サーバーとしてのEmacsの使用 | ||
39.1 TCP Emacs server | TCPソケットのlisten。 | |
39.2 emacsclient の呼び出し | Emacsサーバーへの接続。 | |
39.3 emacsclient のオプション | Emacsクライアントの開始オプション。 | |
ハードコピーの印刷 | ||
40.1 PostScriptのハードコピー | バッファーまたはリージョンを、PostScriptとして印刷する。 | |
40.2 PostScriptハードコピーにたいする変数 | PostScript印刷コマンドのカスタマイズ。 | |
40.3 印刷のためのパッケージ | オプションの上級向け印刷インターフェース。 | |
ハイパーリンクとナビゲーション機能 | ||
46.1 EWWによるウェブブラウズ | Emacsのウェブブラウザー。 | |
46.2 埋め込みWebKitウィジェット | EmacsバッファーでLispを実行する。 | |
46.3 URLのフォロー | URLをフォローするには。 | |
46.4 URLのアクティブ化 | URLのアクティブ化について。 | |
46.5 ポイント位置のファイルやURLを開く | ポイント位置のファイルを探す、など。 | |
Emacs Lispパッケージ | ||
48.1 Package Menuバッファー | パッケージを閲覧・管理するためのバッファー。 | |
48.2 パッケージのステータス | パッケージが保有できるステータス。 | |
48.3 パッケージのインストール | パッケージのインストールにたいするオプション。 | |
48.4 パッケージのファイルとディレクトリー | パッケージがインストールされる場所。 | |
Customization | ||
49.1 Easy Customizationインターフェース | 設定を閲覧したり変更する便利な方法。 | |
49.2 変数 | 多くのEmacsコマンドは何を行なうか決定するためにEmacs変数を調べるので、変数をセットすることによりこれらの機能を制御できます。 | |
49.3 キーバインディングのカスタマイズ | keymapsは各キーがどのコマンドを実行するか指定します。これらを変更することによりキーを再定義できます。 | |
49.4 Emacs初期化ファイル | 初期化ファイルで一般的なカスタマイズを記述する方法。 | |
49.5 永続的に認証情報を保つ | ||
Easy Customizationインターフェース | ||
49.1.1 カスタマイズグループ | セッティングがクラス化される方法。 | |
49.1.2 セッティングのブラウズと検索 | セッティングのブラウズとサーチ。 | |
49.1.3 変数の変更 | オプション値の編集、およびオプションをセットする方法。 | |
49.1.4 カスタマイズの保存 | 将来のEmacsセッションのためにカスタマイズを保存する。 | |
49.1.5 フェイスのカスタマイズ | フェイスの属性を編集する方法。 | |
49.1.6 特定のアイテムのカスタマイズ | グループの特定のセッティングのカスタマイズ。 | |
49.1.7 カスタムテーマ | カスタマイズセッティングのコレクション。 | |
49.1.8 カスタムテーマの作成 | 新しいカスタムテーマを作成する方法。 | |
Variables | ||
49.2.1 変数の確認とセット | 変数の値の検証とセッティング。 | |
49.2.2 フック | フック変数によりEmacsの一部にたいして特定の機会に実行するプログラムを指定できます。 | |
49.2.3 ローカル変数 | 変数のバッファーごとの値。 | |
49.2.4 ファイル内のローカル変数 | ファイルが変数の値を指定する方法。 | |
49.2.5 ディレクトリーごとのローカル変数 | ディレクトリーにより変数の値を指定する方法。 | |
49.2.6 ▼接続ごとのローカル変数 | リモートのデフォルトディレクトリーをもつバッファーに有効な変数。 | |
ファイル内のローカル変数 | ||
49.2.4.1 ファイル変数の指定 | ファイルローカル変数の指定。 | |
49.2.4.2 安全なファイル変数 | ファイルローカル変数が安全であることを確認する。 | |
キーバインドのカスタマイズ | ||
49.3.1 キーマップ | 一般的な考え方。グローバルキーマップ。 | |
49.3.2 プレフィクスキーマップ | プレフィクスキーにたいするキーマップ。 | |
49.3.3 ローカルキーマップ | キーマップをもつメジャーモードとマイナーモード。 | |
49.3.4 ミニバッファーキーマップ | ミニバッファーが使用する独自のキーマップ。 | |
49.3.5 対話的なキーバインディングの変更 | あるキーの意味を再定義する便利な方法。 | |
49.3.6 initファイル内でのキーのリバインド | 初期化ファイルでのキーのリバインド。 | |
49.3.7 修飾キー | キーバインドでの修飾キーの使用。 | |
49.3.8 ファンクションキーのリバインド | 端末のファンクションキーのリバインド。 | |
49.3.9 名前のあるASCIIコントロール文字 | TABとC-iなどを区別する方法。 | |
49.3.10 マウスボタンのリバインド | Emacsでのマウスボタンのリバインド。 | |
49.3.11 コマンドの無効化 | コマンドを無効にするとは、それを実行できるようにする前に確認が要求されることを意味します。これはビギナーを戸惑わせないようにするために行なわれます。 | |
Emacsの初期化ファイル | ||
49.4.1 initファイルの構文 | Emacs Lispでの定数の構文。 | |
49.4.2 initファイルの例 | initファイルで何かを行なう方法。 | |
49.4.3 端末固有の初期化 | 端末タイプごとのinitファイル。 | |
49.4.4 Emacsがinitファイルを探す方法 | Emacsがinitファイルを探す方法について。 | |
49.4.5 initファイル内の非ASCII文字 | initファイルでの非ASCII文字の使用。 | |
49.4.6 早期初期化ファイル | 早期に読み込まれる別のinitファイル。 | |
Emacsでトラブルに対処する | ||
51.1 DELで削除できない場合 | DELで削除できないとき、何を行なうべきか。 | |
51.2 再帰編集レベル | モードラインのカッコの周囲の’[...]’。 | |
51.3 スクリーン上のゴミ | 画面上のゴミ。 | |
51.4 テキスト内のゴミ | テキストの中のゴミ。 | |
51.5 メモリー不足 | メモリー不足に対処する方法。 | |
51.6 Emacsがクラッシュしたとき | クラッシュ時にEmacsが何を行なうか。 | |
51.7 クラッシュ後のリカバリー | クラッシュしたEmacsセッションでの編集をリカバリーする。 | |
51.8 緊急エスケープ | Emacsが応答しなくなったとき、何を行なうべきか。 | |
51.9 長い行 | 非常に長い行による遅延の緩和。 | |
バグの報告 | ||
52.1 既存のバグレポートの既知の問題を読む | 既知の問題とバグについて読む方法。 | |
52.2 バグがあったとき | 本当にバグを見つけたのか? | |
52.3 バグレポートの理解 | バグを報告する効果的な方法。 | |
52.4 バグレポートのためのチェックリスト | 良いバグレポートのためにしたがうべきステップ。 | |
52.5 GNU Emacsへのパッチの送付 | GNU Emacsにパッチを送る方法。 | |
Contributing to Emacs Development | ||
53.1 コーディング規約 | Gnu Emacsのコーディング規約。 | |
53.2 著作権の割り当て | FSFに著作権を譲渡する。 | |
Emacs呼び出しにたいするコマンドライン引数 | ||
C.1 動作引数 | ファイルのvisit、ライブラリーのロード、関数を呼び出す引数。 | |
C.2 初期化オプション | Emacsの開始に影響する引数。 | |
C.3 コマンド引数の例 | コマンドライン引数の使用例。 | |
C.4 環境変数 | Emacsが使用する環境変数。 | |
C.5 ディスプレー名の指定 | デフォルトディスプレーの変更と、リモートログインの使用。 | |
C.6 フォント指定オプション | Xでのテキストのフォント選択。 | |
C.7 ウィンドウカラーオプション | ディスプレーカラーの選択。 | |
C.8 ウィンドウのサイズと位置にたいするオプション | Xでのスタートアップウィンドウのサイズ。 | |
C.9 内枠ボーダーと外枠ボーダー | Xでの内枠ボーダーと外枠ボーダー。 | |
C.10 フレームタイトル | 初期フレームのタイトルの指定。 | |
C.11 アイコン | Xで使用するアイコンの選択。 | |
C.12 その他のディスプレーオプション | ||
環境変数 | ||
C.4.1 一般的な変数 | すべてのバージョンのEmacsが使用する環境変数。 | |
C.4.2 その他の変数 | システム固有の変数。 | |
C.4.3 MS-Windowsのシステムレジストリー | MS-Windowsでの環境の代用。 | |
Xオプションとリソース | ||
D.1 Xリソース | EmacsでXリソースを使用する(概説)。 | |
D.2 EmacsにたいするXリソースの表 | Emacsに影響する特定のXリソースの表。 | |
D.3 Lucidのメニューとダイアログ | LucidメニューにたいするXリソース。 | |
D.4 MotifメニューのXリソース | MotifおよびLessTifメニューにたいするXリソース。 | |
D.5 GTK+リソース | GTKウィジェットにたいするリソース。 | |
GTK resources | ||
D.5.1 GTK+ Resource Basics | GTK+リソースの基本的な使い方。 | |
D.5.2 GTK+ウィジェット名 | GTK+ウィジェットの命名方法。 | |
D.5.3 EmacsでのGTK+ウィジェット名 | Emacsが使用するGTK+ウィジェット。 | |
D.5.4 GTK+スタイル | GTK+ウィジェットの何がカスタマイズできるか。 | |
EmacsとmacOS、GNUstep | ||
F.1 macOSおよびGNUstepでのEmacsの基本的な使い方 | GNUstepまたはmacOSでのEmacsの基本的な使用方法。 | |
F.2 Mac/GNUstepでのカスタマイズ | GNUstepまたはmacOSでのカスタマイズ。 | |
F.3 macOSおよびGNUstepでのウィンドウシステムイベント | ウィンドウシステムイベントが処理される方法。 | |
F.4 GNUstepにたいするサポート | GNUstepサポート状態の詳細。 | |
EmacsとMicrosoft Windows/MS-DOS | ||
G.1 MS-WindowsでEmacsを開始する方法 | WindowsでEmacsを開始する方法。 | |
G.2 テキストファイルとバイナリーファイル | 行末にCRLFを使用するテキストファイル。 | |
G.3 MS-Windowsのファイル名 | Windowsのファイル名の慣習。 | |
G.4 MS-Windowsでのls のエミュレーション | Diredにたいするls のエミュレーション。
| |
G.5 MS-WindowsでのHOMEディレクトリーと開始ディレクトリー | 開始時にEmacsが.emacsを探す場所。 | |
G.6 MS-Windowsでのキーボードの使用方法 | Windows特有のキーボード機能。 | |
G.7 MS-Windowsでのマウスの使用方法 | Windows特有のマウス機能。 | |
G.8 Windows 9X/MEおよびWindows NT/2000/XP/Vista/7/8/10でのサブプロセス | Windowsでのサブプロセスの実行。 | |
G.9 MS-Windowsでの印刷 | MS-Windowsでプリンターを指定する方法。 | |
G.10 MS-Windowsでのフォント指定 | MS-Windowsでのフォントの指定。 | |
G.11 その他のWindows固有の機能 | その他のWindowsの機能。 | |
G.12 EmacsとMS-DOS | MS-DOSでのEmacsの使用。 | |
EmacsとMS-DOS | ||
G.12.1 MS-DOSでのキーボードの使用方法 | MS-DOSでのキーボードの慣習。 | |
G.12.2 MS-DOSでびマウスの使用方法 | MS-DOSでのマウスの慣習。 | |
G.12.3 MS-DOSでの表示 | MS-DOSでのフォント、フレーム、ディスプレーのサイズ。 | |
G.12.4 MS-DOSでのファイル名 | MS-DOSでのファイル名の慣習。 | |
G.12.5 印刷とMS-DOS | MS-DOSでの印刷の特性。 | |
G.12.6 MS-DOSでの国際化サポート | MS-DOSでの国際化のサポート。 | |
G.12.7 MS-DOSでのサブプロセス | MS-DOSでのサブプロセスの実行。 | |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
GNU Emacsはfree software(フリーソフトウェアー、自由なソフトウェアー)です。これはすべての人が自由に使用でき、特定の条件の元に自由に再配布できることを意味します。GNU Emacsはパブリックドメイン(public domain: 特許権の消滅状態)ではありません。copyright(版権)されており、配布については制限があります。しかし、それらの制限は良き共同的な市民(good cooperating citizen)が行ないたいと欲するであろう、すべてのことを許すようデザインされています。なにが許されていないか、それはあなたから取得するかもしれないGNU Emacsの任意のバージョンの更なる共有を妨げる試みです。これの正確な条件はEmacsのGNU General Public Licenseで見ることができ、このマニュアルにも記載されています1。 GNU GENERAL PUBLIC LICENSEを参照してください。
GNU Emacsのコピーを入手する1つの方法は、それを所有する他の誰かから入手する方法です。これを行なうための許可を求めたり、他の誰かに告げる必要はありません。ただコピーするだけです。インターネットへアクセスできるなら、匿名FTPからGNU NEmacsの最新のディストリビューションバージョンを入手できます。わたしたちのウェブサイトについての詳細は、https://www.gnu.org/software/emacsを参照してください。
コンピューターを購入したときに、GNU Emacsを入手するかもしれません。コンピューター業者は、他のすべての人に適用されるのと同じ条件で、コピーを自由に配布できます。これらの条件は、コンピューター業者がソースにたいして行なった変更を含む完全なソースをあなたに与えることと、General Public Licenseの通常の条件の下に、入手したGNU Emacsをあなたが再配布できることを要求します。言い換えると、そのプログラムはあなたが入手したときはフリーでなければならず、業者にとっては単にフリーという訳ではありません。
GNU Emacsが有用だと思ったら、わたしたちの作業をサポートするために、どうかFree Software Foundationに寄付を送ってください。合衆国ではFree Software Foundationへの寄付は、税金が控除されます。職場でGNU Emacsを使用している場合は、どうかその企業に寄付を行なうよう提案してください。寄付をするには、https://my.fsf.org/donate/を参照してください。あなたが手助けできる他の方法については、https://www.gnu.org/help/help.htmlを参照してください。
わたしたちは、このマニュアルと、Robert J. ChassellによるAn Introduction to Programming in Emacs Lispのハードコピーも販売しています。あなたは、わたしたちのオンラインショップhttps://shop.fsf.org/を訪れることができます。販売による収益は、Free Software Foundationの目的 — すなわち新しいソフトウェアーの開発、GNU Emacsを含む既存のプログラムの改良をサポートします。
Free Software Foundationに連絡する必要がある場合は、https://www.fsf.org/about/contact/を参照するか、下記に手紙を送ってください
Free Software Foundation 51 Franklin Street, Fifth Floor Boston, MA 02110-1301 USA
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
あなたはEmacsのマニュアル読んでいるところです。Emacsは、セルフドキュメント方式で、カスタマイズ可能で、拡張可能エディターであり、GNUの先進性を具現化したものです( GNU (GNU’s Not Unix) の‘G’は発音します)。
Emacsは先進的(advanced)であるというのは、単純な挿入と削除だけでなくプロセスの制御、プログラムのインデントの自動化、複数ファイルの同時表示、ローカルファイルと同様なリモートファイルの編集、整形済みテキストの編集、文字、単語、行、文、段落、ページを扱うのと同様に、異なるプログラミム言語の式やコメントを扱う機能なども提供するからです。
セルフドキュメント方式(Self-documenting)とは、いつでもヘルプコマンドとして知られる、特別なコマンドを使うことができることです。これはどのようなオプションがあるのか、コマンドが何をするのかを見つけたり、与えられたトピックと関連するすべてのコマンドを見つけることができるコマンドです。ヘルプを参照してください。
カスタマイズ可能(Customizable)とは、シンプルな方法でEmacsコマンドの動作を簡単に変更できるということです。たとえば、‘<**’で始まり‘**>’で終わるようなコメントのプログラム言語を使っている場合は、Emacsのコメント操作コマンドに、これらの文字列を使うように指示できます(コメントの操作を参照してください)。別の例としては、カーソル動作(上下左右)を再編成して使いやすくカスタマイズできます。カスタマイズを参照してください。
拡張可能(Extensible)とは、単純なカスタマイズではなく、まったく新しいコマンドを作成できるということです。新しいコマンドは、Emacs自身のLisp処理系で動作する、Lisp言語でプログラムを記述されます。既存のコマンドは、編集を行なっている最中でさえ、Emacsを再起動することなく再定義できます。Emacsのほとんどの編集コマンドはLispで記述されています。Lispで記述することも可能ですが、効率のためにCで記述されているものもあります。拡張機能の記述はプログラミングですが、プログラマーでない人も後でそれを使うことができます。もしあなたがEmacs Lispを学びたければ、Preface in An Introduction to Programming in Emacs Lispを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Xウィンドウシステムを使うGNU/Linuxのようなグラフィカルなディスプレーの場合、Emacsはグラフィカルなウィンドウに表示されます。テキスト端末の場合、Emacsは端末スクリーン全体を表示領域として使います。Emacsが占有する画面スクリーンや、グラフィカルなウィンドウを指して、フレーム(frame)という用語を使用します。Emacsの振る舞いは、どちらのフレームでも同じです。通常は1個のフレームだけで始まりますが、必要ならば新たにフレームを作れます(フレームとグラフィカルなディスプレーを参照)。
それぞれのフレームにはいくつかの領域が含まれています。いちばん上のフレームはメニューバー(menu bar)で、メニューにある一連のコマンドにアクセスできます。グラフィカルなディスプレーでは、メニューバーのすぐ下にツールバー(tool bar)があり、アイコンをクリックすることにより編集コマンドを実行できます。いちばん下のフレームはエコーエリア(echo area)で、メッセージが表示されたり、Emacsが入力を求める際に使用されます。
(もしあれば)ツールバーの下とエコーエリアの間の、フレームの主要な領域の部分を、ウィンドウ(the window)といいます。このマニュアルでは“ウィンドウ”という言葉を、上記のような場合に使います。グラフィカルなディスプレーのシステムでは、“ウィンドウ”という言葉を違う意味で用いますが、上述したとおり、そのようなグラフィカルなウィンドウのことは、“フレーム”と呼ぶことにします。
Emacsのウィンドウには、バッファー(buffer) — 編集、または閲覧しているテキストやグラフィック — が表示されます。グラフィカルなディスプレーでは、ウィンドウの片側にスクロールバー(scroll bar)あり、これを使ってバッファー内をスクロールできます。ウィンドウのいちばん下の行は、モードライン(mode line)です。これには保存されてない変更や、使用されている編集モード、現在のライン番号など、バッファーについての様々な情報が表示されます。
Emacsを起動すると、通常フレームには1つのウィンドウが表示されます。しかしこのウィンドウを水平方向、または垂直方向に分割して複数のウィンドウを作成し、それぞれ異なるバッファーを表示することもできます(複数ウィンドウを参照)。
どんな時でも、1つのウィンドウが選択されたウィンドウ(selected window)となります。グラフィカルなディスプレーでは、選択されたウィンドウには目立つカーソル(通常は塗りつぶされて点滅している)が表示され、他のウィンドウには目立たないカーソル(通常はぬりつぶされていない四角)が表示されます。テキスト端末では、選択されたウィンドウのカーソルだけが表示されます。選択されたウィンドウ上に表示されているバッファーを、カレントバッファー(current buffer)と呼び、それが編集が行われているバッファーとなります。多くのEmacsコマンドはカレントバッファーに暗黙に適用され、選択されてないウィンドウに表示されているテキストは参照用に使用します。もしグラフィカルなディスプレーで複数のフレームを使っている場合、特定のフレームを選択すると、そのフレームのウィンドウが選択されます。
1.1 ポイント | テキスト内で編集コマンドが作用する場所 | |
1.2 エコーエリア | スクリーンのいちばん下で、短いメッセージが表示されます | |
1.3 モードライン | モードを説明するライン | |
1.4 メニューバー | メニューバーの使い方 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
カーソルは、選択されたウィンドウで多くの編集コマンドが作用する場所を示し、その場所をポイント(point)2と呼びます。多くのEmacsコマンドはポイントをテキスト中で移動し、テキスト中のさまざまな箇所で編集できるようにします。マウスのボタン1(通常は左ボタン)をクリックしても、ポイントを移動できます。
デフォルトでは、選択されたウィンドウ上にある、塗りつぶされたボックスのカーソルは文字の上に表示されますが、ポイントは2つの文字の間にあると考える必要があります。つまりポイントは、カーソルが重なっている文字の前にあります。たとえば、‘frob’というテキストで、‘b’にカーソルがある場合、ポイントは‘o’と‘b’の間にあります。その位置に‘!’という文字を挿入すると、‘fro!b’という結果になり、ポイントは‘!’と‘b’の間にあります。つまりカーソルは‘b’の上にあり、実行前と同じです。
Emacsでいくつかのファイルを編集して、各ファイルがそれぞれ専用のバッファーにある場合、各バッファには独自のポイント位置があります。バッファーが表示されていなくても、後で表示されるときに備えて、ポイント位置を記録しています。1つのフレームに複数のウィンドウがある場合、各ウィンドウには独自のポイント位置があります。
Emacsがカーソルをどのように表示するか制御する方法については、カーソルの表示を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
フレームの1番下の行は、エコーエリア(echo area)です。ここは、いろいろな目的向けの短いテキスト表示に使われます。
エコーエリアという名前は、あなたが打った文字がエコーされることが由来で、これは複数の文字からなるコマンドが表示されることを意味します。1文字のコマンドをエコーすることはありません。複数の文字からなるコマンド(キーを参照)の途中で、入力中に1秒以上間を置くとエコーされます。Emacsはそれまでに入力されたコマンドの文字を表示し、ユーザーに残りの文字の入力を促します。いったんエコーが始まると、コマンドの残りは、打つと同時にただちにエコーされます。これは、タイプに自信のあるユーザーには速い応答を提供する一方で、自信のないユーザーには最大限のフィードバックを与えるための機能です。
エコーエリアは、コマンドを実行できなかったときに、エラーメッセージ(error message)を表示するためにも使用されます。エラーメッセージと共に、ビープ音が鳴ったり、画面が点滅する場合もあります。
エコーエリアに有用なメッセージを表示するコマンドもあります。これらの有用なメッセージは、エラーメッセージによく似ていますが、ビープ音を伴わず点滅もしません。たとえば、コマンドC-x =(Ctrlを押したままxをタイプし、Ctrlを離してから=をタイプします)は、テキスト中のポイントの文字位置と、ウィンドウの現在の列位置を示すメッセージを表示します。処理に時間のかかるコマンドでは、実行中に‘...’(どの程度進行したかをパーセント表示で示す場合もあります)で終わるメッセージをエコーエリアに表示し、完了時には‘done’を最後に付け加えることがよくあります。
エコーエリアに表示される有益なメッセージは、*Messages*と呼ばれる特別なバッファーに保存されます(まだバッファーについては説明していませんが、詳細は複数バッファーの使用を参照)。画面上に短時間しか表示されないメッセージを見逃してしまった場合には、*Messages*バッファーに切り替えて、もう一度そのメッセージを見ることができます。*Messages*のサイズは、ある行数に制限されています。変数message-log-max
は、その行数を指定します(まだ変数については説明していませんが、詳細は変数を参照)。いったんバッファーがこの行数を超えると、最後に1行加わるごとに先頭の1行を削除します。
Emacsがエコーエリアをどのように使用するか制御するオプションについては、ディスプレーのカスタマイズを参照してください。
エコーエリアはミニバッファー(minibuffer)の表示にも使われます。これは、編集しようとするファイル名のような、コマンドへの引数を読むのに使われるウィンドウです。ミニバッファーが使用されているとき、エコーエリアにはプロンプト文字列(prompt string)で始まるテキストが表示され、エコーエリアが一時的に選択されたウィンドウとなり、カーソルもその行に表示されます。C-gを打つと、いつでもミニバッファーから抜けられます。ミニバッファーを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ウィンドウの最後の行はモードライン(mode line)であり、そのウィンドウで何が進行しているか表示します。ウィンドウが1つしかなければモードラインはエコーエリアのすぐ上に表示されます。フレームでは最後から2番目の行になります。グラフィカルなディスプレーではモードラインは立体的に描画されます。Emacsは選択されたウィンドウのモードラインが目立つように、通常は選択されていないウィンドウとは異なるカラーで描画します。
モードラインに表示されるテキストは以下の書式です:
cs:ch-fr buf pos line (major minor)
テキスト端末では、上記テキストの後ろからウィンドウの右端まで一連のダッシュ表示されます。これらのダッシュはグラフィカルなディスプレーでは省略されます。
csとその後ろのコロンは、カレントバッファーのキャラクターセットと改行の規則を説明しています。通常Emacsはこれらの設定を自動的に処理しますが、このメッセージが便利なときもあります。
csはバッファーのキャラクターセットを説明します(コーディングシステムを参照)。もしこれがダッシュ(‘-’)の場合、特定のキャラクターセットの処理が行われていないことを意味します(例外として、以降で説明する行末規則があります)。‘=’の場合は、変換が行われていないことを意味し、通常はテキストに非テキストデータが含まれているときに使用されます。他の文字はさまざまなコーディングシステム(coding systems) — たとえば‘1’はISO Latin-1を表します。
テキスト端末ではcsの前に追加で2つの文字が表示され、それによりキーボード入力と端末出力のコーディングシステムが示されます。さらに何らかの入力メソッドを使用している場合は、csの前に入力メソッドを識別する文字列が表示されます(インプットメソッドを参照)。
csの後ろの文字は、通常コロンです。もし違う文字が表示されている場合、それはファイルのエンコーディングに特別な行末規則が使われていることを意味します。通常ファイル内のテキストの各行は改行文字(newline characters)で区切られていますが、他の2つの規則が使われる場合もあります。MS-DOSのファイルを編集する場合にはキャリッジリターン(carriage-return)とラインフィード(linefeed)が使われ、コロンではなくバックスラッシュ(‘\’)または‘(DOS)’(オペレーティングシステムに依存する)が表示されます。古いマッキントッシュシステムのファイルでは、改行文字の代わりにキャリッジリターン(carriage-return)が使われ、そのような場合コロンではなくスラッシュ(‘/’)または‘(Mac)’が表示されます。いくつかのシステムでは行の区切りとして改行文字を使う場合、コロンではなく‘(Unix)’と表示されます。
emacsclient
(emacsclient
の呼び出しを参照)で作成されたフレームでは、次の文字に‘@’が表示されます。これは通常、デーモン(サーバーとしてのEmacsの使用を参照)として実行中のEmacsプロセスのフレームにたいして表示されます。
モードラインの次の要素はchで示される文字列です。2つのダッシュ(‘--’)が表示されている場合、ウィンドウに表示されているバッファーとディスク上のファイルの内容が同じことを意味し、たとえばバッファーが未変更(unmodified)の場合です。バッファーが変更されている場合には2つの星印(‘**’)が表示されます。読み出し専用のバッファーの場合には、バッファーが編集されている場合には‘%*’になり、バッファーが編集されていない場合には‘%%’となります。
通常、chの後ろの文字はダッシュ(‘-’)です。しかしカレントバッファーのdefault-directory
(ファイルの名前を参照)がリモートマシン上(ファイルの名前を参照)にある場合、かわりに‘@’が表示されます。
frは選択されているフレームの名前です(フレームとグラフィカルなディスプレーを参照)。これはテキスト端末でだけ表示されます。フレーム名の初期値は‘F1’です。
bufは、ウィンドウに表示されているバッファーの名前です。通常は編集中のファイル名と同じです。複数バッファーの使用を参照してください。
posはウィンドウの上またはウィンドウの下に、まだテキストがあるかを知らせます。もしバッファーが小さくてウィンドウに全体が表示されている場合、posには‘All’が表示されます。そうではなくバッファーの一部が表示されているときには、バッファーの先頭が表示されている場合には‘Top’、バッファーの最後が表示されている場合には‘Bot’、‘nn%’と表示されている場合、nnはウィンドウの上部がバッファーのどこかをパーセント表示したものです。Size Indication(サイズ表示)モードでは、バッファー全体のサイズを表示できます。
lineは、‘L’のあとに現在ポイントがある行の番号が続いたものです(Column Number(列番号)モードをオンにすると、現在の列番号も表示できます。モードラインのオプションを参照)。
majorは、そのバッファのメジャーモード(major mode)の名前です。メジャーモードはバッファーを編集する際の主要なモードで、Textモード、Lispモード、Cモードなどがあります。メジャーモードを参照してください。メジャーモード名の後ろに追加の情報を表示するメジャーモードもあります。たとえばCompilation buffer(コンパイルバッファー)やShell buffer(Shellバッファー)などは、サブプロセスの状態を表示します。
minorは有効になっているマイナーモード(minor modes)の一覧で、上位のメジャーモードに追加の機能を提供するための編集モードです。マイナーモードを参照してください。
いくつかの機能は、それらが本当はマイナーモードではなくても、有効になっていればマイナーモードの一覧とともに表示されます。‘Narrow’は、表示中のバッファーが、そのテキストの一部のみを編集するように制限されていることを示します(ナローイングを参照)。‘Def’は、キーボードマクロを定義中であることを示します(キーボードマクロを参照)。
さらにEmacsが再帰編集(recursive edit)にあるときには、モードを囲んでいるカッコの周りに角カッコ(‘[…]’)が現れます。再帰編集中も別の再帰編集に入ると、角カッコは2重になります。再帰編集は、特定のバッファにだけ関係するものではなく、Emacs全体に影響するので、角カッコはすべてのウィンドウのモード行に表示されるか、まったく表示されないのどちらかです。再帰編集レベルを参照してください。
モードラインの外観は、その内容の書式と同様、変更できます。モードラインのオプションを参照してください。さらにモードラインはマウスに反応します。モードラインの違う部分をクリックすることでさまざまなコマンドを実行できます。モードラインのマウスコマンドを参照してください。また、モードラインのマウス感応範囲上でマウスポインターをホバリングすると、モードライン上でクリックして呼び出すことができるコマンドに関する情報を表示するツールチップ(ツールチップを参照)が表示されます。また、モードラインのマウスセンシティブ(mouse-sensitive: マウス感応)な部分の上にマウスをホバリングすると、モードライン上をクリックして呼び出せるコマンドに関する情報がツールチップ(ツールチップを参照)が表示されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
各Emacsフレームには通常、最上部にメニューバー(menu bar)があり、よく使われる操作を実行するために使用できます。これはあなた自身で簡単に確かめられますから、ここではそれらを列挙する必要はないでしょう。
マウスをサポートするディスプレー上では、マウスを使ってメニューバーからコマンドを選ぶことができます。メニューアイテムの後にある右矢印は、そのアイテムにサブメニュー(submenu)があることを示します。アイテムの最後に‘...’がある場合は、コマンドを実際に実行する前に、そのコマンドがキーボードから引数を読み取ることを意味します。
メニューのコマンドの中には、他のコマンドと同様、キーが割り当てられているものもあります。そのような場合、メニューのアイテムの後にキーバインディングが表示されます。メニューアイテムの完全なコマンド名や説明文を見るには、C-h kとタイプしてから、通常どおりにマウスでメニューバーを選択してください(キーのドキュメントを参照)。
マウスを使う代わりにF10(コマンドmenu-bar-open
を実行します)を押せば、メニューバーの最初のアイテムを呼び出すことができます。その後は矢印キー、またはC-bとC-f(左右)、C-pとC-n(上下)でメニュー操作できます。選択されたメニューアイテムを起動するときはRET、メニュー操作をキャンセルするときはC-gかESC
ESC
ESCを押します。(ただし、GUIツールキットとともにビルドされたEmacsでは、メニューはそのツールキットにより描画および制御され、メニュー操作をキャンセルするキーシーケンスは上記の説明とは異なるかもしれません。)
テキスト端末では、エコーエリアからメニューバーのメニューにアクセスすることもできます。これを行うには、変数tty-menu-open-use-tmm
をカスタマイズして、非nil
値にします。その後はF10をタイプするとメニューをドロップダウンせずに、コマンドtmm-menubar
が実行されます(M-`は常にtmm-menubar
を呼び出します)。tmm-menubar
では、キーボードでメニューアイテムを選択できます。暫定的な候補がエコーエリアに表示されるので、上矢印か下矢印でメニューの異なるアイテムを表示し、RETを押せばアイテムを選択できます。各メニューアイテムを文字か数字で指定することもできます(通常メニューアイテム名のイニシャル)。この文字または数字とアイテム名は‘==>’で区切られています。アイテムの文字または数字を押せばアイテムを選択することができます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
GNU Emacsは、主にキーボードを使うようにデザインされています。マウスを使ってメニューバーやツールバーの編集コマンドを実行することはできますが、キーボードを使う場合に比べて効率的ではありません。したがって、このマニュアルには主にキーボードで編集する方法を記します。
Emacsにたいするキーボード入力は、ASCIIを大きく拡張したバージョンが基本となっています。‘a’、‘B’、‘3’、‘=’や空白文字(SPC)と表記します)などの単純な文字は、それぞれに対応するキーをタイプして入力します。RET、TAB、DEL、ESC、F1、Home、LEFTなどの制御文字なども、この方法で入力できますし、非英語キーボードの特定の文字も同様です(国際化文字セットのサポートを参照)。
Emacsは修飾キー(modifier keys)を用いて入力された制御文字も認識します。よく使用される修飾キーは、Control(通常Ctrl)というラベル)と、Meta(通常Alt3というラベル)の2つです。たとえば、Control-aはCtrlを押したままでaを押して入力しますが、これを短くC-aと記します。同様に、Meta-aまたは短くM-aは、Altを押したままaを押すことです。修飾キーは英数文字以外のキーにも適用できます。例: C-F1、M-LEFT
ESCで始まる2文字キーシーケンスを使って、Meta文字を入力することもできます。したがってM-aをESC aと入力することができます。C-M-a(CtrlとAltを両方押しながらaを押下)はESC C-aと入力できます。Metaと違い、ESCは切り離された文字です。次の文字を押すときESCを押しっぱなしにするのではなく、ESCを押して離してから次の文字を入力します。この機能はMetaキーをあてにできない、一部のテキスト端末で有用です。
Emacsは追加の修飾キーをサポートします。修飾キーを参照してください。
グラフィカルなディスプレーでは、ウィンドウマネージャーがM-TAB、M-SPC、C-M-d、C-M-lなどのキーボード入力をブロックするかもしれません。このような問題がある場合、ウィンドウマネージャーがこれらのキーをブロックしないようにカスタマイズしたり、影響を受けるEmacsのコマンドをリバインド(rebind)したりできます(カスタマイズを参照)。
単純な文字や制御文字、同様にマウスのクリックなどの非キーボード入力は、総じて入力イベント(input events)と呼ばれます。Emacsが内部で入力イベントをどのように処理するかについての詳細は、Input Events in The Emacs Lisp Reference Manualを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsコマンドには、ただ1つの入力イベントで呼び出されるものが、いくつかあります。たとえばC-fはバッファーを1文字前方に移動します。他のコマンドは、C-x C-fやC-x 4 C-fのように、2つ以上の入力イベントにより呼び出されます。
キーシーケンス(key sequence)、短く書くとキー(key)は、1つの単位として考えることのできる、1つまたはそれ以上の一連の入力イベントの集まりのことです。もし、あるキーシーケンスがコマンドを呼び出すような場合、それをコンプリートキー(complete key)と呼ぶことにします。たとえばC-f、C-x C-f、C-x 4 C-fなどはコンプリートキーです。もし、あるキーシーケンスがコマンドを呼び出すほど十分長くないとき、それをプレフィクスキー(prefix key)と呼ぶことにします。たとえば前の例でいうと、C-xやC-x 4はプレフィクスキーです。すべてのキーシーケンスは、コンプリートキーかプレフィクスキーのどちらかになります。
プレフィクスキーは、その後の入力イベントと組み合わせて、もっと長いキーシーケンスを作るためのものです。たとえばC-x はプレフィクスキーなので、C-xと入力しただけではコマンドは呼び出されません。かわりにEmacsは更なる入力を待ちます(もし1秒以上入力がない場合、入力を促すためにC-xがエコーされます。エコーエリアを参照)。C-xは、それに続く次の入力イベントと組み合わされる、2イベントのキーシーケンスで、それはプレフィクスキー(C-x 4)など)のときもあれば、コンプリートキー(C-x C-fなど)のときもあります。キーシーケンスの長さに制限はありませんが、実際に3つ、4つ以上の入力イベントの場合は、ほとんどありません。
コンプリートキーに入力イベントを付け加えることはできません。たとえば、C-fはコンプリートキーなので、2イベントのシーケンスC-f C-kは、1つではなく2つのキーシーケンスです。
デフォルトではEmacsのプレフィクスキーはC-c、C-h、C-x、C-x RET、C-x @、C-x a、C-x n、C-x r、C-x t、C-x v、C-x 4、C-x 5、C-x 6、ESC、M-g、M-oです(F1とF2はC-hとC-x 6のエイリアス)。このリストは不変のものではありません。Emacsをカスタマイズすれば、新しいプレフィクスキーを作ることができます。標準のプレフィクスキーを無効にすることさえできますが、これはほとんどのユーザーにたいして推奨はできません。たとえばプレフィクス定義C-x 4を削除すると、C-x 4 C-fは無効なキーシーケンスになります。キーバインディングのカスタマイズを参照してください。
プレフィックスキーのあとにヘルプ文字(C-hやF1)を押すと、そのプレフィックスで始まるコマンド一覧を表示できます。唯一の例外はESCです。ESC C-hはC-M-hと同じで、これは何かまったく別のことを行うコマンドです。しかしF1ならば、ESCで始まるコマンドの一覧を表示できます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このマニュアルは、特定のキーが何を行うかを説明するページばかりです。しかし、Emacsは直接キーに意味を与えてはいません。そのかわりに、Emacsは名前を付けたコマンド(commands)に意味を持たせ、キーとコマンドをバインディング(binding)することによって、キーに意味を与えています。
すべてのコマンドには、プログラマーが選んだ名前が付いています。名前は、たとえばnext-line
、forward-word
のように、いくつかの英単語をダッシュで区切って作られます。内部的には、それぞれのコマンドはLispの関数(function)の特別な型で、コマンドに関連付けられたアクションは、関数を実行することによって機能します。What Is a Function in The Emacs Lisp Reference
Manualを参照してください。
キーとコマンドの間のバインディングは、keymapsというテーブルに記憶されます。キーマップを参照してください。
“C-nは下に1行動きます”という言い方は、通常の使用では関係ないものの、Emacsをカスタマイズする上では重要になる点を隠蔽しています。1行下に移動するコマンドはnext-line
です。C-nがnext-line
にバインドされているから効果があるのです。もしC-nをコマンドforward-word
にリバインドしたら、C-nで1語前方に動くことになります。
厳密に言えばキーはコマンドにバインドされているだけですが、このマニュアルではC-nをコマンドであるかのような言い回しをするときがあります。そのようなときは、処理を実行させるキーの後ろに、本当に処理を行うコマンドの名前をカッコ内に記します。たとえば、“コマンドC-n
(next-line
)は、ポイントを垂直下方に移動します”というときは、コマンドnext-line
がポイントを垂直下方に移動し、それは通常C-nにバインドされている、ということを意味します。
カスタマイズについて議論したので、変数(variables)にもふれておくべきでしょう。コマンドの説明で、“これを変更する場合、変数
mumble-foo
をセットしてください”というときがあります。変数とは、値を保存するときに使用する名前のことです。このマニュアルに記載されている変数は、ほとんどがカスタマイズに関するものです。いくつかのコマンド、およびEmacsのある部分は、変数を調べてその変数にセットされた値により、動作がかわります。カスタマイズに興味がでるまでは、、変数に関する情報は無視してかまいません。その後で変数(変数を参照)の基本を読めば、特定の変数についての情報に合点がいくでしょう。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsを呼び出す通常の方法は、シェルコマンドemacs
です。GUI端末上で実行されるUnixシェルからは、emacs
&によりEmacsをバックグラウンドで実行できます。この方法だとEmacsが端末ウィンドウに結びつけられないため、他のシェルコマンドを実行できます(MS-WindowsでEmacsを開始する方法については、MS-WindowsでEmacsを開始する方法を参照)。
Emacsを起動すると、初期フレームは‘*GNU
Emacs*’という名前の特別なバッファーを表示します。このスタートアップ画面(startup
screen)には、Emacsについての情報と、初心者にとって便利な一般的タスクへのリンクが含まれています。たとえば‘Emacs
Tutorial’というリンクはEmacsのチュートリアルを開きます。これはコマンドC-h t
(help-with-tutorial
)と同じです。リンクをアクティブにするには、ポイントをそこに動かしてRETをタイプするか、mouse-1(マウスの左ボタン)をクリックしてください。
コマンドライン引数を使うと、Emacsが起動直後に1つ以上のファイルをアクセスするよう指示できます。たとえばemacs
foo.txt
は、‘foo.txt’の内容を表示するバッファーとともにEmacsを起動します。これは他のエディターとの互換性により存在する機能で、シェルから短い編集セッションを始めるときのためにデザインされています。Emacsをこの方法で呼び出すと、初期フレームは2つのウィンドウに分割されます。1つは指定されたファイルで、もう1つはスタートアップ画面です。複数ウィンドウを参照してください。
一般的に、ファイルを編集するたびに新たにEmacsを起動するのは不必要で無駄です。Emacsを使うときの推奨方法は、Emacsを1度だけ起動する方法で、ログインしたら起動して、同じEmacsセッションですべての編集作業を行うのです。1つ以上のファイルをアクセスする方法は、ファイルの処理を参照してください。この方法でEmacsを使うと、Emacsのセッションはキルリング(kill ring)、レジスター(registers)、アンドゥヒストリー(undo history)、マークリング(mark ring)などの、値をもつコンテキストを蓄積するので、これを共有すれば編集がより快適になります。これらの機能については、このマニュアルの後で説明します。
Emacsを実行中に、他のプログラムからファイルを編集する場合、既存のEmacsセッションのファイルを開くために、emacsclient
というヘルパープログラムを使うことができます。サーバーとしてのEmacsの使用を参照してください。
コマンドライン引数を使って、EmacsにLispファイルをロードして初期フレームに適用させたりできます。Emacs呼び出しにたいするコマンドライン引数を参照してください。
変数inhibit-startup-screen
が非nil
の場合、Emacsはスタートアップ画面を表示しません。この場合、コマンドラインに1つ以上のファイルが指定されていれば、Emacsは単にそれらのファイルを表示し、指定されていないときはLispの式を対話的に評価できる、*scratch*という名前のバッファーを表示します。Lisp Interactionバッファーを参照してください。変数inhibit-startup-screen
のセットは、Emacsのカスタマイズ機能(Easy Customizationインターフェースを参照してください)を使うか、初期設定ファイル(Emacs初期化ファイルを参照してください)を編集して行うことができます。4
変数initial-buffer-choice
にファイルやディレクトリーの名前をセットすることにより、Emacsのスタートアップ時にファイルやディレクトリーを表示させることもできます。initial-buffer-choice
の値に、その後に表示するバッファーを戻す関数(引数なし)をセットすることもできます。
initial-buffer-choice
が非nil
の場合、コマンドラインにファイルを指定しても、それらのファイルは表示されますが、初期画面としては表示されません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsをkill(終了)します。(save-buffers-kill-terminal
)。
テキスト端末ではEmacsをサスペンドします。グラフィカルなディスプレーでは選択されたフレームをアイコン化(または“最小化”)します(suspend-frame
)。
EmacsをKillするというのは、Emacsプログラムを終了するという意味です。これを行うには、C-x C-c
(save-buffers-kill-terminal
)とタイプします。2文字キーシーケンスが使われているのは、アクシデントにより間違ってタイプしづらくするためです。もし変更されたファイルがある場合、C-x
C-cをタイプすると、Emacsとそれらのバッファーを巡回して、バッファーを保存するか問い合わせます。それらすべてを保存しない場合、未保存の変更が失われてしまう前に、もう一度問い合わせます。サブプロセスがまだ実行中の場合にも、Emacsをkillするとサブプロセスもkillされるので、問い合わせを行います(Emacsからのシェルコマンドの実行を参照してください)。
もしEmacsをサーバーとして使っている場合、C-x C-cは特別に振る舞います。もしクライアントフレームからタイプした場合は、クライアントのコネクションをクローズします。サーバーとしてのEmacsの使用を参照してください。
Emacsはオプションで、killしたときに表示していたファイルなどの、セッション情報を記録することができます。この情報は次回Emacsを起動するとき利用可能です。Emacsセッションの保存を参照してください。
変数confirm-kill-emacs
の値が非nil
の場合、C-x
C-cはその値が関数だとみなして、その関数を呼び出します。その関数呼び出しの結果が非nil
の場合、セッションはkillされ、そうでない場合、Emacsは実行を続けます。confirm-kill-emacs
の値として使うのに適した関数の1つが、yes-or-no-p
です。confirm-kill-emacs
のデフォルト値はnil
です。
変数confirm-kill-processes
の値がnil
の場合、C-x
C-cはEmacsにより開始されたサブプロセスをkillする前に確認を求めません。デフォルトでは、この値はt
です。
Emacsをexitするとき何が起こるかさらにカスタマイズするには、Killing Emacs in The GNU Emacs Lisp Reference Manualを参照してください。
保存の問い合わせを行わずにEmacsをkillするときは、M-x kill-emacsとタイプします。
C-zは、コマンドsuspend-frame
を実行します。グラフィカルなディスプレーでは、このコマンドは選択されたEmacsのフレームを後で戻れるように、最小化(またはアイコン化)して隠します(どのように隠されるかはウィンドウシステムに依存します)。テキスト端末では、C-zはEmacsをサスペンド(休止)します。プログラムは一時的に停止し、制御は親プロセス(通常はシェル)に戻ります。ほとんどのシェルではシェルのコマンド%emacs
で、サスペンド中のEmacsを再開できます。
テキスト端末は、通常、実行中のプログラムをkillしたりサスペンドする、特定の特殊文字を監視しています。この端末の機能は、Emacsではオフになっています。EmacsでのC-zやC-x C-cのキーの意味は、いくつかのオペレーティングシステムでプログラムを休止させたり終了させたりするために用いる文字、C-zとC-cにヒントを得たものですが、オペレーティングシステムとの関係はそれだけです。これらのキーは、他のコマンドを実行するようにカスタマイズできます(キーマップを参照してください)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ここではテキストの入力、修正、ファイルへの保存といった基本操作について説明します。これらに接するのが初めてなら、learn-by-doing(行ってみることで学ぶ)形式のチュートリアルをやってみることを提案します。チュートリアルを行うにはC-h
t (help-with-tutorial
)とタイプしてください。
7.1 テキストの挿入 | 単純に入力してテキストを挿入する。 | |
7.2 ポイント位置の変更 | 何か修正したい場所にカーソルを移動する。 | |
7.3 テキストの消去 | テキストの削除とkill。 | |
7.4 変更のアンドゥ | テキストの最近の変更を取り消す。 | |
7.5 ファイル | ファイルの読み込み、作成、保存。 | |
7.6 ヘルプ | 文字が何を行うか尋ねる。 | |
7.7 空行 | 空行の作成と削除 | |
7.8 継続行 | Emacsがスクリーンに収まりきれない行を表示する方法。 | |
7.9 カーソル位置の情報 | ポイントのある場所の行と列は何か? | |
7.10 数引数 | コマンドをN回繰り返すための数引数。 | |
7.11 コマンドの繰り返し | 素早く前のコマンドを繰り返す。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
普通のグラフィック文字(graphic character)(例 ‘a’、‘B’、‘3’、‘=’)は、対応するキーをタイプして挿入することができます。これによりバッファーのポイント位置に文字が追加されます。挿入によりポイントは前方に移動するので、ポイントは挿入された文字の直後になります。ポイントを参照してください。
行を終了して新しい行を開始するにはRET(newline
)を入力します(キーボードでRETキーは、ReturnやEnter、もしくは↲のような奇妙な左矢印のラベルがついているかもしれませんが、このマニュアルではRETと呼ぶことにします)。このコマンドは改行文字をバッファーに挿入してから、メジャーモードに基づきインデント(インデントを参照してください)を行います。ポイントが行末にある場合には、新しく空行を作成してから新しい行をインデントします。もしポイントが行の途中にある場合、行はその位置で分割されます。自動インデントをオフにするには、Electric
Indentモード(インデントの便利な機能を参照してください)を無効にするか、自動インデントを行わず改行だけを挿入するC-jを入力します。
マニュアルの後ろで説明しますが、マイナーモード(minor modes)を利用することにより、Emacsが挿入を処理する方法を変更できます。たとえばAuto Fillモードというマイナーモードは行が長くなりすぎたとき自動的に行を分割します(テキストのフィルを参照)。Overwrite modeというマイナーモードは、既存の文字を右方に押しやるかわりに、既存の文字を置き換え(上書き)ます。マイナーモードを参照してください。
対応するキーを押して挿入できるのはグラフィック文字だけです。他のキーは編集コマンドとして動作し、文字自体の挿入はしません。たとえば、デフォルトではDELは、コマンドdelete-backward-char
を実行します(違うコマンドにバインドされているモードもあります)。このキーはリテラルの‘DEL’(ASCIIの文字コード127)を入力する訳ではありません。
非グラフィック文字や、キーボードがサポートしていない文字を挿入するには、最初にC-q
(quoted-insert
)で文字をクォート(quote)します。C-qの使い方は2つあります:
8進数字での入力は、通常の非バイナリーのOverwriteモードでは無効になっています。それにより上書きすることなく数字を挿入する便利な方法が提供されます。
8進のかわりに10進や16進を使うには、変数read-quoted-char-radix
に、10や16をセットします。もし基数が16の場合、aからfは文字コードの一部として扱われます。大文字小文字は区別されません。
数は多くありませんが、一般的なUnicode文字はC-x 8で始まるコマンドを通じて挿入できます。たとえばC-x 8 [は『‘』を挿入します。これはUnicodeコードポイントU+2018 LEFT SINGLE QUOTATION MARK (単独の左“curved quote”、または“curly quote”と呼ばれることもあり)を挿入します。同様にC-x 8 ]は『’』、C-x 8 {は『“』、C-x 8 }は『”』を挿入します。またAltキーも(後にRETが続かない) C-x 8と同じように機能します。たとえばA-[はC-x 8 [と同様に『‘』を挿入します。どの文字がC-x 8による短縮入力をもつかを確認するにはC-x 8 C-hとタイプしてください。
かわりにコマンドC-x 8 RET
(insert-char
)を使うこともできます。これはミニバッファーを使って、Unicode名かコードポイント(code-point)の入力を求めます。もし名前を入力する時、コマンドが補完機能を提供します(補完を参照してください)。コードポイントを入力する場合、それは16進(Unicodeの規約による)、または指定した基数の数字(例
#o23072
(octal); Integer Basics in The Emacs Lisp
Reference Manualを参照してください)であるべきです。このコマンドは対応する文字をバッファーに挿入します。
たとえば以下はすべて同じ文字を挿入します:
C-x 8 RET left single quotation mark RET C-x 8 RET left sin TAB RET C-x 8 RET 2018 RET C-x 8 [ A-[ (Altキーが機能する場合) ` (Electric Quoteモードの場合)
C-qまたはC-x 8 ...への数引数は、文字のコピーを何個挿入するかを指定します(数引数を参照してください)。
さらに加えて、あるコンテキストにおいては、`like this'のようにクォートにgrave accentとapostropheを使用した場合は、たとえC-x 8コマンドを使用していなくても、これは1つのクォーテーションマークを使用した形式``like this''のように変換されます。同様に、``like this''のように2重のgrave accentとapostropheを使用した場合、これはダブルクォーテーションマークを使用した形式“like this”のように変換されます。クォーテーションマークを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
文字の挿入以上のことを行うには、ポイントを移動する方法について知る必要があります(ポイントを参照してください)。キーボードのコマンドC-f、C-b、C-n、C-pは、それぞれ右・左・下・上にポイントを移動します。ほとんどのキーボードにある矢印キー — RIGHT、LEFT、DOWN、UPでもポイントを移動できます。しかし多くのEmacsユーザーは矢印キーより、コントロールキーのほうが速いと考えています。なぜなら矢印キーを押すためにそれらが配置されている領域に手を動かす必要があるからです。
ポイントを移動したい場所でマウスの左ボタンをクリックしてもポイントを移動できます。Emacsは、さらに洗練された方法でポイントを移動する、さまざまなキーボードコマンドを提供します。
1文字前方(forward)に移動します (forward-char
)。
このコマンド(right-char
)はC-fと同様に振る舞います。例外はポイントのあるパラグラフがright-to-leftの場合です。双方向の編集を参照してください。
1文字後方(backward)に移動します (backward-char
)。
このコマンド(left-char
)はC-bと同様に振る舞います。例外は現在のパラグラフがright-to-leftの場合です。双方向の編集を参照してください。
スクリーンに表示された行で1行下に移動します(next-line
)。このコマンドは横方向の位置を変更しないよう試みます。そのため行の途中でコマンドを開始すると、次の行の途中に移動することになります。
スクリーンに表示された行で1行上に移動します(previous-line
)。このコマンドはC-nと同様、行内の位置を保ちます。
行の先頭に移動します(move-beginning-of-line
)。
行の最後に移動します(move-end-of-line
)。
1単語前方に移動します(forward-word
)。単語を最終してください。
このコマンド(right-word
)はM-fと同様に振る舞います。例外は現在のパラグラフがright-to-leftの場合、1語後方に移動することになります。双方向の編集を参照してください。
1単語後方に移動します(backward-word
)。単語を参照してください。
このコマンド(left-word
)はM-bと同様に振る舞います。例外は現在のパラグラフがright-to-leftの場合、1語前方に移動することになります。双方向の編集を参照してください。
スクリーン上のテキストを移動させることなく、ポイントの位置をウィンドウ上で中央にもっとも近いテキスト行の左端に移動します。連続して呼び出すと、最上行の左端、最下行の左端へと循環的にポイントを移動します(move-to-window-line-top-bottom
)。
数引数はスクリーンの行の何行目にポイントを移動するか指定します。数値はウィンドウの最上行から数えた行数です(0は最上行を意味します)。負の引数は最下行から数えた行数です(-1は最下行を意味します。数引数については詳細は、数引数を参照してください。
バッファーの先頭に移動します(beginning-of-buffer
)。数引数nが与えられた場合、最上行からn/10に移動します。グラフィカルなディスプレイでは、C-HOMEで同じことを行うことができます。
バッファーの最後に移動します(end-of-buffer
)。グラフィカルなディスプレイでは、C-ENDで同じことを行うことができます。
画面を1画面前方にスクロールします。もし必要ならポイントをスクリーン上の位置に移動します(scroll-up-command
)。スクロールを参照してください。
画面を1画面後方にスクロールします。もし必要ならポイントをスクリーン上の位置に移動します(scroll-down-command
)。スクロールを参照してください。
数値nを読み取り、ポイントをバッファー位置nに移動します。1を指定するとバッファーの先頭に移動します。
数値nを読み、ポイントをバッファーの先頭からn行目に移動します。行に1を指定するとバッファーの先頭に移動します。もしポイントがバッファーの数字の上または直後にある場合、その数がnのデフォルトになります。ミニバッファーで単にRETを押すと、その数が使われます。数値のプレフィクス引数でnを指定してM-g M-gに与えることもできます。単にプレフィクス引数を与えた場合のM-g M-gの動作については、バッファーの作成と選択を参照してください。
数値nを読み取り、現在行のn列目に移動します。列0は最左列です。プレフィクス引数とともに呼び出された場合、引数で指定された数の列に移動します。
カレントバッファー内の現在ポイントがある列をC-nやC-pの半恒久的な目標列(semipermanent goal column)として使用します。目標列が有効な場合、これらのコマンドで垂直に移動すると、その列もしくはできる限り近い列に移動しようと試みます。目標列はキャンセルされるまで有効です。
目標列をキャンセルします。それ以降のC-nやC-pは通常どおり水平位置を保とうと試みます。
バッファーのテキストがウィンドウの幅より長い場合、通常Emacsは2行以上のスクリーン行(screen
lines)で表示します。便宜上、C-nとC-pそしてdownとupも、同様にスクリーン行にしたがってポイントを移動します。これらのコマンドを論理行(logical
lines)(たとえばバッファーのテキスト行)にしたがって移動させるには、line-move-visual
にnil
をセットします。そうすると論理行が複数のスクリーン行となるような場合、カーソルは追加されたスクリーン行をスキップします。詳細は継続行を参照してください。line-move-visual
などの変数をセットする方法については、変数を参照してください。
C-nやC-pと異なり、ほとんどのEmacsコマンドは論理的な行に作用します。たとえばC-a
(move-beginning-of-line
)やC-e
(move-end-of-line
)は、論理行の先頭もしくは最後に移動します。C-nやC-pのようにスクリーン行に作用するコマンドの場合、わたしたちはそれを示すようにします。
line-move-visual
がnil
の場合、変数track-eol
にも非nil
値をセットできます。そうすると論理行の行末でC-nやC-pを開始すると、次の論理行の行末に移動します。通常track-eol
はnil
です。
通常C-nをバッファーの最後の行で使用した場合、バッファーの最後でストップします。しかし変数next-line-add-newlines
に非nil
値をセットした場合、バッファーの最後の行でC-nを押すと、行を追加してその行に移動します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ポイントの前の文字、またはリージョンがアクティブのときはリージョンを削除します(delete-backward-char
)。
ポイントの後の文字、またはリージョンがアクティブのときはリージョンを削除します(delete-forward-char
)。
ポイントの後ろの文字を削除します(delete-char
)。
行末までkillします(kill-line
)。
次の単語(word)の末尾までを前方にkillします(kill-word
)。
前の単語の先頭までを後方にkillします(backward-kill-word
)。
コマンドDEL
(delete-backward-char
)は、ポイントの前の文字を削除して、カーソルと後ろの文字を後方に移動します。ポイントが行の先頭にある場合、前の改行を削除して、その行を前の行と連結します。
しかしリージョンがアクティブのとき、DELはリージョンのテキストを削除します。リージョンの説明は、マークとリージョンを参照してください。
ほとんどのキーボードでは、DELにはBACKSPACEというラベルがついていますが、このマニュアルではDELと呼ぶことにします(DELをDeleteと混同しないでください。Deleteについてはこの後で議論します)。いくつかのテキスト端末では、EmacsはDELを正しく認識しません。もしこの問題に遭遇したときには、DELで削除できない場合を参照してください。
コマンドDelete
(delete-forward-char
)は、反対方向に削除します。これはポイントの後ろの文字、たとえばカーソルの下の文字を削除します。ポイントが行末にある場合は、その行を次の行と連結します。DELと同様、リージョンがアクティブのときはリージョンのテキストを削除します(マークとリージョンを参照してください)。
C-d
(delete-char
)は、Deleteと同じようにポイントの後ろの文字を削除しますが、リージョンがアクティブかどうかは関係ありません。
上述した削除コマンドについての詳細な情報は、削除を参照してください。
C-k
(kill-line
)は行を一度に消去(kill)します。もし行頭または行の途中でC-kとタイプすると、行末までのすべてのテキストをkillします。行末でC-kとタイプすると、その行を次の行と連結します。
C-kと関連するコマンドについては、テキストのkillと移動を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
undoレコードにあるエントリーをundoします。通常1つのコマンドを元に戻す(undo
)ことに相当します(1つ目のキーはテキストモードのディスプレイでは利用できないかもしれない)。
Emacsはバッファー内のテキストに行われた変更のリストを記録しているので、最近の変更はundoできます。これはC-/(およびC-x
uとC-_)にバインドされているコマンドundo
を使って行われます。通常このコマンドは最後の変更をundoして、ポイントを変更前の位置に移動します。undoコマンドはバッファーへの変更のみに適用されるので、カーソルの動きをundoすることはできません。
個々の編集コマンドは、通常undoレコードの個別のエントリーとなりますが、とても単純なコマンドはグループ化される場合があります。1つのエントリーが、実は複雑なコマンドのほんの一部の場合もあります。
もしC-/(またはそれの別名コマンド)を繰り返すと、undoされた箇所はさらにundoされ、初期の変更もundoされ、ついには利用可能なundo情報の限界に達します。もし記録された変更がすべてundoされている場合、undoコマンドはエラーメッセージを表示して、何も行いません。
undo
コマンドについてさらに学ぶには、Undo(取り消し)を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsのバッファーに挿入したテキストは、Emacsのセッションの間だけ存在します。テキストを永続化させるためには、それをファイル(file)に保存しなければなりません。
ホームディレクトリーに、test.emacsという名前のファイルがあるとしましょう。このファイルをEmacsで編集するには、以下を入力します
C-x C-f test.emacs RET
ここでファイル名は、コマンドC-x C-f
(find-file
)に与えられる、引数(argument)です。このコマンドは引数を読み取るためにミニバッファー(minibuffer)を使い、RETは引数を終端させます(ミニバッファーを参照してください)。
このコマンドに従うために、Emacsはそのファイルをvisit(訪問)します:
すなわちバッファーを作成し、ファイル内容をバッファーにコピーし、編集のためにバッファーを表示します。テキストを変更したら、C-x C-s
(save-buffer
)と入力することにより、ファイルを保存(save)できます。これにより変更されたバッファー内容は、test.emacsに書き戻され永続化されます。保存するまでは、テキストへの変更はEmacs内部にだけ存在し、ファイルtest.emacsは変更されません。
ファイルを作成するには、すでにファイルが存在するかのようにC-x C-fでファイルをvisitするだけです。これはファイルに書き込みたいテキストを入力できる、空のバッファーを作成します。最初にこのバッファーをC-x C-sで保存するとき、Emacsは実際にファイルを作成します。
Emacsでファイルを使うことについてさらに学ぶには、ファイルの処理を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
もしキーが何をするか忘れた場合、C-h k
(describe-key
)と入力して、それに続けて関心のあるキーを入力します。たとえばC-h k
C-nは、C-nが何をするか表示します。
プレフィクスキーC-hは“ヘルプ(help)”が由来です。F1キーはC-hの別名です。C-h k以外にも、異なる種類のヘルプを提供する多くのヘルプコマンドがあります。
詳細については、ヘルプを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
空行を挿入したり削除するための、特別なコマンドとテクニックがあります。
カーソルの後ろに空行を挿入します(open-line
)。
連続する空行を、1行残してすべて削除します(delete-blank-lines
)。
これまでRET
(newline
)が、どうやってテキストの新しい行を開始するのか見てきました。しかし最初に空行を作ってからテキストを挿入するほうが、何を行っているのかわかりやすいでしょう。これはキーC-o
(open-line
)を使えば、簡単に行うことができます。これはポイントの後ろに改行を挿入し、ポイントを改行の前に維持します。C-oの後に新しい行のためのテキストを入力します。
複数の空行はC-oを数回入力するか、何個の空行を作るのかを数引数で与えれば作れます。方法については、数引数を参照してください。もしフィルプレフィクスがあって、行頭でC-oが入力された場合、新しい行にフィルプレフィクスを挿入します。フィルプレフィクスを参照してください。
余分な空行を取り除く簡単な方法は、C-x C-o
(delete-blank-lines
)です。連続する空行の中にポイントがあるとき、C-x
C-oは1行残してすべての空行を削除します。ポイントが単独の空行にある場合、C-x
C-oはその空行を削除します。ポイントが空でない行にある場合、C-x C-oは、後続する空行があれば、それらすべてを削除します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
バッファー内のテキストの行 — 論理行(logical line) — がウィンドウに収まらないほど長い場合、Emacsがそれを2行以上のスクリーン行(screen lines)で表示するときがあります。これは行の折り返し(line wrapping)または継続(continuation)と呼ばれ、論理行は継続された行(continued line)と呼ばれます。グラフィカルなディスプレーでは、Emacsは行の折り返しをウィンドウの左右のフリンジ(fringes、縁)の小さな曲矢印で示します。テキスト端末では、Emacsは右の余白に‘\’を表示して行の折り返しを示します。
ほとんどのコマンドは、スクリーン行ではなく論理行にたいして作用します。たとえばC-kは論理行をkillします。前に説明したように、C-n
(next-line
)とC-p
(previous-line
)は特別な例外です。これらはスクリーン行にたいしてポイントを上下に移動させます(ポイント位置の変更を参照してください)。
Emacsはオプションで長い論理行を継続するかわりに、切り詰める(truncate)ことができます。これは論理行が1つのスクリーン行を占めることを意味します。もし論理行がウィンドウ幅より長い場合、行の残りは表示されません。グラフィカルなディスプレーでは切り詰められた行は、右フリンジの小さな直矢印で示されます。テキスト端末では右余白の‘$’で示されます。行の切り詰めを参照してください。
デフォルトでは継続行はウィンドウの右端で折り返されます。折り返しが単語の途中で発生すると、継続された行は読むのが難しくなります。普通の解決策は、行が長くなりすぎる前に改行を挿入することです。もしお好みなら、行が長くなりすぎたときにEmacsが自動的に改行を挿入するように、Auto Fillモードを使うことができます。テキストのフィルを参照してください。
多くの長い論理行を含むファイルを編集する必要があり、それらすべてを改行で分割するのが実用的でない場合があります。そのようなケースでは単語折り返し(word wrapping)が有効なVisual Lineモードを使うことができます。これは長い行を正確にウィンドウの右端で折り返すのではなく、ウィンドウの右端に一番近い単語境界(スペースやタブなど)で折り返します。Visual Lineモードでは、C-a、C-n、C-kなどの編集コマンドも、論理行ではなくスクリーン行を処理するように再定義されます。Visual Lineモードを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
バッファーのある部分にたいしてサイズや位置、単語数や行数についての情報を得るためのコマンドがあります。
ポイントの行番号を表示します。
現在の行番号および列番号の自動表示を切り替えます。モードラインのオプションを参照してください。各行の前に行番号を表示したい場合は、ディスプレーのカスタマイズを参照してください。
現在のリージョンの行数、単語数、文字数を表示します(count-words-region
)。リージョンについては、マークとリージョンを参照してください。
現在のバッファーの行数、単語数、文字数を表示します。リージョン(マークとリージョンを参照してください)がアクティブのときは、かわりにリージョンの数字を表示します。
ポイントの後ろの文字の文字コード、ポイントの文字位置、ポイントの列位置を表示します(what-cursor-position
)。
現在行のハイライト表示を有効または無効にします。カーソルの表示を参照してください。
バッファーのサイズの自動表示を切り替えます。モードラインのオプションを参照してください。
M-x
what-lineは、エコーエリアに現在の行番号を表示します。通常このコマンドは不必要です。なぜならモードラインに現在の行番号が、すでに表示されているからです
(モードラインを参照してください)。しかしバッファーがナロー(narrow:
制限)されている場合、モードラインはアクセスできる範囲についての行番号しか表示しません(ナローイングを参照してください)。それにくらべてwhat-line
は、制限されたリージョンとバッファー全体、両方の行番号を表示します。
M-=
(count-words-region
)はリージョン内の行数、単語数、文字数を報告するメッセージを表示します(リージョンについての説明は、マークとリージョンを参照してください)。プレフィクス引数C-u
M-=を指定すると、このコマンドはバッファー全体の数字を表示します。
M-x count-wordsは同じことを行いますが、呼び出し規約が異なります。もしリージョンがアクティブの場合はリージョン、そうでない場合はバッファーの数字を表示します。
コマンドC-x =
(what-cursor-position
)は現在のカーソル位置と、その位置にあるバッファー内容についての情報を表示します。エコーエリアには、以下のような行が表示されます:
Char: c (99, #o143, #x63) point=28062 of 36168 (78%) column=53
‘Char:’には、バッファー中のそのポイントにある文字が表示されます。カッコ内にはその文字に対応する文字コードが10進、8進、16進で表示されます。C-x =が文字の情報について表示する方法については、国際化文字セットのイントロダクションを参照してください。‘point=’はポイント位置を文字数(バッファーの最初の文字は1、次の文字は2、...)で表示します。その後ろの数字ではバッファー内の文字数の合計が表示され、カッコ内にはその位置が全体から見て何パーセントの位置なのかが表示されます。‘column=’にはポイントの水平位置、すなわちウィンドウの左端から数えて何番目の列かが表示されます。
ユーザーオプションwhat-cursor-show-names
が非nil
ならUnicode文字データベース(Unicode
Character Database)で定義されておいるような名前が同様に表示されます。カッコ内の部分は以下のようになります:
(99, #o143, #x63, LATIN SMALL LETTER C)
もしバッファーがナローされている場合、最初と最後の部分のテキストが一時的にアクセス不能になります。C-x =は現在アクセス可能な範囲についての追加説明を表示します。たとえば以下のように表示します:
Char: C (67, #o103, #x43) point=252 of 889 (28%) <231-599> column=0
ここで、新たに追加された2つの数字が、ポイントを設定できる文字位置の下限と上限を示します。これら2つの位置のあいだの文字が参照可能な文字です。ナローイングを参照してください。
関連はあるものの異なる機能がdisplay-line-numbers-mode
(ディスプレーのカスタマイズを参照)です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
数学や計算機の用語では、引数(argument)という単語は、“関数や操作に与えるデータ”を意味します。Emacsのコマンドには、数引数(numeric argument)(プレフィクス引数(prefix argument)とも呼ぶ)を指定できるものがあります。引数を反復回数として解釈するコマンドもあります。たとえば、引数10をC-fに指定すると、カーソルを通常の1文字ではなく、10文字分前向きに移動します。これらのコマンドでは、引数を指定しないと引数1を指定したのと同等になります。この種のコマンドの多くでは、負の引数を指定すると、逆向きの移動や逆の操作を指示することになります。
数引数を指定するもっとも簡単な方法は、Metaキーを押しながら数字またはマイナス記号(と数字)を入力する方法です。以下はその例です:
M-5 C-n
これは5行下に移動します。キーM-1、M-2、...、同様にM--は、次のコマンドへの引数をセットアップするコマンド、(digit-argument
とnegative-argument
)にバインドされています。数字をともなわないM--は、通常-1を意味します。
2桁以上の数字を入力したい場合、2文字目以降の数字を入力するときにMetaを押しつづける必要はありません。つまり50行下に移動するときは、以下のように入力します:
M-5 0 C-n
これは、(あなたが期待するように)‘0’を5つコピーして挿入してから1行下がるのではないことに注意してください。‘0’はプレフィクス引数の一部として扱われます。
(‘0’を5つコピーして挿入するときは、M-5 C-u 0と入力します。ここでC-uはプレフィクス引数を終端させるので、次のキー入力はあなたが実行したいコマンドです。ここでのC-uの意味はこのケースだけに適用される使い方です。C-uの通常の役割については以下を参照してください。)
数引数を指定する別の方法として、M-1、M-2、...と入力するかわりに、C-u
(universal-argument
)のあとに数字(負の引数の場合はマイナス記号と数字)を入力する方法があります。通常、数字をともなわないマイナス記号は-1を意味します。
単独のC-uは、“4倍”という特別な意味をもち、次のコマンドの引数を4倍にします。C-u C-uは16倍です。つまりC-u C-u C-fは16文字前方に移動します。その他に便利な使い方としてはC-u C-n、C-u C-u C-n(適当な割り合いで画面を下に移動する)や、C-u C-u C-o(16個の空行を作る)、C-u C-k(4行削除する)、などがあります。
自分自身を挿入する文字の前に数引数を使えば、指定した分のコピーを挿入できます。これは挿入したい文字が数字でないときは簡単です。たとえばC-u 6 4 aは、‘a’を64個コピーして挿入します。しかし数字を挿入したいときは、これではうまくいきません。C-u 6 4 1は引数に641を指定することになってしまいます。このようなときは引数と挿入したい数字を分けるために、他のC-uを使うことができます。たとえばC-u 6 4 C-u 1とすれば、これは‘1’を64個コピーして挿入します。
引数の有無は確認しても、その値は無視するコマンドもあります。たとえばコマンドM-q
(fill-paragraph
)は、1行に収まるようできるだけテキストをフィルしますが、引数をともなうと、余分なスペースを挿入してテキストが正確に1行の最大幅を使うよう均等に割り付けてフィルします(M-qについては、テキストのフィルを参照してください)。このようなコマンドは、引数として単にC-uを指定するだけで充分です。
引数の値を繰り返しの回数として使いますが、引数がないときは特別な処理を行うコマンドもあります。たとえばコマンドC-k
(kill-line
)に引数nを指定すると、これは行末の改行も含めてn行をkillします。しかし引数を指定しないでC-kした場合、ポイントから改行までのテキストをkillするか、ポイントが行末にある場合は改行をkillします。つまりコマンドC-kを引数なしで2回呼び出すと、C-kに引数1を指定したのと同様、空でない行をkillできます(C-kについての情報は、テキストのkillと移動を参照してください)。
いくつかのコマンドは、C-uだけの引数を通常の引数とは異なるものとして扱います。また、マイナス記号のみの引数を、-1とは区別するコマンドもあります。これらの例外については、必要になったときに説明します。これらの例外は、それぞれのコマンドを使いやすくするためにあり、コマンドのドキュメント文字列に記載されています。
コマンドの前に引数を入力するという点を強調するために、そしてコマンドが呼び出された後に入力されるミニバッファー引数(ミニバッファーを参照してください)と区別するために、わたしたちはプレフィクス引数(prefix argument)という言葉を使います。
グラフィカルなディスプレイではC-0、C-1、...はM-0、M-1、...と同じように振る舞います。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
単純なキーで呼び出されるものや、M-x command-name RETで実行できるような多くのコマンドは、数引数で繰り返し回数(数引数を参照してください)を与えることで、その回数だけ繰り返すことができます。しかし、入力を求めるものや数引数を別の目的に使うコマンドでは、この方法はうまくいきません。
コマンドC-x z
(repeat
)は、Emacsコマンドを何回も反復する別の方法です。このコマンドは、直前のEmacsコマンドが何であっても、それを繰り返します。繰り返されるコマンドは、まえと同じ引数を使います。毎回新たに引数を読み取ることはしません。
コマンドを2回以上繰り返すにはzを追加して入力します。1つのzでコマンドを1回繰り返します。z以外の文字を入力するか、マウスボタンを押すと繰り返しを終了します。
たとえば、20文字削除するためにC-u 2 0 C-dと入力したとしましょう。C-x z z zと入力すれば、(引数を含めて)削除コマンドをさらに3回繰り返し、全部で80文字削除できます。始めのC-x zでコマンドを1回繰り返し、そのあとのそれぞれのzで1回ずつ繰り返します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ミニバッファー(minibuffer)とは、Emacsのコマンドがファイル名、バッファー名、Emacsコマンド名、Lisp式といった、複雑な引数を読み取るための場所です。なぜ“ミニバッファー”と呼ぶかというと、それがスクリーン上の小領域を占める、特別な目的のためのバッファーだからです。ミニバッファーで引数テキストを編集するために、通常のEmacs編集コマンドを使うことができます。
8.1 ミニバッファーを使う | ミニバッファーの基本的な使い方。 | |
8.2 ミニバッファーでのファイル名 | ミニバッファーでファイル名を入力する。 | |
8.3 ミニバッファーでの編集 | ミニバッファーで編集する方法。 | |
8.4 補完 | ミニバッファーでの入力のための略語機能。 | |
8.5 ミニバッファーヒストリー | 最近のミニバッファー引数の再使用。 | |
8.6 ミニバッファーでのコマンドの繰り返し | ミニバッファーを使ったコマンドの再実行。 | |
8.7 パスワードの入力 | エコーエリアでパスワードを入力する。 | |
8.8 Yes or No プロンプト | エコーエリアでyes/noにこたえる。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ミニバッファーを使用中、ミニバッファーはエコーエリアにカーソルとともに表示されます。ミニバッファーは通常、コロンが最後についたプロンプト(prompt)から開始されます。プロンプトはどのような入力が期待されるか、そしてそれがどのように使われるのかを示します。プロンプトは、フェイスminibuffer-prompt
を使ってハイライトされます。
ミニバッファーで入力するもっとも簡単な方法は、テキストを入力してからRETで引数入力を完了してミニバッファーを終了する方法です。かわりにC-gを入力して引数を求めているコマンドをキャンセルし、ミニバッファーを終了することもできます(中止と中断を参照してください)。
コロンの前のカッコ内にデフォルト引数(default argument)を表示するプロンプトもあります。このデフォルト値は、RETだけを入力したときに、引数として使用されます。たとえばバッファー名を読み取るコマンドは、通常デフォルト値としてバッファー名を表示します。RETを入力することでデフォルトのバッファーにたいして処理を行うことができます。
Minibuffer Electric
Defaultモードというグローバルマイナーモードを有効にしている場合、ミニバッファーの内容の変更を開始すると、Emacsはデフォルト引数を非表示にします。ミニバッファーのテキストを元に戻せば、ふたたびプロンプトにデフォルト値が表示されます。さらに変数minibuffer-eldef-shorten-default
を非nil
値に変更すると、スクリーンのスペースを節約するために、‘(default
default-arg)’のかわりに‘[default-arg]’の形式でデフォルト値を表示します。このマイナーモードを有効にするには、M-x
minibuffer-electric-default-modeとタイプしてください。
エコーエリアにミニバッファーが表示されると、他のエコーエリアの使用と競合するかもしれません。ミニバッファーがアクティブなとき、エラーメッセージや情報メッセージは一時的な表示となります。メッセージは数秒ミニバッファーを隠すように表示されるか、なにかタイプするまでのあいだ表示され、その後ミニバッファーに戻ります。ミニバッファーの使用中、Emacsはキーストロークをエコーしません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
C-x C-f
(find-file
)のようなコマンドは、ミニバッファーを使ってファイル名引数を読み取ります。ファイル名を読み取るためにミニバッファーを使用しているとき、通常は最後にスラッシュがついたテキストで開始されています。これはデフォルトディレクトリー(default
directory)です。たとえば以下のように開始されていたとします:
Find file: /u2/emacs/src/
ここで‘Find file: ’はプロンプト、‘/u2/emacs/src/’はデフォルトディレクトリーです。ここでbuffer.cを入力すると/u2/emacs/src/buffer.cを指定したことになります。デフォルトディレクトリーについての情報は、ファイルの名前を参照してください。
あなたが望むかもしれないファイル名のデフォルト候補は、M-nとタイプすることにより利用できます。ミニバッファーヒストリーを参照してください。
..で親ディレクトリー内のファイルを指定できます。つまり/a/b/../foo.elは/a/foo.elと同じです。M-DELを使えば、ディレクトリー名を後方にkillできます(単語を参照してください)。
デフォルトディレクトリーとは無関係のファイルを指定する場合、デフォルト値全部をC-a C-kでkillできます。かわりにデフォルト値を無視することもできます。これはスラッシュで始まる絶対パスのファイル名か、チルダで始まるファイル名をデフォルトディレクトリーに続けて入力します。たとえば以下のようにして/etc/termcapを指定できます:
Find file: /u2/emacs/src//etc/termcap
ダブルスラッシュにより、Emacsは2番目のスラッシュより前のすべてを無視します。上の例では/u2/emacs/src/は無視されるので、引数は/etc/termcapとなります。無視される部分のファイル名は、端末に可能なら目立たないような表示になります(これを無効にするには、コマンドM-x file-name-shadow-modeでFile Name Shadowモードをオフにしてください)。
リモートファイルの名前(リモートファイルを参照)を補完する際、ダブルスラッシュは若干異なる挙動を示します。この場合のダブルスラッシュは、Emacsがファイル名の部分だけを無視して、他の部分(method、host、username、...など)を手付かずのままにするようにします。3つのスラッシュを連続してタイプすると、リモートファイル名の中のすべてを無視します。File name completion in The Tramp Manualを参照してください。
Emacsは~/をホームディレクトリーと解釈します。~/foo/bar.txtはホームディレクトリーにある、fooというディレクトリーの、bar.txtという名前のファイルを指定します。さらに~user-id/はログイン名がuser-idというユーザーの、ホームディレクトリーを意味します。~の前のディレクトリー名は無視されるので、/u2/emacs/~/foo/bar.txtは~/foo/bar.txtと同じです。
MS-WindowsとMS-DOSでは、ユーザーは常にホームディレクトリーを持つとは限らないので、Emacsはいくつかの代替ディレクトリーを使います。MS-WindowsについてはMS-WindowsでのHOMEディレクトリーと開始ディレクトリー、MS-DOSについては MS-DOSでのファイル名を参照してください。 これらのシステムでは~user-id/は現在のユーザーの場合だけ、つまりuser-idが現在のユーザーのログイン名のときだけがサポートされます。
Emacsがファイル名を読みとるとき、デフォルトディレクトリーを挿入しないようにするには、変数insert-default-directory
をnil
に変更します。この場合、ミニバッファーは空で開始されます。それでも相対パスでのファイル名引数は、同じデフォルトディレクトリーにもとづいて解釈されます。
ミニバッファーにリモートファイル名を入力することもできます。 リモートファイルを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ミニバッファーは一風変わっていますがEmacsのバッファーなので、引数テキストを編集するための、通常のEmacsコマンドが利用可能です(しかしプロンプトは読み取り専用(read-only)なので変更できません)。
ミニバッファーでのRETは引数を完了させるので、これを使って改行を挿入することはできません。C-q
C-jを使えば制御文字C-j(改行文字と等しい)を挿入できます(テキストの挿入を参照してください)。かわりにC-o (open-line
)を使うこともできます(空行を参照してください)。
ミニバッファーの中ではTAB、SPC、?は補完コマンド(completion commands)にバインドされている場合があります。これによりテキスト全部を入力せずに、入力したいテキストを簡単に入力できます。補完を参照してください。RETのときと同様、C-qを使ってTAB、SPC、‘?’のような文字を入力できます。
便宜上ミニバッファーでのC-a
(move-beginning-of-line
)は、プロンプトの先頭ではなく引数テキストの先頭にポイントを移動します。これにより、たとえばC-a
C-kで引数全体をkillことができます。
ミニバッファーがアクティブのとき、エコーエリアは通常のEmacsウィンドウのように扱われます。たとえば(C-x oで)他のウィンドウに切り替えて、そこでテキストを編集して、またミニバッファーのウィンドウにもどって引数の入力を完了できます。ほかのウィンドウでテキストをkillしてからミニバッファーのウィンドウにもどり、引数にテキストをyankすることさえ可能です。しかしミニバッファーのウィンドウは分割(split)できないなどの制限もあります。複数ウィンドウを参照してください。
通常ミニバッファーのウィンドウは、スクリーン行で1行を占めます。しかし2行以上のテキストをミニバッファーに追加すると、そのテキストに対応して自動的に拡張されます。変数resize-mini-windows
は、ミニバッファーのサイズ調整を制御します。デフォルト値はgrow-only
で、これは今説明したとおりの振る舞いを意味します。もし値がt
の場合、ミニバッファーから行を削除すると。ミニバッファーのウィンドウは自動的に縮小されて、スクリーン行で1行まで小さくなります。値がnil
の場合、ミニバッファーのウィンドウは自動的にサイズを変更しません。しかし通常のウィンドウのサイズ調整コマンドは使用できます(複数ウィンドウを参照してください)。
変数max-mini-window-height
は、ミニバッファーのウィンドウのサイズ変更するときの、最大高さを制御します。浮動少数を指定した場合は、フレームの高さにたいする比になります。整数を指定した場合は最大行数になります。nil
を指定すると、ミニバッファーのウィンドウの自動サイズ調整は行われません。デフォルト値は0.25です。
ミニバッファーでのC-M-vコマンドは、他のウィンドウに表示されたコマンドのヘルプテキストをスクロールします。M-PageUpやM-PageDown(またはM-priorやM-next)でも、ヘルプテキストをスクロールできます。これは長い補完候補のリストを選ぶときなどに便利です。他のウィンドウの使用を参照してください。
Emacsではミニバッファーがアクティブのときには、通常はミニバッファーにたいして多くのコマンドが使用できないようになっています。ミニバッファーでこれらのコマンドを使えるようにするには、変数enable-recursive-minibuffers
にt
をセットしてください。ミニバッファーを再帰的に使用中にミニバッファーのプロンプトにカレントの再帰深さを表示するために、minibuffer-depth-indicate-mode
も有効にする必要があるかもしれません。
アクティブでないとき、ミニバッファーはminibuffer-inactive-mode
になっており、mouse-1をクリックすると、*Messages*バッファーを表示します。ミニバッファー専用のフレームを使用している場合、Emacsはそこでのキー入力も認識します。たとえばnは新しいフレームを作成します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
引数を入力する助けとなる、補完(completion)という機能が使えるときがあります。これは引数の一部を入力すると、それまでに何を入力したかにもとづいて、Emacsが残りあるいは残りの一部を補完してくれることを意味します。
補完が利用可能なとき、特定のキー(通常はTAB、RET、SPC)が、ミニバッファーの特別な補完コマンド(補完コマンドを参照してください)にリバインドされています。これらのコマンドは、ミニバッファーのテキストを完了させようと試みます。これは引数を要求したコマンドが提供する、補完候補(completion alternatives)にもとづいています。通常?を入力すると、補完候補のリストを見ることができます。
補完は通常ミニバッファー内で行われますが、通常のバッファーないでもこの機能を利用可能なときがあります。シンボル名の補完を参照してください。
8.4.1 補完の例 | 補完の使い方の例。 | |
8.4.2 補完コマンド | 補完コマンドのリスト。 | |
8.4.3 補完の終了 | 補完とミニバッファーでのテキストの確定。 | |
8.4.4 補完候補が選択される方法 | 補完のマッチが選ばれる方法。 | |
8.4.5 補完オプション | 補完のオプション。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ここでは簡単な例が理解しやすいでしょう。M-xは、コマンド名を読み取るためにミニバッファーを使います。補完はミニバッファーのテキストと、既存のEmacsコマンドの名前のマッチによって機能します。コマンドをauto-fill-mode
を実行したいとします。M-x
auto-fill-mode RETをタイプすればよいのですが、補完を使えばもっと簡単になります。
M-x a u
TABとタイプすると、TABは‘au’で始まる補完候補(この例ではコマンド名)を探します。auto-fill-mode
、autoconf-mode
などの候補がいくつかありますが、候補はすべてauto
で始まるので、ミニバッファーの‘au’は‘auto’に補完されます(あなたのEmacsのセッションには、もっと多くのコマンドが定義されているかもしれません。たとえばauthorize-me
というコマンドが定義されている場合には、Emacsが補完できるのは‘aut’までです)。
もう一度TABをタイプしても、次の文字は‘-’、‘a’、‘c’のどれなのか決定できません。そのため文字は追加されず、かわりにTABは可能性のある補完候補の一覧を別のウィンドウに表示します。
次に-fと入力します。ミニバッファーには‘auto-f’が入力されました。この文字で始まるコマンド名は、auto-fill-mode
だけです。ここでTABを入力すると、残りの部分が補完されて、ミニバッファーの引数は‘auto-fill-mode’になります。
したがってa u TAB - f TABと入力するだけで、‘auto-fill-mode’と入力できるのです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下は補完が使えるときに、ミニバッファーで定義されている補完コマンドの一覧です。
可能な限りミニバッファーのテキストを補完します。補完できないときは、可能性のある補完候補のリストを表示します(minibuffer-complete
)。
ミニバッファーのテキストを単語単位で補完します(minibuffer-complete-word
)。このコマンドは、引数にスペースが含まれる可能性のあるファイル名などでは利用できません。
最初に可能な限り補完した後で、ミニバッファーのテキストを引数として確定します。補完の終了を参照してください。
補完候補の一覧を表示します(minibuffer-completion-help
)。
TAB
(minibuffer-complete
)は、もっとも基本的な補完コマンドです。これはミニバッファーのテキストとマッチする可能性のある、すべての補完候補を検索して、できるかぎりの補完を試みます。補完候補が選択される方法については、補完候補が選択される方法を参照してください。
SPC
(minibuffer-complete-word
)は、TABと同じように補完をおこないますが、次のハイフンまたは空白までしか補完しません。ミニバッファーが‘auto-f’の場合、‘auto-fill-mode’まで補完できますが、‘ill-’しか挿入しないので‘auto-fill-’となります。次にSPCを入力すると‘auto-fill-mode’が補完されます。
TABやSPCが補完できない場合、マッチする補完候補のリスト(複数ある場合)を、別のウィンドウに表示します。同じリストは?
(minibuffer-completion-help
)でも表示できます。以下は補完一覧で使うことができるコマンドです:
ミニバッファーでM-vを入力すると、候補リストを表示しているウィンドウを選択します(switch-to-completions
)。以下のコマンドを使うには、この方法がよいでしょう。PageUpとpriorは同じことをおこないます。他の方法でもウィンドウを選択できます(複数ウィンドウを参照してください)。
補完候補リストのバッファー内では、ポイント位置の補完候補を選択します(choose-completion
)。
補完候補リストのバッファー内では、これらのキーは次の補完候補にポイントを移動します(next-completion
)。
補完候補リストのバッファー内では、これらのキーは前の補完候補にポイントを移動します(previous-completion
)。
補完候補リストのバッファー内ではリストバッファーを表示中のウィンドウをquitして、ミニバッファーを表示中のウィンドウを選択します
補完候補リストのバッファー内ではリストバッファーをkillしてそれを表示中のウィンドウを削除します(kill-current-buffer
)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
コマンドがミニバッファーの補完を使って引数を読みとる場合、引数を確定するためにRET
(minibuffer-complete-and-exit
)をタイプしたときに、何が起こるかも制御します。これには4種類の動作があります:
この動作をおこなうコマンドの例はM-xで、それは存在しないコマンド名を受けとるのは無意味だからです。
慎重な補完は、たとえば存在しなければならないファイル名を読みとるときに使用されます。
変数confirm-nonexistent-file-or-buffer
をカスタマイズして、確認動作を微調整できます。デフォルト値のafter-completion
は、まさに説明したとおりに動作します。これをnil
に変更すると、Emacsは確認を求めなくなり、寛大な補完にフォールバックします。他の非nil
値に変更した場合、その前のコマンドがTABかどうかにかかわらず、Emacsは確認を求めます。
この動作はファイル名を読みとるC-x C-fや、バッファー名を読み取るC-x bなど、多くのコマンドで使われています。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
補完コマンドは、たくさんの可能性のある補完候補を、ミニバッファーに入力したものとマッチ(match)する、より少ないサブセットへと絞り込むことにより機能します。補完の例では、そのようなマッチングの簡単な例を紹介しました。どのような構成がマッチなのかを決定する手続きはとても複雑です。Emacsは多くの状況下でもっとも妥当と思われる補完を試みます。
Emacsは1つ以上の補完スタイル(completion styles)を使って補完をおこないます。これはミニバッファーのテキストを補完候補とマッチングするための条件のセットです。補完を行うとき、Emacsは補完スタイルを順番に試します。もしあるスタイルが1つ以上のマッチを獲得した場合、それらは補完候補リストのために使用されます。もしあるスタイルがマッチを獲得できなかった場合、Emacsは次のスタイルにフォールバックします。
リスト変数completion-styles
は、使用する補完スタイルを定義します。それぞれのリスト要素(list
element)は、補完スタイルの名前(Lispシンボル)です。デフォルトの補完スタイルは、リスト変数に以下の名前の要素が順番に並んでいます。
basic
ミニバッファーのポイントより前のテキストと、補完候補の先頭が同じでなければなりません。さらにミニバッファーのポイントより後ろのテキストがある場合、補完候補の残りそれが含まれていなければなりません。
partial-completion
このアグレッシブな補完スタイルは、ミニバッファーのテキストをハイフンまたは空白で区切り、各単語ごとに補完をおこないます(たとえばコマンド名を補完する場合、‘em-l-m’は、‘emacs-lisp-mode’に補完されます)。
さらにミニバッファーのテキスト中の‘*’は、ワイルドカード(wildcard)として扱われます。これは補完候補の対応する位置にある文字列の、任意の文字とマッチします。
emacs22
この補完スタイルはbasic
とにていますが、ミニバッファーのポイントより後のテキストを無視します。この名前は補完の動作がEmacs
22と同じだからです。
以下の追加の補完スタイルが定義されており、completion-styles
に追加することもできます(カスタマイズを参照してください)。
substring
補完候補は、ミニバッファーのポイントより前のテキストと、ポイントより後のテキストが同じ順番で含まれていなければなりません。
したがって、ミニバッファーのテキストが‘foobar’で、ポイントが‘foo’と‘bar’の間にある場合、‘afoobbarc’にマッチします。この場合a、b、cは空文字列を含む任意の文字列です。
initials
このとてもアグレッシブな補完スタイルは、頭文字とイニシャルで補完を試みます。たとえばコマンド名の補完をする場合、‘lch’は‘list-command-history’とマッチします。
emacs21
と呼ばれる、とてもシンプルな補完スタイルもあります。このスタイルでは、ミニバッファーのテキストが‘foobar’の場合、‘foobar’で始まるものだけにマッチします。
変数completion-category-overrides
を設定することにより、状況に応じて異なる補完スタイルを使うことができます。たとえばバッファー名を補完するときは、デフォルトでbasic
とsubstring
だけを使うよう指定できます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
大文字小文字の違いは、コマンド名のように大文字小文字を区別する(case-sensitive)引数では重要です。たとえばコマンド名の補完では、‘AU’では‘auto-fill-mode’に補完されません。大文字小文字の違いは、それが問題にならない引数の補完では無視されます。
ファイル名を補完するとき、変数read-file-name-completion-ignore-case
が非nil
なら、大文字小文字の違いは無視されます。GNU/Linuxのように、ファイル名の大文字と小文字を区別するシステムでは、デフォルト値はnil
です。Microsoft
Windowsのように、ファイル名の大文字と小文字を区別しないシステムでは、非nil
です。バッファー名を補完するとき、read-buffer-completion-ignore-case
が非nil
なら、大文字小文字の違いは無視されます。デフォルトはnil
です。
通常Emacsはファイル名を補完するとき、選ばれるべきではないと思われる、特定の候補を無視します。これはリスト変数completion-ignored-extensions
により決定されます。リストの要素はに文字列を指定します。それらの文字列で終わるファイル名は、補完候補としては無視されます。スラッシュ(/)で終わる要素は、ディレクトリー名を表します。completion-ignored-extensions
の標準的な値は".o"
、".elc"
、"~"
を含むいくつかの要素です。たとえばディレクトリーに‘foo.c’、‘foo.elc’があるとき、‘foo’は‘foo.c’に補完されます。しかしすべての補完候補が無視すべき文字列で終わるとき、これらの候補は無視されません。前の例でいうと‘foo.e’は‘foo.elc’に補完されます。Emacsは補完候補リストで補完候補を表示するとき、completion-ignored-extensions
を無視します。
Shellでの補完は、ファイル名補完の拡張されたバージョンです。Shellモードのオプションを参照してください。
completion-auto-help
にnil
がセットされていると、補完コマンドは補完リストバッファーを表示しません。表示するには?を入力しなければなりません。値がlazy
の場合、Emacsは2度目の補完を試みたときだけ、補完リストバッファーを表示します。もし補完すべきものがない場合、1度目のTABは‘Next
char not unique’と表示し、2度目のTABで補完リストバッファーが表示されます。
completion-cycle-threshold
が非nil
のとき、補完コマンドは補完候補を循環(cycle)することができます。ミニバッファーのテキストで1つ以上の補完候補がある場合は通常、補完コマンドは補完できた文字までを表示します。completion-cycle-threshold
をt
に変更すると、補完コマンドは補完候補の中から最初の候補を表示します。それ以降の補完コマンドの呼び出しでは、その次の補完候補を循環的に表示します。completion-cycle-threshold
を数値nにすると、補完候補がn以下のときだけ循環表示の動作をします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ミニバッファーで入力したすべての引数は、ミニバッファーヒストリーリスト(minibuffer history list)に保存されているので、簡単に後でまた使うことができます。以下のコマンドにより、前の引数をすばやく探してミニバッファーに呼び出すことができます:
ミニバッファーヒストリーの前のアイテム、つまり以前のアイテムに移動します(previous-history-element
)。
ミニバッファーヒストリーの次のアイテムに移動します(next-history-element
)。
M-pやM-nと同様ですが、前のヒストリーアイテムに移動する前に、複数行アイテムの前、または次の行に移動します(previous-line-or-history-element
、およびnext-line-or-history-element
)。
regexpにマッチする、ミニバッファーヒストリーの以前のアイテムに移動します(previous-matching-history-element
)。
regexpにマッチする、ミニバッファーヒストリーの以降のアイテムに移動します(next-matching-history-element
)。
ミニバッファーでのM-p
(previous-history-element
)は、ミニバッファーのヒストリーリストのアイテムを1つずつ移動します。M-pはヒストリーリストの以前のアイテムを取り出して、ミニバッファーの既存の内容を置き換えます。M-n
(next-history-element
)は、ミニバッファーのヒストリーリストを反対方向、つまり以降のエントリーを取り出してミニバッファーの既存の内容を置き換えます。
ミニバッファーヒストリーに以降のエントリーがないとき(たとえば前に1回もM-pを入力していないとき)、Emacsはデフォルト引数のリストから、あなたが入力するだろうと思われる値を取り出します。これは“未来のヒストリー”を移動すると考えることもできます。
ファイルにたいする“未来のヒストリー(future
history)”には、カレントバッファー内のポイント位置にあるファイル名やURLのような、あなたが便利だと思うかもしれないいくつかの候補が含まれます。この場合、“未来のヒストリー”に配されるデフォルトは、オプションfile-name-at-point-functions
の値にセットされた関数により制御されます。デフォルトでは、この値はffap
パッケージ((ポイント位置のファイルやURLを開く)を参照)を呼び出します。これはポイント周辺のテキストからデフォルトとなるファイルやURLを推測します。この推測を無効にするには、このオプションをnil
値にカスタマイズします。これにより“未来のヒストリー”に含まれるのは、(もしあれば)カレントバッファーでvisitされたファイル、およびデフォルトディレクトリーのファイルだけになります。
矢印キーのUPとDOWNは、M-pやM-nのように機能しますが、カレントヒストリーアイテムが複数行の場合には、前(または次)のヒストリーアイテムに移動する前に、前(または次)の行に移動します。
ミニバッファーコマンドのM-pまたはM-nで挿入されたテキストを編集しても、ヒストリーリストのエントリーは変更されません。かわりに編集された引数が確定されたとき、ヒストリーリストの最後に追加されます。
M-r
(previous-matching-history-element
)でヒストリーリストの古い要素を、M-s
(next-matching-history-element
)で新しいエントリーを探すことができます。これらのコマンドはどちらも引数として正規表現(regular
expression)を要求し、それにマッチした最初のエントリーをミニバッファーに取り出します。正規表現についての説明は、正規表現の構文を参照してください。数引数nを指定すると、それはn番目に一致したエントリーを取り出すことを意味します。これらのコマンドはミニバッファーから呼び出されたとはいえ、ミニバッファーを使って正規表現を読みとるという点では、変わったコマンドです。正規表現に大文字が含まれていると、大文字小文字を区別する検索(検索中のLaxマッチングを参照してください)となります。
ヒストリーをインクリメンタルサーチすることもできます。ミニバッファーの検索を参照してください。
Emacsは引数の種類ごとに個別のリストを保持します。たとえばファイル名のリストは、ファイル名を読みとるすべてのコマンドで使われたファイル名、といった具合です。ほかのヒストリーリストとしてはバッファー名やコマンド名(M-xで使われたもの)、コマンド引数(query-replace
のような引数で使われたもの)があります。
変数history-length
には、ミニバッファーのヒストリーリストの最大の長さを指定します。リストが長くなりすぎたときは、一番古い要素を削除して新しい要素を追加します。t
を指定したときは、長さは無制限になります。
変数history-delete-duplicates
には、重複したヒストリーを削除するかを指定します。非nil
の場合、新しい要素が追加されるとリストからそれと同じ要素がすべて削除されます。デフォルトはnil
です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ミニバッファーを使用したコマンドはすべて、コマンドヒストリー(command history)という特別なヒストリーリストに記録されます。これにはコマンドの引数の値も記録されるので、コマンド全体を再実行できます。特にM-xはコマンド名を読みとるので、M-xを使用したものはすべてそこに記録されます。
コマンドヒストリーから最近のミニバッファーのコマンドを再実行します(repeat-complex-command
)。
コマンドヒストリー全体を表示します。表示されたすべてのコマンドはC-x ESC ESCで再実行できます。一番最近のものが先頭に表示されます。
C-x ESC ESCは、ミニバッファーを使った最近のコマンドを再実行します。引数を与えないと、一番最近のコマンドを実行します。数引数で再実行したいコマンドを指定します。1は一番最近のコマンド、2はその前、といった具合です。
C-x ESC ESCは、前のコマンドをLisp式に変換して、その式でミニバッファーのテキストを初期化します。Lispを知らなくても、何のコマンドが再実行用に表示されているか明白でしょう。単にRETを入力すると、コマンドを変更せずに再実行します。実行する前にLisp式を編集して、コマンドを変更できます。実行されたコマンドは、一番最近のコマンドと等しくなければ、コマンドヒストリーの一番先頭に追加されます。
C-x ESC ESCで一度ミニバッファーの中に入れば、通常のミニバッファーのヒストリーコマンド(ミニバッファーヒストリーを参照してください)を使って、ヒストリーリスト中を移動できます。以前に実行したコマンドが見つけたら、式を編集してRETにより実行できます。
厳密に言うとインクリメンタルサーチはミニバッファーを使いません。これが複雑なコマンドのように振る舞うとしても、通常はC-x ESC ESCで表示されるヒストリーリストに含まれません。ヒストリーにインクリメンタルサーチコマンドを表示させるには、isearch-resume-in-command-history
に非nil
をセットしてください。インクリメンタル検索を参照してください。
ミニバッファーを使用した以前のコマンドのリストは、Lispのリスト値としてcommand-history
に格納されています。Lisp式の各要素は、1つのコマンドとその引数をあらわしています。Lispプログラムはeval
にcommand-history
の要素を使って呼び出すことで、コマンドを再実行できます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsでパスワードを入力したい場合があります。たとえばEmacsにFTPのようなネットワークプロトコルを介して他のマシンのファイルをvisitし、マシンへのアクセスのためにパスワードを与える場合などです(リモートファイルを参照してください)。
パスワードの入力はミニバッファーの使用と似ています。Emacsは(‘Password: ’のような)プロンプトをエコーエリアに表示します。要求されたパスワードを入力した後、それを確定するためにRETを押します。他の人がパスワードを見るのを防ぐために、入力した文字は通常の形式ではなく、ドット(‘.’)で表示されます。
ミニバッファーに関連付けられた多くの機能およびコマンドは、パスワード入力では使用できません。ヒストリーや補完はできず、ウィンドウの変更やEmacsでの他の処理も、パスワードをsubmitするまでは行うことができません。
パスワードのタイプ中は、DELを押して後方に、すなわち最後に入力した文字から削除できます。C-uで入力したすべての文字を削除できます。C-gはパスワードプロンプトを閉じます(中止と中断を参照)。C-yは現在のkillリングからパスワードを挿入します(テキストのkillと移動を参照)。パスワードを確定するには、RETまたはESCを入力します。他の自己挿入文字は、対応する文字をパスワードに入力します.それ以外の入力は無視されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsのコマンドが実行の過程で、yes-or-no(はい/いいえ)形式で質問して答えを求めるかもしれません。これらの質問は大きく2つにわけることができます。
1番目のyes-or-no形式の質問は‘(y or n)’で終わるプロンプトの質問です。‘y’か‘n’いずれかの単一キーをタイプして質問に応答して、それによりミニバッーを即座にexitして応答を伝えます。たとえばバッファーの保存でC-x C-w (write-file)を入力して既存のファイル名を入力すると、Emacsは以下のようなプロンプトを表示します:
File ‘foo.el’ exists; overwrite? (y or n)
2番目のyes-or-no形式の質問は間違った答えが深刻な事態を招くような場合に使用される質問形式で、‘(yes or
no)’を編集する長いプロンプトが特徴です。たとえば変更が保存されていないファイルをvisitしているバッファーでC-x k
(kill-buffer
)を呼び出すと、Emacsはミニバッファーをアクティブにして以下のようなプロンプトを表示します:
Buffer foo.el modified; kill anyway? (yes or no)
これに答えるにはミニバッファーで‘yes’か‘no’の後にRETをタイプしなければなりません。
これらのyes-or-noによる2つの質問形式では、前のセクションで説明したようにミニバッファーは振る舞います。C-lによる選択されたウィンドウの再センタリング、ウィンドウのスクロール( C-vかPageDownで前方、M-vかPageUpで後方にスクロール)、C-x oによる別ウィンドウへの切り替え、M-pとM-nによるヒストリーコマンドの使用等が可能です。質問を終了するためにはC-gをタイプしてミニバッファーと問い合わせコマンドををquitします(中止と中断を参照)。これに答えるには、ミニバッファーに‘yes’または‘no’と入力してから、RETを押さなければなりません。ミニバッファーは前のセクションで説明したように動作します。C-x oによる他のウィンドウへのスイッチ、ヒストリーコマンドのM-pやM-nなどが使用できます。C-gでミニバッファーを閉じて、質問を発したコマンドを終了できます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
すべてのEmacsコマンドは、それを使えば実行できるような名前を持っています。使いやすいようにキーバインディングされているコマンドも、たくさんあります。これらのコマンドはキーまたは名前で実行できます。キーがバインドされていないコマンドもたくさんあり、そのようなコマンドは名前でしか実行できません(キーバインドをセットアップする方法については、キーバインディングのカスタマイズを参照してください)。
慣例によりコマンド名はauto-fill-mode
やmanual-entry
のように、ハイフンで区切られた、1つ以上の単語となっています。コマンド名は覚えやすいように、略されていない英単語が主に使われます。
コマンドを名前で実行するには、最初にM-xをタイプしてから、コマンド名をタイプしてRETで実行します。M-xはミニバッファーを使ってコマンド名を読みとります。ミニバッファーの先頭には、実行のために名前の入力が必要なことを気付かせるため、‘M-x’という文字がプロンプトとして表示されます。RETでミニバッファーを抜けだしコマンドを実行します。ミニバッファーについての詳細は、ミニバッファーを参照してください。
コマンド名の入力には補完が使用できます。たとえばforward-char
を呼び出すには以下のように入力できます
M-x forward-char RET
または
M-x forw TAB c RET
forward-char
は、キーC-fで呼び出されるのと同じコマンドであることに注意してください。キーバインドの存在は、名前によるコマンドの実行を妨げません。
M-xでコマンドを補完するとき、obsolete(時代遅れ)と宣言されたコマンドは無視されます。これらのコマンドにたいしては、完全な名前をタイプする必要があります。時代遅れのコマンドとは、もっと新しく、より良い代替が存在していて、将来のEmacsリリースにおいて廃止が予定されているコマンドのことです。
M-xとコマンドの実行をキャンセルするには、コマンド名の入力のかわりにC-gを入力します。これによりコマンドを呼び出したレベルまで戻ります。
M-xで呼び出すコマンドに数引数を渡すには、M-xの前に数引数を指定します。引数の値はコマンド名が読みとられるときにプロンプトとして表示され、最終的にM-xは引数をコマンドに渡します。たとえば、コマンドforward-char
に数引数として42を渡すには、C-u
42 M-x forward-char RETとタイプできます。
M-xで実行するコマンドがキーバインディングを持つ場合、Emacsはコマンド実行後にその旨をエコーエリアに表示します。たとえばM-x
forward-wordと入力すると、同じコマンドをM-fで実行できるというメッセージが表示されます。このメッセージは変数suggest-key-bindings
にnil
にセットすればオフにできます。suggest-key-bindings
の値には数字も指定でき、この場合Emaceは指定された秒数の間、キーバインドを表示します。バインディングを表示するときのデフォルトは2秒です。
キーバインドをもたないコマンドも、‘M-x’のプロンプトで、完全な名前より短くタイプして呼び出すことができます。Emacsは、短縮入力が完全なコマンド名より明らかに短く、extended-command-suggest-shorter
が非nil
の場合は、そのような短縮入力をエコーエリアに表示します。suggest-key-bindings
のセッティングは、そのようなヒントにも同様に効果を及ぼします。
このマニュアルではコマンドを名前で実行するとき、名前を終了させるためのRETを省くことがあります。つまりM-x auto-fill-mode RETではなくM-x auto-fill-modeと表記します。RETはコマンドに引数がある場合に強調させる意味で使用します。
M-xはexecute-extended-command
を実行します。これは他のコマンドの名前を読み取って実行するコマンドです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsはバラエティに富んだヘルプコマンドを提供しており、それらにはプレフィクスキーC-h(ファンクションキーF1でも可)からアクセスできます。以下のセクションではこれらのコマンドについて説明します。C-h
C-h
(help-for-help
)と入力すれば、ヘルプコマンドの一覧を見ることもできます。この一覧はSPCとDELでスクロールでき、それから見たいヘルプコマンドを入力するか、C-gでキャンセルできます。
多くのヘルプコマンドは、ヘルプバッファー(help buffer)という特別なバッファーに情報を表示します。このバッファーではSPCとDELによりスクロールし、RETでハイパーリンクをフォローすることができます。ヘルプモードのコマンドを参照してください。
特定の機能を探しているが、それが何と呼ばれているかわからない、どこを見ればよいのかわからないときには、次の3つの方法を推奨します。まず最初にaproposコマンドを試してください。次にマニュアルのインデックスを探してください。そしてFAQとパッケージのキーワードを探してください。
引数topicsと名前が一致するコマンドを検索します。引数にはキーワード、キーワードのリスト、正規表現(正規表現の構文を参照してください)を指定できます。Apropos(適切な)を参照してください。
Emacsのinfoマニュアルのインデックスから、topicを検索して最初にマッチしたものを表示します。,を押すと次にマッチしたものを表示します。topicには正規表現を指定できます。
同様ですが、インデックスではなくマニュアル本文のテキストを検索します。
Infoを使ってEmacs FAQを表示します。
キーワードに基づいて、利用可能なEmacsパッケージを表示します。パッケージのキーワード検索を参照してください。
他のさまざまなコンテキストでも、C-hやF1は“ヘルプ”を意味します。たとえばプレフィクスキーの後にこれらのキーを入力すると、プレフィクスキーに続けて入力できるキーの一覧を表示することができます(このコンテキストでは?も使用できます。いくつかのプレフィクスキーはC-hや?に別の意味を持たせているものがあるので使えませんが、それらのものでもF1はサポートされています)。
10.1 ヘルプの概要 | すべてのヘルプコマンドの要約リスト。 | |
10.2 キーのドキュメント | Emacsでキーが何を行うか尋ねる。 | |
10.3 コマンドと変数名のヘルプ | コマンド、変数、関数名を尋ねる。 | |
10.4 Apropos(適切な) | 与えられたトピックに関係があるものを尋ねる。 | |
10.5 ヘルプモードのコマンド | へルポモードとヘルプバッファーの特別な機能。 | |
10.6 パッケージのキーワード検索 | キーワード(トピック)でLispライブラリーを探す。 | |
10.7 国際化言語のサポートに関するヘルプ | 国際的な言語サポートに関するヘルプ。 | |
10.8 その他のヘルプコマンド | その他のヘルプコマンドについて。 | |
10.9 ヘルプファイル | 追加のヘルプファイルを表示するコマンド。 | |
10.10 アクティブテキストのヘルプとツールチップ | アクティブなテキストのヘルプとツールチップ(“バルーンヘルプ”)。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ここではビルトインのドキュメントにアクセスする、ヘルプコマンドの要約を記します。これらの大部分については、以下のセクションで詳細を説明します。
名前がtopicsにマッチするコマンドの一覧を表示します(apropos-command
)。Apropos(適切な)を参照してください。
有効なキーバインディングをすべて表示します。最初はマイナーモード、次にメジャーモード、それからグローバルのバインディングを表示します(describe-bindings
)。その他のヘルプコマンドを参照してください。
キーシーケンスkeyがバインドされているコマンドの名前を表示します(describe-key-briefly
)。cは“character”が由来です。keyについてさらに詳しい情報を得るにはC-h
kを使います。キーのドキュメントを参照してください。
topicsにマッチするドキュメントをもつ、コマンドまたは変数を表示します(apropos-documentation
)。Apropos(適切な)を参照してください。
バッファー*Messages*を表示します(view-echo-area-messages
)。その他のヘルプコマンドを参照してください。
functionという名前のLisp関数のドキュメントを表示します(describe-function
)。コマンドもLisp関数なのでコマンドにも使用できます。コマンドと変数名のヘルプを参照してください。
ファイルHELLOを表示します。このファイルは様々な文字セットの例です。
GNUドキュメントブラウザー(info
)を実行します。Emacsのマニュアルはinfoで利用できます。その他のヘルプコマンドを参照してください。
keyで実行されるコマンドの名前と、ドキュメントを表示します(describe-key
)。キーのドキュメントを参照してください。
最近のキーストローク300回分のの説明を表示します(view-lossage
)。その他のヘルプコマンドを参照してください。
カレントのメジャーモード、およびマイナーモードのドキュメントを表示します(describe-mode
)。その他のヘルプコマンドを参照してください。
最近のEmacsの変更に関するニュースを表示します(view-emacs-news
)。ヘルプファイルを参照してください。
symbolという名前のLispシンボルのドキュメントを表示します(describe-symbol
)。これはすべての種類のシンボル、すなわち関数、変数、フェイスのドキュメントも表示します。コマンドと変数名のヘルプを参照してください。
トピックのキーワードでパッケージを見つけます(finder-by-keyword
)。パッケージのキーワード検索を参照してください。これはパッケージメニューバッファーを使ってパッケージを一覧します。Emacs Lispパッケージを参照してください。
指定したパッケージのドキュメントを表示します(describe-package
)。パッケージのキーワード検索を参照してください。
Emacsのマニュアルをinfoで表示します(info-emacs-manual
)。
現在の構文テーブル(syntax table)を表示します(describe-syntax
)。その他のヘルプコマンドを参照してください。構文テーブルはどの文字が開始デリミッターで、その文字が単語の一部なのかを定義します。詳細についてはSyntax Tables in The Emacs Lisp Reference Manualを参照してください。
Emacsの対話的なチュートリアルを開始します(help-with-tutorial
)。
Lisp変数varのドキュメントを表示します(describe-variable
)。コマンドと変数名のヘルプを参照してください。
commandという名前のコマンドを実行するキーを表示します(where-is
)。キーのドキュメントを参照してください。
コーディングシステムcodingを説明します(describe-coding-system
)。コーディングシステムを参照してください。
現在使用されているコーディングシステムを説明します。
infoを開始して、Emacsコマンドcommandのドキュメントのノードに移動します(Info-goto-emacs-command-node
)。コマンドと変数名のヘルプを参照してください。
インプットメソッドmethodを説明します(describe-input-method
)。インプットメソッドの選択を参照してください。
infoを開始して、キーシーケンスkeyのドキュメントのノードに移動します(Info-goto-emacs-key-command-node
)。キーのドキュメントを参照してください。
言語環境(language environment)language-envで使用される文字セット、コーディングシステム、インプットメソッドに関する情報を表示します。言語環境を参照してください。
編集中のプログラム言語に基づいて、シンボルsymbolのinfoドキュメントを表示します(info-lookup-symbol
)。その他のヘルプコマンドを参照してください。
ポイントが特別なテキスト領域のとき(これには、たとえば*Help*のリンクなどが含まれます)、ヘルプメッセージを表示します(display-local-help
)。アクティブテキストのヘルプとツールチップを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
キーシーケンスに関する情報を得るためのヘルプコマンドは、C-h c
(describe-key-briefly
)とC-h k (describe-key
)です。
C-h c keyは、keyにバインドされているコマンドの名前を、エコーエリアに表示します。たとえばC-h c C-fは、‘forward-char’と表示します。
C-h k keyも同様ですが、さらに多くの情報が得られます。これはコマンドが何をするかが正確に説明する、ドキュメント文字列(documentation string)を含むヘルプバッファーを表示します。
C-h K keyは、keyに対応するコマンドが説明されている、Emacsマニュアルのセクションを表示します。
C-h c、C-h k、C-h Kはファンクションキー、メニュー、マウスイベント(ただしC-h cはマウス移動イベントを無視する)を含む、任意のキーシーケンスにたいして動作します。たとえばC-h kの後で、メニューバーからメニューアイテムを選択すれば、それにより実行されるコマンドのドキュメントが表示されます。
C-h w command
RETは、commandがバインドされているキーをリストします。リストはエコーエリアに表示されます。コマンドがキーにバインドされていないとき、それはM-xを使って実行しなければならないことを意味します。C-h
wはコマンドwhere-is
を実行します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
C-h f function RET
(describe-function
)は、Lisp関数functionのドキュメントをウィンドウに表示します。コマンドもLisp関数なので、この方法を使えば、名前を知っている任意のコマンドのドキュメントを閲覧できます。たとえば
C-h f auto-fill-mode RET
はauto-fill-mode
のドキュメントを表示します。これはキーにバインドされていないコマンド(通常M-xで実行する)のドキュメントを閲覧する、唯一の方法です。
C-h fは、LispプログラムからLisp関数を使うときも便利です。たとえば式(make-vector
len)
を書いたとしましょう。正しく(make-vector len)
を使っているかチェックしたいときは、C-h f
make-vector RETと入力します。C-h
fはコマンド名だけでなくすべての関数名を許容するので、M-xでは機能するいつもの補完による短縮形が、C-h
fでは機能しないと気付くかもしれません。コマンド名では省略形が一意であっても、すべての関数名を含めたら一意ではないかもしれないからです。
C-h f
RETを入力すると、バッファーのポイントがある位置の、一番内側のLisp式で呼び出されている関数の名前が有効で、Lisp関数として定義されていれば、その関数の説明が表示されます(引数を入力するときデフォルトとして関数名が表示されます)。たとえばポイントが‘(make-vector
(car x)’の後ろにあるとき、ポイントを含む一番内側のリストは‘(make-vector’で始まっているので、C-h f
RETにより関数make-vector
の説明が表示されます。
C-h fは、関数名を正しく記述しているか確かめたいときも便利です。C-h fのミニバッファーのプロンプトで、編集中のバッファーの関数名がデフォルトとして表示されるなら、それは定義されたLisp関数であることを意味します。本当にドキュメントを見たい訳でなければ、C-gを押してコマンドC-h fをキャンセルできます。
C-h v (describe-variable
)は、C-h
fと似ていますがLisp関数ではなく、Lisp関数の説明を表示します。ポイントの周囲または前にあるLispシンボルが、定義されたLisp変数名のときはそれがデフォルトとなります。変数を参照してください。
通常Emacsの変数または関数を説明するヘルプバッファーには、ソースファイルがインストールされていれば、対応するソースコードへのハイパーリンクが含まれています(ハイパーリンクとWebナビゲーション機能を参照してください)。
マニュアルからコマンドのドキュメントを探すには、C-h F
(Info-goto-emacs-command-node
)を使います。これはEmacsのマニュアルだけでなく、さまざまなマニュアルを認識するので、正しいものを見つけられるでしょう。
C-h o (describe-symbol
)は、C-h fやC-h
vと似ていますが、これは任意のシンボル(関数、変数、フェイス)を説明します。シンボルが複数の定義をもつ場合(たとえばシンボルが関数と変数の両方の定義をもつような場合)、このコマンドはそれらすべてのドキュメントを順に表示します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
apropos(折よい、適切な)コマンドは、“What are the commands for working with files?(ファイルを処理するコマンドは?)”のような質問に答えるものです。より正確に言うと単語、単語のリスト、正規表現によって、aproposパターンを指定します。
以下の各aproposコマンドは、ミニバッファーでaproposパターンを読み取り、パターンにマッチするアイテムを検索して、結果を別のウィンドウに表示します。
コマンドを検索します(apropos-command
)。プレフィクス引数を指定すると、非インタラクティブな関数も検索します。
関数と変数を検索します。これを使えばインタラクティブな関数(コマンド)と非インタラクティブな関数の両方を検索できます。
ユーザーがカスタマイズできる関数を検索します。プレフィクス引数を指定すると、カスタマイズできない変数も検索します。
変数を検索します。プレフィクス引数を指定すると、カスタマイズできる変数だけを検索します。
バッファーローカル変数を検索します。
指定したパターンにマッチする値の変数を検索します。プレフィクス引数を指定すると、定義がパターンにマッチする関数と、プロパティーリストがパターンにマッチする、Lispシンボルも検索します。
値が指定されたパターンにマッチする、バッファーローカル変数を検索します。
指定されたパターンにマッチするドキュメント文字列の関数、または変数を検索します(apropos-documentation
)。
最も簡単な種類のaproposパターンは単語です。その単語が含まれていれば、パターンにマッチします。ファイルを処理するコマンドを探すには、C-h
a file
RETと入力します。これはcopy-file
、find-file
などの、名前に‘file’を含むすべてのコマンドの一覧を表示します。各コマンド名には簡単な説明と、それを呼び出すためのキーの一覧が一緒に表示されます。この例だと、find-file
はC-x
C-fで呼び出せることがわかります。
aproposバッファーの関数定義、変数、シンボルの属性についてもっと情報が欲しいときは、mouse-1またはmouse-2でクリックするか、そこに移動してRETを押してください。
2つ以上の単語をaproposパターンに指定したときは、マッチするために少なくとも名前に2つの単語が含まれていなければなりません。たとえばポイントの前のテキストをkillするコマンドを探すときは、C-h
a kill back backward behind before
RETなどと試みることができます。これは実際のコマンド名kill-backward
にマッチするでしょう。もしkill-text-before
というコマンドがあったなら、これも指定した単語を2つ含んでいるのでマッチします。
より一層フレキシビリティを高めるために、正規表現(正規表現の構文を参照)を指定できます。aproposパターンに正規表現の特殊文字‘^$*+?.\[’が含まれていると、それは正規表現として扱われます。
Emacsコマンド命名の慣習に従うと、aproposパターンとして便利な単語がいくつかあります。これらをC-h aで使うことにより、命名の慣習の必要性を感じることができるでしょう。
char、line、word、sentence、paragraph、region、page、sexp、list、defun、rect、buffer、frame、window、face、file、dir、register、mode、beginning、end、forward、backward、next、previous、up、down、search、goto、kill、delete、mark、insert、yank、fill、indent、case、change、set、what、list、find、view、describe、default
変数apropos-do-all
が非nil
の場合、ほとんどのaproposコマンドは、プレフィクス引数が与えられたかのように振る舞います。例外が1つあります。プレフィクス引数なしのapropos-variable
は、apropos-do-all
の値に関係なく、常にすべての変数を検索します。
デフォルトでは、apropos-documentation
を除くすべてのaproposコマンドは、結果をアルファベット順に一覧します。変数apropos-sort-by-scores
が非nil
のときは、かわりに結果の関連度を推測して、一番関連度が高いと思われるものを最初に表示します。apropos-documentation
コマンドは、デフォルトで結果を関連度順で一覧します。これをアルファベット順にするには、変数apropos-documentation-sort-by-scores
をnil
に変更してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ヘルプバッファーはViewモード(Viewモードを参照してください)と同じコマンドを提供します。たとえば前方へのスクロールはSPC、後方へのスクロールはDELかS-SPCです。他にも特別なコマンドをいくつか提供します:
ポイント位置のクロスリファレンス先をフォローします(help-follow
)。
ポイントを次のハイパーリンクへ進めます(forward-button
)。
ポイントを前のハイパーリンクへ戻します(backward-button
)。
クリックしたハイパーリンク先をフォローします。
ポイント位置のシンボルに関する、すべてのドキュメントを表示します(help-follow-symbol
)。
次ののヘルプトピックに前方へ移動します(help-go-forward
)。
前のヘルプトピックに戻ります(help-go-back
)。
もし関数名、変数名、フェイス名(テキストのフェイスを参照してください)がヘルプバッファーのドキュメントにあると、通常はアンダーラインされたハイパーリンク(hyperlink)として表示されます。関連するドキュメントを閲覧するには、ポイントをそこに移動してRET
(help-follow
)とタイプするか、ハイパーリンクをmouse-1またはmouse-2でクリックします。するとヘルプバッファーの内容が入れ替わりますが、C-c
C-b、またはl (help-go-back
)で元に戻すことができます。元に戻る途中では、C-c
C-fまたはr (help-go-forward
)を使用して前に進むことができます。
ヘルプバッファーには、infoマニュアル、ソースコード定義、URL(ウェブページ)へのハイパーリンクを含むこともできます。最初の2つはEmacs上で表示され、3番目のURLはコマンドbrowse-url
により、ウェブブラウザーを使って表示されます。
ヘルプバッファーでは、TAB
(forward-button
)はポイントを次のハイパーリンクへ進め、S-TAB
(backward-button
)は前のハイパーリンクへ戻します。これらのコマンドは循環的です。たとえば最後のハイパーリンクでTABをタイプすると、最初のハイパーリンクに戻ります。
テキスト中のシンボルに関するすべてのドキュメントを閲覧するには、ポイントをシンボルに移動してC-c C-c
(help-follow-symbol
)とタイプします。これは変数、関数、および/またはフェイスとしての、そのシンボルが意味する、すべてのドキュメントを表示します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsのたいていのオプション機能は、パッケージ(packages)にグループ化されています。Emacsには数百のビルトインパッケージが含まれており、ネットワークを通じて他のパッケージのインストールもできます(Emacs Lispパッケージを参照してください)。
あるトピックに関連するパッケージを探すのを簡単にするため、ほとんどのパッケージは、それが何をするかにもとづき、1つ以上のキーワード(keywords)に関連付けられています。C-h
p
(finder-by-keyword
)とタイプすると、パッケージキーワードとキーワードの意味を説明するリストが表示されます。キーワードに属するパッケージのリストを表示するには、そのキーワードの行でRETをタイプします。これによりパッケージメニューバッファー(Package Menuバッファーを参照してください)で、パッケージの一覧が表示されます。
C-h P
(describe-package
)はパッケージ名(Emacs Lispパッケージを参照)の入力を求めて、パッケージの属性と、それが実装する機能をヘルプバッファーで表示します。このバッファーは、ボタン形式で関連するパッケージのキーワードを一覧します。ボタンmouse-1かmouse-2をクリックすると、そのキーワードに関連する他のパッケージを見ることができます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
特定の言語環境(language environment: 言語環境を参照してください)の情報を得るには、C-h Lとタイプします。これはヘルプバッファーを開いて、言語環境でサポートされる言語の説明と、関連する文字セット、コーディングシステム、インプットメソッド、およびその言語環境のサンプルテキストを表示します。
コマンドC-h h
(view-hello-file
)は、ファイルetc/HELLOを表示します。このファイルはさまざまな言語で“hello”をどのように言うのかを、いろいろな文字セットで表示するデモンストレーションです。
コマンドC-h I
(describe-input-method
)は、指定されたインプットメソッド、または現在使われているインプットメソッド(デフォルト)の説明します。インプットメソッドを参照してください。
コマンドC-h C
(describe-coding-system
)は、指定されたコーディングシステム、または現在使われているものを説明します。コーディングシステムを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
C-h i
(info
)はinfoプログラムを実行します。infoは構造化されたドキュメントファイルを閲覧するものです。C-h 4 i
(info-other-window
)は同じことを行いますが、別のウィンドウにInfoバッファーを表示します。Emacsマニュアル全体は、GNUシステムのための他のマニュアルとともにinfoで利用可能です。infoを開始した後にhをタイプすると、infoの使い方のチュートリアルが実行されます。
数引数nを指定すると、C-h iはinfoバッファー‘*info*<n>’を選択します。これは同時に複数のinfoマニュアルを閲覧するとき便利です。プレフィクス引数C-uだけを指定した場合、C-h iはドキュメントのファイル名を尋ねるので、infoメニューのトップレベルにエントリーがないファイルでも閲覧できます。
上記で説明しているヘルプコマンドC-h F function RETとC-h K keyは、infoを実行して関数(function)またはキー(key)に関するドキュメントを直接開きます。
プログラムを編集しているとき、そのプログラム言語のinfo版のマニュアルを持っていれば、C-h S
(info-lookup-symbol
)を使ってシンボル(キーワード、関数、変数)のエントリーを、適切なマニュアルから探すことができます。コマンドがどのように動作するかの詳細は、メジャーモードに依存します。
何か予期しないことが起こって、何をタイプしたかわからなくなったときは、C-h l
(view-lossage
)を使います。C-h
lは最近の300回分のキーストロークと、それらが呼び出したコマンドを表示します。馴染みのないコマンドを見つけたら、C-h
kやC-h fを使用して、それらのコマンドが何を行なうか調べることができます。
最近のエコーエリアのメッセージを調べるには、C-h e
(view-echo-area-messages
)を使います。これはそれらのメッセージを保持するバッファー、*Messages*を表示します。
Emacsの各メジャーモードでは、一般的にいくつかのキーが再定義されていて、編集動作も異なります。C-h m
(describe-mode
)は、現在のメジャーモードのドキュメントを表示します。これには通常このモードで変更されているコマンドや機能、およびそれらのキーバインドについても説明されています。
C-h b (describe-bindings
)とC-h s
(describe-syntax
)は、現在のEmacs環境に関する、それ以外の情報を表示します。最初は現在のマイナーモードのローカルバインディング、次に現在のメジャーモードで定義されているローカルバインディング、最後にグローバルバインディングが表示されます。C-h
sは各文字の構文の説明とともに、構文テーブルの内容を表示します(Syntax Tables in The Emacs Lisp Reference Manualを参照してください)。
プレフィクスキーの後にC-h、?、F1をタイプすることにより、特定のプレフィクスキーにたいする、サブコマンドのリストを得ることができます(この方法が機能しないプレフィクスキーもあります。たとえばESCです。ESC C-hは実際にはC-M-hと解釈され、これはdefunをマークするコマンドです。このような場合でもESC F1やESC ?はうまく機能します)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ビルトインのドキュメントとマニュアル以外にも、Emacsにはコピー条件(copying conditions)、リリースノート(release notes)、デバッグ説明書(instructions for debugging)、バグ報告(reporting bugs)などのトピックを説明する、いくつかのファイルが含まれています。これらのファイルは、以下のコマンドで閲覧することができます。C-h gをのぞき、これらはすべて、C-h C-charという形式になっています。
Emacsをコピー、再頒布する場合の規則を表示します(describe-copying
)。
Emacsをデバッグするためのヘルプを表示します(view-emacs-debugging
)。
外部のパッケージをどこで入手するかについての情報を表示します(view-external-packages
)。
EmacsのFAQ(frequently-answered-questions:
頻繁に答えられる質問)のリストを表示します(view-emacs-FAQ
)。
GNUプロジェクトに関する情報がある、ページをvisitします(describe-gnu-project
)。
Emacsマニュアルの印刷されたコピーの注文に関する情報を表示します(view-order-manuals
)。
このバージョンの新しい機能の一覧が含まれるnewsファイルを表示します(view-emacs-news
)。
Emacsおよび他のGNUソフトウェアーの最新バージョンを、注文またはダウンロードする方法を表示します(describe-distribution
)。
Emacsの既知の問題(それにどう対処するかの提案がある場合もあります)を表示します(view-emacs-problems
)。
EmacsのTODOリストを表示します(view-emacs-todo
)。
GNU Emacsが完全に無保証なことにたいする、すべての詳細を表示します(describe-no-warranty
)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsでは拡大解釈されるアクティブテキスト(active text: マウスのクリックやRETに特別な反応をするテキスト)は、しばしばヘルプテキストに関連付けられています。これにはEmacsのバッファーのハイパーリンク、同様にモードラインの一部が含まれます。グラフィカルなディスプレー、同様にいくつかのテキスト端末は、マウストラッキングをサポートしており、アクティブテキストの上をマウスが通過することにより、ヘルプテキストをツールチップ(tooltip)で表示します。ツールチップを参照してください。
マウストラッキングをサポートしない端末では、バッファーのアクティブテキストにポイントを移動して、C-h .
(display-local-help
)をタイプすれば、ヘルプテキストを表示できます。これはヘルプテキストをエコーエリアに表示します。ポイントがある場所のヘルプテキストが利用可能な場合に、常に表示させるには、変数help-at-pt-display-when-idle
にt
をセットしてください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsのコマンドには、現在のバッファー内の、任意の連続する領域(region)を操作するものがたくさんあります。そのようなコマンドが操作するテキストを指定するには、領域の一方の端にマーク(mark)をセットし、もう一方の端にポイントを移動します。ポイントとマークの間のテキストを、リージョン(region)と呼びます。リージョンは常にポイントとマークの間で拡張され、それは一方がテキストの先頭にある場合も変わりません。ポイントを移動すれば、常にリージョンは変化します。
テキストのある位置にマークをセットすると、マークはアクティブ(active)になります。マークがアクティブのときは、リージョンもアクティブになります。Emacsはアクティブなリージョンの中にあるテキストを、フェイスregion
でハイライト表示します(フェイスのカスタマイズを参照してください)。
これはテキスト、および行末よウィンドウボーダーの間のスペースのハイライトに同一フェイスを暗黙に使用する:extend
t
属性をもつ数少ないフェイスの1つです。テキストだけをハイライトするために、この属性にnil
をセットすることもできます。
バッファーのテキストを変更するコマンドを含む、特定の非移動系コマンド(non-motion commands)の後で、Emacsは自動的にマークを非アクティブ(deactivates)にし、これによりハイライトも解除されます。C-gをタイプすれば、いつでも明示的に非アクティブにすることができます(中止と中断を参照してください)。
上記のデフォルト動作は、Transient Markモード(暫定マークモード)という名で知られています。Transient Markモードを無効にすると、Emacsは通常ではリージョンをハイライトしなくなります。Transient Markモードを無効にするを参照してください。
あるバッファーでマークをセットしても、他のバッファーのマークは影響を受けません。アクティブなマークがあるバッファーに戻ったとき、マークは以前と同じ場所にあります。複数のウィンドウで同じバッファーを表示しているとき、これらのウィンドウはそれぞれのポイント位置をもっているので、リージョンも異なります。しかしこれらのウィンドウでは、マークの位置は共通です。複数ウィンドウを参照してください。通常、選択されたウィンドウのリージョンだけがハイライトされます。しかし変数highlight-nonselected-windows
が非nil
の場合、各ウィンドウのリージョンがハイライトされます。
rectangular region(矩形リージョン)という、違う種類のリージョンもあります。矩形領域(Rectangles)を参照してください。
11.1 マークのセット | マークをセットするコマンド。 | |
11.2 テキストオブジェクトをマークするコマンド | テキスト単位の周辺にリージョンをセットするコマンド。 | |
11.3 リージョンを操作する | リージョンの内容を操作する方法の要約。 | |
11.4 マークリング | 後で戻れるように保存された以前のマーク位置。 | |
11.5 グローバルマークリング | さまざまなバッファーの以前のマーク位置。 | |
11.6 シフト選択 | シフトを押してカーソル移動キーを使う。 | |
11.7 Transient Markモードを無効にする | デフォルトでリージョンをハイライトせずにおく。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
マークをセットするためのコマンドがいくつかあります:
ポイント位置にマークをセットしてアクティブにします(set-mark-command
)。
同じです。
ポイント位置にマークをセットしてアクティブにしてから、以前のマークがあった位置にポイントを移動します(exchange-point-and-mark
)。
ドラッグしたテキストの周りにポイントとマークをセットします。
ポイント位置にマークをセットしてから、クリックした場所にポイントを移動します(mouse-save-then-kill
)。
マークが非アクティブなら、ポイント位置にマークをセットしてポイントを移動します。シフト選択を参照してください。
マークをセットするもっとも一般的な方法は、C-SPC
(set-mark-command
)です5。これはポイントがある位置にマークをセットしてから、アクティブにします。その後、マークをそこに残したままポイントを移動できます。
たとえばバッファーの一部を大文字に変換したいとします。これを行うには対象のテキストの一方の端に移動して、C-SPCをタイプし、対象のテキストがハイライトされるまでポイントを移動します。そしてC-x
C-u (upcase-region
)をタイプすると、リージョンのテキストが大文字に変換されて、マークが非アクティブになります。
マークがアクティブなときに非アクティブにしたいときは、C-gをタイプします(中止と中断を参照してください)。リージョンにたいして操作を行うほとんどのコマンドは、上記の例のC-x C-uのように、自動的にマークを非アクティブにします。
リージョンにたいしての操作は行わず、バッファーの位置を覚えておくためにマークをセット(C-SPC C-SPCとタイプ)して、後でそこに戻る(C-u C-SPCとタイプ)こともできます。詳細については、マークリングを参照してください。
コマンドC-x C-x
(exchange-point-and-mark
)は、ポイントとマークの位置を交換します。ポイントの位置に問題はないが、リージョンのもう一方の端にポイントを移動したいときC-x
C-xは便利です。2回目のC-x
C-xで、マークを新しいポイント位置にマークをセットしてから、ポイントを元の位置に戻すことができます。このコマンドはマークが非アクティブのとき、最初にマークをアクティブにします。これはマークが最後にどこにセットされたかを明確にするために、リージョンをハイライトするためです。しかしプレフィクス引数とともに呼び出せば、マークは非アクティブのままでリージョンもハイライトされません。これを使えばC-u
C-SPCと同様の方法で、マークの位置にジャンプできます。
マウスでマークをセットすることもできます。マウスの左ボタン(down-mouse-1)をクリックしてから、テキスト範囲をドラッグすると、最初にマウスボタンを押した位置にマークがセットされ、マウスボタンを話した位置にポイントが置かれます。かわりにマウスの右ボタン(mouse-3)をクリックすれば、ポイントのある位置にマークがセットされ、クリックした位置にポイントが移動します。これらのマウスコマンドに関する詳細な説明は、編集のためのマウスコマンドを参照してください。
最後にシフトキーを押しながらカーソルを移動するコマンド(S-RIGHT、S-C-f、S-C-nなど)でマークをセットできます。これはシフト選択(shift-selection)と呼ばれ、以前にシフト選択やマウスコマンドでセットされたアクティブなマークがないときに限り、ポイントを移動する前の位置にマークをセットします。マウスコマンドやシフト選択によるマークのセットは、通常のマークとは少し異なります。続けてシフトを押さないカーソル移動コマンドを実行するにより、マークは自動的に非アクティブになります。詳細は、シフト選択を参照してください。
C-y
(yank
)のようなテキストを挿入するコマンドの多くは、挿入されたテキストの先頭に、非アクティブなマークをセットします。これにより簡単にその位置に戻ることができます(マークリングを参照してください)。コマンドがこれを行っていることは、エコーエリアに‘Mark set’が表示されることで見分けることができます。
Xではアクティブなリージョンが変化するたびに、Emacsはリージョンのテキストをプライマリー選択(primary selection)に保存します。これによりmouse-2をクリックして、他のXアプリケーションへテキストを挿入することができるようになります。他のウィンドウアプリケーションにたいするカットアンドペーストを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
単語(word)、リスト(list)、パラグラフ(paragraph: 段落)、ページ(page)などのテキストオブジェクトの周辺に、ポイントを配置してマークするコマンドがあります:
次の単語の末尾にマークをセットします(mark-word
)。ポイントは移動しません。
次の対応のとれた式の後にマークをセットします(mark-sexp
)。ポイントは移動しません。
ポイントを現在のパラグラフの先頭に移動して、パラグラフの最後にマークをセットします(mark-paragraph
)。
ポイントを現在のdefunの先頭に移動して、defunの最後にマークをセットします(mark-defun
)。
ポイントを現在のページの先頭に移動して、ページの最後にマークをセットします(mark-page
)。
ポイントを現在のバッファーの先頭に移動して、バッファーの最後にマークをセットします(mark-whole-buffer
)。
M-@
(mark-word
)は、次の単語の最後にマークをセットします(単語についての情報は、単語を参照してください)。繰り返し呼び出されると、マークを1度に1単語進めてリージョンを拡張します。例外として、マークがアクティブでポイントの前にある場合、M-@はマークを現在の位置から1単語後方に移動します。
このコマンドに数引数nを指定することにより、n単語進めてマークするよう指定できます。負の引数-nは、n単語後方にマークを移動します。
同様にC-M-@
(mark-sexp
)は、対応のとれた式の最後にマークをセットします(対応が取れたカッコの式を参照してください)。繰り返し呼び出すことにより、後続の式にリージョンを拡張します。正または負の数引数を指定するとその数に応じて前方または後方にマークを移動します。
上記のリストの他のコマンドは、ポイントとマークの両方をセットするので、バッファー内のオブジェクトを区切るコマンドです。M-h
(mark-paragraph
)はパラグラフ(パラグラフを参照してください)、C-M-h
(mark-defun
)はトップレベルの関数定義(defunの移動を参照してください)、C-x
C-p
(mark-page
)はページ(ページを参照してください)をマークします。繰り返して呼び出すと、同種の連続するオブジェクトへと、リージョンを拡張します。数引数も同様で、マークを移動したいオブジェクトの数を指定します。
C-x h
(mark-whole-buffer
)はポイントをバッファーの先頭、マークを最後にセットすることによりバッファー全体をリージョンとします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
一度リージョンを設定すると、それを処理するいくつかの方法があります:
マークが非アクティブのときにはデフォルトの動作をするが、マークがアクティブのときはリージョンを処理するコマンドがいくつかあります。たとえばM-$
(ispell-word
)は、通常はポイントのある単語のスペルをチェックしますが、マークがアクティブのときはリージョンの中のテキストをチェックします(スペルのチェックと訂正を参照してください)。通常そのようなコマンドはリージョンが空のとき(たとえばマークとポイントが同じ位置のとき)は、デフォルトの動作をします。空のリージョンにたいして処理を行いたいときは、変数use-empty-active-region
をt
に変更してください。
テキストの消去で説明したように、DEL (backward-delete-char
)とDelete
(delete-forward-char
)もこの方法で動作します。マークがアクティブのときはリージョンのテキストを削除します(例外として数引数nに1以外が指定されたとき、これらのコマンドはマークがアクティブか関係なく、n文字を削除します)。変数delete-active-region
をnil
に変更すると、これらのコマンドはマークがアクティブのとき異なる動作をしなくなります。これをkill
に変更するとリージョンを削除するかわりに、killするようになります(テキストのkillと移動を参照してください)。
その他のコマンドにはデフォルトの動作はなく、常にリージョンを処理します。通常このようなコマンドには、C-w
(kill-region
)やC-x C-u
(upcase-region
)のように、名前にregion
がついています。マークが非アクティブのときは非アクティブなリージョン、すなわちポイントと最後にマークをセットした位置の間にあるテキストにたいして処理を行います(マークリングを参照してください)。この動作を無効にするには、変数mark-even-if-inactive
をnil
に変更してください。そうするとこれらのコマンドはマークが非アクティブのときエラーをシグナルします。
デフォルトでは、マークがアクティブでもテキストの挿入は普通に行われます。たとえばaをタイプすると、‘a’が挿入されてからマークが非アクティブになります。マイナーモードのDelete Selectionモードは、この振る舞いを変更します。Delete Selectionモードが有効な場合、マークがアクティブなときは、最初にリージョンのテキストを削除してから、テキストが挿入されます。Delete Selectionモードをオフにするには、M-x delete-selection-modeとタイプしてください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
各バッファーは、マークリング(mark ring)の中に、以前のマークの位置を記録しています。マークをセットするコマンドは、古いマークをこのリングにpushします。マークリングの1つの使い方として、後で戻りたい場所を記録させる使い方があります。
マークをアクティブにせずにマークをセットしてから、マークリングにpushします。
マークがあった場所にポイントを移動し、マークリングから1つ前のマークを復元します。
コマンドC-SPC
C-SPCは、後で戻ってきたい位置をマークするときに便利です。これは現在の位置をマークを(Emacsがリージョンをハイライト表示してしまう)アクティブにすることなく、マークリングにpushします。実際にこれはC-SPC
(set-mark-command
)を連続して2回呼び出しています。最初のC-SPCはマークをセットし、2回目のC-SPCはそれを非アクティブにしています(Transient
Markモードがオフの場合、C-SPC C-SPCは一時的にTransient
Markモードを有効にします。Transient Markモードを無効にするを参照してください)。
マークした位置に戻るには、C-u
C-SPCのようにプレフィクス引数を指定して、set-mark-command
を使います。これはマークがあった場所にポイントを移動して、もしマークがアクティブのときは非アクティブにします。C-u
C-SPCを連続して呼び出すと、マークリングに保存された前の位置へジャンプしていきます。この方法で移動した位置の情報は失われません。それらはリングの最後に移動します。
set-mark-command-repeat-pop
を非nil
にセットすると、C-u
C-SPCの後に続けて、C-u
C-SPCではなく、C-SPCでマークリングを巡回できます。デフォルトではset-mark-command-repeat-pop
はnil
です。
各バッファーは自身のマークリングを持ちます。すべての編集コマンドは現在のバッファーのマークリングを使います。特にC-u C-SPCは常に同じバッファーに留まります。
変数mark-ring-max
は、マークリングに保持する最大のエントリー数を指定します。デフォルトは16エントリーです。もしエントリー数が最大の場合、他のエントリーをpushするとリストの一番古いものが捨てられます。C-u
C-SPCを繰り返すと、リングの現在位置を巡回します。
もし何度も同じ場所に戻りたいときは、マークリングでは不十分でしょう。そのような場合は後で使うために、その位置をレジスターに記録できます(レジスターに位置を保存するを参照してください)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
各バッファーに属する普通のマークリングに加えて、Emacsにはグローバルマークリング(global mark
ring)が1つあります。以前マークをセットしてからバッファーを切り替えた場合、マークをセットすると、マークはカレントバッファーのマークリングに加えて、グローバルマークリングにも記録されます。その結果、グローバルマークリングには訪れていたバッファーの系列が記録され、各バッファーではマークを設定した箇所が記録されます。グローバルマークリングの長さは、global-mark-ring-max
で制御され、デフォルトは16です。
コマンドC-x C-SPC
(pop-global-mark
)は、グローバルリングの最新のバッファー位置にジャンプします。これもリングを巡回するので、連続してC-x
C-SPCを使うことにより、古いバッファーのマーク位置に移動します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
シフトキーを押しながらカーソル移動コマンドをタイプすると、ポイントを移動する前の位置にマークをセットするので、リージョンが元のポイント位置から新しいポイント位置に拡張されます。この機能はシフト選択(shift-selection)と呼ばれます。これは他のエディターでテキストを選択する方法と似ています。
シフト選択によるマークのセットは、これまでの説明とは少し異なる振る舞いをします。最初に、マークを非アクティブにする通常の方法(バッファーのテキストを変更したりC-gをタイプするなど)に加え、シフトキーを押さない(unshifted)カーソル移動コマンドでも、マークが非アクティブになります。次に、連続するシフトキーを押した(shifted)カーソル移動コマンドでは、マークの更新はされません。つまりシフトキーを押しながらカーソル移動コマンドを繰り返すと、リージョンは継続的に変更されます。
シフト選択は、シフトキーを押したカーソル移動キーが、別のコマンドにバインドされていない場合のみ動作します(カスタマイズを参照してください)。たとえばS-C-fを他のコマンドにバインドしていると、S-C-fはシフト選択バージョンのC-f
(forward-char
)ではなく、バインドされたコマンドを実行します。
マウスコマンドによるマークのセットも、シフト選択によるマークのセットと同様です(マークのセットを参照してください)。たとえばマウスをドラッグしてリージョンを指定すると、シフトキーを押したカーソル移動コマンドを使って、そのリージョンの拡張を続けることができます。どちらのケースも、シフトキーを押さないカーソル移動コマンドで、マークが非アクティブになります。
シフト選択をオフにするには、shift-select-mode
をnil
にセットしてください。これをセットしても、マウスコマンドによるマークのセッティングは無効になりません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
マークとリージョンのデフォルト動作では、マークをアクティブにセットすると、リージョンがハイライトされます。これはTransient Markモードと呼ばれます。これはデフォルトで有効になっているマイナーモードです。M-x transient-mark-mode、または‘Options’メニューの‘Highlight Active Region’で切り替えることができます。オフにすることによりEmacsの操作モードは変更されます。
マークをセットしたらどこにセットしたか忘れる前にすぐ使うというのが、この問題にたいする通常の解決策です。ポイントとマークの位置を交換するC-x C-xで、マークがどこかチェックすることもできます。
query-replace
)は、マークがアクティブのときはリージョンにたいして置換を行います。Transient
Markがオフだと、常にポイントからバッファーの最後までを処理します。このような方法で動作するコマンドは、コマンド自身のドキュメントにより識別できます。
Transient Markモードがオフのときは、C-SPC C-SPCまたはC-u C-x C-xを使って一時的にアクティブにすることができます。
ポイント位置にマークをセット(普通のC-SPCと同様)して、マークが非アクティブになるまでの間、1度だけTransient Markモードを有効にします(実際にはこれは独立したコマンドではなくC-SPCコマンドを2回行っています)。
ポイントとマークを交換してからマークをアクティブにして、次にマークが非アクティブになるまでの間、Transient
Markモードを一時的に有効にします(これはプレフィクス引数を指定したC-x C-x
(exchange-point-and-mark
)コマンドです)。
これらのコマンドはマークをセットまたはアクティブにして、マークが非アクティブになるまでの間Transient Markモードを有効にします。これらを使う1つの理由は、いくつかのコマンドはTransient Markモードがオフのとき、リージョンにたいしてではなくバッファー全体を処理するからです。Transient Markモードを一時的に有効にできれば、これらのコマンドをリージョンにたいして処理させることができます。
リージョンをマウス(マークのセットを参照してください)、またはシフト選択(シフト選択を参照してください)で指定したときも、一時的にTransient Markモードが有効になり、リージョンがハイライトされます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsでkillとはテキストを消去して、killリングにコピーすることを意味します。yankとは、killリングからテキストを取り出して、バッファーに戻すことを意味します(“cut(カット、切り取り)”と“paste(ペースト、貼り付け)”という用語を使うアプリケーションもあります)。これはテキストブロックのセットが、循環的にアクセスできるリングに格納されているイメージから、killリングと名付けられました。killリングを参照してください。
killとyankは、Emacsでテキストを移動したりコピーするための、もっとも一般的な方法です。これは用途が広いコマンドです。なぜなら、多くの異なる種類の構文単位をkillするためのコマンドが存在するからです。
12.1 削除とkill | テキストを削除するコマンド。 | |
12.2 yank | テキストを挿入するコマンド。 | |
12.3 グラフィカルなディスプレーでのカットアンドペースト | グラフィカルなディスプレーにおけるクリップボードと選択。 | |
12.4 テキストの追加 | バッファーにテキストを追加する他の方法。 | |
12.5 矩形領域(Rectangles) | 矩形領域のテキストの操作。 | |
12.6 CUAバインド | killとyankでC-x/C-c/C-vを使う。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
バッファーからテキストを消去するコマンドの多くは、それをkillリング(killリングを参照)に保存します。これらはkillコマンドとして知られており、通常名前に‘kill’が含まれます(例
kill-line
)。killリングには、最近killしたものが、1つだけではなくいくつか格納されているので、killはとても安全な操作と言えます。なぜなら、以前にkillしたテキストが失われる心配をする必要がないからです。killリングは、すべてのバッファーで共有されているので、あるバッファーでkillしたテキストを、別のバッファーにyankすることができます。
C-/
(undo
)を使うと、killコマンドはアンドゥ(Undo(取り消し)を参照してください)されるので、killしたテキストはバッファーに戻されますが、killリングからは削除されません。
グラフィカルなディスプレーでは、テキストをkillすると、それはシステムのクリップボードにもコピーされます。 グラフィカルなディスプレーでのカットアンドペーストを参照してください。
テキストを消去してkillリングに保存しないコマンドは、削除(delete)コマンドとして知られており、名前に‘delete’が含まれています。これらはC-d
(delete-char
)やDEL
(delete-backward-char
)のように、一度に1文字削除するものや、スペースや改行だけを削除するものが含まれます。重要なデータの有意な量を消去するコマンドには、一般的にkill操作が用いられます。
killとyankでマウスを使うこともできます。グラフィカルなディスプレーでのカットアンドペーストを参照してください。
12.1.1 削除 | 少量のテキストや空の領域を削除するコマンド。 | |
12.1.2 行のkill | テキスト行を一度にkillする方法。 | |
12.1.3 その他のkillコマンド | 大きなリージョン、および単語やセンテンスのような構文単位をkillするコマンド。 | |
12.1.4 killのオプション | killに影響を与えるオプション。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
削除とは、テキストを消去してkillリングに保存しないという意味です。テキストを削除するたいていのEmacsコマンドは、1文字または空白文字しか消去しません。
前の文字を削除します。リージョンがアクティブのときは、リージョンのテキストを削除します(delete-backward-char
)。
次の文字を削除します。リージョンがアクティブのときは、リージョンのテキストを削除します(delete-forward-char
)。
次の文字を削除します(delete-char
)。
ポイントの周囲のスペースとタブを削除します(delete-horizontal-space
)。
スペースを1つ残して、ポイントの周囲のスペースとタブを削除します(just-one-space
)。
現在行の周囲の空行を削除します(delete-blank-lines
)。
行間にある改行をインデントと共に削除して2行を1行にします(delete-indentation
)。
基本的な削除コマンドDEL (delete-backward-char
)、delete
(delete-forward-char
)、C-d
(delete-char
)については既に説明しました。テキストの消去を参照してください。数引数を指定すると、指定した数の文字を削除します。リージョンがアクティブのとき、数引数に1を指定するか省略した場合、DELとdeleteは、リージョンのすべてのテキストを削除します。
他の削除コマンドは、空白文字(スペース、タブ、改行)だけを削除するものです。M-\
(delete-horizontal-space
)は、ポイントの前後にあるすべてのスペースとタブを削除します。プレフィクス引数を指定すると、ポイントの前にあるスペースとタブだけを削除します。M-SPC
(just-one-space
)も同様ですが、前にスペースが何個あるかに関係なく、ポイントの前に1つのスペースを残します。数引数nを指定すると、nが正のときはポイントの前に、n個のスペースを残します。nが負の場合は、スペースとタブに加えて改行も削除し、ポイントの前に-n個のスペースを残します。コマンドcycle-spacing
は、just-one-space
のようなコマンドで、よりフレキシブルな動作をします。これは連続で呼び出すと異なる処理を行います。1番目の呼び出しではjust-one-space
と同様の処理をし、2番目の呼び出しではすべての空白文字を削除し、3番目の呼び出しでは元の空白文字を復元します。
C-x C-o
(delete-blank-lines
)は、現在行の下にあるすべての空行を削除します。現在行が空行のときは、現在行の上にあるすべての空行も削除します(空行を1つ、つまり現在行は残します)。単独の空行で実行するとその行を削除します。
M-^
(delete-indentation
)は、改行と周囲のスペース(通常1つのスペースを残す)を削除することにより、現在行とその上の行を結合します。M-^を参照してください。
コマンドdelete-duplicate-lines
は、リージョン内の重複した行を検索して、それぞれ1行を残して削除します。通常は重複した行の最初の行を残しますが、プレフィクス引数C-uを指定すると、最後の行を残します。プレフィクス引数C-u
C-uを指定すると、隣接した重複行だけを検索します。これは行がソート済みのとき効果的です。プレフィクス引数C-u C-u
C-uを指定すると、連続する空行は残します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
行の残り、または1行以上をkillします(kill-line
)。
1度に行全体を削除します(kill-whole-line
)。
もっとも簡単なkillコマンドは、C-k
(kill-line
)です。これを行末で使うと、その行を終端している改行をkillして、現在行と次の行を継げます(空行なら削除します)。そうでない場合、C-kはポイントから行末までを削除します。ポイントの元の位置が行頭の場合は、空行が残ります。
どちらのケースを適用するか決める際には、行末のスペースとタブは無視されます。ポイントが行の一番最後の非空白文字の後にあるとき、C-kは改行をkillすることに注意してください。空でない行全体をkillするときは、行頭でC-kを2回タイプしてください。
このコンテキストで“行”とは、スクリーン行ではなく論理行を意味します(継続行を参照してください)。
C-kに正の数値nを与えると、n行とそれに続く改行をkillします(現在行のポイントの前にあるテキストはkillされません)。負の引数-nを与えると、現在行のポイントの前にあるテキストと、前のn行をkillします。C-kに0を指定すると、現在行のポイントの前にあるテキストをkillします。
変数kill-whole-line
が非nil
のときは、行頭でのC-kにより行末の改行も含めて行全体がkillされます。この変数は通常nil
です。
C-S-backspace
(kill-whole-line
)は行中のポイントの位置に関わらず、改行を含めた行全体をkillします。キーシーケンスC-S-backspaceをタイプできないテキスト端末がたくさんあることに注意してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
リージョンをkillします(kill-region
)。
リージョンをkillリングにコピーします(kill-ring-save
)。
次の単語をkillします(kill-word
)。単語を参照してください。
後方に1単語killします(backward-kill-word
)。
センテンスの先頭までを後方にkillします(backward-kill-sentence
)。センテンスを参照してください。
文の末尾までをkillします(kill-sentence
)。
後に続く対応のとれた式(balanced
expressions)をkillします(kill-sexp
)。対応が取れたカッコの式を参照してください。
次のcharまでをkillします(zap-to-char
)。
次のcharまで( charを含まず)をkillします。
一般によく使われるkillコマンドはC-w
(kill-region
)で、これはリージョンのテキストをkillします(マークとリージョンを参照してください)。同様にM-w
(kill-ring-save
)は、バッファーからテキストを消去せずに、リージョンのテキストをkillリングにコピーします。C-wまたはM-wをタイプしたとき、マークが非アクティブの場合、これらのコマンドはポイントと最後にセットしたマークの間にあるテキストにたいして処理を行います(リージョンを操作するを参照してください)。
Emacsは特定の構文単位にたいするkillコマンドを提供します。単語(words)にたいしてはM-DELとM-d(単語を参照してください)、対応のとれた式(balanced expressions)にたいしてはC-M-k(対応が取れたカッコの式を参照してください)、センテンス(sentences: 文)にたいしてはC-x DELM-k(センテンスを参照してください)です。
コマンドM-z
(zap-to-char
)はkillと検索の組み合わせです。これは文字を読み取り、ポイントからバッファー内の次にその文字が現れる場所までをkillします。数引数は繰り返し回数です。負の引数の場合は後方に検索することを意味し、ポイントの前のテキストをkillします。以前に使用した文字のヒストリーが保守されていてM-pとM-nのキーストロークでアクセスできます。これは主に複雑な入力手段で入力する必要が文字の場合に有用です。
類似コマンドのzap-up-to-char
はポイントから次の文字までkillしますがその文字は含みません。数引数は繰り返し回数として機能します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
いくつかの特別なバッファーは、読み取り専用(read-only)のテキストを含んでいて、それらは変更できないのでkillもできません。killコマンドは読み取り専用のバッファーにたいして特別な動作をします。バッファーから実際にテキストを削除せずに、killリングにコピーします。通常はビープ音をならし、その旨のエラーメッセージを表示します。しかし変数kill-read-only-ok
を非nil
にセットすると、なぜテキストが消去されないのかをエコーエリアにメッセージ表示します。
変数kill-do-not-save-duplicates
を非nil
に変更すると、同じものにたいするkillは重複なくkillリングの1つのエントリーとなります。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
yankするとは、以前killしたテキストを再び挿入するという意味です。テキストを移動またはコピーする通常の方法は、それをkillしてからどこかにyankする方法です。
最後にkillしたものをポイント位置にyankします(yank
)。
yankしたテキストを、それより前にkillしたテキストに置き換えます(yank-pop
)。過去にkillしたテキストをyankするを参照してください。
次のコマンドがkillコマンドのときは、killしたものを、以前にkillしたものに追加します(append-next-kill
)。killしたテキストの追加を参照してください。
基本的なyankコマンドは、C-y
(yank
)です。これはもっとも最近killされたものを挿入し、カーソルを挿入されたテキストの最後に移動します。また挿入されたテキストの先頭にマークをセットして、それを非アクティブにします。これによりC-u
C-SPCで簡単にその位置にジャンプできます(マークリングを参照してください)。
C-u C-yのようにプレフィクス引数を指定すると、カーソルを挿入されたテキストの前に移動して、マークをテキストの最後にセットします。他のプレフィクス引数は、何回前のkillかを指定します。たとえばC-u 4 C-yは、もっとも最近killされたものから4番目に古いものを挿入します。
グラフィカルなディスプレーでは、C-yはまず最後にEmacsがkillした後に、他のアプリケーションがシステムのクリップボードに、何らかのテキストをコピーしていないか調べます。もしコピーしていたなら、かわりにクリップボードのテキストを挿入します。このようにEmacsは効果的に“カット(cut)”や“コピー(copy)”などの、他のアプリケーションで処理されたクリップボード操作を、Emacsのkillのように扱います(ただしkillリングには記録されません)。詳細については、グラフィカルなディスプレーでのカットアンドペーストを参照してください。
12.2.1 killリング | killされたテキストが格納される場所。 | |
12.2.2 過去にkillしたテキストをyankする | もっと前にkillしたものをyankする。 | |
12.2.3 killしたテキストの追加 | 数回のkillを一緒にまとめてyankする。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
killリング(kill ring)とは、以前にkillされたテキストブロックからなるリストです。すべてのバッファーにたいして、killリングは1つしかないので、あるバッファーでkillしたテキストを、他のバッファーにyankすることができます。これはバッファーから他のバッファーへテキストを移動する、通常の方法です(他の方法もいくつかあります。たとえばテキストをレジスターに格納することもできます。レジスターを参照してください。テキストを移動する他の方法については、テキストの追加を参照してください)。
killリングのエントリーの最大数は、変数kill-ring-max
で制御されます。デフォルトは60です。エントリー数が制限に達しているとき新たにkillすると、Emacsはkillリングの一番古いエントリーを削除して空きを作ります。
killリングの実際の内容は、kill-ring
という名前の変数に格納されています。killリングのエントリーの内容は、C-h
v kill-ringで見ることができます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
yankで説明したように、C-yに数引数を指定して、最後にkillされたものではないテキストをyankできます。これはkillリングのどのエントリーが欲しいか覚えているとき便利です。もし覚えていないときは、M-y
(yank-pop
)コマンドを使って、候補を探すことができます。
もし前のコマンドがyankコマンドのとき、M-yはyankされたテキストを、1つ前にkillされたテキストで置き換えます。つまり2番目に新しいkillされたテキストを復元するには、最初にC-yで最後にkillされたテキストをyankし、次にM-yでその1回前にkillされたテキストで置き換えます。M-yは、C-yまたは他のM-yの後しか使えません。
killリングのエントリーを指す(ポイントする)、last yankポインターという概念で、M-yを理解できるでしょう。なにかをkillする度に、last yankポインターはリングの先頭に新たに作られたエントリーを指すように移動します。C-yは、last yankポインターが指すエントリーをyankします。M-yはlast yankポインターが違うエントリーを指すように移動して、バッファーのテキストをポインターが指すテキストに変更します。M-yコマンドを繰り返すことにより、リングの任意のエントリーにポインターを移動できるので、任意のエントリーをバッファーに取り込むことができます。やがてリングの最後に到達すると、次のM-yにより再び最初のエントリーに戻ります。
M-yはリング内でlast yankポインターを移動させますが、リング内のエントリーの順番は変更しません。リングのエントリーは、常に最後にkillされたものを先頭に、記憶されているもので一番古いエントリーへと並んでいます。
last-yankポインターを何回進めるかを、M-yに数引数で指定できます。負の引数はリングの先頭に向かってポインターを移動させます。リングの先頭では一番古いエントリーに戻り、そこから先頭へと移動します。
望むテキストを見つけてバッファーに取り込んだら、M-yコマンドを止めればそのテキストはそこに残ります。このテキストはkillリングのエントリーの単なるコピーなので、それを編集してもリングの中のエントリーは変更されません。新しく何かをkillしない限り、last-yankポインターは同じ位置に留まるので、C-yでそのテキストの別のコピーをyankできます。
C-yに数引数を指定するときも、yankするエントリーにlast-yankポインターをセットします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
通常はkillコマンドを実行するごとに、新しいエントリーがkillリングにpushされます。しかし2回以上の連続するkillコマンドにより、killされたテキストを1つのエントリーとしてまとめ、すべてのテキストを1単位として、あたかもそれがkillされたかのように、1回のC-yでyankできます。
つまりテキストを1つの単位としてyankしたいとき、そのテキストすべてを1回でkillする必要はありません。すべてがkillされるまで行から行、単語から単語へとkillを続け、それを一度に取得することができます。
ポイントから前方にkillするコマンドは、直前にkillされたテキストの最後に追加します。ポイントから後方にkillするコマンドは、テキストの先頭に追加します。この方法により前方と後方を併用した連続するkillコマンドは、すべてのkillされたテキストを再配置しなくてもよいように、1つのエントリーにまとめます。数引数を指定してもkillの連続性は途切れません。たとえば以下のようなテキストを含むバッファーがあるとしましょう:
This is a line ∗of sample text.
ポイントの位置は∗で示された場所です。M-d M-DEL M-d M-DELとタイプして、前方と後方へのkillを交互に行うと、最後にkillリングには‘a line of sample’という1つのエントリー、バッファーには‘This is text.’が残ります(‘is’と‘text’の間には2つのスペースがあることに注意してください。これはM-SPCまたはM-qで取り除くことができます)。
同じテキストをkillする別の方法は、M-b M-bで単語2つ後方に移動してから、C-u M-dで前方の単語4つをkillする方法です。これはバッファーとkillリングに、正確に同じ結果をもたらします。M-f M-f C-u M-DELで後方にkillしても結果は同じです。killリングのエントリーは、常にバッファーからkillされる前と同じ順番になります。
killコマンドと最後のキルコマンドの間に、(単なる数引数ではない)他のコマンドが入ると、killリングには新たなエントリーが作られます。しかし、あらかじめC-M-w
(append-next-kill
)とタイプすることにより、最後にkillされたテキストに追加するように強制できます。C-M-wは、後に続くコマンドがkillコマンドであれば、killしたテキストを前にkillしたテキストに付け加えるよう指示します。この方法でも、前方にkillするコマンドの場合は、前にkillされたテキストの最後に追加され、後方にkillするコマンドの場合は、先頭に追加されます。この方法により、1ヶ所にyankするために離れた場所にあるいくつかのテキスト断片を、killして集めることができます。
M-w
(kill-ring-save
)の後のkillコマンドは、M-wでkillリングにコピーされたテキストへの追加はしません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ほとんどのグラフィカルなデスクトップ環境では、異なるアプリケーション間のデータ転送(通常はテキスト)に、クリップボード(clipboard)と呼ばれるシステム機能を使います。Xでは他にプライマリー選択(primary selection)とセカンダリー選択(secondary selection)という、同様の機能が利用可能です。Emacsをグラフィカルなディスプレーで実行している場合、killとyankコマンドはこれらの機能に統合されているので、Emacsと他のグラフィカルアプリケーション間で、簡単にテキストを転送できます。
デフォルトでは、Emacsはプログラム間テキスト転送のコーディングシステムとして、UTF-8を使います。もしコピーしたテキストが期待したものでない場合、C-x
RET xまたはC-x RET
Xとタイプして、他のコーディングシステムを指定できます。x-select-request-type
をカスタマイズして、異なるデータタイプを要求することもできます。プロセス間通信にたいするコーディングシステムを参照してください。
12.3.1 クリップボードを使う | Emacsがシステムクリップボードを使う方法。 | |
12.3.2 他のウィンドウアプリケーションにたいするカットアンドペースト | 一時的に選択されたテキストの選択。 | |
12.3.3 セカンダリー選択 | ポイントとマークを変化させずに切り取る。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
クリップボード(clipboard)とは、ほとんどのグラフィカルなアプリケーションが、“カットアンドペースト”のために使う機能です。もしクリップボードが存在する場合、Emacsのkillおよびyankコマンドもそれを使います。
何らかのテキストを、C-w (kill-region
)のようなコマンドでkillしたり、M-w
(kill-ring-save
)のようなコマンドでkillリングにコピーしたとき、そのテキストはクリップボードにも転送されます。
Emacsのkillコマンドがテキストをクリップボードに転送すると、通常クリップボードの既存の内容は失われます。オプションとして、save-interprogram-paste-before-kill
をt
に変更できます。これにより、Emacsは古いクリップボードのデータが失われることを防ぐために、最初にクリップボードのデータをkillリングに保存します。これにはデータが大きくなると、メモリー消費が増えるというリスクがあります。
C-y
(yank
)のようなyankコマンドもクリップボードを使います。他のアプリケーションがクリップボードを“所有”する場合(たとえばEmacsで最後にkillコマンドを実行した後に、他のアプリケーションでテキストをカットまたはコピーした場合)、Emacsはkillリングではなくクリップボードからyankします。
通常killリングをM-y
(yank-pop
)で巡回することでは、クリップボードは変更されません。しかしyank-pop-change-selection
をt
に変更すると、M-yは新しいyankをクリップボードに保存します。
killおよびyankコマンドがクリップボードにアクセスしないようにするには、変数select-enable-clipboard
をnil
に変更してください。
多くのXデスクトップ環境は、クリップボードマネージャー(clipboard
manager)と呼ばれる機能をサポートします。もしEmacsがクリップボードのデータの現在の“持ち主”のときにEmacsを終了し、そのときクリップボードマネージャーが実行されていると、Emacsはクリップボードのデータをクリップボードマネージャーに転送するのでデータは失われません。ある状況において、これはEmacsが終了するが遅くなる原因となります。Emacsがクリップボードマネージャーにデータを転送しないようにするには、変数x-select-enable-clipboard-manager
をnil
に変更してください。
通常、クリップボードを通じて渡されるNULバイトを含む文字列は切り詰められるため、Emacsはシステムのクリップボードに転送する前に、そのような文字を“\\0”に置き換えます。
Emacs 24以前は、killおよびyankコマンドは、クリップボードではなくプライマリー選択(他のウィンドウアプリケーションにたいするカットアンドペーストを参照してください)を使っていました。もしこのほうがよいなら、select-enable-clipboard
をnil
、select-enable-primary
をt
、mouse-drag-copy-region
をt
に変更してください。この場合は、次のコマンドを使って、クリップボードに明示的にアクセスできます。リージョンをkillしてクリップボードに保存するにはclipboard-kill-region
、リージョンをkillリングにコピーするとともにクリップボードに保存するにはclipboard-kill-ring-save
、クリップボードの内容をポイント位置にyankするにはclipboard-yank
です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Xウィンドウシステム下では、プライマリー選択(primary selection)に、Xアプリケーションで最後に選択されたテキスト(通常はマウスのドラッグで選択される)が存在します。一般的に、このテキストは他のXアプリケーションにmouse-2をクリックして挿入することができます。プライマリー選択はクリップボードとは別のものです。プライマリー選択の内容は、より脆弱です。なぜなら、クリップボードは明示的なカットまたはコピーだけにより上書きされるのにくらべ、プライマリー選択はマウスでテキストが選択される度に上書きされるからです。
Xの下では、リージョンがアクティブ(マークとリージョンを参照してください)になればいつでも、リージョンのテキストはプライマリー選択に保存されます。これは、そのリージョンの選択がマウスでドラッグやクリック(編集のためのマウスコマンドを参照してください)されたのか、キーボードコマンド(たとえばC-SPCをタイプしてからポイントを移動したなど。マークのセットを参照してください)なのかによらず適用されます。
変数select-active-regions
をonly
に変更すると、Emacsは一時的にアクティブになったリージョン(たとえばマウスやシフト選択など。シフト選択を参照してください)だけをプライマリー選択に保存します。select-active-regions
をnil
に変更すると、Emacsはアクティブなリージョンをプライマリー選択に保存しません。
プライマリー選択をEmacsのバッファーに挿入するには、挿入したい場所でmouse-2
(mouse-yank-primary
)をクリックします。編集のためのマウスコマンドを参照してください。
MS-Windowsはプライマリー選択を提供しませんが、Emacsは単一のEmacsセッション内で選択されたテキストを内部に格納することにより、これをエミュレートします。したがってWindowsでも、プライマリー選択に関するすべての機能とコマンドは、Xと同様に機能します。しかしこれは同一セッションにおけるカットやペーストなどの場合で、Emacsセッションと他のアプリケーション間では機能しません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
プライマリー選択に加えて、Xウィンドウシステムはセカンダリー選択(secondary selection)として知られる、同様な第2の機能を提供します。最近ではセカンダリー選択を使うXアプリケーションの数は多くありませんが、以下のEmacsコマンドによりアクセスできます:
ボタンを押した場所からボタンを話した場所までを、セカンダリー選択としてセットします(mouse-set-secondary
)。ドラッグして選択されたテキストは、フェイスsecondary-selection
を使ってハイライトされます。ウィンドウの上端または下端を越えてマウスをドラッグすると、mouse-set-region
と同様にウィンドウは自動的にスクロールします(編集のためのマウスコマンドを参照してください)。
このコマンドはkillリングを変更しません。
セカンダリー選択(secondary
selection)の終端をセットします(mouse-start-secondary
)。もう一方のをセットして選択を完了するには、M-mouse-3を使用します。このコマンドは、新たなセカンダリー選択開始時に、既存のセカンダリー選択をキャンセルします。
以前にM-mouse-1で指定された位置から、M-mouse-3でクリックされた点を終点とするセカンダリー選択をセットします(mouse-secondary-save-then-kill
)。これは選択されたテキストをkillリングにも保存します。同じ場所での2回目のM-mouse-3は、作成されたセカンダリー選択で選択されたテキストをkillします。
クリックした場所にセカンダリー選択を挿入し、ポイントをyankしたテキストの最後に配します(mouse-yank-secondary
)。
Mouse-1と同様、M-mouse-1のダブルクリックで単語、トリプルクリックで行を処理します。
mouse-yank-at-point
が非nil
の場合、M-mouse-2はポイント位置にyankします。どこをクリックしたか、さらにはフレームのどのウィンドウをクリックしたかは関係ありません。編集のためのマウスコマンドを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
テキストのコピーや移動は、それをkillしてyankすることにより通常行います。しかし多くの箇所にあるテキストブロックをコピーしたり、たくさんのテキストの断片を1ヶ所にコピーする便利な方法があります。ここではテキストの断片を、バッファーやファイルに追加するコマンドを説明します。
リージョンを指定したバッファーの内容の後に追加(append)します。
リージョンを指定したバッファーの内容の前に追加(prepend)します。
リージョンを指定したバッファーにコピーして、バッファーの古い内容は削除されます。
指定したバッファーの内容を、現在のバッファーのポイント位置に挿入します。
リージョンを指定したファイルの内容の最後に追加します。
テキストをバッファーに追加するには、M-x
append-to-bufferを使います。これはバッファー名を読み取り、リージョンのコピーを指定したバッファーに挿入します。存在しないバッファーを指定すると、append-to-buffer
はそのバッファーを作成します。テキストは、そのバッファーのポイント位置に挿入されます。バッファーを編集用に使っていると、コピーされたテキストはその時ポイントがあった位置に挿入されます。
バッファーのポイントは、コピーされたテキストの最後に残ります。連続してappend-to-buffer
を使うと、テキストは指定したバッファーにコピーした順番で追加されていきます。厳密に言うとappend-to-buffer
は既存のバッファーのテキストにたいして、常に追加をする訳ではありません。これはポイントがバッファーの最後にあるときに追加をします。しかしバッファーを変更するのにappend-to-buffer
しか使わない場合、ポイントは常にバッファーの最後に位置することになります。
M-x
prepend-to-bufferもappend-to-buffer
と同様ですが、他のバッファーのポイントはコピーされたテキストの前に置かれるので、連続してこのコマンドを使用すると、テキストは逆の順番に追加されます。M-x
copy-to-bufferも同様ですが、他のバッファーの既存の内容は削除されるので、バッファーの内容は新しくコピーされたテキストだけになります。
コマンドM-x insert-bufferは、追加するテキストを他のバッファーから取得するために使われます。これはバッファー名の入力を求め、そのバッファーのすべてのテキストのコピーを、現在のバッファーのポイント位置に挿入します。ポイントは挿入されたテキストの先頭になります。挿入されたテキストの最後の位置もマークリングに追加されます。マークは非アクティブになります。バッファーに関する背景情報は、複数バッファーの使用を参照してください。
バッファーのテキストを追加するかわりに、M-x append-to-fileでテキストを直接ファイルに追加できます。これはファイル名の入力を求め、リージョンのテキストを指定されたファイルの最後に追加します。ディスク上のファイルはすぐに変更されます。
append-to-file
は、Emacsがvisitしていないファイルだけに使うべきです。Emacsで編集中のファイルにたいして使用すると、それはEmacsの背後でファイルが変更されることになるため、編集内容が失われる可能性があります。
テキストの移動に関する他の方法はレジスターに格納する方法です。レジスターを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
矩形領域(rectangle)コマンドは、テキストの矩形領域を操作します。矩形領域のテキストとは、特定の行範囲内にある、特定の2つの列の間にある文字すべての文字です。Emacsには矩形領域にたいしてkill、yank、クリアー、スペースやテキストでフィル、削除を行うコマンドがあります。矩形領域コマンドは、複数列のテキストを操作したり、テキストをそのように変更したり戻したりする場合に便利です。
コマンドで操作する矩形領域を指定するには、一方の角にマークを設定し、その対角にポイントを置きます。このように設定した矩形領域を矩形リージョン(region-rectangle)と呼びます。ポイントとマークが同じ列の場合、矩形リージョンは空になります。ポイントとマークが同じ行の場合、矩形リージョンの高さは1行になります。
矩形リージョンは、リージョンの制御と大体同じ方法で制御できます。しかし、ポイントとマークの組がリージョンとして解釈されるのか、あるいは矩形領域として解釈されるかは、それらを使うコマンドに依存することに注意してください。
矩形リージョンはマウスを使用してマークすることもできます。矩形の一方の隅をC-M-mouse-1でクリックして向かい側の隅までドラッグしてください。
矩形リージョンをkillして、最後にkillされた矩形領域として、その内容を保存します(kill-rectangle
)。
矩形リージョンのテキストを、最後にkillされた矩形領域として保存します(copy-rectangle-as-kill
)。
矩形リージョンのテキストを削除します(delete-rectangle
)。
最後にkillされた矩形領域の左上隅がポイント位置になるようにyankします(yank-rectangle
)。
矩形領域にスペースを挿入します(open-rectangle
)。これにより矩形リージョンの以前の内容は右にずれます。
矩形リージョンの左端に行番号を挿入します(rectangle-number-lines
)。これにより矩形リージョンの以前の内容は右にずれます。
矩形リージョンの内容をスペースに置き換えてクリアーします(clear-rectangle
)。
指定された矩形領域の各行で、矩形領域の左端の列から空白文字を削除します。
矩形領域の各行にたいして、内容をstringに置き換えます(string-rectangle
)。
矩形領域の各行にたいして、stringを挿入します。
Rectangle
Markモードを切り替えます(rectangle-mark-mode
)。このモードがアクティブのとき矩形領域はハイライトされ、拡大・縮小が可能になります。標準のkillおよびyankコマンドは、それにたいして操作を行います。
矩形領域の操作は2種類に分類できます。それは矩形領域を消去または挿入するものと、空の矩形領域を作るものです。
矩形領域のテキストを消去するには2つの方法があります。C-x r d
(delete-rectangle
)はテキストを無条件に削除します。C-x r k
(kill-rectangle
)はテキストを取り除いて、それを最後にkillされた矩形領域として保存します。両方とも矩形領域の各行の指定したテキストを消去するように、矩形リージョンを消去します。その行の後に続くテキストがある場合、削除による隙間を生めるために後方に移動されます。
矩形領域のkillは普通のkillとは異なります。矩形領域はkillリングには保存されず、一番最後にkillされた矩形領域だけを記録する、特別な場所に保存されます。矩形領域のyankは線形テキストのyankとは大きく異なるので、異なるyankコマンドが使われるからです。矩形領域にたいしてyankのpopは定義されていません。
C-x r M-w
(copy-rectangle-as-kill
)は矩形領域用のM-wに相当します。これはバッファーからテキストを削除することなく、最後にkillされた矩形領域として、矩形領域を記録します。
killされた矩形領域をyankするには、C-x r y
(yank-rectangle
)とタイプします。矩形領域の最初の行はポイント位置に挿入されます。矩形領域の2行目はポイントの1行下の位置に挿入され、以下同様に挿入されていきます。影響を受ける行数は、保存された矩形領域の高さにより決定されます。
たとえば1列のリスト2つを2列のリストに変換できます。一方の1列リストを矩形領域としてkillしてもう一方の1列リストの隣にyankすればよいのです。
C-x r r rとC-x r i rで、矩形領域をレジスターにコピーしたり取り出したりできます。レジスターに矩形領域を保存するを参照してください。
空の矩形領域を作るために使うことのできるコマンドが2つあります。C-x r c
(clear-rectangle
)は、矩形リージョンの既存のテキストを空白に置き換えます。C-x r o
(open-rectangle
)は空白の矩形領域を挿入します。
M-x delete-whitespace-rectangleは、指定した列を起点に水平方向の空白文字を削除します。これは矩形領域の各行に適用され、開始列は矩形領域の左端です。矩形領域の右端はこのコマンドに影響を及ぼしません。
コマンドC-x r N
(rectangle-number-lines
)は、矩形領域の左端に行番号を挿入します。通常は矩形領域の最初の行を1として番号が開始されます。プレフィクス引数を指定すると、このコマンドは開始番号と、番号を出力する際の書式文字列(Formatting
Strings in The Emacs Lisp Reference Manualを参照してください)の入力を求めます。
コマンドC-x r t
(string-rectangle
)は、矩形リージョンの各行を文字列で置き換えます。文字列の幅は矩形領域と同じ幅である必要はありません。矩形領域の後ろのテキストは、文字列の幅が少ないときは左に、文字列の幅が大きいときは右にシフトされます。
コマンドM-x
string-insert-rectangleは、string-rectangle
と同様ですが、各行に文字列を挿入し、元の文字列は右にシフトされます。
コマンドC-x SPC
(rectangle-mark-mode
)は、矩形リージョンをハイライトするか、標準のリージョンをハイライトするかを切り替えます(最初にリージョンをアクティブにする必要があります)。このモードが有効な場合、C-f、C-nなどのコマンドは矩形領域に合ったやり方でリージョンのサイズを変更し、kill、yankは矩形領域を処理します。テキストのkillと移動を参照してください。このモードはリージョンがアクティブな間だけ持続します。
標準のリージョンとは異なり、バッファー終端を越えたり、TABのような伸長された空白スペースの中間のような、通常はポイントを置けない場所にも矩形リージョンのコーナーを置くことができます。
そのリージョンがrectangle-mark-modeにある場合、C-x
C-xは、矩形リージョンの4隅のコーナーを巡回する、コマンドrectangle-exchange-point-and-mark
を実行します。これはマークされたテキストにたいする処理を呼び出す前に、矩形リージョンをのサイズを変更したい場合に便利です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
コマンドM-x cua-modeは、多くのアプリケーションで使われている、CUA(Common User Access)互換のキーバンドをセットアップします。
CUAモードが有効な場合、C-x、C-c、C-v、C-zなどのキーは、カット(kill)、コピー、ペースト(yank)、アンドウのコマンドを呼び出します。C-xとC-cによるカットとコピーは、リージョンがアクティブなときだけ処理されます。リージョンが非アクティブのときはプレフィクスキーとして動作するので、C-x
C-cのような標準のEmacsコマンドは正常に機能します。変数mark-even-if-inactive
はC-xとC-cに影響を及ぼさないことに注意してください(リージョンを操作するを参照してください)。
マークがアクティブのときにC-x C-fのようなEmacsコマンドを入力するには、Shiftを押しながらプレフィクスキーを押す(例 S-C-x C-f)か、プレフィクスキーを素早く2回タイプ(例 C-x C-x C-f)します。
CUAモードがEmacs標準のキーバインドをオーバーライドするのを無効にしつつ、以下で説明するそれ以外のCUAモードの機能は使う場合は、変数cua-enable-cua-keys
にnil
をセットしてください。
CUA モードはデフォルトでDelete-Selectionモード(編集のためのマウスコマンドを参照してください)を有効にするので、アクティブなリージョンがあるときテキストをタイプすると、そのテキストで置き換えられます。CUAモードでこれを無効にするには、変数cua-delete-selection
をnil
にセットしてください。
CUAモードは矩形領域を明白にハイライトする、強化された矩形領域サポートを提供します。C-RETを使うことにより矩形領域の選択が開始され、移動コマンドを使って拡張したり、C-xとC-cで切り取りとコピーができます。RETにより、矩形領域の四隅に時計方向へカーソルを移動させるので、任意の方向に簡単に領域を拡張できます。タイプされた通常のテキストは、矩形領域の各行の左か右(カーソルのある側)に挿入されます。
この矩形領域サポートは、cua-rectangle-mark-mode
コマンドを呼び出すことにより、CUAモードを有効にせずに使うこともできます。標準コマンドrectangle-mark-mode
もあります。矩形領域(Rectangles)を参照してください。
CUAモードでは、テキストや矩形領域を簡単にレジスターに保存したり、取り出すことができます。これは1桁の数引数をkill、copy、yankコマンドに指定します。たとえばC-1
C-cはリージョンをレジスター1
にコピーし、C-2 C-vはレジスター2
の内容をyankします。
CUAモードは、バッファー間での簡単にテキストを移動したりコピーするためのグローバルマーク機能も提供します。C-S-SPCを使って、グローバルマークのオンとオフが切り替えられます。グローバルマークがオンのときは、killまたはコピーされたすべてのテキストは自動的にグローバルマークの位置に挿入され、タイプしたテキストも現在のカーソル位置ではなくグローバルマークに挿入されます。
たとえば複数のバッファーから単語をコピーして単語リストを作るには、単語リストを作るバッファーにグローバルマークをセットします。次にリストにしたい単語をマーク(S-M-fなど)してから、C-cかM-wでリストにコピーします。そしてRETでリストにコピーされた単語の後ろに改行を挿入すればよいのです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsのレジスター(registers)は、テキストや矩形領域、位置、その他、後で使うものを保存するための区画です。一度テキストや矩形領域をレジスターに保存すれば、それをバッファーに何度もコピーできます。一度場所をレジスターに保存すれば、何度でもその場所にジャンプして戻ることができます。
各レジスターは1文字からなる名前があり、ここではrと表記することにします。rには、英字(‘a’など)または数字(‘1’など)を使用できます。大文字小文字は区別されるので、レジスター‘a’とレジスター‘A’は同じではありません。たとえば‘*’や‘C-d’のような、非英数字にレジスターをセットすることもできます。‘C-g’と‘ESC’は対話的なコマンドを終了させるために予約済みなので、これらのキーにレジスターをセットすることはできないことに注意してください。
レジスターには位置、テキスト、矩形領域、数字、ウィンドウの設定、ファイル名が保存できますが、一度に保存できるのは1つです。レジスターに何か保存すると、他の何かをそのレジスターに保存するまで残ります。レジスターrに何が含まれているのか見るには。M-x view-registerを使います:
レジスターrに何が含まれるかの説明を表示します。
レジスター名の入力を求めるコマンドはすべて、既存のレジスターを一覧するプレビュー(preview)ウィンドウを遅延表示します。遅延の長さはregister-preview-delay
でカスタマイズできます。遅延を無効にするには、nil
をセットしてください。この場合、C-hかF1で、明示的にプレビューウィンドウを要求できます。
ブックマーク(Bookmarks)はファイルと位置を記録するので、ファイルを再び見るときは記録された位置から閲覧できます。ブックマークも本質的にレジスター同じなので、このチャプターに記載します。
13.1 レジスターに位置を保存する | 位置をレジスターに保存する。 | |
13.2 レジスターにテキストを保存する | テキストをレジスターに保存する。 | |
13.3 レジスターに矩形領域を保存する | 矩形領域をレジスターに保存する。 | |
13.4 レジスターにウィンドウ設定を保存する | ウィンドウの設定をレジスターに保存する。 | |
13.5 レジスターに数字を保存する | レジスターの中の数字。 | |
13.6 レジスターにファイル名を保存する | レジスターの中のファイル名。 | |
13.7 キーボードマクロのレジスター | レジスターの中のキーボードマクロ。 | |
13.8 ブックマーク | レジスターと似ているが永続性があるブックマーク。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
現在のバッファーのポイント位置をレジスターrに記録します(point-to-register
)。
レジスターrに記録されたバッファーの位置にジャンプします(jump-to-register
)。
C-x r SPC
(point-to-register
)と、それに続けて文字rをタイプすると、ポイント位置と現在のバッファーの両方をレジスターrも保存します。レジスターは他の何かが保存されるまでこの情報を保持します。
コマンドC-x r j rはrに記録されたバッファーに切り替えて、マークをpushするとともに記録された位置にポイントを移動します(すでにポイントが記録された位置にあるとき、またはこのコマンドの連続呼び出し時にはマークはpushされない)。レジスターの内容は変わらないので、保存した位置に何度でもジャンプできます。
C-x r jを使って保存した位置に移動するとき、保存されたバッファがkillされていた場合、C-x r jは同じファイルをvisitしてバッファーを生成しようと試みます。もちろんこれはファイルをvisitしたバッファーだけの動作です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
同じテキストのコピーを何回も挿入したいとき、killリングからyankするのは不便です。なぜなら何かkillするたびに、そのエントリーはリングの下の方へ移動してしまうからです。代替として、テキストをレジスターに保存して、後で取り出す方法があります。
リージョンをレジスターrにコピーします(copy-to-register
)。
レジスターrからテキストを挿入します(insert-register
)。
リージョンをレジスターrのテキストに追加します。
レジスターrの内容がテキストの場合、そのレジスターに追加するのにC-x r +
(increment-register
)も使用できます。レジスターrに数値が含まれている場合、コマンドC-x r
+は違う動作をすることに注意してください。レジスターに数字を保存するを参照してください。
リージョンをレジスターrの先頭に追加します。
C-x r s rは、リージョンのテキストのコピーを、rという名前のレジスターに保存します。マークが非アクティブのとき、Emacsはまず最後にセットされたマークをアクティブにします。マークはこのコマンドの最後に非アクティブになります。マークとリージョンを参照してください。同じコマンドにプレフィクス引数を指定したC-u C-x r s rは、テキストのコピーをレジスターrに保存してから、バッファーのテキストを削除します。これはリージョンのテキストを、レジスターに移動したと考えることができます。
M-x append-to-register RET
rは、リージョンのテキストのコピーを、rという名前のレジスターにすでに保存されているテキストに追加します。プレフィクス引数を指定した場合、レジスターに追加した後にリージョンを削除します。コマンドprepend-to-register
も同様ですが、これはリージョンのテキストをレジスターのテキストの最後ではなく先頭に追加します。
append-to-register
とprepend-to-register
を使ってテキストを集める場合、セパレーターを使って個々に集めたテキストを分割したい場合があります。そのようなときはregister-separator
を構成して、セパレーター文字列をそのレジスターに保存します。たとえばテキストを収集する過程で、個々のテキストを2つの改行で分けたい場合、以下の設定を使うことができます。
(setq register-separator ?+) (set-register register-separator "\n\n")
C-x r i rは、レジスターrのテキストをバッファーに挿入します。通常はポイントをテキストの後に置き、非アクティブのマークをテキストの前にセットします。プレフィクス引数を指定したときは、ポイントをテキストの前、マークをテキストの後にセットします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
レジスターには線形のテキストだけでなく、矩形領域も保存できます。バッファーで矩形領域を指定する方法は、矩形領域(Rectangles)を参照してください。
矩形リージョンをレジスターrにコピーします(copy-rectangle-to-register
)。プレフィクス引数を指定するとコピー後に矩形リージョンを削除します。
レジスターrに矩形リージョンが保存されている場合、それを挿入します(insert-register
)。
前にレジスターにテキストを保存するでも説明したC-x r i r
(insert-register
)コマンドは、レジスターに矩形領域が保存されているときはテキストではなく矩形領域を挿入します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
選択されたフレームのウィンドウの設定や、すべてのフレームのすべてのウィンドウの設定もレジスターに保存して、後で設定を復元することができます。ウィンドウの設定については、複数ウィンドウを参照してください。
選択されたフレームのウィンドウの設定を、レジスターrに保存します(window-configuration-to-register
)。
すべてのフレームおよびフレームに含まれるすべてのウィンドウの状態を、レジスターrに保存します(frameset-to-register
)。
C-x r j rを使うと、ウィンドウまたはフレームの設定を復元できます。これはカーソル位置を復元するコマンドと同じです。フレームの設定を復元するとき、設定に含まれていないフレームは非表示になります。もしこれらのフレームを削除したいときは、かわりにC-u C-x r j rを使います。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
数字をレジスターに保存して、その数字(10進)をバッファーに挿入したり、増加させるコマンドがあります。これらのコマンドはキーボードマクロで使うと便利です(キーボードマクロを参照してください)。
numberをレジスターrに保存します(number-to-register
)。
rに数字が保存しているときは、レジスターの数字をnumberだけ増加させます。コマンドC-x r +
(increment-register
)は、rにテキストが保存されているときは異なる動作をすることに注意してください。レジスターにテキストを保存するを参照してください。
レジスターrの数字をバッファーに挿入します。
C-x r iは、他のレジスターの内容をバッファーに挿入するコマンドと同じです。C-x r +に数字の引数を与えない場合、レジスターの値は1増加します。C-x r nに数字の引数を与えない場合、レジスターには0が保存されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
特定の名前のファイルを頻繁にvisitする場合、その名前をレジスターにセットしておけば、より便利にファイルをvisitすることができます。以下はnameというファイルをレジスターrにセットするLispコードです:
(set-register r '(file . name))
たとえば、
(set-register ?z '(file . "/gd/gnu/emacs/19.0/src/ChangeLog"))
はレジスター‘z’にファイル名をセットします。
レジスターrに名前がセットされているファイルをvisitするには、C-x r j rとタイプします。これはある位置にジャンプしたり、フレームの設定を復元するのと同じコマンドです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
あるキーボードマクロ(キーボードマクロを参照してください)を頻繁に実行する必要がある場合、それをレジスターにセットしたり保存することができればより便利でしょう(キーボードマクロの命名と保存を参照してください)。C-x C-k x r
(kmacro-to-register
)は、最後のキーボードマクロをレジスターrに保存します。
レジスターrのキーボードマクロを実行するには、C-x r j rとタイプします(これはある位置にジャンプしたりフレームを復元するのと同じコマンドです)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ブックマーク(Bookmarks)とは、ジャンプしたい位置を記録するレジスターのようなものです。レジスターとの違いは、長い名前をもつことができ、次のEmacsセッションに自動的に引き継がれることです。ブックマークの典型的な使い方は、さまざまなファイルのどこを読んでいたかを記録することです。
visitしているファイルのポイント位置に、ブックマークをセットします。
ポイント位置に、bookmarkという名前のブックマークをセットします(bookmark-set
)。
C-x r mと同様ですが、既存のブックマークを上書きしません。
bookmarkという名前のブックマークにジャンプします(bookmark-jump
)。
すべてのブックマークを一覧します(list-bookmarks
)。
現在のすべてのブックマークの値を、デフォルトのブックマークファイルに保存します。
visitしているファイル内のカレント位置を記録するには、コマンドC-x r mを使用します。これは、ブックマーク名のデフォルトとしてファイル名を使います。ブックマークが指すファイルをもとにブックマークの名前を付ければ、C-x r bで任意のファイルを再びvisitして、同時にブックマーク位置に移動するという操作を楽に行えます。
コマンドC-x r M (bookmark-set-no-overwrite
)はC-x r mと同じように機能しますが、指定されたブックマークがすでに存在する場合は、上書きするかわりにエラーをシグナルします。
すべてのブックマークのリストを別のバッファーに表示するには、C-x r l
(list-bookmarks
)とタイプします。そのバッファーに切り替えて、ブックマークの定義の編集やブックマークに注釈をつけることができます。ブックマークバッファーでC-h
mとタイプすれば、特別な編集コマンドに関する情報を見ることができます。
Emacsを終了するとき、もしブックマークの値を変更していたら、Emacsはブックマークを保存します。M-x bookmark-saveコマンドで、いつでもブックマークを保存できます。ブックマークは~/.emacs.d/bookmarksというファイルに保存されます(古いバージョンのEmacsとの互換性を保つため、もし~/.emacs.bmkというファイルがあればそのファイルに保存します)。ブックマークコマンドは、デフォルトのブックマークファイルを自動的にロードします。この保存とロードにより、ブックマークの内容を次のEmacsセッションに引き継ぐことができるのです。
bookmark-save-flag
に1をセットすると、ブックマークをセットするコマンドはブックマークの保存も行ないます。こうすることにより、Emacsがクラッシュしてもブックマークを失わずにすみます。この変数の値が数字の場合、それはブックマークを何回変更したら保存するという意味です。この変数にnil
をセットすると、Emacsは明示的にM-x
bookmark-saveを使ったときだけブックマークを保存します。
変数bookmark-default-file
には、ブックマークを保存するデフォルトのファイルを指定します。
変数bookmark-use-annotations
をt
にセットすれば、ブックマークへの問い合わせは注釈について行われるようにセットされます。ブックマークに注釈があれば、ブックマークへのジャンプ時には別ウィンドウに注釈が自動的に表示されます。
ブックマークの位置は、周囲のコンテキストとともに保存されるので、ファイルが少し変更されていても、bookmark-jump
は正確な位置を見つけることができます。変数bookmark-search-size
は、ブックマーク位置のコンテキストの前後何文字を記録するかを指定します。
以下はブックマークを処理する追加のコマンドです:
ブックマークのリストを含む、filenameという名前のファイルをロードします。このコマンドはbookmark-write
と同様に、デフォルトのブックマークファイルに加えて、他のファイルのブックマークを使うことができます。
現在のすべてのブックマークをファイルfilenameに保存します。
bookmarkという名前のブックマークを削除します。
ブックマークbookmarkが指すファイル名をバッファーに挿入します。
ブックマークbookmarkが指すファイルの内容をバッファーに挿入します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ウィンドウに入りきらない大きなバッファーでは、Emacsはその一部しか表示できません。このチャプターでは、見たい部分のテキストを指定するコマンドや変数と、どのようにしてテキストが表示されるかを説明します。
14.1 スクロール | ウィンドウのテキストを上下に移動させるコマンド。 | |
14.2 センタリング | カレント行を中央にするスクロールコマンド。 | |
14.3 自動スクロール | 必要なときテキストをスクロールして再表示する。 | |
14.4 水平スクロール | ウィンドウの左右にテキストを移動させる。 | |
14.5 ナローイング | 表示を制限してバッファーの一部を編集する。 | |
14.6 Viewモード | 読み取り専用バッファーの表示。 | |
14.7 Followモード | Followモードで2つのウィンドウを1つとしてスクロールさせる。 | |
14.8 テキストのフェイス | フェイスを使って表示スタイルを変更する方法。 | |
14.9 フェイスのカラー | フェイスのカラーを指定する。 | |
14.10 標準フェイス | 主要な既定のフェイス。 | |
14.11 テキストのスケール | バッファーのテキストサイズの拡大と縮小。 | |
14.12 Font Lockモード | フェイスを使って文法をハイライトするマイナーモード。 | |
14.13 インタラクティブなハイライト | Emacsにハイライトするテキストを指示する。 | |
14.14 ウィンドウのフリンジ | ウィンドウフリンジの有効と無効。 | |
14.15 バウンダリーの表示 | バッファーの先頭と最後を表示する。 | |
14.16 不要なスペース | 行末の不要な空白文字の表示。 | |
14.17 選択的な表示 | インデントの大きな行を隠す。 | |
14.18 モードラインのオプション | モードラインの表示機能のオプション。 | |
14.19 テキストが表示される方法 | テキスト文字が通常表示される方法。 | |
14.20 カーソルの表示 | カーソル表示の機能。 | |
14.21 行の切り詰め | 複数のスクリーン行で継続表示させずにスクリーン幅に行を切り詰める。 | |
14.22 Visual Lineモード | 単語の折り返しとスクリーン行にもとづく編集。 | |
14.23 ディスプレーのカスタマイズ | ディスプレーをカスタマイズする変数の情報。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ウィンドウがバッファーのすべてのテキストを表示するには小さい場合、その一部だけが表示されます。スクロールコマンドは、バッファーで表示される部分を変更します。
前方(forward)または上(up)へのスクロールは、ウィンドウに表示される部分を先に進めます。これはウィンドウに表示されるバッファーのテキストを、上に移動させるのと同じです。後方(backward)または下(down)へのスクロールは、ウィンドウに表示される部分を前に戻します。これはウィンドウに表示されるバッファーのテキストを下に移動させます。
Emacsでのupとdownは、ウィンドウでテキストが移動する方向に基づいており、テキストにたいしてウィンドウが移動する方向ではありません。この用語は現在のscrolling upやscrolling downが広まる前に、Emacsで採用されました。そのためPageDownは、Emacs的には上(up)にスクロールするという、奇妙な結果となりました。
ウィンドウに表示されているバッファー部分には、常にポイントが含まれています。もしウィンドウの下端か上端を越えてポイントを移動させると、ポイントを画面に表示させるために自動的にスクロールが発生します(自動スクロールを参照してください)。以下のコマンドで明示的にスクロールができます:
ウィンドウのほぼ全画面分、前方にスクロールします(scroll-up-command
)。
後方にスクロールします(scroll-down-command
)。
C-v
(scroll-up-command
)は、ウィンドウ全体の高さに近い量、前方にスクロールします。これにより下端の2行が上端になるようスクロールして、それに続く表示されていなかった行を表示します。ポイントが上端より上になってしまう場合、ウィンドウの新たな上端の行に移動します。The
PageDown(またはnext)は、C-vと同じです。
M-v
(scroll-down-command
)は、同様の方法で後方にスクロールします。PageUp(またはprior)は、M-vと同じです。
スクロールコマンドでオーバーラップして表示される行数は、変数next-screen-context-lines
で制御され、デフォルトは2です。数引数nを与えたときは、n行スクロールします。Emacsはポイントを変更しないよう試みるので、テキストとポイントは一緒に上または下に動きます。C-vに負の引数を与えると、M-vのように反対方向へスクロールします。
デフォルトでは、ウィンドウがバッファーの先頭または最後に到達していて、これ以上スクロールできない場合、これらのコマンドは(beep音をならしたり画面をフラッシュして)エラーをシグナルします。変数scroll-error-top-bottom
をt
に変更すると、コマンドは可能な限り、つまりバッファーの先頭の文字または最後の文字にポイントを移動します。ポイントがすでにそこにあるときは、エラーをシグナルします。
スクロールしたとき、ポイントが同じスクリーン位置に留まることを好むユーザーもいます。そうすれば同じスクリーンにスクロールして戻ったとき、ポイントが元の位置にあると便利だからです。この動作は変数scroll-preserve-screen-position
を通じて利用可能です。変数の値がt
のとき、スクロールコマンドによりポイントがウィンドウの外にでるような場合、Emacsはポイントを先頭行または最終行に移動させるのではなく、同じスクリーン位置にポイントを調整して、カーソルを維持します。その他の非nil
値の場合、Emacsはスクロールコマンドによりポイントがウィンドウに残っている場合にも、この方法でポイントを調整します。この変数はこのセクションで説明するすべてのスクロールコマンド、同様にマウスホイールによるスクロール(編集のためのマウスコマンドを参照してください)に影響を与えます。一般的にいうと、この変数はscroll-command
プロパティが非nil
のコマンドに影響を及ぼします。Property
Lists in The Emacs Lisp Reference Manualを参照してください。
ときどき、特にC-vやM-vのようなキーを押したままにすると、キーボードのオートリピートがアクティブになり、要求された高レートのスクロール要求にEmacsが対応できなくなるときがあります。そのような場合、表示は更新されず、かなり長時間の間、Emacsが応答しなくなる可能性があります。変数fast-but-imprecise-scrolling
を非nil
値にセットすることにより、この状況に対処できます。これはスクロールコマンドにフォント表示化(Font Lockモードを参照してください)を行なわないように指示します。スクロールされるテキストは、それらがデフォルトフェイスをもつと仮定されなくなり、フォント表示化されなくなります。これにより、そのフェイスがすべて同じサイズのフォントを使用していない場合には、(たとえばオートリピートではない)1回のスクロールでも、Emacsが誤ったバッファー位置にスクロールするかもしれません。
fast-but-imprecise-scrolling
をセットするかわりにJIT
Lockによる遅延されたフォント表示化の有効化のほうが好ましいと思うかもしれません(Font Lockモードを参照)。これを行うにはjit-lock-defer-time
に0.25、タイプ速度が速い場合には0.1のように小さい正の数値をセットします。これによりC-v押下時のぎくしゃくしたスクロールが幾分改善されますが、バッファーの新たな部分へスクロールするようなアクション後のウィンドウのコンテンツは一時的に非フォント化されるでしょう。
コマンドM-x scroll-upおよびM-x
scroll-downは、scroll-up-command
およびscroll-down-command
と同様に動作しますが、scroll-error-top-bottom
を考慮しません。これらのコマンドは、Emacs
24以前ではスクロールアップおよびスクロールダウンのためのデフォルトでした。コマンドM-x
scroll-up-lineおよびM-x
scroll-down-lineは、現在のウィンドウを1行スクロールさせます。もしこれらのコマンドを使う場合は、それにキーバインドを割り当てたくなるでしょう(initファイル内でのキーのリバインドを参照してください)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
選択されているウィンドウで、現在行が中央になるようスクロールします。連続して呼び出すと、次は現在行が上端になり、その次は現在行が下端に、という順番で循環します。画面の再描画が行われる可能性があります(recenter-top-bottom
)。
選択されているウィンドウで、現在行が中央になるようにスクロールします。画面の再描画が行われる可能性があります。
有用な情報が表示されるよう、発見的な手法でスクロールします(reposition-window
)。
C-l
(recenter-top-bottom
)コマンドは、選択されたウィンドウにたいしてセンタリング(recenters)をします。これにより現在のスクリーン行がウィンドウの中央、または中央に一番近い行になります。
(C-l C-l)のようにC-lを2回タイプすると、ポイントのある行が上端になるようにスクロールします。C-lを3回タイプするとポイントのある行が下端になるようにスクロールします。連続してC-lをタイプすることにより、上記の3つの位置を循環してスクロールできます。
リスト変数recenter-positions
をカスタマイズすることにより、循環する順序を変更できます。リスト要素にはシンボルtop
、middle
、bottom
または数値を指定します。数値に整数を指定すると、現在行が指定したスクリーン行になるようスクロールします。数値に0.0から1.0の浮動小数点数は、ウィンドウの上端から現在行までを割合で指定します。デフォルトは(middle
top
bottom)
で、これは上述した循環順序です。さらに変数scroll-margin
を、0以外の値nに変更すると、C-lは常にウィンドウの上端または下端からスクリーン行で、n行を残してスクロールします(自動スクロールを参照してください)。
C-lにプレフィクス引数を指定することもできます。C-u C-lのようにプレフィクス引数だけを指定すると、単にポイントを示す行を中央にします。正の引数nは、ポイントを示す行がウィンドウの上端からn行目になるようにスクロールします。0を指定すると、ポイントのある行がウィンドウ上端になるようにスクロールします。負の引数-nは、ポイントのある行がウィンドウの下端からn行目になるようにスクロールします。引数を与えたときは、C-lは画面をクリアーせず、異なるスクリーン位置への循環も行いません。
変数recenter-redisplay
が非nil
値の場合、C-lはスクリーンのクリアーと再描画を行います。特別な値tty
(デフォルト)は、これをテキスト端末上のフレームだけに限定します。再描画はスクリーンが何らかの理由により文字化けしてしまったときなどに便利です(スクリーン上のゴミを参照してください)。
より原始的なコマンドM-x
recenterは、recenter-top-bottom
と同じように振る舞いますが、スクリーン位置を循環しません。
C-M-l
(reposition-window
)は、有用な情報がスクリーンに表示されるように、現在のウィンドウを発見的な手法によりスクロールします。たとえばLispファイルの場合、このコマンドは可能な限り現在のdefun全体がスクリーン上に表示されるよう試みます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ポイントが表示されているテキスト部分から外に移動すると、Emacsは自動スクロール(automatic scrolling)の処理を行います。通常自動スクロールは、ウィンドウの垂直方向の中央にポイントをセンタリングしますが、この振る舞いを変えるいくつかの方法があります。
scroll-conservatively
に小さい数字nをセットすると、ポイントが少し(n行以下)スクリーンの外に出たら、Emacsはポイントがスクリーンに表示されるのに充分なだけスクロールします。これでもしポイントの表示に失敗した場合、Emacsはそのウィンドウの中央にポイント行が表示されるのに充分なだけのスクロールをします。scroll-conservatively
に大きな数字(100より大)も数字をセットすると、どれだけポイントを移動させようと、自動スクロールはポイント行を中央にセンタリングしなくなります。Emacsはポイントが表示されるように常にテキストをスクロールします。ウィンドウの上端または下端かはスクロールの方向に依存します。デフォルトではscroll-conservatively
は 0で、これは常にポイント行がウィンドウの中央にセンタリングされることを意味します。
自動スクロールを制御する他の方法は、変数scroll-step
をカスタマイズすることです。この変数の値はポイントがスクリーンから外れたとき、何行を自動スクロールさせるかを決定します。その行数スクロールしてもポイントが表示されない場合、かわりにポイント行が中央にきます。デフォルト値は0で、スクロール後は常にポイント行が中央にきます。
自動コントロールを制御する3番目の方法は、変数scroll-up-aggressively
とscroll-down-aggressively
をカスタマイズすることで、これは直接スクロール後のポイントの垂直位置を指定します。scroll-up-aggressively
の値には、nil
(デフォルト)、または0から1までの浮動小数点数fを指定します。ポイントがウィンドウの下端を越えたとき(たとえば前方にスクロールしたとき)、Emacsはウィンドウの高さとウィンドウの下端からポイント行までの割合が、fになるようスクロールします。つまりfを大きくするとより積極的(aggressive)、つまり新しいテキストがより多く表示されることを意味します。デフォルト値nil
は0.5と同じです。
同様にscroll-down-aggressively
は、ポイントがウィンドウの上端を越えたとき(たとえば後方にスクロールしたとき)の振る舞いを設定します。値にはスクロール後のウィンドウの上端からポイント行までのマージンを指定します。つまりscroll-up-aggressively
を大きくすると、より積極的になります。
変数scroll-conservatively
、scroll-step
、およびscroll-up-aggressively
とscroll-down-aggressively
は、互いに矛盾する方法で自動スクロールを制御します。したがって自動スクロールをカスタマイズする場合は、2つ以上の手法を選ぶべきではありません。もし2つ以上の変数をカスタマイズする場合は、scroll-conservatively
、次にscroll-step
、そして最後にscroll-up-aggressively
とscroll-down-aggressively
という優先順でカスタマイズしてください。
変数scroll-margin
は(たとえscroll-up-aggressivelyやscroll-down-aggressivelyに、上端または下端からのマージンがウィンドウにたいして占める割合より大きくなるようなfを指定していても)、ポイントがウィンドウの上端または下端にどれだけ近づけるかを制限します。変数の値にはスクリーン行の行数です。もしポイントがウィンドウの上端または下端から指定した行数の位置にくると、Emacsは自動的にスクロールします。デフォルトではscroll-margin
は0です。デフォルトではそのウィンドウの高さの1/4に制限されていますが、maximum-scroll-margin
をカスタマイズすることにより1/2まで増加(または0まで減少)させることができます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
水平スクロール(Horizontal
scrolling)は、ウィンドウの行を右方向に移動させます。そのため左端の近くのテキストは表示されなくなります。ウィンドウのテキストが水平スクロールされると、テキスト行は折り返されるのではなく、切り詰め(truncated)られます。ウィンドウが切り詰められた行を表示しているとき、ポイントがスクリーンの左端か右端を越えて移動すると、Emacsは自動的に水平スクロールを行います。デフォルトではそのウィンドウ内のすべての行は一緒に水平スクロールされますが、変数auto-hscroll-mode
に特別な値current-line
をセットした場合は、カーソルを表示する行だけがスクロールされます。自動的な水平スクロールを完全に無効にするには、変数auto-hscroll-mode
にnil
をセットしてください。また自動的な水平スクロールがオフになっている場合、ポイントがスクリーンの端を越えると、それを知らせるためにカーソルが表示されなくなることに注意してください(テキスト端末の場合カーソルは端に残されます)。
変数hscroll-margin
は、自動的なスクロールが起こる前に、ポイントがウィンドウの左端または右端に、どれだけ近づけるかを制御します。変数の値は列数で指定します。たとえば変数の値が5のときは、端から5列目にポイントが移動すると、水平スクロールが発生します。
変数hscroll-step
はmポイントが端に近づきすぎたときに、何列スクロールするかを決定します。デフォルト値の0は、ポイントがウィンドウの中央になるようにスクロールされることを意味します。正の整数はスクロールされる列数を指定します。浮動小数点数(0から1の値であること)は、スクロールされる量を、ウィンドウの幅にたいする割合で指定します。
以下のコマンドで明示的に水平スクロールすることもできます:
現在のウィンドウのテキストを左にスクロールします(scroll-left
)。
右にスクロールします(scroll-right
)。
C-x <
(scroll-left
)は選択された、ウィンドウをウィンドウ幅から2列少ない列数、左にスクロール(いいかえればウィンドウのテキストは左に移動)します。数引数nを指定すると、n列スクロールします。
テキストが左にスクロールされて、ポイントがウィンドウの左端を越えると、ポイントが表示されているテキストに戻るまで、カーソルはフリーズします。これはauto-hscroll-mode
の設定とは独立しています(これはテキストを左にスクロールするときのウィンドウの右端での振る舞いだけに影響します)。
C-x >
(scroll-right
)は、同様に右にスクロールします。ウィンドウが通常の表示(行の先頭がウィンドウの左端に表示されている状態)のときは、それ以上スクロールできないので何も起こりません。これはC-x >の引数を正確に計算する必要がないことを意味します。充分に大きな引数を与えれば、通常の表示が復元されます。
これらのコマンドでウィンドウを水平方向にスクロールすると、自動水平スクロールの下限値がセットされます。自動スクロールはウィンドウのスクロールを続けますが、前にscroll-left
にセットされた値を越えて右にスクロールできなくなります。auto-hscroll-mode
がcurrent-line
にセットされているときは、カーソルを表示する行以外の行は、最小限度だけスクロールされるでしょう。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ナローイング(Narrowing)とはバッファーのある範囲にフォーカスを置き、他の部分を一時的にアクセス不能にすることを意味します。扱うことのできる範囲のことを、アクセス可能範囲(accessible portion)と呼びます。ナローイングを取り消すと、バッファー全体に再びアクセスできるようになります。これをワイドニング(widening)と呼びます。バッファーにたいして、ナローイングにより境界を設けることを、バッファーの制限(restriction)と呼びます。
ナローイングにより、他の部分に気を取られずに、1つのサブルーチンやパラグラフに集中することが容易になります。ナローイングは、置換コマンドやキーボードマクロの繰り返しにより操作される範囲を制限するためにも使われます。
ポイントとマークの間にナローイングします(narrow-to-region
)。
バッファー全体をワイドニングして、再びアクセス可能にします(widen
)。
現在のページにナローイングします(narrow-to-page
)。
現在のdefunにナローイングします(narrow-to-defun
)。
バッファーをナローイングしているときは、表示されている範囲がすべてです。残りの部分を見ることはできず、移動もできず(移動コマンドによりアクセス可能範囲の外に移動することはできません)、変更もできません。しかし残りの部分がなくなったわけではないので、ファイルを保存するとアクセス不能範囲のテキストもすべて保存されます。ナローイングが有効なときは、モードラインに‘Narrow’という単語が表示されます。
主要なナローイングコマンドは、C-x n n
(narrow-to-region
)です。これは現在のバッファーを制限するので、現在のリージョンだけがアクセス可能になり、リージョンの前後のすべてのテキストはアクセス不能になります。ポイントとマークは変化しません。
かわりにC-x n p
(narrow-to-page
)を使うと、現在のページにナローイングされます。ページの定義については、ページを参照してください。C-x
n d
(narrow-to-defun
)は、ポイントを含むdefunにナローイングします(トップレベルの定義、またはdefunを参照してください)。
ナローイングを取り消す方法は、C-x n w
(widen
)です。これにより再びバッファーのテキストすべてにアクセス可能になります。
バッファーのどの範囲にナローイングされているかは、C-x =コマンドを使って情報を得ることができます。カーソル位置の情報を参照してください。
ナローイングは、それを理解していないユーザーを容易に混乱させるので、通常narrow-to-region
コマンドは無効になっています。このコマンドを使おうとすると、Emacsは確認を求め、有効にするオプションを提供します。このコマンドを有効にすると、それ以降は確認を求められなくなります。コマンドの無効化を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Viewモードは、バッファーをスクリーン上でスキャンするためのマイナーモードです。このモードは、バッファーを変更せずにスクロールする、便利なコマンドを提供します。Emacsのカーソル移動コマンドとは別に、SPCで前方にスクロール、S-SPCまたはDELで後方にスクロール、sでインクリメンタルサーチができます。
q
(View-quit
)とタイプするとViewモードが無効になり、Viewモードが有効になる前のパッファーの位置に戻ります。e
(View-exit
)とタイプするとViewモードが無効になり、現在のバッファーと位置は維持されます。
M-x view-bufferは、既存のEmacsバッファー名を入力として求め、そのバッファーに切り替えてViewモードを有効にします。M-x view-fileはファイル名を入力として求め、そのファイルをvisitしてViewモードを有効にします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Followモードは、同じバッファーを表示する2つのウィンドウを、1つの仮想ウィンドウとしてスクロールするマイナーモードです。Followモードを使うには、ウィンドウが1つだけのフレームを選択して、それをC-x 3を使って縦に並べて2分割してから、M-x follow-modeとタイプします。それ以降はバッファーをどちらのウィンドウでも編集でき、どちらかのウィンドウをスクロールすると、他方のウィンドウも追従してスクロールします。
Followモードでは、一方のウィンドウで表示されている部分の外にポイントを移動して、もう一方のウィンドウで表示されている部分にポイントを移動させると、そのウィンドウが選択されます。つまり2つのウィンドウを1つの大きなウィンドウとして扱えるのです。
Followモードをオフにするには、もう一度M-x follow-modeとタイプしてください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsはフェイス(faces)と呼ばれる仕組みを通じて、テキストをいくつかの異なるスタイルで表示できます。フェイスにはfont(フォント)、height(高さ)、weight(太さ)、slant(傾き)、foreground(前景)およびbackground(背景)、underline(アンダーライン)、overline(オーバーライン)などの様々なフェイス属性(face attributes)を指定できます。ほとんどのメジャーモードはFont Lockモードを通じて、テキストに自動的にフェイスを割り当てます。これらのフェイスを割り当てる方法については、Font Lockモードを参照してください。
現在定義されているフェイスと、それがどのような外観なのかを見るには、M-x list-faces-displayとタイプします。プレフィクス引数を指定すると、このコマンドは正規表現の入力を求め、その正規表現にマッチするフェイスだけを表示します(正規表現の構文を参照してください)。
あるフェイスが、フレームが異なると違って見えるのことがあり得ます。たとえばいくつかのテキスト端末ではすべてのフェース属性、特に特にfont、height、widthはサポートされておらず、指定できるcolorも限られているものがあります。加えて、ほとんどのEmacsフェースは視認性をよくするために、フレームのバックグラウンドが明るい(light)か暗い(dark)かで属性が異なります。デフォルトでは、Emacsはフレームの現在のバックグラウンドカラーに基づいて、表示するフェイスの属性を自動的に選択します。しかし変数frame-background-mode
に非nil
値を与えると、これをオーバーライドできます。値dark
ではすべてのフレームの背景色が暗い色であるかのように処理し、値light
ではすべてのフレームの背景色が明るい色であるかのように処理させることができます。
フェイスの属性を変えてフェイスをカスタマイズして、将来のEmacsセッション用にカスタマイズ結果を保存することができます。詳細については、フェイスのカスタマイズを参照してください。
default
フェイスはテキストを表示するデフォルトのフェイスで、そのすべての属性は指定されています。バックグラウンドカラーは、フレームのバックグラウンドカラーとしても使用されます。フェイスのカラーを参照してください。
他の特別なフェイスとしては、cursor
フェイスがあります。グラフィカルなディスプレーでは、このフェイスのバックグラウンドカラーは、テキストカーソルを描画するのに使用されます。このフェイスで効果があるのはこの属性だけです。カーソルの下のテキストのフォアグラウンドカラーには、そのテキストのバックグラウンドカラーが使われます。テキスト端末でのテキストカーソルの外観は、cursor
フェイスではなく端末により決定されます。
特定のフェイスの属性を指定するのにXのリソースを使うこともできます。Xリソースを参照してください。
Emacsは可変幅フォント(variable-width fonts)を表示できますが、いくつかのコマンド、特にインデントを行うコマンドは、可変幅の文字幅の表示をうまく処理できません。そのため、ほとんどのフェイスにたいして可変幅フォントを使わないこと、特にそれがFont Lockモードに割り当てられている場合は、使わないことを推奨します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
フェイスには、さまざまなフォアグラウンドカラーとバックグラウンドカラーをもたせることができます。フェイスにカラーを指定するとき、たとえばフェイスをカスタマイズ(フェイスのカスタマイズを参照してください)するときは、カラーネーム(color name)か、RGBトリプレット(RGB triplet)で指定することができます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
カラーネームとは、‘dark orange’や‘medium sea
green’のような、事前に定義された名前です。カラーネームの一覧を見るには、M-x
list-colors-displayとタイプします。表示されるカラーの順番を制御するには、list-colors-sort
をカスタマイズします。このコマンドをグラフィカルなディスプレーで実行すると、Emacsで既知のカラーネームのすべてが表示されます(これらは標準のX11のカラーネームで、Xのrgb.txtで定義されています)。コマンドをテキスト端末で実行すると、端末で安全に表示することができる一部のカラーだけが表示されます。フェイスには、さまざまなフォアグラウンドカラーとバックグラウンドカラーを持たせることができます。しかしEmacsは、テキスト端末でもX11のカラーネームを理解できます。もしフェイスにX11のカラーネームが指定されている場合、最も近い端末の色で表示されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
RGBトリプレットは‘#RRGGBB’という形式の文字列で指定します。主要カラーコンポーネントはそれぞれ‘00’ (色強度0)から‘FF’ (最大強度)の16進数として表現されます。各コンポーネントにたいして1桁、3桁、あるいは4桁の16進数を使用することもできるので‘red’は‘#F00’、‘#fff000000’、あるいは‘#ffff00000000’と表すことができます。各コンポーネントは同じ桁数でなければなりません。16進数のAからFは、大文字小文字を区別しません。
M-x list-colors-displayは、カラーネームと、それに相当するRGBトリプレットを表示します。たとえば‘medium sea green’は‘#3CB371’と同じです。
M-x set-face-foregroundとM-x set-face-backgroundで、フェイスのフォアグラウンドとバックグラウンドのカラーを変更できます。これらのコマンドは、ミニバッファーでフェイス名とカラーの入力を求め(補完機能あり)、指定したカラーをフェイスにセットします。フェイスのカラーは全フレームに影響しますが、カスタマイズバッファーやXリソースを使うのとは異なり、将来のEmacsセッションには引き継がれません。フレームパラメーターを使って、特定のフレームのフォアグラウンドとバックグラウンドのカラーをセットすることもできます。フレームパラメーターを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下はテキストの外見を指定する標準フェイスです。これらのフェイスの効果が欲しい場合は、特定のテキストに適用することができます。
default
このフェイスは特定のフェイスをもたない普通のテキストに使われます。フェイスのバックグラウンドカラーは、フレームのバックグラウンドカラーとして使用されます。
bold
このフェイスは、デフォルトフォントのbold(太字)バージョンです。
italic
このフェイスはデフォルトフォントのitalic(斜体)バージョンです。
bold-italic
このフェイスはデフォルトフォントのbold italic(太字斜体)バージョンです。
underline
このフェイスはunderline(下線)のテキストです。
fixed-pitch
このフェイスはfixed-width font(固定幅フォント)の使用を強制します。もし望むなら、このフェイスから他の固定幅フォントにカスタマイズするのは妥当ですが、可変幅フォントにするべきではありません。
fixed-pitch-serif
このフェイスはfixed-pitch
と似ていますが、フォントはセリフ(serif:
HやIなどの上下のひげ飾り)をもち、伝統的なタイプライター文字に、より似ています。
variable-pitch
このフェイスはvariable-width font(可変幅フォント)の使用を強制します。
shadow
このフェースはまわりのテキストに比べて、そのテキストを目立たなくします。通常これはデフォルトの黒または白のフォアグラウンドカラーではなく、グレーが使われます。
以下は特別な目的のために、一時的にテキストの一部をハイライトするのに使われるフェイスの、不完全なリストです(他にも多くのモードが、そのモードの目的のために、独自のフェイスを定義しています)。
highlight
このフェイスはさまざまなコンテキスト、たとえばハイパーリンク上をマウスカーソルが通過したときなどに、テキストをハイライトするのに使われます。
isearch
このフェイスは、現在のIsearch(インクリメンタル検索)のマッチをハイライトするのに使われます(インクリメンタル検索を参照してください)。
query-replace
このフェイスは、現在の問い合わせ置換(Query Replace)のマッチをハイライトするのに使われます(置換コマンドを参照してください)。
lazy-highlight
このフェイスは、Isearchおよび問い合わせ置換で、カレントのマッチ(現在カーソルがあるマッチ)以外のマッチ(lazy matches)をハイライトするのに使われます。
region
このフェイスは、アクティブなリージョンを表示するのに使われます(マークとリージョンを参照してください)。EmacsをGTK+サポートつきでビルドした場合、カラーは現在のGTK+のテーマから提供されます。
secondary-selection
このフェイスは、Xのセカンダリー選択(secondary X selection)を表示するのに使われます(セカンダリー選択を参照してください)。
trailing-whitespace
このフェイスは、show-trailing-whitespace
は非nil
のとき、行末の余分なスペースやタブをハイライトするためのものです(不要なスペースを参照してください)。
escape-glyph
このフェイスは、制御文字やエスケープシーケンスを表示するためのものです(テキストが表示される方法を参照してください)。
homoglyph
このフェイスは、類似文字(表示しようとする文字と似ているが異なる文字)を表示するためのものです(テキストが表示される方法を参照)。
nobreak-space
このフェイスは、no-breakスペース文字を表示するためのものです(テキストが表示される方法を参照してください)。
nobreak-hyphen
このフェイスは、no-breakハイフン文字を表示するためのものです(テキストが表示される方法を参照してください)。
以下のフェイスは、Emacsフレームの一部の外見を制御します:
mode-line
このフェイスは、現在選択されているウィンドウのモードラインと、ツールキットメニューが使われていないときのメニューバーに使われます。デフォルトでは、グラフィカルなウィンドウではraised(浮き彫り)効果をだすため影つきで描画され、非ウィンドウの端末ではデフォルトのフェイスを反転して描画されます。
mode-line-inactive
mode-line
と似ていますが、選択されていないウィンドウのモードラインに使われます(mode-line-in-non-selected-windows
が非nil
のとき)。このフェイスはmode-line
を継承するので、フェイスを変更するとすべてのウィンドウのモードラインが影響を受けます。
mode-line-highlight
highlight
と似ていますが、モードライン上でマウスセンシティブ(マウスに感応する)なテキスト範囲に使われます。通常このようなテキスト範囲は上にマウスポインターがくると、ツールチップ(ツールチップを参照してください)をポップアップします。
mode-line-buffer-id
このフェイスは、モードライン上でバッファーを識別する部分に使われます。
header-line
mode-line
と似ていますが、ウィンドウのヘッダーラインのためのものです。モードラインがウィンドウの一番下に表示されるように、ヘッダーラインはウィンドウの一番上に表示されます。ほとんどのウィンドウはヘッダーラインを持ちません。Infoモードのような特別なモードだけがヘッダーラインを持ちます。
header-line-highlight
highlight
やmode-line-highlight
と似ていますが、ヘッダー行のマウスに感応する部分に使用されます。header-line
フェイスはhighlight
とは無関係にカスタマイズされるかもしれないので、このフェイスが別に設けられています。
tab-line
mode-line
と似ていますが、ウィンドウのタブラインのためのものです。タブラインはウィンドウのバッファーを表し、ウィンドウの上端に表示されます。ウィンドウのタブラインを参照してください。
vertical-border
このフェイスは、テキスト端末上でウィンドウを縦に分割するとき使われます。
minibuffer-prompt
このフェイスは、ミニバッファーで入力を求めるプロンプトのテキストに使われます。デフォルトでは、Emacsは自動的にプロンプトのテキストの、テキストプロパティ(Text
Properties in the Emacs Lisp Reference
Manualを参照してください)のリストminibuffer-prompt-properties
に、このフェイスを追加します(この変数はミニバッファーに入ったときに効果をあらわします)。
fringe
グラフィカルなウィンドウでの、左右のフリンジのためのフェイスです(フリンジはEmacsフレームで、テキストエリアとウィンドウの左右の境界線の間にある、狭い領域です)。ウィンドウのフリンジを参照してください。
cursor
このフェイスの:background
属性は、テキストカーソルのカラーを指定します。カーソルの表示を参照してください。
tooltip
このフェイスは、ツールチップのテキストに使われます。デフォルトでは、EmacsがGTK+サポートつきでビルドされた場合、ツールチップはGTK+を通じて描画されるので、このフェイスは効果がありません。ツールチップを参照してください。
mouse
このファイスは、マウスポインターのカラーを決定します。
以下のフェイスは、Emacsフレームの一部の外見を制御するときと同様ですが、テキスト端末またはEmacsをXサポートつき(ただしツールキットサポートなし)でビルドしたときだけ使われます(それ以外の場合、フレームの対応する各要素は広義なシステム設定により決定されます)。
scroll-bar
このフェイスは、スクロールバーの外見を決定します。スクロールバーを参照してください。
tool-bar
このフェイスは、ツールバーのアイコンのカラーを決定します。ツールバーを参照してください。
tab-bar
このフェイスはタブバーのアイコンのカラーを決定します。タブバーを参照してください。
menu
このフェイスはEmacsメニューのカラーとフォントを決定します。メニューバーを参照してください。
tty-menu-enabled-face
このフェイスは、テキスト端末で利用可能なメニューアイテムを表示するのに使われます。
tty-menu-disabled-face
このフェイスは、テキスト端末で利用不可なメニューアイテムを表示するのに使われます。
tty-menu-selected-face
このフェイスは、テキスト端末でマウスをクリックするか、RETを押せば選択できるメニューアイテムを表示するのに使われます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
現在のバッファーのデフォルトフェイスを大きくするには、C-x C-+またはC-x
C-=をタイプします。小さくするには、C-x
C--をタイプします。デフォルトのフェースの大きさ(グローバル)に復元するには、C-x
C-0とタイプします。これらのキーは、すべて同じコマンドtext-scale-adjust
にバインドされており、このコマンドは最後のキーを判断して動作を決定します。
同様にマウスポインターがバッファーテキスト上にある際にCtrl修飾キーを押下してマウスホイールをスクロールすると、スクロール方向に応じてデフォルトフェイスの高さが増加あるいは減少されます。
これらのコマンドの最後のキーは、C-xを前置せずに繰り返すことができます。たとえばC-x C-= C-=
C-=は、フェイスの大きさを3段階に大きくします。各ステップで大きくなる倍率は1.2です。この倍率を変更するには、変数text-scale-mode-step
をカスタマイズします。text-scale-adjust
コマンドに数引数0を指定すると、C-x
C-0とタイプしたのと同様に、デフォルトの大きさに復元します。
コマンドtext-scale-increase
およびtext-scale-decrease
は、C-x
C-+およびC-x
C--と同様、デフォルトフェイスを大きくまたは小さくします。キーをバインドする場合、これらのコマンドは、text-scale-adjust
より便利でしょう。
コマンドtext-scale-set
は、数引数で現在のバッファーのデフォルトフェイスの大きさを、絶対倍率で指定します。
上記のコマンドは、現在のフォント倍率が1以外のときは、自動的にマイナーモードtext-scale-mode
を有効にし、そうでない場合は無効にします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Font Lockモードはマイナーモードで、常に特定のバッファーにローカルで、バッファーのテキストにフェイスを割り当てます(またはフォント表示化(fontifies)します)。各バッファーのメジャーモードは、Font Lockモードにどのテキストをフォント表示可するか指示します。たとえばプログラム言語のモードは、コメントや文字列、関数名のような、構文に関連する構成をフォント表示化します。
Font Lockモードは、それをサポートするメジャーモードでは、デフォルトで有効になっています。カレントバッファーでこれを切り替えるには、M-x font-lock-modeとタイプします。正の数引数は無条件にFont Lockモードを有効にし、負または0の数引数を指定すると無効になります。
M-x global-font-lock-modeとタイプすると、すべてのバッファーでFont
Lockモードを切り替えます。このセッティングを将来のEmacsセッションに引き継ぐには、変数global-font-lock-mode
をカスタマイズ(Easy Customizationインターフェースを参照してください)するか、以下の行をinitファイルに追加します。
(global-font-lock-mode 0)
Global Font Lockモードを無効にしていたとしても、モードフック(mode hooks)に関数を追加することにより、特定のメジャーモードでFont Lockモードを有効にできます。たとえばCファイルの編集でFont Lockモードを有効にするには、以下のように記述します:
(add-hook 'c-mode-hook 'font-lock-mode)
Font
Lockモードは、font-lock-string-face
、font-lock-comment-face
のような、いくつかの特別な名前のフェイスを使って処理を行います。これらすべてを簡単に探す方法には、M-x
customize-group RET font-lock-faces
RETを使います。それからカスタマイズバッファーでそれらのフェイスの外見をカスタマイズできます。フェイスのカスタマイズを参照してください。
変数font-lock-maximum-decoration
をカスタマイズして、この機能をサポートするメジャーモードにたいして、Font
Lockモードで適用されるフォント表示化のレベルを変更できます。値には数字を指定します(1は最小限のフォント表示化で、3という高いレベルのモードもあります)。t
は“可能な限り高く”という意味です(デフォルト)。効果を得るには、そのファイルがvisitされる前にfont-lock-maximum-decoration
をカスタマイズするべきです。この変数をカスタマイズする時点で、すでにそのファイルをバッファーでvisitしている場合は、そのバッファーをkillしてから、スタマイズ後に再度そのファイルをvisitしてください。
特定のモードに異なる数字を指定することもできます。たとえばC/C++モードにはレベル1を指定して、他のモードにはデフォルトのレベルを適用するには、以下の値を使います
'((c-mode . 1) (c++-mode . 1)))
コメントと文字列のフォント表示化(または“構文的”なフォント表示化)は、バッファーのテキストの構文構造の解析に依存します。速度向上のため、Lispモードを含めたいくつかのモードでは、特別な慣習に依存しています。たとえば一番左の列の開きカッコ(open-parenthesis)または開き大カッコ(open-brace)は常にdefunの開始であり、すなわち常に文字列またはコメントの外部にあるとみなす、というように解析します。したがって文字列やコメントの中で、一番左の列に開きカッコや開き大カッコを記述するのは避けるべきです。詳細については、左端の慣習を参照してください。
Font
Lockは、ほとんどのモードで既存のパターンをハイライトしますが、追加のパターンをフォント表示化したいときもあるでしょう。特定のモードでハイライトするパターンを追加するには、関数font-lock-add-keywords
を使うことができます。たとえばCコメント中の‘FIXME:’という単語をハイライトするには、以下を使います:
(add-hook 'c-mode-hook (lambda () (font-lock-add-keywords nil '(("\\<\\(FIXME\\):" 1 font-lock-warning-face t)))))
font-lockのハイライトパターンからキーワードを削除するには、関数font-lock-remove-keywords
を使います。Search-based
Fontification in The Emacs Lisp Reference Manualを参照してください。
大きなバッファーのフォント表示化には、長い時間を要することもあります。ファイルをvisitしたとき大きな遅延を避けるには、Emacsが最初はバッファーの表示された部分だけをフォント表示化するようにします。バッファーをスクロールすると、新たに表示される部分がフォント表示化されます。このタイプのFont Lockは、Just-In-Time(またはJIT) Lockと呼ばれます。カスタマイズグループ‘jit-lock’の値をカスタマイズすることにより、アイドル状態のときにフォント表示可を行うことも含めて、JIT Lockがどのように振る舞うか制御できます。特定のアイテムのカスタマイズを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Highlight Changesモードは、最近変更されたバッファー部分のテキストに、異なるフェイスを与えることによりハイライトするマイナーモードです。Highlight Changesモードを有効または無効にするには、M-x highlight-changes-modeを使います。
Hi
Lockモードは、指定した正規表現にマッチするテキストをハイライトする、マイナーモードです。たとえば、プログラムのソースファイルで、特定の変数へのすべての参照をハイライトしたり、何らかのプログラムの大量の出力の一部をハイライトしたり、記事中の特定の名前をハイライトするために使用できます。Hi
Lockモードを有効または無効にするには、コマンドM-x hi-lock-modeを使います。すべてのバッファーでHi
Lockモードを有効にするには、M-x
global-hi-lock-modeを使うか、.emacsファイルに(global-hi-lock-mode
1)
と記述してください。
Hi LockモードはFont Lockモード(Font Lockモードを参照してください)と同じように動作しますが、ハイライトするパターンを明示的に正規表現で指定します。これらは以下のコマンドで制御できます(C-x wで始まるキーバインドは、M-s hで始まるグローバルなバインドが優先されるため推奨されておらず、将来のEmacsのバージョンで廃止されるでしょう)。
regexpにマッチするテキストを、フェイスfaceを使ってハイライトします(highlight-regexp
)。ハイライトはバッファーがロードされている限り残ります。たとえば単語“whim”をデフォルトのフェイス(黄色いバックグラウンドカラー)でハイライトするには、M-s
h r whim RET RETとタイプします。ハイライトには任意のフェイスを使うことができますが、Hi
Lockモードはモード自身でいくつかのフェイスを提供しており、それらはデフォルト値のリストに事前ロードされています。フェイスの入力プロンプトでM-nとM-pを使うことにより、それらを巡回することができます。プレフィクス数引数は対応する部分式にハイライトを制限します。
オプションhi-lock-auto-select-face
に非nil
値をセットすることにより、このコマンド(およびその他のフェイスを読みとるHi
Lockコマンド)は、入力を求めることなく、デフォルト値のリストから次のフェイスを自動的に選択します。
このコマンドを複数回使用して、さまざまな正規表現を指定し、それぞれを異なる方法でハイライトできます。
regexpのハイライトを解除します(unhighlight-regexp
)。メニューから呼び出した場合、ハイライト解除する正規表現をリストから選択します。キーボードから呼び出した場合は、ミニバッファーを使います。一番最近追加された正規表現を表示し、M-nを使って次に古い正規表現、M-pで次に新しい正規表現を表示できます(手入力もでき、その場合は補完機能つきです)。ハイライト解除したい正規表現がミニバッファーに表示されたら、RETを押してミニバッファーを抜けだし、ハイライトを解除できます。
regexpとのマッチを含む行全体を、フェイスfaceを使ってハイライトします(highlight-lines-matching-regexp
)。
phraseにマッチするフレーズを、フェイスfaceでハイライトします(highlight-phrase
)。phraseには正規表現を指定できますが、スペースは空白文字にマッチする正規表現に置き換えられます。また、先頭に小文字を使用することにより、大文字小文字を区別しなくなります。
ポイントの近くで見つかったシンボルを、次に利用可能なフェイスでハイライトします(highlight-symbol-at-point
)。
現在ハイライトを行っている正規表現/フェイスのペアを、バッファーのポイント位置に挿入します。挿入はプログラムを変更してしまわないように、コメント文字列でコメント化されます(このキーバインドはhi-lock-write-interactive-patterns
コマンドを実行します)。
これらのパターンは、コメントからも逆抽出されます。それは、コメントに記述されたテキストが適正で、M-x
hi-lock-find-patternsを呼び出した、あるいはHi
Lockモードが有効なときファイルをvisit(これはhi-lock-find-patterns
を実行します)したときです。
正規表現/フェイスのペアを、現在のバッファーのコメントから抽出します(hi-lock-find-patterns
)。これらのコマンドを使えば、highlight-regexp
でパターンを対話的に入力、hi-lock-write-interactive-patterns
でそれをファイルに保存、それらを編集(あるマッチのフェイスを別のフェイスにしたり)、そして最後にこのコマンド(hi-lock-find-patterns
)で編集済みのパターンを、Hi
Lockのハイライトに適用することができます。
変数hi-lock-file-patterns-policy
はファイルをvisitしたとき、Hi
Lockモードがパターンを探して、それを自動的に抽出するべきかを制御します。値にはnil
(ハイライトしない)、ask
(ユーザーに尋ねる)、または関数を指定します。関数の場合、hi-lock-find-patterns
はパターンを引数としてその関数を呼び出します。関数が非nil
を返した場合、パターンを使用します。デフォルトはask
です。直接hi-lock-find-patterns
を呼び出した場合、この変数の値に関係なく、常にパターンはハイライトされることに注意してください。
現在のメジャーモードのシンボルが、リストhi-lock-exclude-modes
のメンバーの場合、hi-lock-find-patterns
は何もしません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
グラフィカルなディスプレーでは、通常Emacsの各ウィンドウの左右の端に、狭いフリンジ(fringes:
縁、へり)があります。フリンジは、ウィンドウのテキストに関する情報を提供するシンボルの表示に使用されます。M-x
fringe-modeとタイプしてフリンジ表示を切り替えたり、幅を変更できます。このコマンドは全フレームのフリンジに影響します。選択されたフレームのフリンジだけを変更するには、M-x
set-fringe-styleを使います。変数fringe-mode
をカスタマイズして、フリンジへの変更を永続化できます。
フリンジのもっとも一般的な使われかたは、継続行の表示です(継続行を参照してください)。テキストの1行が複数のスクリーン行に分割されるとき、最初の行を除いた各行の左フリンジには曲矢印が表示され、その行の先頭が実際の行頭ではないことを示します。そして、最後の行を除いた各行の右フリンジにも曲矢印が表示され、その行の最後が実際の行末ではないことを示します。行の方向が右から左(双方向の編集を参照してください)の場合、フリンジの曲矢印の意味は逆になります。
行が切り詰められているとき(行の切り詰めを参照してください)は水平方向の直矢印を表示して、この行には水平スクロールしなければ見ることのできないテキストがあることを示します。矢印の上でマウスをクリックすれば、矢印の指す方向に水平スクロールします。
フリンジはバッファーの境界(バウンダリーの表示を参照)やウィンドウ下端付近の使用されていない行、デバッグ(Emacs下でのデバッガーの実行を参照)しているプログラムが実行中であることを示すためにも使われます。
現在の行がウィンドウの幅と正確に一致して、ポイントがその行の行末にある場合、フリンジにはカーソルが描画されます。これを無効にするには、変数overflow-newline-into-fringe
をnil
に変更します。これによりEmacsはウィンドウ幅と同じ長さの行にたいしても、継続または切り詰めを行います。
表示されているウィンドウの片側、または両側のフリンジを削除するためにfringe-mode
をカスタマイズする場合、フリンジ上にに表示する機能は利用できなくなりますが、行の継続と切り詰めの標識は例外です。フリンジが利用できない場合、Emacsは特別なASCII文字(継続行、および行の切り詰めを参照してください)により、行の継続と切り詰めを示すために、最左および最右の文字セルを使用します。行の継続と切り詰めの標識に使用される文字セルは、この目的のために予約されるので、各行に表示するテキストのための列数は減少します。バッファーのテキストには双方向のテキスト、およびleft-to-right(左から右)とright-to-left(右から左)の両方のパラグラフ(双方向の編集を参照してください)が含まれるかもしれないので、、片側のフリンジを削除しただけでは依然として2つの文字セルが予約されます。つまり行の継続と切り詰めの標識のために、ウィンドウの両側にそれぞれ1つの文字セルが予約されます。なぜなら、right-to-leftのパラグラフでは、これらの標識はウィンドウの反対側に表示されるからです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsはフィルの列位置を表示するインジケーターを追加できます。フィル列のインジケーターは特定の列位置を示すために特にprog-mode
で有用な機能です。
インジケーターの表示の制御と外観はバッファーローカル変数display-fill-column-indicator
とdisplay-fill-column-indicator-character
で設定できます。
かわりにインジケーターをローカルあるいはグローバルに有効にして、までセットされていなければ文字を選択するためにM-x display-fill-column-indicator-modeやM-x global-display-fill-column-indicator-modeとタイプすることも可能です。フックでインジケーターをアクティブにするには前者、グローバルに有効にするには後者の使用が可能です。
このモードをカスタマイズするために2つのバッファーローカル変数と1つのフェイスがあります:
display-fill-column-indicator-column
インジケーターをセットするべき列数を指定します。列にたいする正の数値、あるいは変数fill-column
の使用を意味するt
を指定できます。
それ以外の値ではインジケーターは無効になります。デフォルト値はt
です。
display-fill-column-indicator-character
インジケーターに使用する文字を指定します。フォントがサポートしていればUnicodeを含む有効なすべての文字が可能です。
関数display-fill-column-indicator-mode
やglobal-display-fill-column-indicator-mode
を通じてモードが有効にされた際には、初期化関数はこの変数が非nil
かをチェックして、nil
ならU+2502
か‘|’へのセットを試みます。
fill-column-indicator
インジケーターの表示に使用するフェイスを指定します。これはバックグラウンドカラーを除くデフォルト値をフェイスshadow
から継承します。インジケーターのカラーを変更するために必要なのは、このフェイスのフォアグラウンドカラーのセットだけです。
グラフィカルなディスプレーでは、Emacsはバッファーのバウンダリー(boundary: 境界)を、フリンジに表示することもできます。この機能を有効にすると、最初の行と最後の行ではフリンジに、かぎカッコが表示されます。上矢印または下矢印の場合、それはウィンドウをその方向に、もっとスクロールできることを示します。
バッファーローカルな変数indicate-buffer-boundaries
は、バッファーのバウンダリーととウィンドウのスクロールが、フリンジでどのように表示されるかを制御します。値がleft
(またはright
)の場合、かぎカッコと矢印のビットマップは、左フリンジ(または右フリンジ)に表示されます。
値がalist(association list: 連想リスト。Association Lists in the Emacs
Lisp Reference Manualを参照してください)の場合、各要素の(indicator .
position)
で、標識(indicator)の位置(position)を指定します。indicatorにはtop
、bottom
、up
、down
、またはt
(指定されていない標識のデフォルト位置)を指定します。positionにはleft
、right
、またはnil
(標識を表示しない)を指定します。
たとえば((top . left) (t
.
right))
は、最上行の左フリンジにかぎカッコを表示し、右フリンジには最下行のかぎカッコとスクロール矢印を表示します。左フリンジにかぎカッコだけを表示させる場合は、((top
. left) (bottom . left))
を使います。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
意識せずに不必要なスペースを行末に残してしまったり、バッファーの最後に空行を残してしまうことはよくあります。ほとんどの場合、そのような行末の空白文字(trailing whitespace)は何の影響も及ぼしませんが、厄介物になる場合もあります。
バッファーローカルな変数show-trailing-whitespace
をt
にセットすることにより、行末の空白文字を可視化できます。これによりEmacsはフェイスtrailing-whitespace
で、行末の空白文字を表示します。
この機能は行末に空白文字を含む行の、行末にポイントがあるときは適用されません。厳密にいえば、これも行末の空白文字なのですが、それを特別に表示してしまうと、新しいテキストをタイプするとき面倒です。このような特別なケースでは、ポイントの位置に表示されるカーソルより、空白文字があることが自明だからです。
M-x
delete-trailing-whitespaceとタイプすると、すべての行末の空白文字を削除します。このコマンドは、バッファー内の各行の行末にあるすべての余分なスペースと、バッファーの最後にある空行を削除します。バッファー内の空行を削除しない場合は、変数delete-trailing-lines
をnil
に変更してください。リージョンがアクティブのときは、リージョン内の各行の行末の余分なスペースを削除します。
グラフィカルなディスプレーでは、Emacsはウィンドウの最後の使われていない行の左フリンジに小さなイメージを表示して、それを示すことができます。このイメージはバッファーのテキストが何も含まれていないスクリーン行に表示されるので、バッファーの最後にある空行は、このイメージが表示されないことで見分けることができます。この機能を有効にするにはバッファーローカルな変数indicate-empty-lines
に非nil
値をセットします。すべての新しいバッファーでこの機能を有効または無効にするには、この変数のデフォルト値をセットします(例
(setq-default indicate-empty-lines t)
)
Whitespaceモードはバッファーローカルなマイナーモードで、バッファー内にある多くの種類の空白文字を視覚化します。これは空白文字を特別なフェイスで描画するか、特別なグリフで表示することにより行われます。このモードを切り替えるには、M-x
whitespace-modeとタイプします。視覚化される空白文字の種類は、リスト変数whitespace-style
により決定されます。M-x whitespace-toggle-optionsとタイプして、カレントバッファーでこのリスト内の個々の要素のオンとオフを切り替えることができます。以下はリストに指定できる要素の一部です(完全なリストは変数のドキュメントを参照してください)。
face
特別なフェイスを使った視覚化をすべて有効にします。この要素には特別な意味があります。もしこれがリストに含まれていない場合、space-mark
、tab-mark
、newline-mark
を除く他の視覚化は効果がなくなります。
trailing
行末の空白文字をハイライトします。
tabs
タブ文字をハイライトします。
spaces
スペースおよびnon-breaking space文字をハイライトします。
lines
80列以上の行をハイライトします。列の上限を変更するには、変数whitespace-line-column
をカスタマイズします。
newline
改行をハイライトします。
empty
バッファーの先頭、および/または終端の空行をハイライトします。
big-indent
非常に深いインデントをハイライトします。デフォルトでは、少なくとも4個の連続するTAB文字と、32個の連続するスペースからなる、任意のシーケンスがハイライトされます。これを変更するには、正規表現whitespace-big-indent-regexp
をカスタマイズしてください。
space-mark
スペースとnon-breaking文字を特別なグリフで描画します。
tab-mark
タブ文字を特別なグリフで描画します。
newline-mark
改行文字を特別なグリフで描画します。
Global Whitespaceモードは、すべてのバッファーで空白文字を視覚化する、グローバルなマイナーモードです。この機能を個別に切り替えるには、M-x global-whitespace-toggle-optionsを使用してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsには、与えられたレベルより多くインデントされた行を隠す機能があります。これをプログラムの概要を理解するのに使うことができます。
現在のバッファーの行を隠すには、数引数nを指定してC-x $
(set-selective-display
)をタイプします。すると少なくともn列のインデントをもつ行は、スクリーンに表示されなくなります。隠された行の存在を示すのは、表示されている行末に表示された3つのドット(‘…’)だけで、これは1行以上の行が後に隠されていることを意味します。
コマンドC-nおよびC-pは、隠された行が存在しないかのように、隠された行をスキップして移動します。
隠された行は依然としてバッファーに存在し、ほとんどの編集コマンドはそれらを見ることができるので、隠されな行にポイントを移動することもありえます。これが起こるとカーソルは前の行の最後、つまり3つのドットの後ろに表示されます。ポイントが表示されている行の行末、つまり改行の前にある場合、カーソルは3つのドットの前に表示されます。
隠された行のすべてを再び表示するには、引数を指定せずにC-x $とタイプしてください。
変数selective-display-ellipses
にnil
をセットすると、隠された行があることを示す3つのドットは表示されなくなり、隠された行があることを示す視覚的な表示はなくなります。変数がセットされると、それは自動的にローカルになります。
バッファーのテキストの一部を隠す他の方法については、Outlineモードを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
バッファーのパーセント表示posは、ウィンドウの上端がバッファーのどの場所にあるかを100分率で示します。M-x size-indication-modeとタイプしてSize Indicationモードをオンにすることにより、バッファーのサイズを追加で表示できます。サイズは以下のようにパーセント表示のすぐ後に表示されます:
pos of size
sizeは、バッファーの文字数を人間が理解しやすい形式(‘k’は10^3、‘M’は10^6、‘G’は10^9などの短縮形が使用されます)で表示します。
Line Numberモードが有効なとき、ポイント位置の現在の行番号はモードラインに表示されます。M-x line-number-modeコマンドを使って、Line Numberモードのオンとオフを切り替えることができます(通常はオンです)。行番号はそれが何であるかを示す文字‘L’とともに、バッファーのパーセント表示posの後ろに表示されます。
同様に、M-x column-number-modeでColumn Numberモードをオンにすることにより、現在の列番号を表示できます。列番号は文字‘C’で示されます。しかし両方のモードが有効になっているときは、行番号と列番号は‘L’や‘C’ではなく、‘(561,2)’のようにカッコつきで表示されます。マイナーモードとこれらのコマンドの使い方については、マイナーモードを参照してください。
Column
Numberモードでは、列番号はそのウィンドウの左マージンより0からカウントされます。1からカウントした列番号を表示したい場合は、column-number-indicator-zero-based
をnil
にセットしてください。
ナローイング(ナローイングを参照してください)によりバッファーを制限している場合、アクセスできる部分にもとづいた行番号が表示されます。そのため、これはgoto-line
の引数として使用するには適しません(ファイル全体にたいする行番号を見るには、what-line
コマンドを使います)。
バッファーが非常に大きい場合(line-number-display-limit
の値より大)、速度が遅くなるのでEmacsは行番号を計算しません。そのためモードラインに行番号は表示されません。この制限を取り除くには、line-number-display-limit
にnil
をセットします。
バッファーの行が長いときも、行番号の計算が遅くなります。この理由により、Emacsはポイントの近くの行の幅の平均文字数が、line-number-display-limit-width
より大きいときは、行番号を表示しません。デフォルト値は200文字です。
Emacsはオプションで、時刻とシステムロードを、すべてのモードラインで表示できます。この機能を有効にするには、M-x
display-timeとタイプするか、オプションdisplay-time-mode
をカスタマイズします。モードラインに追加される情報は以下のような形式です:
hh:mmPM l.ll
ここでhhとmmは時間と分で、後ろに‘AM’と‘PM’がつきます。l.llは、過去数分間における、システム全体で実行中または実行準備ができている(例:
利用可能なプロセッサー待ち)プロセスの平均数です(オペレーティングシステムがサポートしないフィールドは表示されません)。時刻を24時間表示にしたいときは、変数display-time-24hr-format
にt
をセットしてください。
もし未読メールがある場合、ロードレベルの後ろに‘Mail’という単語が表示されます。グラフィカルなディスプレーでは、display-time-use-mail-icon
をカスタマイズすることにより、‘Mail’のかわりにアイコンを使うことができます。これによりモードラインのスペースが多少節約できます。display-time-mail-face
をカスタマイズして、メールの表示を目立たせることができます。display-time-mail-file
を使ってチェックするメールファイルを指定したり、display-time-mail-directory
で受信メールのディレクトリーを指定できます(ディレクトリー内の空でない普通のファイルは、新しい受信メールと判断されます)。
Emacsをラップトップコンピューターで実行している場合、コマンドdisplay-battery-mode
を使うか、変数display-battery-mode
をカスタマイズすることにより、モードラインにバッテリー充電状況を表示できます。変数battery-mode-line-format
は、バッテリーの充電状況の表示方法を決定します。モードラインに表示されるメッセージの正確さはオペレーティングシステムに依存しており、通常はバッテリーの充電トータルにたいする現在のバッテリー充電率が表示されます。
グラフィカルなディスプレーでは、モードラインは立体的に描画されます。この効果が気に入らない場合は、mode-line
フェイスをカスタマイズして、box
属性にnil
をセットすることにより無効にできます。フェイスのカスタマイズを参照してください。
デフォルトでは、選択されていないウィンドウのモードラインは、mode-line-inactive
と呼ばれる、別のフェイスで表示されます。選択されたウィンドウのモードラインだけが、mode-line
フェイスで表示されます。これにより、どのウィンドウが選択されているかがわかりやすくなります。モードラインがないミニバッファーが選択されているときは、ミニバッファーをアクティブにしたウィンドウのモードラインが、mode-line
で表示されます。結果として通常のミニバッファーの使用では、モードラインは変化しません。
変数mode-line-in-non-selected-windows
をnil
にセットすることにより、mode-line-inactive
の使用を無効にできます。これによりすべてのモードラインが、mode-line
フェイスで表示されます。
モードラインに表示される改行フォーマットは、変数eol-mnemonic-unix
、eol-mnemonic-dos
、eol-mnemonic-mac
、およびeol-mnemonic-undecided
をセットすることにより、カスタマイズできます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ほとんどの文字は、印字文字(printing characters)です。これらの文字がバッファーに存在すると、スクリーンにそのまま表示されます。印字文字にはASCIIの数字、文字、区切り文字、同様に多くの非ASCII文字が含まれます。
ASCII文字セットには、印字されない制御文字(control
characters)が含まれます。その中でも特別に表示されるものが2つあります。1つ目は改行文字(UnicodeのコードポイントU+000A
)で、新しい行を開始するのに表示されます。2つ目はタブ文字(U+0009
)で、次のタブストップ(通常は8文字ごと)までをスペースで表示します。タブを何文字のスペースで表示するかは、バッファーローカルな変数tab-width
で制御され、1から1000の整数で指定しなければなりません。バッファーのタブ文字が表示される方法は、コマンドとしてのTABの定義には関係ないことに注意してください。
他のASCII制御文字としては、U+0020
(8進の40、10進の32)より下のコードがあり、それらはカレット(‘^’)と、その後ろに非制御文字バージョンの文字を続けて、escape-glyph
フェイスで表示されます。たとえば文字‘control-A’(U+0001
)は、‘^A’と表示されます。
コードU+0080
(8進の200)からU+009F
(8進の237)までのrawバイトは、escape-glyph
フェイスにより8進エスケープシーケンス(octal
escape
sequences)で表示されます。たとえば文字コードU+0098
(8進の230)は‘\230’と表示されます。バッファーローカルな変数ctl-arrow
をnil
に変更すると、ASCII制御文字もカレットエスケープシーケンスではなく8進エスケープシーケンスで表示されます(rawバイトを16進表示するように要求することも可能。display-raw-bytes-as-hexを参照)。
非ASCII文字の中には、ASCIIのスペースやハイフン(マイナス記号)と同じ外観を持つものがあります。そのような文字は、意識せずにバッファーに入力されたとき(たとえばyankなどで)、問題となることがあります。たとえばソースコードコンパイラーは通常、非ASCIIのスペースを、空白文字として扱いません。この問題に対処するため、Emacsはそのような文字を特別な方法(U+00A0
(no-break
space)はnobreak-space
フェイス、U+00AD
(soft
hyphen)、U+2010
(hyphen)、U+2011
(non-breaking
hyphen)はnobreak-hyphen
フェイス)で表示します。これを無効にするには、変数nobreak-char-display
をnil
に変更します。この変数に非nil
かつ非t
の値を与えると、Emacsはハイライトされたバックスラッシュの後に、スペースまたはハイフンを表示します。
特定の文字コードの表示のカスタマイズは、ディスプレーテーブル(display table)によって行われます。Display Tables in The Emacs Lisp Reference Manualを参照してください。
グラフィカルなディスプレーでは、Emacsが利用可能なフォントにグリフがない文字がいくつかあります。これらのグリフがない文字(glyphless
characters)は、通常16進文字を含むボックスで表示されます。テキスト端末では、端末エンコーディング(端末入出力にたいするコーディングシステムを参照してください)で表示できない文字は、通常クエスチョン記号で表示されます。表示方法は、変数glyphless-char-display-control
で制御できます。これらの文字の表示がより目立つように、glyphless-char
フェイスをカスタマイズすることもできます。詳細は、Glyphless Character Display in The Emacs Lisp Reference
Manualを参照してください。
Emacsはカレントのディスプレイでcurved
quotes(‘‘’と‘’’)が表示可能か判断を試みます。デフォルトでは、表示可能ならEmacsはメッセージやヘルプテキスト内のASCIIクォート(‘`’と‘'’)をcurved
quotesに変換します。ユーザーオプションtext-quoting-style
をカスタマイズすることにより、この変換を有効または無効にできます(Keys
in Documentation in The Emacs Lisp Reference Manualを参照)。
curved
quotes(‘、’、“、”)をASCII文字と同様な外観で見ることができる場合、それらはhomoglyph
フェイスで表示されます。表示できないことが既知のcurved
quotesは、それらのASCIIによる代替である`、'、"がhomoglyph
で表示されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
テキスト端末では、カーソルの外見は端末により制御され、大部分はEmacsの制御が及びません。いくつかの端末は、普通の固定的なカーソルと、目立つ点滅カーソルの2種類を提供します。デフォルトではEmacsは目立つカーソルを使い、Emacsを開始または再開したときは、そのカーソルに切り替えます。変数visible-cursor
がnil
の場合、Emacsを開始または再開したとき、普通のカーソルを使います。
グラフィカルなディスプレーでは、より多くのテキストカーソルのプロパティを変更できます。カラーを変えるには、フェイスcursor
の、属性:background
を変更します(このフェイスの他の属性には、何を指定しても効果はありません。カーソルの下にあるテキストはフレームのバックグラウンドカラーを使って描画されます)。外見を変更するには、バッファーローカルな変数cursor-type
をカスタマイズします。有効な値は、box
(デフォルト)、hollow
(中抜きのボックス)、bar
(垂直のバー)、(bar
. n)
(幅がnピクセルの垂直バー), hbar
(水平バー)、(hbar
. n)
(高さがnピクセルの水平バー)、またはnil
(カーソルなし)です。
デフォルトでは、カーソルは10回点滅する間にEmacsに何も入力がないと、点滅をストップします。そして何らかの入力イベントがあると、また0からカウントを再開します。変数blink-cursor-blinks
をカスタマイズして、これを制御できます。変数の値には、何の入力もないとき点滅をストップする点滅回数を指定します。変数に0または負の値をセットすると、カーソルはずっと点滅したままになります。カーソルの点滅を無効にするには、変数blink-cursor-mode
をnil
に変更するか(Easy Customizationインターフェースを参照してください)、initファイルに以下の行を追加します:
(blink-cursor-mode 0)
リスト変数blink-cursor-alist
をカスタマイズして、カーソルが点滅をストップしたとき、どのように見えるかを変更できます。リストの各要素は、(on-type
.
off-type)
という形式を指定します。on-typeには、点滅しているときのカーソルを指定します(on-typeには、上で説明したカーソルタイプを指定します)。そしてoff-typeには、点滅していないときのカーソルを指定します。
タブ文字のように、特別に幅が広い文字もあります。そのような文字上にカーソルがあるとき、通常はデフォルトの文字幅で描画されます。カーソルを文字幅に伸ばすには、変数x-stretch-cursor
を非nil
値に変更してください。
選択されていないウィンドウのカーソルは、通常点滅していない中抜きのボックスで表示されます(カーソルにバーを使っている場合、より細いバーで表示されます)。選択されていないウィンドウでカーソルを非表示にするには、変数cursor-in-non-selected-windows
をnil
に変更してください。
カーソルをよりはっきりと表示させるために、HL Lineモードを使用できます。このモードでは、ポイントを含む行がハイライトされます。現在のバッファーで有効または無効にするには、M-x hl-line-modeを使います。このモードをグローバルに有効または無効にするには、M-x global-hl-line-modeを使用してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsは行を継続(継続行を参照してください)するかわりに、長い行を切り詰めて表示できます。これは、スクリーンやウィンドウの幅より長い行は、全体が表示されないことを意味します。グラフィカルなディスプレーでは、行が切り詰められている場合、フリンジに小さな直矢印が表示されます。テキスト端末では、右端および/または左端の列に‘$’が表示されます。
水平スクロールは、自動的に行の切り詰めを引き起こします(水平スクロールを参照してください)。特定のバッファーにたいして行の切り詰めを明示的に有効にするには、コマンドM-x
toggle-truncate-linesを使います。これは変数truncate-lines
をローカルに変更することで機能します。値が非nil
のときは、長い行は切り詰められ、nil
のときは複数のスクリーン行に分けられます。変数truncate-lines
をセットすると、現在のバッファーにローカルに適用されます。値を変更するまでは、デフォルト値(nil
)が使われます。
ウィンドウを分割して狭くなりすぎたとき、Emacsは自動的に行の切り詰めを有効にします。これを制御する変数truncate-partial-width-windows
については、ウィンドウの分割を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このモードでは、通常の行継続の代わりに、単語での折り返しが使われます。通常の行継続のように、長い論理行は2行以上のスクリーン行に分割されます。しかしEmacsはウィンドウの右端(RTL言語:Right-To-Leftlanguageでは左端)の近くの、単語の境界で折り返すよう試みます。これは単語の途中で折り返さないことにより、可読性を高めるためです。
単語での折り返しは、オプションのマイナーモードである、Visual Lineモードで有効になります。現在のバッファーでVisual Lineモードの有効と無効を切り替えるには、M-x visual-line-modeとタイプします。メニューバーからVisual Lineモードを有効にすることもできます(Optionsメニューから、サブメニュー‘Line Wrapping in this Buffer’の、メニューアイテム‘Word Wrap (Visual Line Mode)’を選択します)。Visual Lineモードが有効なときは、モードラインのモード表示に‘wrap’という文字が表示されます。コマンドM-x global-visual-line-modeは、全バッファーのVisual Lineモードを切り替えます。
Visual Lineモードでは、いくつかのコマンドは論理行ではなくスクリーン行に作用します。C-a
(beginning-of-visual-line
)はスクリーン行の先頭に移動し、C-e
(end-of-visual-line
)はスクリーン行の最後に移動、C-k
(kill-visual-line
)はテキストをスクリーン行の最後までkillします。
論理行単位で移動するには、コマンドM-x next-logical-lineまたはM-x previous-logical-lineを使います。これらのコマンドはVisual Lineモードが有効であるかにかかわらず、次または前の論理行に移動します。これらのコマンドを頻繁に使う場合は、キーを割り当てると便利でしょう。initファイル内でのキーのリバインドを参照してください。
デフォルトでは、単語の折り返し表示はフリンジに表示されません。Visual
Lineモードは、長い論理行を含むファイルを編集するときに使われる場合があり、折り返し行すべてにフリンジの表示をすると見にくくなるためです。これを変更するには、変数visual-line-fringe-indicators
をカスタマイズしてください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このセクションでは、Emacsスクリーンの外観を制御するさまざまな変数を説明します。初心者はスキップして構いません。
Emacsにバッファー内の各行にたいして行番号を表示させたい場合は、バッファーローカルな変数display-line-numbers
(デフォルトはnil
)をカスタマイズします。この変数は行番号表示のさまざまなモードをサポートするために、いくつかの異なる値をもつことができます。
t
バッファーテキストを表示する継続行ではないスクリーン各行の前に、、(絶対)行番号を表示します。その行が継続行の場合、またはスクリーン行全体がディスプレイ文字列(display string)、またはオーバーレイ文字列(overlay string)の場合、その行に番号は振られません。
relative
バッファーテキストを表示する非継続行の前に、相対行番号(relative line number)を表示します。行番号はポイントを表示する行にたいして相対的なので、カレント行から遠ざかるにしたがって、行番号は増加または減少します。
visual
この値により、Emacsにビジュアル的に行をカウントさせます。実際にディスプレイに表示されている行だけがカウントされ、ラップして複数行を占めるスクリーン行は、複数回番号付けされます。表示される番号は、上述の値relative
のように相対的です。これはOutlineモード(Outlineモードを参照)のような、テキストをフォールド(fold: 折り畳む)するモードで、正確なスクリーン行の番号により移動するときに役立つでしょう。
その他の非nil
値は、t
として扱われます。
コマンドM-x
display-line-numbers-modeは、行番号表示を切り替える便利な方法を提供します。このモードのグローバル版は、global-display-line-numbers-mode
です。ユーザーオプションdisplay-line-numbers-type
は、上述した行番号表示のサブモードのどのモードをアクティブにするかを制御します。
たとえグローバルにdisplay-line-numbers-mode
をオンにしていても、ミニバッファーやツールチップ内に行番号は表示されないことに注意してください。
Emacsが相対行番号を表示しているとき、カレント行(ポイントを表示している行)の前に表示される番号を制御できます。デフォルトでは、Emacsはカレント行にたいしては、他のすべての行が相対行番号であっても、絶対行番号を表示します。変数display-line-numbers-current-absolute
をnil
値にカスタマイズした場合、カレント行に表示される番号は0になります。これはカレント行の番号が重要ではなく、大きなバッファー内のテキストにたいして、より多くの水平方向の空きを残したいとき便利でしょう。
ナロー(ナローイングを参照)されたバッファーでは通常、ナローイングの先頭から番号が開始されます。しかし、変数display-line-numbers-widen
を非nil
値にカスタマイズした場合、ナローイングは無視されて、そのバッファーの最初の文字から行番号が開始されます。
display-line-numbers-offset
の値が非0なら、各絶対行番号に追加されて、行はあたかもdisplay-line-numbers-widen
が非nil
であるかのようにバッファー先頭から計数されます。0にセットされた場合、あるいは行番号が絶対でない場合には影響はありません。
Selective Display(選択的表示)モード(選択的な表示を参照)、およびその他の(OutlineモードやOrgモードのような)ディスプレイから多くの行を隠すモードでは、行番号のために予約済みのスペースにたいする法則性のない計算ミスを避けるために、変数display-line-numbers-width-start
およびdisplay-line-numbers-grow-only
のカスタマイズ、またはdisplay-line-numbers-width
に十分大きな値をセットしたいと思うかもしれません。
行番号は特別なフェイスline-number
で表示されます。カレント行番号は異なるフェイスline-number-current-line
で表示されるので、ポイントを表示する行を見つける助けとなるようにカレント行番号に異なる外観を与えることができます。特定の数値の倍数であるような行番号をハイライトするために、追加フェイスのline-number-major-tick
とline-number-minor-tick
を使用できます。それらの数値にdisplay-line-numbers-major-tick
とdisplay-line-numbers-minor-tick
をカスタマイズしてください。
変数visible-bell
が非nil
の場合、Emacsは通常ベルサウンドを鳴らす場面で、スクリーン全体を点滅するよう試みます。端末がスクリーンを点滅させる方法を持たないとき、この変数は効果がありません。
変数echo-keystrokes
は、複数文字キーのエコー表示を制御します。値にはエコーが開始されるまでの秒数を指定します。0の場合、エコーされません。何かエコーされるべきものがあるときは、この変数の値が効果をもちます。エコーエリアを参照してください。
グラフィカルなディスプレーでは、Emacsはビジーのときにマウスポインターを砂時計で表示します。この機能を無効にするには、変数display-hourglass
にnil
をセットします。変数hourglass-delay
は、砂時計が表示されるまでのビジーな時間を、秒数で指定します。デフォルトは1です。
マウスポインターがEmacsのフレーム内にある場合、文字をタイプしてテキストを挿入するまでの間、テキストを隠さないよう、Emacsはマウスポインターを非表示にします(正確に言うとマウスポインターの非表示は、自己挿入的(self-inserting)な文字をタイプしたときです。テキストの挿入を参照してください)。マウスポインターを動かすと、再び表示されます。この機能を無効にするには、変数make-pointer-invisible
にnil
をセットしてください。
グラフィカルなディスプレーでは、変数underline-minimum-offset
は、アンダーラインされたテキストの、アンダーラインから文字の基底線までの最小距離を、ピクセルで決定します。デフォルトでは値は1です。この変数を増加させると、特定のフォントにおいて、アンダーラインされたテキストの可読性が向上します(しかしEmacsは、カレント行にはアンダーラインを描画しません)。変数x-underline-at-descent-line
は、テキストにアンダーラインを引く方法を決定します。デフォルトはnil
で、これはフォントの基底線と同じレベルに描画されることを意味します。これをt
に変更すると、Emacsはフォントが同じ大きさになるよう、アンダーラインを少し下に描画します。(アンダーラインされるテキストにたいして非デフォルトの行間が指定された場合、Emacsは追加される行間の下にアンダーラインを描画する。Line
Height in The Emacs Lisp Reference Manualを参照されたい。)
変数overline-margin
は、テキストの上のオーバーラインの垂直位置を、オーバーライン自身の高さも含めて、ピクセルで指定します。デフォルトは2です。
テキスト端末には、bold(太字)かつ反転されたテキストが読みにくいものがあります。関数tty-suppress-bold-inverse-default-colors
に、引数非nil
を与えて呼び出すと、このような場合のbold-faceの効果を抑制します。
デフォルトでは、rawバイトは8進形式で表示されます。たとえば10進値が128のバイトは\200
のように表示されます。これを16進形式の\x80
で表示するよう変更するには、変数display-raw-bytes-as-hex
をt
にセットしてください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
他のエディターと同様、Emacsには文字列を検索(search)するコマンドがあります。Emacsには、文字列を違う文字列で置き換える(replace)コマンドもあります。また、同じことを行いますが、固定文字列ではなくパターンを検索するコマンドもあります。
xref
の制御下にある複数ファイルにたいして検索したり((識別子の検索と置換を参照してください)、DiredのAコマンドを通じて検索したり(ファイルにたいする操作を参照してください)、grep
コマンドを使った検索(Emacs下でのGrepによる検索を参照してください)も可能です。
15.1 インクリメンタル検索 | 文字列をタイプすることにより始まる検索。 | |
15.2 非インクリメンタル検索 | 文字列全体を指定してから検索する。 | |
15.3 単語検索 | 単語の並びを検索する。 | |
15.4 シンボル検索 | ソースコードのシンボルを検索する。 | |
15.5 正規表現検索 | 正規表現にマッチする検索。 | |
15.6 正規表現の構文 | 正規表現の構文について。 | |
15.7 正規表現でのバックスラッシュ | ‘\’で開始される正規表現の構築。 | |
15.8 正規表現の例 | 複雑な正規表現の解説。 | |
15.9 検索中のLaxマッチング | 大文字小文字のような、類似した文字の違いを検索で無視する。 | |
15.10 置換コマンド | 一部またはすべてのマッチを検索または置換する。 | |
15.11 その他の検索およびループコマンド | いくつかの正規表現にマッチするすべてを処理する。 | |
15.12 必要に応じて検索を調整する | 検索のさまざまなカスタマイズ。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsにおける重要な検索コマンドは、インクリメンタル検索(isearch: incremental search)です。これは検索する文字列の最初の文字をタイプすると、すぐに検索が開始されます。検索文字列をタイプしていくにつれて、Emacsはその文字列(それまでに入力した文字列)がどこにあるかを表示します。望む場所を特定するのに充分な文字列をタイプしたところで、検索をストップできます。次に何をするかによって、明示的なRETにより検索を終えたり、続けることができます。
前方にインクリメンタル検索します(isearch-forward
)。
後方にインクリメンタル検索します(isearch-backward
)。
メニューバーの‘Edit->Search’メニューからインクリメンタル検索を呼び出すこともできます。
15.1.1 インクリメンタル検索の基本 | 基本的なインクリメンタル検索コマンド。 | |
15.1.2 インクリメンタル検索の繰り返し | 同じ文字列を再度検索する。 | |
15.1.3 インクリメンタル検索でのyank | 検索文字列にテキストを取り込んだり、検索文字列を編集するコマンド。 | |
15.1.4 インクリメンタル検索でのエラー | 文字列が見つからなかったとき。 | |
15.1.5 インクリメンタル検索の特別な入力 | インクリメンタル検索での特別な入力。 | |
15.1.6 インクリメンタル検索を終了させない | プレフィクス引数とスクロールコマンド。 | |
15.1.7 ミニバッファーの検索 | ミニバッファーヒストリーのインクリメンタル検索。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
インクリメンタル検索を開始します(isearch-forward
)。
逆向きのインクリメンタル検索を開始します(isearch-backward
)。
C-s
(isearch-forward
)は、前方へのインクリメンタル検索を開始します。これはキーボードから文字を読み取り、タイプした文字が最初に出現するバッファーの位置に、ポイントを移動します。
たとえばC-sとタイプした後にFをタイプすると、検索を開始したバッファーのポイント位置より前方にある、最初のFにカーソルを移動します。つぎにOをタイプすると、前方にある最初の‘FO’にカーソルが移動します。この場合、‘FO’の‘F’は、前に見つかった‘F’と同じ位置である必要はありません。もう一度Oをタイプすると、カーソルは最初の‘FOO’に移動します。
各ステップでEmacsはカレントマッチ(current match:
現在のマッチ)(検索文字列にマッチしたバッファーのテキスト)を、isearch
フェイス(テキストのフェイスを参照してください)でハイライトします。このハイライトをカスタマイズするさまざまなオプションについては、必要に応じて検索を調整するを参照してください。その時点での検索文字列はエコーエリアにも表示されます。
検索文字列のタイプ中に間違ったら、DEL(isearch-delete-char
)とタイプしてください。DELをタイプするたびに、検索の間にエンターした最後の入力がキャンセルされます。検索文字列、ポイント位置、検索の成否、検索の方向、カレント検索結果の他端位置、検索の“ラッピング”を変更するコマンドのタイプ時、Emacsは常に新たな入力アイテム(input
item)を記録します。失敗した検索を処理するための詳細は、インクリメンタル検索でのエラーを参照してください。
検索により到達した位置に満足したら、RET
(isearch-exit
)をタイプします。これは検索をストップして、検索により移動した位置にカーソルを残します。検索とは関係ないコマンドも、検索をストップして、そのコマンドが実行されます。つまりC-aは検索をexitして行の先頭に移動し、矢印キーをタイプすると検索をexitして対応する移動コマンドが処理される、などとなります。RETで検索を終える必要があるのは、次のコマンドが印字文字をタイプするコマンドのときだけです。DEL、RETおよび他のいくつかの文字(C-q、C-w、C-r、C-s、C-y、M-y、M-r、M-c、M-e、および以下で説明する文字)は、検索で特別な意味を持っています。検索をexitするコマンドを微調整できます。インクリメンタル検索を終了させないを参照してください。
特別な例外として、検索文字列が空のときにRETを入力すると、非インクリメンタル検索(非インクリメンタル検索を開始します(これは"カスタマイズ可能"です。必要に応じて検索を調整するを参照してください)。
検索を中止して検索を開始した位置に戻るには、ESC ESC ESC
(isearch-cancel
)、またはC-g C-g (isearch-abort
)とタイプしてください。
インクリメンタル検索を終了するとき、ポイントの元の位置をマークをアクティブにせず(ただしマークがすでにアクティブではなかったときだけ)に、マークリングに追加します。これにより、C-u C-SPC、またはC-x C-xを使って、検索を開始する前の位置に戻ることができます。マークリングを参照してください(Emacsはマークがすでにアクティブでないときだけ、これを行ないます。検索を開始したときにマークがアクティブな場合は、C-u C-SPCとC-x C-xの両方とも、マークに戻ります)。
後方に検索するには、C-sで検索を開始するかわりに、C-r
(isearch-backward
)を使います。前方検索が検索を開始した位置より前方にある最初のマッチを探すように、後方検索は検索を開始した位置より後方にある最後のマッチを探します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
前方に‘FOO’を検索してマッチしたが探しているマッチではなく、探しているのはバッファーのもっと前方に出現する‘FOO’だとしましょう。ここでもう1度C-s
(isearch-repeat-forward
)をタイプすることにより、検索文字列が次に出現する場所、C-r
(isearch-repeat-backward
)とタイプすれば検索文字列が前に出現した場所に移動します。これは何回でも繰り返すことができます。次、または前へn個目の出現場所を見つけるためにC-sとC-rにプレフィクス数引数nをかわりに供給することもできます。もしタイプしすぎたときは、C-sコマンドをDELで取り消すことができます。同様に後方へのインクリメンタル検索では、C-r
(isearch-repeat-backward
)により後方検索が繰り返されます。
インクリメンタル検索中に手を止めて眺めてみると、検索文字列にたいするカレントマッチ以外に、スクリーンに表示されている他のマッチもハイライトされていることがわかります。これは検索するために、何回C-sまたはC-rを繰り返せばよいのか予測しやすくするためです。その他のマッチは、カスタマイズ可能なフェイスlazy-highlight
(テキストのフェイスを参照してください)を使って、現在のマッチとは異なってハイライトされます。この機能を無効にするには、isearch-lazy-highlight
にnil
をセットしてください。マッチのハイライトに関連するその他のカスタマイズについては、必要に応じて検索を調整するを参照してください。
検索を終了した後、同じ文字列を再度検索するには、C-s C-sとタイプします。最初のC-sはインクリメンタル検索を呼び出し、2回目のC-sは最後に検索した文字列の再検索を意味します。同様に、C-r C-rは最後に検索した文字列を後方に検索します。最後に検索された文字列の決定では、その文字列がC-sで検索されたのか、C-rで検索されたのかは問題ではありません。
前方に検索していて、検索している対象が検索開始点より後方にあるのに気付いたときは、検索文字列を変更すること無く、C-rで後方検索に切り替えることができます。同様に後方検索でC-sをタイプすると、前方検索に切り替わります。
検索が失敗したとき、バッファーの先頭から検索を再開するには、もう一度C-sをタイプします。逆向きの繰り返し検索が失敗したときは、C-rでバッファーの最後から検索を再開します。これはwrapping around(巻き直し)と呼ばれ、これが発生すると、‘Wrapped’という単語が検索プロンプトに表示されます。検索を続けて元の検索開始ポイントを通過すると、‘Overwrapped’に変化します。これはすでに見たマッチを再訪していることを意味します。
以前に検索した文字列を再利用するには、サーチリング(search ring)を使います。コマンドM-p
(isearch-ring-retreat
)またはM-n
(isearch-ring-advance
)で、リングを移動して再使用したい文字列を取り出します。これらのコマンドは、選択されたリング要素の文字列をミニバッファーに残すので、それを編集することができます。C-sとC-r、またはRETとタイプすると、その文字列を受け入れて、その文字列にたいする検索を開始します。サーチリングの中に保存されている、最近使用された検索文字列の数は、変数search-ring-max
で指定され、デフォルトは16です。
ミニバッファーの現在の検索文字列を、サーチリングのアイテムで置き換えずに編集するときは、M-e
(isearch-edit-string
)とタイプするか、ミニバッファーをmouse-1でクリックします。RET、C-s、C-rとタイプすれば、編集を終了してそれを検索できます。バッファーの検索を開始したポイントの後に続く文字を検索文字列に追加するには、C-fまたはRIGHTとタイプしてください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
多くのケースで、ポイントの近くにあるテキストを検索文字列として使いたいことがあるでしょう。このサブセクションで説明されているコマンドにより、これを便利に行なえるようになります。
C-w
(isearch-yank-word-or-char
)は検索された文字列のポイントの次の文字または単語を検索文字列に追加します。これはポイント位置にあるテキストを検索する簡単な方法です(コピーする対象を文字または単語のどちらにするかの決定は発見的に行われます)。プレフィクス数引数nを与えると次のn個の文字または単語を追加します。
C-M-w
(isearch-yank-symbol-or-char
)は、検索された文字列のポイントの次の文字またはシンボルを検索文字列に追加します。これはポイント位置にあるシンボルを検索する簡単な方法です(コピーする対象を文字またはシンボルのどちらにするかの決定は発見的に行われます)。プレフィクス数引数nを与えると次のn個の文字またはシンボルを追加します。
M-s C-e
(isearch-yank-line
)は、検索文字列にカレント行の残りの部分を追加します。ポイントが既に行末にある場合には次の行が追加されます。プレフィクス引数nを指定すると次のn行を追加します。
同様にC-M-z
(isearch-yank-until-char
)はポイントから指定した文字の次の出現場所(その文字を含まず)までのすべてを検索文字列に追加します。これはたとえばプログラミング言語やマークアップ言語でその文字が字句境界をマークするようなときのキーボードマクロにとって有用です。プレフィクス数引数nを与えると、このコマンドはポイントからn個目の指定した文字までのすべてを追加します。
インクリメンタル検索でのC-y
(isearch-yank-kill
)は、カレントkillを検索文字列に追加します。C-yの後にM-y
(isearch-yank-pop
)が呼び出されると、追加するテキストを、もっと前にkillされたものに置き換えます。これは通常のM-y
(yank-pop
)コマンドと似ています(yankを参照してください)。エコーエリアでmouse-2をクリックすることにより、はカレントのX選択(他のウィンドウアプリケーションにたいするカットアンドペーストを参照してください)を検索文字列に追加します(isearch-yank-x-selection
)。
C-M-d (isearch-del-char
)は検索文字列の最後の文字を削除し、C-M-y
(isearch-yank-char
)は検索されたポイントの後の文字を追加します。ポイントの後ろの文字を追加する他の方法は、M-e(インクリメンタル検索の繰り返しを参照してください)でミニバッファーに移動してから、検索文字列の最後でC-fかRIGHTをタイプします。C-fかRIGHTをタイプするたびに、ポイントの後の文字が検索文字列に順次追加されます。
検索が大文字小文字を区別しない場合は通常、検索文字列にyankされるテキストは小文字に変換されるので、検索は大文字小文字を区別しないままです(case foldingを参照してください)。しかし、変数search-upper-case
(search-upper-caseを参照してください)の値がnot-yanks
以外の場合には、この小文字への変換は無効になります。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
文字列が見つからなかった場合、エコーエリアに‘Failing
I-Search’と表示されて、文字列とできるかぎりマッチした位置に、カーソルが移動します。つまり‘FOOT’を検索して‘FOOT’がない場合、カーソルは‘FOOL’という文字列の‘FOO’の後ろに移動します。エコーエリアではマッチに失敗した検索文字列の一部が、フェイスisearch-fail
を使ってハイライトされます。
その時に行うことができる選択肢がいくつかあります。もし文字列が間違っている場合には、文字列を訂正するために、DELで前の入力アイテム(インクリメンタル検索の基本を参照)を削除、一度に一文字削除するならC-M-d、編集する場合はM-eとタイプします。もし見つかった位置が望む位置なら、RETをタイプしてその位置に留まることができます。またはC-gをタイプして、検索文字列から検索できなかった文字(‘FOOT’の中の‘T’)を取り除き、検索された部分の文字列(‘FOOT’の中の‘FOO’)を残します。その位置でもう1回C-gをタイプすると、検索全体を取り消し、ポイントは検索を開始した位置に戻ります。
終了コマンドのC-gは、検索において特別な処理を行います。このコマンドの動作は、検索の状況に依存します。もし指定した文字列の検索が成功して、さらに検索文字の入力を待っているとき、C-gは検索全体を取り消して、カーソルを検索を開始したときの位置に移動します。検索文字列に検索に失敗した文字が含まれているときに、C-gがタイプされたときは、検索文字列から検索に失敗した文字が取り除かれます。後に残るのは検索に成功した文字列で、さらに検索文字の入力を待っているので、先のケースと同様、2回目のC-gで検索全体が取り消されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
前のサブセクションで説明した文字に加えて、インクリメンタル検索のときにタイプする文字列の中には、特別な効果をもつものがあります。ここではそれらについて説明します。
lax space matching(「だらしない、ゆるんだ、緩慢な、締まりのない」スペースのマッチング。lax space matchingを参照してください)を切り替えるには、M-s SPCとタイプします。
検索でcase sensitivity(大文字小文字を区別するか)を切り替えるには、M-cまたはM-s cとタイプします。case foldingを参照してください。検索文字列が大文字を含む場合、デフォルトではその検索はcase-sensitive(大文字小文字を区別)します。
検索が似ている文字、または等価な文字を考慮するかどうかを切り替えるには、M-s 'とタイプします。character foldingを参照してください。検索文字列にアクセント付きの文字が含まれる場合、その検索の間、character foldingは無効になります。
非表示のテキストを検索するかしないかは、M-s i
(isearch-toggle-invisible
)とタイプして切り替えることができます。Outline Searchを参照してください。
インクリメンタル検索で、非正規表現による検索と、正規表現による検索を切り替えるには、M-r、またはM-s r
(isearch-toggle-regexp
)とタイプします。正規表現検索を参照してください。
シンボルモードを切り替えるには、M-s _とタイプします。シンボル検索を参照してください。
改行文字を検索するには、検索文字列の途中でC-jとタイプします。
非ASCII文字を検索するには、以下の方法の1つを使います:
isearch-quote-char
)に続けて、非グラフィック文字か8進数字をタイプします。これはC-qを使ってバッファーに文字を挿入するのと同様に、検索文字列にタイプする文字を追加します(テキストの挿入を参照してください)。たとえばインクリメンタル検索でC-q
C-sをタイプすると、検索文字列に文字‘control-S’が追加されます。
isearch-char-by-name
)に続けて、Unicode名か16進のコードポイントをタイプします。これは通常のinsert-char
コマンドと同様に、検索文字列に指定した文字を追加します(テキストの挿入を参照してください)。
isearch-toggle-input-method
)で、入力メソッドを切り替えることができます。非デフォルトの入力メソッドに切り替えるには、C-^
(isearch-toggle-specified-input-method
)を使います。これは入力メソッドの名前を尋ねます。インクリメンタル検索で入力メソッドがアクティブのとき、検索プロンプトには以下のようなニーモニックが含まれます。
I-search [im]:
imはアクティブな入力メソッドのニーモニックです。インクリメンタル検索で入力メソッドを有効にすると、カレントバッファーでも入力メソッドが有効のまま残ります。
インクリメンタル検索の中でM-s
oとタイプすることにより、カレントの検索文字列でoccur
を実行する、isearch-occur
が呼び出されます。occurを参照してください。
インクリメンタル検索でM-%
(isearch-query-replace
)をタイプすると、query-replace
またはquery-replace-regexp
が呼び出され(検索モードに依存します)、現在の検索文字が置換対象になります。負のプレフィクス引数は、後方への置換を意味します。問い合わせつき置換を参照してください。C-M-%
(isearch-query-replace-regexp
)とタイプすることにより、カレント検索文字列を置換すべき正規表現としてquery-replace-regexp
が呼び出されます。
インクリメンタル検索でM-TABをタイプすると、isearch-complete
が呼び出され、サーチリング(以前に使用された検索文字列)を補完リストとして使って、検索文字列の補完を試みます。補完を参照してください。多くのオペレーティングシステムでは、キーシーケンスM-TABはウィンドウマネージャーに捕えられます。その場合、これを使うにはisearch-complete
を、他のキーシーケンスに再バインドする必要があります(対話的なキーバインディングの変更を参照してください)。
M-s h r
(isearch-highlight-regexp
)とタイプすればマッチをハイライトしたまま検索をexitできます。これはハイライトに使用するフェイスの入力を求めるhighlight-regexp
(インタラクティブなハイライトを参照)に、検索文字列から継承したregexpをに渡して実行します。(マッチだけではなく)マッチを含む行全体をハイライトするには、M-s
h l
(isearch-highlight-lines-matching-regexp
)とタイプします。いずれの場合でも、ハイライトを除去するにはM-s
h u (unhighlight-regexp
)とタイプしてください。
インクリメンタル検索がアクティブのとき、C-h C-h
(isearch-help-map
)とタイプすると、特別なキーバインドのリストを含む、対話的なヘルプにアクセスできます。これらのキーバインドは、キーマップisearch-mode-map
の一部です(キーマップを参照してください)。
インクリメンタル検索がアクティブな際にM-s M->とタイプすると検索文字列の最後の出現位置、M-s M-<とタイプすると最初の出現位置に移動します。プレフィクス数引数nを与えると、これらのコマンドはそれぞれバッファーの先頭または最後から数えてn個目の検索文字列の出現位置へ移動します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このサブセクションでは検索で特別な意味をもたないコマンドがコマンドを実行する前に、検索をexitするかどうかを制御する方法を説明します。また、(たとえそれらがインクリメンタル検索の一部ではなくても)カレントのインクリメンタル検索をexitせずにタイプできる、3つのカテゴリーに属するコマンドを説明します。
インクリメンタル検索によりバインドされていないコマンドをタイプすると通常、そのコマンドを実行する前に検索をexitします。したがって、そのコマンドは検索を呼び出したときのバッファーにたいして処理を行なうことになります。しかし、変数search-exit-option
をappend
にカスタマイズした場合、(インクリメンタル検索により解釈されないような)タイプした文字は、単に検索文字列に追加されます。これにより、通常は検索をexitして、その文字にバインドされているコマンドをそのバッファーにたいして呼び出す、C-aのような制御文字を検索文字列に含めることができるようになります。
インクリメンタル検索でプレフィクス引数を指定したコマンドをタイプすると、デフォルトではその引数は次の検索アクションに適用されるか、検索をexitするコマンドに渡されます。他の言い方をすると、プレフィクス引数の入力自体は、検索を終了させません。
以前のバージョンのEmacsでは、プレフィクス引数の入力は常に検索を終了させていました。この振る舞いに戻すには、変数isearch-allow-prefix
にnil
をセットしてください。
isearch-allow-scroll
が非nil
のとき(以下を参照)、プレフィクス引数は上で説明したようなデフォルト動作をします。つまり、たとえisearch-allow-prefix
がnil
でも、プレフィクス引数は検索を終了させません。
通常スクロールコマンドは、インクリメンタル検索を終了させます。変数isearch-allow-scroll
を非nil
値に変更すると、スクロールバーやC-v、M-v、C-lのようなスクロールコマンド(スクロールを参照してください)が利用可能になります。これは、これらのコマンドをバウンドされたキーシーケンスで呼び出したときだけ適用されます。つまりM-xは依然として検索を終了させます。これらのコマンドには、通常の方法でプレフィクス引数を与えることができます。この機能では通常はカレントマッチが表示されない位置にスクロールすることはできません。しかしisearch-allow-scroll
を特別な値unlimited
にカスタマイズすることにより、この制限は解除されます。
isearch-allow-scroll
の機能は、正確にはスクロールではないが、テキストが表示されるスクリーン位置に影響する、C-x
2 (split-window-below
)やC-x ^
(enlarge-window
)のような、コマンドにも効果を及ぼします。これはコマンド名のisearch-scroll
プロパティが非nil
のコマンドに適用されます。そのため、どのコマンドが影響を受けるかは、それらのプロパティを変更して制御できます。
たとえば将来のEmacsセッションも含めて、インクリメンタル検索中にC-h lを使えれば便利だと思ったら、まずC-h
cで何のコマンドが実行されるか調べて(キーのドキュメントを参照してください)、それがview-lossage
だとわかります。その後はinitファイルに以下を追加します(Emacs初期化ファイルを参照してください)。
(put 'view-lossage 'isearch-scroll t)
この機能はポイント、バッファー内容、マッチデータ、カレントバッファーや選択されているウィンドウ・フレームを変更しない任意のコマンドに適用できます。そして、そのコマンド自体がインクリメンタル検索を行ってはなりません。この機能は、isearch-allow-scroll
がnil
(デフォルト)の場合は無効です。
isearch-yank-on-move
をshift
にカスタマイズしている際には、カーソル移動コマンドをタイプ中にシフトキーを押下することにより検索文字列を拡張できます。これはポイント移動後にカレントバッファーの新たな位置で終了するテキストをyankします。
isearch-yank-on-move
がt
の際にはカーソル移動コマンドにシフトキーを使用せずに検索文字列を拡張できますが、それはコマンドのシンボルにisearch-move
プロパティをもつ特定の移動コマンドだけに適用されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ミニバッファーがアクティブのときインクリメンタル検索を開始すると、Emacsはミニバッファーの内容を検索します。通常のバッファーにたいする検索とは異なり、エコーエリアはミニバッファーの表示に使われているので、検索文字列はエコーエリアには表示されません。
ミニバッファーでのインクリメンタル検索が失敗すると、ミニバッファーヒストリーを検索します。ミニバッファーヒストリーを参照してください。ミニバッファーとミニバッファーのヒストリーは、一番古いヒストリー要素が最初で、カレントのミニバッファーが最後にある、一連のページとして視覚化することができます。前方検索のC-sは前方、つまり新しいページを検索し、後方検索のC-rは後方、つまり古いページを検索します。普通のバッファーの検索と同様、検索が失敗すると、最後から最初のページ、またはその逆に巻き直して検索します。
カレントマッチがヒストリーの要素にあった場合、ヒストリーの要素はミニバッファーに取り出されます。インクリメンタル検索を正常に終了(たとえばRETをタイプ)すれば、それはミニバッファーに残ります。検索を取り消すのはC-gで、これによりミニバッファーの内容は検索を開始したときのものに復元されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsには、従来式の非インクリメンタル検索もあります。これは検索を開始する前に、検索文字列全体を入力する必要があります。
stringを検索します。
後方にstringを検索します。
非インクリメンタル検索を開始するには、最初にC-s RETをタイプします。これにより、検索文字列を読みとるために、ミニバッファーに移動します。検索文字列の入力を終了して検索を開始するには、RETをタイプします。文字列が見つからなかったとき、検索コマンドはエラーをシグナルします。
C-s RETとタイプすると、C-sは通常どおりインクリメンタル検索を呼び出します。しかし、このコマンドは指定した文字列が空のとき、非インクリメンタル検索を行うコマンドを呼び出すよう、プログラムされています(そのような用途以外に空の引数は無意味です)。C-r RETも同様に、後方に非インクリメンタル検索を行なうコマンドを呼び出します。
メニューバーの‘Edit->Search’メニューから非インクリメンタル検索を呼び出すこともできます。
よりシンプルな2つのコマンド、M-x search-forwardとM-x search-backwardを使うこともできます。これらのコマンドは指定した文字をリテラルとして検索し、case folding(検索で大文字小文字を区別するか)を除くlax-search機能(検索中のLaxマッチングを参照してください)をサポートしません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
単語検索(word search)は、単語の並びを、その間にある区切り文字の種類とは無関係に検索します。たとえば検索文字列に、1つのスペースで区切られた2つの単語を入力すると、2つの単語を区切るのが、1つまたはそれ以上のスペース、改行文字、およびそれ以外の区切り文字の場合にもマッチします。これはテキスト文書を検索するとき特に有用です。なぜなら検索する単語が改行で区切られているのか、スペースで区切られているのか考慮しなくてもよいからです。プログラミング言語のためのメジャーモード、およびその他の特別なメジャーモード、そのモードの構文的なニーズに適合するように、単語の定義が変更されているかもしれないことに注意してください。
インクリメンタル検索がアクティブのとき、単語検索モードに切り替えます(isearch-toggle-word
)。非アクティブのときは、前方へのインクリメンタルな単語検索を開始します(isearch-forward-word
)。
非インクリメンタルな単語検索を使って、wordsを前方検索します。
非インクリメンタルな単語検索を使って、wordsを後方検索します。
リージョン内のテキストにたいして、Webを検索します。
前方へのインクリメンタルな単語検索を開始するには、M-s
wとタイプします。インクリメンタル検索が非アクティブの場合、これはコマンドisearch-forward-word
を実行します。インクリメンタル検索がすでにアクティブの場合(前方か後方かにかかわらず)、M-s
wは検索の方向と現在の検索文字列は変更せずに、単語検索に切り替えるコマンドisearch-toggle-word
を実行します。単語検索をオフに切り替えるには、再度M-s
wをタイプしてください。
非インクリメンタルな単語検索を開始する場合、前方検索はM-s w RET、後方検索はM-s w C-r
RETをタイプします。これらはコマンドword-search-forward
、またはword-search-backward
を実行します。
インクリメンタルな単語検索と、非インクリメンタルな単語検索では、マッチを見つける方法に若干の違いがあります。非インクリメンタルな単語検索では、検索文字列の各単語は、単語全体に厳密に一致しなければなりません。インクリメンタルな単語検索では、マッチの規則は緩くなります。検索文字列をタイプするとき、最初と最後の単語は、単語全体にマッチする必要はありません。これはタイプする度にマッチを処理するためです。これは(カーソルがある)カレントマッチ以外のマッチ(lazy matches。インクリメンタル検索を参照してください)には適用されません。それらは単語全体がマッチしなければハイライトされません。検索文字列をタイプしている間は、C-sのような検索繰り返しキーを使用するまで、検索プロンプトに‘Pending’が表示されます。
単語検索コマンドは、character foldingを処理せず、lax whitespace matching(lax space matchingを参照してください)が効果をもたないように切り替えます。
リージョン内のテキストにたいしてWebを検索するには、M-s
M-wとタイプします。このコマンドは、変数eww-search-prefix
により指定されたURLの検索エンジンを使用して、リージョン内の単語にたいするインターネット検索を行ないます(EWW in The Emacs Web Wowser
Manualを参照)。リージョンがアクティブでない場合、このコマンドはユーザーに検索するURL、またはキーワードの入力を求めます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
シンボル検索(symbol
search)は、通常の検索と似ていますが、検索の境界がシンボルの境界にマッチしていなければなりません。シンボルの意味は、メジャーモードのコンテキストに依存しており、Emacs
LispモードでのLispシンボルのように、通常はソースコードのトークンを参照します。たとえばLispシンボルforward-word
をインクリメンタルなシンボル検索すると、これはisearch-forward-word
にはマッチしません。そのため、この機能は主にソースコードの検索に有用です。
インクリメンタル検索がアクティブのとき、シンボル検索モードに切り替えます(isearch-toggle-symbol
)。非アクティブのときは、前方へのインクリメンタルなシンボル検索を開始します(isearch-forward-symbol
)。
ポイントの近くにあるシンボルを、検索文字列の初期値に追加して、前方へのインクリメンタルなシンボル検索を開始します。
symbolにたいして、前方への非インクリメンタルな検索をします。
symbolにたいして、後方への非インクリメンタルな検索をします。
前方へのインクリメンタルなシンボル検索を開始するには、M-s _ (ポイントの近くにシンボルがあるときはM-s
.)をタイプします。インクリメンタル検索がまだアクティブでなければM-s
_はコマンドisearch-forward-symbol
、M-s
.はコマンドisearch-forward-symbol-at-point
を実行します。プレフィクス数引数nを与えるとM-s
.はポイント位置のシンボルにたいして次のn番目の出現位置を検索します。負のnでは後方に検索します。すでにインクリメンタル検索がアクティブのとき、M-s
_は検索方向と現在の検索文字列を維持した状態で、シンボル検索に切り替えます(もう一度M-s
_をタイプすると、シンボル検索を無効にできます)。インクリメンタルなシンボル検索では、検索み文字列をタイプする間は、検索文字列の先頭がシンボルの先頭にマッチだけが必要であり、C-sのような検索繰り返しキーを使用するまでは検索プロンプトに‘Pending’が表示されます。
非インクリメンタルなシンボル検索は、前方への検索はM-s _ RET、後方への検索はM-s _ C-r RETをタイプします。非インクリメンタル検索では、文字列の先頭と最後が、シンボルの先頭と最後にマッチする必要があります。
シンボル検索コマンドは、character foldingを処理せず、lax whitespace matching(lax space matchingを参照してください)が効果をもたないように切り替えます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
正規表現(regular expression: regexpと略します)とは、文字列にマッチさせるための代替の文字列クラスを示すパターンです。Emacsはregexpにマッチする検索を、インクリメンタル、非インクリメンタルの両方で提供します。正規表現の構文は、次のセクションで説明します。
インクリメンタルなregexp検索を開始します(isearch-forward-regexp
)。
逆方向のインクリメンタルなregexp検索を開始します(isearch-backward-regexp
)。
regexpにたいするインクリメンタル検索は、C-M-s
(isearch-forward-regexp
をタイプするか、プレフィクス引数(引数の値は何でもよい)を指定して、C-sを呼び出します。前方へのインクリメンタル検索中は、M-rをタイプします。このコマンドはC-sと同様に、検索文字列をインクリメンタルに読みとりますが、検索文字列に正確に一致するバッファーのテキストを検索するのではなく、検索文字列をregexpとして扱います。検索文字列にテキストを追加する度に、regexpは長くなり、新しいregexpを検索します。後方へのregexp検索には、C-M-r(isearch-backward-regexp
)またはプレフィクス引数を指定したC-rを使います。後方へのインクリメンタル検索中はM-rを使います。
通常のインクリメンタル検索の特別なキーシーケンス(インクリメンタル検索の特別な入力を参照)は、インクリメンタルなregexp検索でも同じようなことを行います。たとえば検索開始直後にC-sをタイプすると、最後に行ったインクリメンタル検索で使ったregexpで、前方検索を行います。インクリメンタルなregexpと非regexp検索は、独立したデフォルトを持ちます。これらは別のサーチリングも持っており、これにはM-pとM-nでアクセスできます。サーチリングに保存される検索regexpの最大数は、regexp-search-ring-max
の値により決定され、デフォルトは16です。
通常のインクリメンタル検索とは異なり、インクリメンタルregexp検索は、デフォルトではlax space
matchingを使いません。この機能を切り替えるには、M-s SPC
(isearch-toggle-lax-whitespace
)を使います。そうするとインクリメンタルregexp検索でのSPCは、1つ以上の空白文字の並びにマッチするようになります。変数search-whitespace-regexp
は、lax
space matchingにたいするregexpを指定します。インクリメンタル検索の特別な入力を参照してください。
通常のインクリメンタル検索とは異なり、インクリメンタルなregexp検索ではcharacter folding(検索中のLaxマッチングを参照してください)を使用できません(インクリメンタルregexp検索の途中で、M-s 'によりcharacter foldingを切り替えた場合、検索は非regexp検索となり、タイプした検索パターンはリテラル文字列として解釈されます)。
インクリメンタルregexp検索では、検索文字列の追加によりカーソルが前に戻され、最初から検索しなおされることがありえます。たとえば検索文字列‘foo’に‘\|bar’を追加すると、カーソルは‘foo’から、それより前にある最初の‘bar’に戻ります。正規表現の構文を参照してください。
前方および後方へのregexp検索は、対照的ではありません。なぜならEmacsでのregexpに対するマッチは常に前方へ処理され、regexpの先頭から開始されるからです。したがって前方へのregexp検索は前方にスキャンし、可能性のある開始位置から前方へとマッチを試みます。後方へのregexp検索は後方へスキャンし、可能性のある開始位置から前方へとマッチを試みます。これらの検索手法はミラーイメージではありません。
regexpにたいする非インクリメンタルな検索は、コマンドre-search-forward
およびre-search-backward
で行われます。これらのコマンドはM-xから呼び出すか、インクリメンタルregexp検索からのC-M-s
RETおよびC-M-r
RETで呼び出します。M-xを使用してこれらのコマンドを呼び出した場合は、指定したregexpを厳密に検索するので、case
foldingを除くlax-search機能(検索中のLaxマッチングを参照してください)はサポートされません
プレフィクス引数を指定したインクリメンタルregexp検索は、isearch-forward
やisearch-backward
のような、通常の文字列を検索します。インクリメンタル検索を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このセクション(および、マニュアル全般)では、ユーザーが通常使う正規表現の機能を説明します。主にLispプログラムで使用される追加の機能については、Regular Expressions in The Emacs Lisp Reference Manualを参照してください。
正規表現は、いくつかの特殊文字(special constructs)と、それ以外の普通の文字からなる構文を持ちます。通常の文字はそれと同じ文字にマッチし、それ以外の文字にはマッチしません。特殊文字は、‘$^.*+?[\’です。文字‘]’は、文字候補を終了させる場合は特殊文字です(以下参照)。文字‘-’は、文字候補の中では特殊文字です。正規表現の中に現れるその他の文字は、前に‘\’がついてない限り普通の文字です(Lispプログラム内で正規表現を使う場合、‘\’は2つ記述しなければなりません。このセクションの最後にある例を参照してください)。
たとえば‘f’は特殊文字ではなく普通の文字なので、正規表現中の‘f’は文字列‘f’にマッチし、他の文字列にはマッチしません(文字列‘ff’にはマッチしません)。同様に正規表現中の‘o’は、‘o’だけにマッチします(大文字小文字を区別しない場合、これらのregexpは‘F’や‘O’にもマッチしますが、これを例外としてではなく、“同じ文字列”を一般化したものと考えます)。
2つの正規表現aとbを結合できます。結合した結果は、aが先頭の適当な部分に一致して、bが残りの部分に一致する正規表現となります。些細な例としては、‘f’と‘o’という正規表現を結合すると、正規表現‘fo’となり、これは文字列‘fo’だけにマッチします。ここまでは普通です。これより複雑ことを行うには、特殊文字を使う必要があります。以下にリストを示します。
これは改行文字以外の任意の1文字にマッチする特殊文字です。たとえば正規表現‘a.b’は、最初が‘a’で最後が‘b’の3文字の文字列にマッチします。
単独では使用されません。これは接尾演算子で、前の正規表現の任意の回数、可能な限り多くの回数を含めた繰り返しを意味します。したがって‘o*’は任意の個数の‘o’にマッチし、‘o’がない場合(0個の場合)も含めてマッチします。
‘*’は常に可能な限り小さな、前置表現に適用されます。したがって‘fo*’は‘fo’の繰り返しではなく‘o’の繰り返しです。この正規表現は‘f’、‘fo’、‘foo’、...にマッチします。
マッチングにより構成される‘*’は、見つけられるだけの反復回数へと、直ちに処理されます。その後でパターンの残りの部分の処理を続けます。これが失敗すると、バックトラッキングが発生します。‘*’の反復回数をいくつか捨てて、パターンの残りの部分がマッチするように構成を変更します。たとえば文字列‘caaar’にたいして‘ca*ar’をマッチさせる場合、まず最初に‘a*’を、3つすべての‘a’にマッチさせます。しかしパターンの残りの部分は‘ar’ですが、マッチさせるために残っているのは‘r’だけなので、このマッチは失敗します。かわりに‘a*’を2つの‘a*’だけにマッチさせます。この選択により、regexpの残りの部分のマッチが成功します。
これは‘*’と同様に接尾演算子ですが、前置表現に最低1回マッチしなければならない点が異なります。したがって‘ca+r’は‘car’、‘caaaar’にマッチしますが、‘cr’にはマッチしません。一方‘ca*r’は、これら3つすべての文字列にマッチします。
これは‘*’と同様に接尾演算子ですが、前置表現が1回出現するか、出現しないかいずれかという点が異なります。したがって‘ca?r’は、‘car’または‘cr’のいずれかになります。
これらは上述した演算子の、非貪欲(greedy)なタイプの演算子です。通常の演算子‘*’、‘+’、‘?’は、regexpがマッチする、できる限り長いマッチを行います。しかしこれらの演算子に‘?’を後置すると、できる限り短いマッチを行います。
したがって‘ab*’と‘ab*?’は、両方とも文字列‘a’と文字列‘abbbb’にマッチしますが、文字列‘abbb’にマッチさせたとき、‘ab*’は文字列全体(有効な最長マッチ)にマッチしますが、‘ab*?’は‘a’(有効な最短マッチ)だけにマッチします。
非貪欲な演算子は、与えられた開始位置から開始される、できるだけ短い文字列にマッチします。前方検索では、利用できる一番最初の開始位置は、常にカーソルの位置となります。したがって末尾が改行のテキスト‘abbab’にたいして‘a.*?$’を検索すると、文字列全体にマッチします。これはマッチが最初の‘a’から開始されので、マッチさせることができるのです。
これはn回の繰り返しを指定する接尾演算子です。つまり前置される正規表現に、正確にn回連続でマッチしなければなりません。たとえば‘x\{4\}’は、文字列‘xxxx’だけにマッチします。
これはn回からm回の繰り返しを指定する接尾演算子です。つまり前置される正規表現が、最低n回、最大m回マッチしなければなりません。mが省略されたときは、マッチ回数の上限はありませんが、前置される正規表現は少なくともn回マッチしなければなりません。
‘\{0,1\}’は、‘?’と同じです。
‘\{0,\}’は、‘*’と同じです.
‘\{1,\}’は、‘+’と同じです。
これは‘[’で始まり‘]’で終わる、文字集合(character set)です。
もっとも簡単なケースでは、2つのカッコの間に指定された文字が、マッチできる文字集合となります。したがって‘[ad]’は1つの‘a’か1つの‘d’にマッチし、‘[ad]*’は‘a’と‘d’からなる任意の文字列にマッチします(空の文字列を含む)。結果として‘c[ad]*r’は、‘cr’、‘car’、‘cdr’、‘caddaar’、...にマッチします。
文字集合には、開始文字と終了文字の間に‘-’を記述することにより、文字の範囲を含めることもできます。したがって‘[a-z]’は、ASCII小文字となります。文字の範囲と特定の文字の指定を混ぜることもできます。‘[a-z$%.]’は任意のASCII小文字と‘$’、‘%’、‘.’にマッチします。別の例としては、‘[α-ωί]’はギリシャ文字の小文字すべてにマッチします。
いくつかの特別な文字クラス(character classes)を、文字集合に含めることもできます。文字の候補を含む文字クラスを‘[:’と‘:]’で囲んで指定します。たとえば‘[[:alnum:]]’は、任意のアルファベットと数字にマッチします。文字クラスのリストは、Char Classes in The Emacs Lisp Reference Manualを参照してください。
文字集合に‘]’を含めるには、それを最初に記述しなければなりません。たとえば‘[]a]’は、‘]’または‘a’にマッチします。文字集合に‘-’を含めるには、‘-’を文字集合の最後に記述しますが、範囲の先頭や後にも記述できます。したがって‘[]-]’は、‘]’と‘-’の両方にマッチします。
文字集合に‘^’を含めるには、集合の最初以外に記述します(最初に記述した場合、補集合を指定したことになります。以下を参照してください)。
大文字小文字を区別しない検索で文字の範囲を使う場合、範囲の先頭と最後を、大文字だけ、または小文字だけで記述するか、先頭と最後をアルファベット以外で記述するべきです。‘A-z’のような大文字小文字を混成した範囲指定は不正な定義で、Emacsの将来のバージョンで変更されるかもしれません。
‘[^’は文字の補集合complemented character setを開始します。つまり指定された文字以外がマッチします。したがって‘[^a-z0-9A-Z]’は、ASCII文字と数字以外にマッチします。
‘^’は文字集合で最初以外で使用された場合、特別な意味をもちません。‘^’に続く文字は、先頭にあるものとして扱われます(いいかえると‘-’と‘]’は、ここでは特別な意味をもちません)。
もしマッチしない文字として改行が記述されていなければ、文字の補集合を改行にマッチさせることができます。これはgrep
のようなプログラムにおける、regexpにたいする処理とは対照的です。
これは空文字列、ただしテキストの行頭だけにマッチする特殊文字です。それ以外ではマッチに失敗します。したがって‘^foo’は行の先頭にある‘foo’にマッチします。
歴史的な互換性により、この意味での‘^’の使用は、正規表現の先頭か、‘\(’または‘\|’の後に記述された場合に限ります。
‘^’と似ていますが、行末だけにマッチします。したがって‘x+$’は、行末にある1つ以上の‘x’にマッチします。
歴史的な互換性により、この意味での‘$’の使用は、正規表現の最後か、‘\)’または‘\|’の後に記述された場合に限ります。
これには2つの機能があります。まず特殊文字(‘\’を含む)をクォートすることと、追加の特別な構成を導入することです。
‘\’は特殊文字をクォートするので、正規表現中の‘\$’は‘$’だけにマッチし、‘\[’は‘[’だけにマッチします。
‘\’で始まる特別な構成については、以下のセクションを参照してください。
注意: 歴史的な互換性から、特殊文字はそれが特殊な意味をもたないようなコンテキストで使用された場合は、通常の文字として扱われます。たとえば‘*foo’は、‘*’が特殊文字として動作するための前置された表現がないので、普通の文字として扱われます。このような振る舞いに依存することは、よい習慣ではありません。特殊文字を記述する場合、それがどこに記述されようとクォートするべきです。
文字集合の候補中では‘\’は特別ではなく、‘-’と‘]’のもつ特別な意味を除去することはありません。したがって、これらの文字が特別な意味をもたないような場所にあるときは、これらの文字をクォートすべきではありません。これでは明確ではないかもしれません。これらの特殊文字が特別な意味をもつ場所にあるとき、バックスラッシュを前置することによりクォートされるのです。たとえば‘[^\]’(Lispの文字記法では"[^\\]"
)は、バックスラッシュ以外の任意の一文字にマッチします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
多くの場合、任意の文字を伴う‘\’はその文字だけに一致します。しかしいくつか例外があって、‘\’で始まる2文字のシーケンスが、特別な意味を持つ場合があります。シーケンス内の2文字目にくる文字は、単独で使った場合には普通の文字として扱われるものです。以下は‘\’の構成の表です。
選択肢を指定します。2つの正規表現aとbの間に‘\|’を記述すると、それはaまたはbのいずれかにマッチする表現を形成します。これはまずaとのマッチを試み、失敗した場合にbとのマッチを試みます。
したがって‘foo\|bar’は、‘foo’または‘bar’のいずれかにマッチし、それ以外の文字列にはマッチしません。
‘\|’は、周囲の一番大きな表現に適用されます。‘\|’のグループ化の能力に制限をかけることができるのは、周囲の‘\( … \)’によるグループ化だけです。
複数の‘\|’使用を処理するための、完全なバックトラッキング能力が存在します。
3つの目的のためのグループ化構成です:
この最後の使い方は、カッコでグループ化することが重要なのではありません。これは‘\\( … \\)’構成の、2番目の意味とは異なる機能です。実際には、これら2つの機能が衝突することは、通常はありません。もし衝突するようなら、以下で説明する、shy(内気)なグループ化を使うことができます。
マッチした部分文字列を記録しない、shy(内気)なグループ化を指定します。マッチした部分文字列は、‘\d’により後方参照できません(以下参照)。この機能は正規表現を機械的にまとめるときに役立ちます。これにより後方参照するためのグループにたいする番号づけに影響することなく、文法的な目的によるグループ化を行うことができます。
d番目に‘\( … \)’構成にマッチしたテキストと同じテキストにマッチします。これは後方参照(back reference)と呼ばれます。
最後の‘\( … \)’構成の後で、マッチ処理はこの構成にマッチしたテキストの最初と最後を記録します。そして正規表現の後の部分で‘\’の後に数字dを使うことにより、d番目の‘\( … \)’構成にマッチしたテキストと同じテキストにマッチさせることができます。
正規表現に記述された最初の9つの‘\( … \)’にマッチしたテキストは、正規表現で開きカッコが出現した順に、1から9までの数字が割り当てられます。そのため‘\1’から‘\9’を使うことにより、‘\( … \)’構成にマッチした、対応するテキストを参照することができます。
たとえば‘\(.*\)\1’は改行を含まない、前半と後半が同一の文字列にマッチします。‘\(.*\)’は、そのテキストが何であろうと前半にマッチしますが、‘\1’は前半と正確に同じテキストにマッチしなければなりません。
もし特定の‘\( … \)’構成が1回以上マッチする場合(これは‘*’が後置されているとき簡単に発生します)、最後のマッチだけが記録されます。
空の文字列にマッチしますが、文字列またはバッファー(またはアクセスできる部分)の先頭に限定されます。
空の文字列にマッチしますが、文字列またはバッファー(またはアクセスできる部分)の最後に限定されます。
空の文字列にマッチしますが、ポイント位置に限定されます。
空の文字列にマッチしますが単語の先頭または最後に限定されます。したがって‘\bfoo\b’は、区切られた単語‘foo’にマッチします。‘\bballs?\b’は、別々の単語‘ball’または‘balls’にマッチします。
‘\b’は、そこにどんなテキストが出現しようと、バッファーの先頭または最後にもマッチします。
空の文字列にマッチしますが、単語の最初と最後以外にマッチします。
空の文字列にマッチしますが、単語の先頭に限定されます。‘\<’は単語の構成文字が続く場合に限り、バッファーの先頭にマッチします。
空の文字列にマッチしますが、単語の最後に限定されます。‘\<’は内容が単語の構成文字で終わる場合に限りバッファーの最後にマッチします。
任意の単語構成文字にマッチします。どの文字が該当するかは、構文テーブル(syntax table)により決定されます。Syntax Tables in The Emacs Lisp Reference Manualを参照してください。
単語構成文字以外の任意の文字にマッチします。
空の文字列にマッチしますが、シンボルの先頭に限られます。シンボルは1文字以上のシンボル構成文字からなります。シンボル構成文字は、‘w’と‘_’の構文をもつ文字です。‘\_<’はシンボル構成文字が続く場合に限り、バッファーの先頭にもマッチします。単語にたいしては、構文テーブル(syntax table)が、どの文字がシンボル構成文字かを判断します。
空の文字列にマッチしますが、シンボルの最後に限定されます。‘\_>’は内容がシンボル構成文字で終わる場合に限り、バッファーの最後にマッチします。
構文がcである、任意の文字にマッチします。ここでcとは、特定の構文クラスを表す文字です。したがって‘w’は単語構成文字、‘-’または‘ ’は空白文字、‘.’は通常の区切り文字、などとなります。Syntax Class Table in The Emacs Lisp Reference Manualを参照してください。
構文がc以外の、任意の文字にマッチします。
カテゴリーcに属する、任意の文字にマッチします。たとえば‘\cc’は中国文字、‘\cg’はギリシャ文字にマッチします。既知のカテゴリーについての説明は、M-x describe-categories RETをタイプしてください。
カテゴリーcに属さない、任意の文字にマッチします。
単語と構文に関係する構成は構文テーブルのセッティングにより制御されます。See Syntax Tables in The Emacs Lisp Reference Manual.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下にregexpの例を示します。これはEmacsがセンテンスの最後(末尾の空白は含まない)を認識するために、デフォルトで使用するregexp(たとえば変数sentence-end-base
)と似ています。
[.?!][]\"')}]*
これには2つの連続する部分があります。1つは‘.’、‘?’、‘!’にマッチする文字です。もう1つは閉じカッコ、クォート、カッコの0回以上の繰り返しです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
あなたは通常、タイプした文字と、検索されるテキストの間にある、特定の瑣末な違いを、検索コマンドが無視することを望むでしょう。たとえば長さが異なる空白文字シーケンスは通常、等しいとみなされ、大文字小文字の違いは通常問題にならない、などです。これは等価文字(character equivalence)として知られています。
このセクションではEmacsのlax search(緩い検索)機能と、それを必要に応じて調整する方法について説明します。
デフォルトでは、検索コマンドはlax space
matching(緩いスペースマッチング)を行います。これはスペースおよび一連のスペースは、テキスト中の1つまたはそれ以上の空白文字にマッチします(インクリメンタルregexp検索は別のデフォルトをもちます。正規表現検索を参照してください)。したがって‘foo bar’は‘foo bar’、‘foo bar’、‘foo bar’、...にマッチします(‘foobar’にはマッチしません)。正確にいうと、Emacsは検索文字列中の一連のスペースを、変数search-whitespace-regexp
で指定された正規表現にマッチさせます。たとえばスペースを一連の改行とスペースにマッチさせるには、変数に‘"[[:space:]\n]+"’をセットします。この変数のデフォルト値は、そのバッファーのメジャーモードに依存します。ほとんどのメジャーモードは、スペース、タブ、フォームフィード文字を空白文字としてクラス化します。
空白文字を正確にマッチさせたい場合は、インクリメンタル検索中にM-s SPC
(isearch-toggle-lax-whitespace
)とタイプすることにより、lax space
matchingをオフに切り替えることができます。もう1度M-s SPCとタイプすると、lax space
matchingふぁオンに切り替わります。すべての検索でlax space
matchingを無効にするには、search-whitespace-regexp
をnil
に変更します。これにより検索文字列の中のスペースは、正確に1つのスペースにマッチするようになります。
Emacsでの検索では、検索文字列を小文字で指定した場合、デフォルトでは検索するテキストの大文字小文字は区別されません。したがって‘foo’を検索すると、‘Foo’や‘fOO’もマッチします。regexp、特に文字集合でも同様に振る舞います。つまり‘[ab]’は、‘a’、‘A’、‘b’、‘B’もマッチします。この機能はcase foldingとして知られており、これはインクリメンタル検索と非インクリメンタル検索の両方でサポートされています。
検索文字列のどこかに大文字があると、検索はcase-sensitive(大文字小文字を区別する)になります。したがって‘Foo’を検索すると、‘foo’や‘FOO’は検索されません。これは正規表現検索でもリテラル文字列検索と同様に適用されます。検索文字列から大文字を削除すると、効果はなくなります。変数search-upper-case
がこれを制御します。この変数が非nil
の場合、検索文字列の中の大文字は検索をcase-sensitiveにします。これをnil
にセットすることにより、大文字によるこの効果は無効になります。この変数のデフォルト値は検索文字列中に大文字があれば検索をcase-sensitiveにして、検索文字列にyankするテキスト(インクリメンタル検索でのyankを参照)を小文字にする(そうすればデフォルトで検索がcase-insensitiveになる)not-yanks
です。
変数case-fold-search
にnil
をセットすると、すべての文字は大文字小文字を含めて、完全にマッチしなければなりません。これはバッファーごとの変数で、変数の変更はデフォルト値を変えない限り、通常はカレントバッファーだけが影響を受けます。ローカル変数を参照してください。これは置換コマンド(置換コマンドを参照してください)や、ミニバッファーのヒストリー検索(ミニバッファーヒストリーを参照してください)を処理する、非インクリメンタル検索にも適用されます。
インクリメンタル検索でM-c、またはM-s c
(isearch-toggle-case-fold
)とタイプすると、検索が大文字小文字を区別するかが、切り替わります。この効果は、現在の検索を超えて引き継がれませんが、カレントの検索にたいして大文字を追加・削除したときの効果をオーバーライドします.
特定のコマンドや操作にたいする検索やマッチングにおいて、大文字小文字の区別を制御する変数がいくつかあります。たとえばtags-case-fold-search
は、find-tag
での大文字小文字の区別を制御します。これらの変数を探すには、M-x
apropos-variable RET case-fold-search RETとタイプしてください。
case foldingでは、文字の大文字小文字の違いを無視するので、大文字は小文字にマッチし、その逆もマッチします。case
foldingを一般化したものがcharacter
foldingで、これは類似した文字間の違いの、より広いクラスを無視します。たとえばcharacter
foldingでは、文字a
はä
やá
のようなアクセント付きの類似文字にもマッチし、これらの変種を区別するための特殊記号も無視します。加えてa
は、a
に似ている他の文字や、U+249C
PARENTHESIZED LATIN SMALL LETTER Aや、U+2100 ACCOUNT
OF(これは小さいc
の上に小さいa
があるような外観をもちます)のような、文字のグラフィカルな外観の一部にa
をもつ文字にもマッチします。同様にASCIIのダブルクォート文字"
は、ダブルクォートの変種としてUnicode標準で定義されている、他のすべての変種にマッチします。最後に、character
foldingにより、1つ以上の文字シーケンスは違う長さの他の文字にもマッチするようになります。たとえば2つの文字ff
は、U+FB00
LATIN SMALL LIGATURE FFにマッチします。文字シーケンスはまったく同じではありませんが、character
foldingでのマッチはequivalent character sequences(等価文字シーケンス)として知られています。
一般的にEmacsの検索コマンドは、デフォルトでは等価な文字シーケンスのマッチのためにcharacter
foldingを行ないません。変数search-default-mode
をchar-fold-to-regexp
にカスタマイズすることにより、この振る舞いを有効にできます。必要に応じて検索を調整するを参照してください。インクリメンタル検索では、M-s '
(isearch-toggle-char-fold
)とタイプすることによりcharacter
foldingが切り替わりますが、これはその検索だけです(置換コマンドは別のオプションによる異なるデフォルトをもちます。置換コマンドとLaxマッチを参照してください)。
デフォルトではä
のような文字の明示的な変種を検索文字列の一部としてタイプしても、それはa
のようなベース文字とはマッチしません。しかし変数char-fold-symmetric
をt
にカスタマイズすれば、検索コマンドは等価な文字を同一に扱い、検索文字列内での等価な文字集合の使用により、検索するテキスト内の等価な文字を検索するので、アクセントつきの文字ä
は文字a
と同じようにá
のようなすべての変種にもマッチします。
カスタマイズ可能な変数char-fold-include
を使用して新たなfoldingを追加したり、カスタマイズ可能な変数char-fold-exclude
を使用して既存のfoldingを削除できます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsは検索と置換を行うコマンドをいくつか提供します。単純なM-x
replace-stringコマンドに加えて、出現する検索パターンごとに置換するかを問い合わせるM-%
(query-replace
)も提供します。
置換コマンドは通常、ポイント位置からバッファーの最後までのテキストにたいして処理を行います。リージョンがアクティブのときは、リージョンにたいして処理を行います(マークとリージョンを参照してください)。基本的な置換コマンドは1つの検索文字列(またはregexp)を、1つの置換文字列で置き換えます。コマンドexpand-region-abbrevs
を使用して、複数の置換を並行して処理することが可能です(abbrev展開の制御を参照してください)。
15.10.1 無条件の置換 | 文字列にマッチするすべて置換する。 | |
15.10.2 正規表現の置換 | regexpにマッチするすべてを置換する。 | |
15.10.3 置換コマンドとLaxマッチ | 置換するテキストにたいするlax検索。 | |
15.10.4 問い合わせつき置換 | 問い合わせの使い方。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
すべてのstringをnewstringで置換します。
ポイントの後にある‘foo’のすべてのインスタンスを‘bar’に置換するには、コマンドM-x replace-stringに2つの引数‘foo’と‘bar’を指定します。置換はポイントの後だけで発生するので、バッファー全体を置換したい場合は、最初にバッファーの先頭に移動しなければなりません。バッファーの最後までのすべてが置換されます。置換をバッファーの一部に制限したいときは、そのリージョン部分をアクティブにします。リージョンがアクティブのときは、置換はそのリージョンに制限されます(マークとリージョンを参照してください)。
replace-string
が終了したとき、ポイントは最後に置換された位置に留まります。以前のポイント位置(replace-string
コマンドを実行した場所)はマークリングに追加されるので(マークは非アクティブ)、C-u
C-SPCで戻ることができます。マークリングを参照してください。
プレフィクス引数を指定すると、置換対象は単語単位に制限されます。
置換コマンドでのcase-sensitivity(大文字小文字の区別)とcharacter foldingについては、置換コマンドとLaxマッチを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
M-x replace-stringコマンドは、正確にマッチする単一の文字列を置換します。同様なコマンドM-x replace-regexpは、指定した正規表現パターン(正規表現の構文を参照してください)にマッチするすべてを置換します。
regexpにマッチするすべてをnewstringで置換します。
replace-regexp
では、newstringが定数である必要はありません。regexpにマッチした全体、または部分を参照することができます。newstringでの‘\&’は、置換されるマッチ全体を表します。newstringでの‘\d’(dは1から始まる数字)は、regexp内でカッコでグループ化されたものの、d番目にマッチします(これは“後方参照(back
reference)と呼ばれます”)。‘\#’は、このコマンドですでに置換された件数を10進数で参照します。最初の置換では‘\#’は‘0’で、2番目の置換では‘1’、...のようになります。たとえば、
M-x replace-regexp RET c[ad]+r RET \&-safe RET
これは‘cadr’を‘cadr-safe’に、‘cddr’を‘cddr-safe’に置き換えます。
M-x replace-regexp RET \(c[ad]+r\)-safe RET \1 RET
これは逆向きの置換をします。置換するテキストに‘\’を含めるときは、‘\\’と入力しなければなりません。
置換する文字列の一部を毎回手入力したいときは、置換文字列で‘\?’を使用します。すると置換ごとにミニバッファーで置換文字列を編集できます(ポイント位置は‘\?’を記述した場所です。)
このサブセクションの残りの部分は、Lispの知識が必要となる特別な処理を念頭に書かれています。大半の読者はスキップしても構いません。
置換文字列の一部を計算するために、Lisp式を使うことができます。これを行うには、置換文字列の中で、‘\,’に続けてLisp式を記述します。各置換において式の値が計算され、それをクォートされていない文字列に変換します(もし文字列の場合は、その文字列の内容が使われることを意味します)。そしてそれを置換文字列内で、式が記述された場所に使用します。もし式がシンボルのときは、シンボル名と、置換文字列中のシンボル名の後にあるの間に1つスペースは、両方シンボルの値に置換されます。
このような式の中では、いくつかの特別なシーケンスを使うことができます。式の中での‘\&’や‘\d’は、通常のようにマッチした文字列全体と、部分マッチした文字列を参照します。dには複数桁の数字を記述でき、カッコでグループ化されたd番目の正規表現がマッチしなかったとき、‘\d’はnil
になります。‘\#&’と‘\#d’を使って、それらのマッチを数字で参照することもできます(これはマッチまたは部分マッチが数字書式の場合に有効です)。ここでの‘\#’も、すでに置換された数を意味します。
たとえば‘x’と‘y’の入れ替えは、以下の方法で行うことができます:
M-x replace-regexp RET \(x\)\|y RET \,(if \1 "y" "x") RET
‘\,’により置換する文字列を計算するには、format
関数が便利なときがあります(Formatting
Strings in The Emacs Lisp Reference
Manualを参照してください)。たとえば73列目から80列目(もしそこに何もなければ)に、‘ABC00042’のような連番を振りたいときは、以下を使うことができます。
M-x replace-regexp RET ^.\{0,72\}$ RET \,(format "%-72sABC%05d" \& \#) RET
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このサブセクションではlaxマッチに関する置換コマンドの振る舞いと、それをカスタマイズする方法を説明します。一般的には、ほとんどの置換は、それと同等な検索コマンドに比べて、デフォルトではより厳密なマッチを行ないます。
インクリメンタル検索とは異なり、置換コマンドはデフォルトではlax space matching(緩いスペースマッチング)を行いません(lax space matchingを参照してください)。置換でlax space
matchingを有効にするには、変数replace-lax-whitespace
を非nil
に変更してください(これはEmacsが置換文字列ではなく、置換するテキストを検索する方法だけに影響を与えます)。
query-replace-regexp
がパターンを検索するときlax whitespace
matchingを使うかどうかを制御するのは、それに対応する変数replace-regexp-lax-whitespace
です。
置換コマンドの最初の引数がすべて小文字の場合、置換のための検索において大文字小文字の違いを無視します。これはcase-fold-search
とsearch-upper-case
がいずれも非nil
の場合です。search-upper-case
(search-upper-caseを参照)がnil
なら、検索が大文字小文字を無視するかどうかは、コマンドの1つ目の引数が小文字かどうかと無関係にcase-fold-search
単独で決定されます。case-fold-search
をnil
にセットすると、すべての検索において常に大文字小文字の違いが有効になります。
さらにnewstringのすべて、または一部が小文字の場合、置換コマンドは大文字小文字が出現するパターンを維持しようと試みます。したがって以下のコマンド、
M-x replace-string RET foo RET bar RET
は小文字の‘foo’を小文字の‘bar’で置換し、すべて大文字の‘FOO’を‘BAR’、そして最初が大文字の‘Foo’を‘Bar’に置換します。(これら3つの候補、すなわち小文字、すべて大文字、先頭が大文字は、replace-string
が認識できる唯一のパターンです)。
置換文字列に大文字が使われている場合、テキストが挿入されるときは、常に大文字のままとなります。大文字が最初の引数で使用されている場合、大文字小文字の変換なしで、2番目の引数に与えられたとおりに置換されます。同様にcase-replace
とcase-fold-search
の両方がnil
にセットされている場合、大文字小文字の変換なしで置換されます。
デフォルトでは置換コマンドは、置換するテキストを探すとき、character folding(character
foldingを参照してください)を使用しません。query-replace
とreplace-string
でのマッチングでcharacter
foldingを有効にするには、変数replace-char-fold
に非nil
値をセットします(このセッティングは、Emacsが置換するテキストを探す方法だけに影響し、置換するテキストには影響を与えません。また、replace-regexp
にも影響を与えません)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
任意のstringをnewstringで置換します。
regexpにたいする任意のマッチをnewstringで置換します。
‘foo’を‘bar’に置換するとき、すべてではなく、そのうちのいくつかだけを置換したいときは、M-%
(query-replace
)を使います。このコマンドは‘foo’を1つずつ検索して、それを置換するかを毎回尋ねます。この問い合わせを別とすれば、query-replace
はreplace-string
と同様に機能します(無条件の置換を参照してください)。通常のように、case-replace
が非nil
のときは、大文字小文字を区別します(置換コマンドとLaxマッチを参照してください)。数引数を指定すると、単語区切り文字で区切られた単語だけを考慮します。負のプレフィクス引数は後方に置換します。
C-M-%
(query-replace-regexp
)は、regexpの検索と置換を行います。これはquery-replace
のように問い合わせを行う以外は、replace-regexp
と同様に機能します。
これらのコマンドで行なった以前の置換を再利用できます。query-replace
やquery-replace-regexp
が検索文字列の入力を求めるプロンプトを表示しているとき、M-pとM-nを使用することにより、‘from
->
to’という形式で、以前の置換を表示できます。ここでfromは検索パターン、toはそれの置換、これらの間に表示されるセパレータは変数query-replace-from-to-separator
の値により決定されます。望む置換が表示されたら、RETとタイプしてそれを選択します。この変数の値がnil
の場合、置換はコマンドヒストリーに追加されず、再利用できません。
これらのコマンドは、カレントのマッチを、フェイスquery-replace
を使ってハイライトします。変数query-replace-highlight
をnil
にセットすることにより、このハイライトを無効にできます。他のマッチのハイライトにはインクリメンタル検索(インクリメンタル検索を参照してください)と同様に、フェイスlazy-highlight
が使われます。変数query-replace-lazy-highlight
をnil
にセットすることにより、このハイライトを無効にできます。デフォルトではquery-replace-regexp
は、カレントマッチを置換する展開後の文字列を、ミニバッファーに表示します。特別なシーケンス‘\&’および‘\n’を展開せずに維持するには、query-replace-show-replacement
変数をカスタマイズしてください。
変数query-replace-skip-read-only
に非nil
がセットされている場合、置換コマンドはread-only(読み取り専用)のテキスト内のマッチを無視します。デフォルトでは、それらを無視しません。
以下は文字列またはregexpにたいするマッチが表示されているときにタイプできる文字です:
マッチをnewstringで置き換えます。
カレントマッチを置換せずに次のマッチへスキップします。
カレントマッチを置換して、結果を表示します。そして次に何をするかを文字入力するよう促します。置換がすでに行われているので、この状況ではDELとSPCは等価で、どちらも次のマッチへ移動します。
ここでC-r(以下を参照)をタイプして、置換されたテキストを編集できます。
undo
コマンド(C-x
uとタイプする。Undo(取り消し)を参照されたい)で置換をアンドゥすることもできます。置換を取り消すこともできます。これはquery-replace
を終了させるので、さらに置換を行う場合は、C-x
ESC ESC RETで置換を再開しなければなりません(ミニバッファーでのコマンドの繰り返しを参照)。
これ以上の置換を行わずに終了します。
カレントマッチを置換してから、これ以上の検索を行わずに終了します。
これ以上の問い合わせをせずに、残りのマッチをすべて置換します。
前のマッチの位置に戻ります。これは間違えて変更したときや、再検証したい場合に使います。
最後の置換をアンドゥ(undo: 取り消し)して、その置換が行われた位置に戻ります。
すべての置換をアンドゥして、最初の置換が行われた位置に戻ります。
再帰編集レベル(recursive editing level)に入ります。これはマッチをnewstringで置換するだけでなく、編集したい場合に使用します。編集を終えたらC-M-cで再帰編集レベルを抜けて、次のマッチを処理します。再帰編集レベルを参照してください。
マッチを削除してから、C-rと同様に再帰編集レベルに入ります。これはstringを削除してから、テキストを挿入することにより置換を行う場合に使用します。編集を終えたらC-M-cで再帰編集レベルを抜けて、次のマッチを処理します。
置換文字列をミニバッファーで編集します。RETでミニバッファーを抜けると、カレントマッチをミニバッファーの内容で置換します。この新しい置換文字列は、残りのマッチにたいしても適用されます。
スクリーンを再描画します。その後でカレントマッチにたいして何を行うか、別の文字をタイプして指定しなければなりません。
複数バッファーの置換で、残りのバッファーの、残りのマッチをすべて置換します(これは選択したファイルにたいして問い合わせつきの置換を行う、DiredのQコマンドと似ています)。これはすべての一連の問い合わせにたいして、これ以上のユーザーとの対話なしに“yes”を答えます。
複数バッファーの置換で、カレントバッファーの残りのマッチを置換せずに、次のバッファーへスキップします。これはカレントバッファーのマッチにたいする問い合わせに“no”を答えて、次のバッファーへと処理を続けます。
上述したオプションの要約を表示します。その後でカレントマッチにたいして何を行うか、別の文字をタイプして指定しなければなりません。
これらのエイリアス文字以外の文字は、query-replace
を終了してから、キーシーケンスの残りの部分を読みとります。したがってC-kとタイプすると、query-replace
を終了してから、行末までをkillします。特に、C-gは単にquery-replace
をexitします。
一度終了したquery-replace
を再開するには、C-x ESC
ESCを使います。query-replace
は引数の読み取りにミニバッファーを使っているので、このキーシーケンスで再開させることができます。C-x ESC ESCを参照してください。
オプションsearch-invisible
は、query-replace
が非表示のテキストを扱う方法を決定します。Outline Searchを参照してください。
選択されたファイルにたいして問い合わせつきの置換を行う、DiredのQコマンドについては、ファイルにたいする操作を参照してください。regexpにマッチするファイル名にたいして、ファイル名の変更、ファイルのコピー、ファイルのリンクを行うDiredのコマンドについては、Diredでのファイル名の変更を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ここでは正規表現にたいするマッチを検索する、その他のコマンドを説明します。これらのコマンドは、パターンに大文字が含まれていないカ、case-fold-search
が非nil
のときは、マッチングで大文字小文字を区別しません。常にバッファー全体を検索するmulti-occur
とmulti-occur-in-matching-buffers
をのぞき、これらはすべて、ポイント位置からバッファーの最後まで、リージョンがアクティブなときはそのリージョンにたいして処理を行います。
1つ以上のバッファー名の入力を求め(RETで終了)、それらのバッファーにたいして複数バッファーのインクリメンタル検索を開始します(あるバッファーでの検索に失敗すると、次のC-sにより、指定された次のバッファーへと検索を試みます)。プレフィクス引数を指定すると、regexpの入力を求め、regexpにマッチするバッファーにたいして、複数バッファーでのインクリメンタル検索を開始します。
このコマンドはmulti-isearch-buffers
と同様ですが、インクリメンタルなregexp検索を行います。
1つ以上のファイル名の入力を求め(RETで終了)、それらのファイルにたいして複数ファイルのインクリメンタル検索を開始します(あるファイルで検索に失敗すると、次のC-sにより、指定された次のファイルへと検索を試みます)。プレフィクス引数を指定すると、regexpの入力を求め、regexpにマッチするファイルにたいして、複数ファイルでのインクリメンタル検索を開始します。
このコマンドはmulti-isearch-files
と同様ですが、インクリメンタルなregexp検索を行います。
バッファーローカルな変数multi-isearch-next-buffer-function
をセットするいくつかのモード(たとえばChange
Logモード)では、複数ファイルにたいするインクリメンタル検索は自動的にアクティブになります。
regexpの入力を求め、それへのマッチを含むバッファー内の各行をリスト表示します。プロンプトでM-nをタイプした場合は、前のインクリメンタル検索から検索文字列を再利用できます。マッチするテキストは、match
フェイスを使用してハイライトされます。数引数nを指定すると、そのコンテキストでマッチした各行の、前後n行を表示します。
コンテキスト行のデフォルト行数は、変数list-matching-lines-default-context-lines
により指定されます。list-matching-lines-jump-to-current-line
が非nil
のとき、カレント行はフェイスlist-matching-lines-current-line-face
でハイライト表示され、ポイントはその行の最初のマッチの後にセットされます。
インクリメンタル検索がアクティブのときはM-s oを実行して、カレントのサーチリングを使うこともできます。
あなたがタイプしたregexpにたいするマッチは完全な行を含むように拡張され、1つ前のマッチの終了の前から開始するマッチは考慮されないことに注意してください。
*Occur*バッファーでは、エントリーをクリックするか、ポイントをそこに移動してRETをタイプすることにより、検索されたバッファーの対応する位置をvisitします。oとC-oはマッチを他のウィンドウに表示します(C-oはそのウィンドウを選択しません)。かわりにM-g
M-n (next-error
)コマンドを使うことにより、マッチした場所を1つ1つvisitできます(Compilationモードを参照してください)。
*Occur*バッファーでeをタイプすることにより、Occur Editモードに切り替えます。このモードではエントリーにたいする編集結果が、元のバッファーのテキストに適用されます。C-c C-cとタイプすることにより、Occurモードに戻ります。
コマンドM-x list-matching-linesは、M-x occurの別名です。
このコマンドはoccur
と同じですが、複数のバッファーを検索する点が異なります。このコマンドは、1つずつバッファー名の入力を求めます。
このコマンドはmulti-occur
と似ていますが、visitしているファイル名にマッチする正規表現を指定することにより、検索するバッファーを指定する点が異なります。プレフィクス引数を指定すると、正規表現にマッチするバッファー名となります。
regexpの入力を求め、バッファーのポイント位置以降に、何個のマッチがあるか表示します。リージョンがアクティブのときは、リージョンにたいして操作を行います。
regexpの入力を求めて、ポイントの後のテキストでマッチを含む各行を削除します。コマンドの終了時には削除したマッチ行の行数をプリントします。
カレント行のポイント以降にマッチする文字列が含まれているときはカレント行を削除します。リージョンがアクティブのときはリージョンにたいして操作を行います。行の一部ににリージョンが含まれていて、さらにマッチの全体がリージョンに含まれているときには行は削除されます。
マッチが行をまたいでいる場合、flush-lines
はそれらの行すべてを削除します。このコマンドは行を削除してから、次のマッチを検索します。したがって、1行にマッチ全体と、次の行にまたがるマッチが両方含まれるとき、次の行にまたがるマッチは無視されます。
regexpの入力を求め、ポイント以降にあるテキストにたいして、マッチを含まない行を削除します。ポイントが行の先頭でない場合、このコマンドは常にカレント行を維持します。リージョンがアクティブのときは、リージョンにたいして操作を行います。このコマンドは一部がリージョンに含まれるだけの行は削除しません(行を終端する改行は、その行の一部と判断します)。
マッチが行をまたぐ場合、このコマンドはそれらすべての行を維持します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このセクションでは、他では説明されていない、その他の検索に関連した機能を説明します。
インクリメンタル検索にたいするデフォルトの検索モードは、変数search-default-mode
により指定されます。この変数には、nil
、t
、または関数を指定できます。nil
の場合、デフォルトのモードはcharacter
foldingなしのリテラル検索です。しかし、case
foldingにたいしてはcase-fold-search
、lax-whitespace
matchにたいしてはsearch-whitespace-regexp
により決定されます(検索中のLaxマッチングを参照してください)。値がt
の場合、インクリメンタル検索のデフォルトはregexp検索になります。デフォルト値には、case
foldingとlax-whitespace matchingだけを行なう関数が指定されています。
継続的なインクリメンタル検索でのカレントマッチは、isearch
フェイスでハイライトされます。変数search-highlight
をnil
にセットすることにより、このハイライトを無効にできます。
ディスプレーに表示されている、検索文字列にたいするその他のマッチは、lazy-highlight
フェイスを使用してハイライトされます。変数isearch-lazy-highlight
をセットして、このハイライトを無効にできます。以下はlazy-highlightをカスタマイズする、その他の変数です:
lazy-highlight-initial-delay
表示されているマッチをハイライトするまでwaitする秒数です。
lazy-highlight-interval
マッチをハイライトする秒数です。
lazy-highlight-max-at-a-time
入力をチェックする前にハイライトする、マッチの最大数です。大きな数を指定するとハイライトに時間を要するかもしれず、その間に検索を継続するためにC-sやC-rをタイプしても、それらすべてのマッチのハイライトを終了するまで、Emacsは反応しないでしょう。したがって小さな数を指定することにより、Emacsの反応を改善できます。
isearch-lazy-count
検索プロンプトにカレントマッチ数とマッチ総数を表示します。
lazy-count-prefix-format
lazy-count-suffix-format
これらの2つの変数はisearch-lazy-count
の表示にたいするカレントマッチ数とマッチ総数のフォーマットを決定します。
インクリメンタル検索で検索文字列が空のときにRETを入力すると、通常これは非インクリメンタル検索を開始します(実際には、これにより検索文字列の編集が開始され、次のRETで検索を行ないます)。しかし、変数search-nonincremental-instead
をnil
にセットした場合、検索文字列が空でも、RETのタイプは常にインクリメンタル検索をexitします。
デフォルトではインクリメンタル検索および問い合わせ付き置換コマンドは不可視のテキストにもマッチしますが、そのようなマッチは隠され、不可視のテキストの外にできるだけ早くカレントマッチを移動させます。変数isearch-hide-immediately
をnil
にカスタマイズした場合、マッチが見つかった任意の不可視テキストは、検索または置換コマンドがexitするまで表示され続けます。
遅い回線で接続されたリモートマシンのディスプレーなど、遅い端末でインクリメンタルな検索をすると、検索によりディスプレーの大きな範囲を再描画しなければならないことが、煩わしくなるかもしれません。Emacsは、遅い端末にたいして特別なディスプレーモードを提供します。これは検索が別の小さなウィンドウをポップアップして、マッチの周辺テキストをそのウィンドウに表示します。小さいウィンドウは早く表示できるので、遅いスピードの影響による煩わしさは軽減されます。変数search-slow-speed
は、Emacsがこのディスプレーモードを使用する、ボーレートの下限値を決定します。変数search-slow-window-lines
は、Emacsがポップアップして検索結果を表示するウィンドウの行数を制御します(デフォルトは1)。このウィンドウは通常、検索を開始したバッファーを表示するウィンドウの下部にポップアップされますが、search-slow-window-lines
の値が負の場合、ウィンドウは上部に配され、search-slow-window-lines
の絶対値が表示される行数になります。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このチャプターでは、編集中に間違いに気付いたときに便利なコマンドを説明します。これらのコマンドの中でもっとも基本的なのは、undoコマンドC-/です(これはC-x
uとC-_にもバインドされています)。これは1つのコマンドやコマンドの一部(query-replace
の場合など)、または連続するいくつかの文字の挿入を取り消します。連続してC-/を繰り返すと、前へ前へと変更を取り消し、undo情報が利用できる限界までさかのぼって、変更を取り消します。
ここで説明するコマンドとは別に、DEL
(delete-backward-char
)のような削除コマンドでもテキストを消去できます。これらのコマンドは、このマニュアルの前のチャプターで説明しています。テキストの消去を参照してください。
16.1 Undo(取り消し) | Undoコマンド。 | |
16.2 テキストの入れ替え | 2つの文字、単語、行、リスト、...の入れ替え。 | |
16.3 大文字小文字の変換 | 最後に入力した文字の大文字小文字を訂正する。 | |
16.4 スペルのチェックと訂正 | 単語またはファイル全体へのスペルチェッカーの適用。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
undo(取り消し)コマンドは、バッファーのテキストにたいする最後の変更を無効にします。バッファーはそれぞれ変更を個別に記録しており、undoコマンドは常にカレントバッファーに適用されます。バッファーのレコードにより、バッファーにたいするすべての変更をundoできます。通常、個々の変種コマンドは、undoレコードに個別のエントリーを作成しますが、query-replace
のようないくつかのコマンドは、undo操作に柔軟性をもたせるために、コマンドによる変更を複数のエントリーに分割します。連続した文字の挿入コマンドは、undo操作の冗長性をなくすために、通常1つのundoレコードにまとめられます。
カレントバッファーのundoレコードの、1エントリーでundoします(undo
)。
undoを開始するには、C-/(またはエイリアスのC-_かC-x u)をタイプします6。これは一番最近のバッファーにたいする変更を取り消して、バッファーが変更される前の位置にポイントを戻します。連続してC-/(またはそれのエイリアス)を繰り返すと、現在のバッファーにたいする変更を、前へ前へとさかのぼって取り消します。すでに記録されている変更がすべて取り消されているとき、undoコマンドはエラーをシグナルします。
undo以外のコマンドは、undoコマンドの順序性を損ないます。undo以外のコマンドを開始した時点から、undoしてきた一連のundoコマンド全体が、undoレコードとして記録されます。したがってundoした変更を再適用するには、undoの順序性を損なわないようなC-fのようなコマンドをタイプしてから、C-/を1回以上タイプして、undoコマンドをundoしていきます。
以前のundoコマンドを再実行せずにundoを再開したいときは、かわりにM-x
undo-onlyを使います。これはundo
と同様ですが、すでにundoした変更を再実行しません。
バッファーをうっかり変更してしまったのに気付いたら、モードラインのアスタリスクが表示されなくなるまでC-/を繰り返しタイプするのが、もっとも簡単な復旧方法です。undoコマンドによりモードラインのアスタリスクが消えたとき、それはバッファーの内容がファイルを最後に読み込んだとき、または保存したときと同じ内容だということを意味します。バッファーを意図して変更したか覚えていないときは、C-/を1回タイプします。最後の変更がundoされたのを確認して、それが意図した変更なのか確かめます。もしそれが意図しない変更だったならundoしたままにします。意図した変更だった場合、上で説明した方法で変更を再実行します。
かわりにM-x revert-bufferを使用して、そのバッファーが最後にvisitされたとき、または最後に保存されたとき以降のすべての変更を破棄できます(バッファーのリバートを参照)。
アクティブなリージョンがあるとき、undo
は選択的なundo(selective
undo)を行います。これはバッファー全体ではなく、リージョンにたいして一番最近の変更をundoします。しかしTransient
Markモードがオフのとき(Transient Markモードを無効にするを参照してください)、C-/は、リージョンではなく、常にバッファー全体を操作します。この場合undo
コマンドにプレフィクス引数を指定(C-u
C-/)することにより、選択的なundoができます。同じリージョンにたいしてさらに変更をundoしたいときは、undo
コマンドを繰り返します(プレフィクス引数は必要ありません)。
undoレコードを作らない、特別なバッファーがいくつかあります。それは名前がスペースで始まるバッファーです。これらのバッファーはEmacsにより内部的に使用されており、通常ユーザーが閲覧したり編集しないテキストを保持します。
バッファーにたいするundo情報が大きくなりすぎたとき、Emacsは一番古いレコードを、時々(ガベージコレクション(garbage
collection)の間)廃棄します。変数undo-limit
、undo-strong-limit
、undo-outer-limit
をセットすることにより、どれだけのundo情報を保持するか指定することができます。これらの値はバイト数で指定します。
変数undo-limit
は、ソフトリミットをセットします。Emacsはこのサイズに達するまでのコマンドのundoデータを保持します。制限を超えることもあり得ますが、これを超える古いデータは保持しません。デフォルト値は160000です。変数undo-strong-limit
は、厳密なリミット(stricter
limit)をセットします。この制限を超えるような以前のコマンド(一番最近のコマンドではない)は記憶されません。undo-strong-limit
のデフォルト値は240000です。
これらの変数の値にかかわらず、一番最近の変更はundo情報がundo-outer-limit
(通常は24,000,000)より大きくならない限り、廃棄されることはありません。もしこれを超えるような場合、Emacsはundoデータを廃棄して、それにたいする警告を発します。これは一番最近のコマンドをundoできない唯一の状況です。これが発生した場合、将来同じことが起こらないようにundo-outer-limit
の値を増やすことができます。しかしコマンドがそのような大きなundoデータを作るとは考えられない場合、それは多分バグなので、それを報告すべきです。Reporting Bugsを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
2つの文字を入れ替えます(transpose-chars
)。
2つの単語を入れ替えます(transpose-words
)。
バランスのとれた2つの式を入れ替えます(transpose-sexps
)。
2つの行を入れ替えます(transpose-lines
)。
2つのセンテンスを入れ替えます(transpose-sentences
)。
2つのパラグラフを入れ替えます(transpose-paragraphs
)。
2つのリージョンを入れ替えます。
2つの文字を入れ違いに入力してしまう間違いはよくありますが、それらが隣接しているときはC-t(transpose-chars
)コマンドで訂正できます。通常C-tはポイントの左右にある文字を入れ替えます。行末でこのコマンドを使う場合、最後の文字と改行を入れ替えるのはおそらく無意味なので、C-tは行末の2文字を入れ替えます。このような入れ違いミスにすぐ気付いたときは、C-tだけで訂正できます。すぐに間違いに気付かなかった場合、C-tをタイプする前に、入れ替えて入力してしまった文字の間にカーソルを移動しなければなりません。単語の最後の文字とスペースを入れ替えて入力してしまった場合、そこに戻るには単語移動コマンド(M-f、M-bなど)が良い方法です。それ以外では、逆向きの検索(C-r)が最善な方法の場合があります。検索と置換を参照してください。
M-tは、ポイントの前にある単語と、後にある単語を入れ替えます(transpose-words
)。このコマンドはポイントより後方、またはポイントがある単語を前方に移動して、ポイントをその後に移動します。文字の間にある区切り文字は移動しません。たとえば‘FOO, BAR’は、‘BAR FOO,’ではなく、‘BAR, FOO’に入れ替わります。
C-M-t
(transpose-sexps
)も似ていますが、これは2つの式(対応が取れたカッコの式を参照してください)、C-x
C-t (transpose-lines
)は行を入れ替えます。M-x
transpose-sentencesとM-x
transpose-paragraphsはそれぞれセンテンスとパラグラフを入れ替えます。これらのコマンドはM-tと同様に動作しますが、入れ替えを行うテキスト単位が異なります。
入れ替えコマンドに数引数を指定すると、反復回数になります。これは入れ替えコマンドに、ポイントより前(またはポイントがある)の移動させる文字(または単語、式、行)を、何文字(または単語、式、行)後に移動させるか指示します。たとえばC-u 3 C-tは、ポイントの前にある文字を3文字後ろに移動します。つまり‘f∗oobar’は‘oobf∗ar’に変更されます。これはC-tを3回繰り返したのと同じですC-u - 4 M-tはポイントの前にある単語を、後方に単語4つ分移動します。C-u - C-M-tは、引数を指定しないC-M-tの効果を取り消します。
数引数0には特別な意味が割り当てられています(繰り返し回数としては、0に意味がありません)。これはポイントの後ろで終わる文字(または単語、式、行)を、マーク位置で終わる文字(または単語、式、行)と入れ替えます。
M-x transpose-regionsはポイントとマークの間のテキストを、マークリングに最後にpushされた2つのマークの間のテキストと入れ替えます(マークのセットを参照)。プレフィクス数引数を与えるとポイントとマークの間のテキストを、その個数分マークリングを戻ってから連続する2つのマークの間のテキストと入れ替えます。このコマンドは複数の文字(や単語、センテンス、パラグラフ)を一度に行うために最適です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
最後に入力した単語を小文字に変換します。Meta--はメタとマイナスであることに注意して下さい。
最後に入力した単語をすべて大文字に変換します。
最後に入力した単語の先頭を大文字、それ以外を小文字に変換します。
単語の大文字小文字を間違えてタイプするのは、とても一般的な間違えです。そのため、単語の大文字小文字の変換コマンドM-l、M-u、M-cに負の数引数を指定すると、カーソルを移動しないという特性があります。最後に入力した単語のタイプミスに気付いたら、単に大文字小文字を変換して、タイプを続けることができます。大文字小文字変換コマンドを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このセクションでは、1つの単語、またはバッファーの一部のスペルをチェックするコマンドを説明します。これらのコマンドはHunspell、Aspell、Ispell、またはEnchantのうちのいずれかのスペルチェッカープログラムがインストールされている場合だけ機能します。これらのプログラムはEmacsの一部ではありませんが、GNU/Linuxまたは他のフリーなオペレーティングシステムには、通常1つはインストールされています。 Aspell in The Aspell Manualを参照してください。
ポイントがある単語スペルの、チェックと訂正をします(ispell-word
)。リージョンがアクティブのときは、リージョンに含まれるすべての単語にたいして行います。
バッファーにある単語スペルの、チェックと訂正をします。リージョンがアクティブのときは、リージョンに含まれるすべての単語にたいして行います。
バッファーにある単語スペルの、チェックと訂正をします。
リージョンにある単語スペルの、チェックと訂正をします。
メールメッセージのドラフト(引用部分を除く)にたいして、単語スペルのチェックと訂正をします。
スペルチェッカーのプロセスを再起動して、dictを辞書として使用させます。
スペルチェッカーのサブプロセスをkillします。
ポイントの前にある単語を、スペル辞書をもとに補完します(ispell-complete-word
)。
スペルミスした単語をハイライトする、Flyspellモードを有効にします。
コメントと文字列にたいして、Flyspellモードを有効にします。
ポイントの前または周囲にある単語スペルをチェックしたり訂正するには、M-$
(ispell-word
)をタイプします。リージョンがアクティブのときは、リージョン内のすべての単語スペルをチェックします。マークとリージョンを参照してください(Transient
Markモードがオフのとき、M-$はリージョンを無視して、常にポイントの前または周囲の単語にたいして動作します。Transient Markモードを無効にするを参照してください)。
同様に、コマンドM-x ispellはリージョンがアクティブのときはリージョン、それ以外のときはバッファー全体にたいして、スペルチェックを行います。コマンドM-x ispell-bufferおよびM-x ispell-regionは、スペルチェックをバッファー全体にたいして行うのか、リージョンにたいして行うかを明示します。このコマンドはバッファー全体をチェックしますが、インデントされているテキストと、以前のメッセージの引用と思われるテキストはチェックしません。メールの送信を参照してください。
これらのコマンドは、正しくないと思われる単語に出会うと、それをどうするかを尋ねます。通常は番号が振られた近い単語(near-misses: 正しくないと思われる単語に似た単語)のリストを表示します。これにたいして1文字をタイプして応答しなければなりません。以下は有効な応答文字です。
今回だけは近い単語の一覧で単語を置き換えます。近い単語には番号が振られており、選択するにはその番号をタイプします。
その単語を間違いと判断することは変更しませんが、その単語をここでは変更せずスキップします。
今回は単語をnewで置き換えます(置換文字列にスペルエラーがないか再スキャンされます)。
単語をnewで置き換え、query-replace
を実行します。これによりバッファーの他の箇所の間違えを置換できます(置換にスペルエラーがないか再スキャンされます)。
正しくないと思われる単語を正しいものとして受け入れますが、それは今回の編集セッションに限られます。
正しくないと思われる単語を正しいものとして受け入れますが、それは今回の編集セッションとそのバッファーに限られます。
この単語をプライベートな辞書ファイルに挿入するので、今後(将来のセッションを含めて)はその単語を正しいと認識します。
iと同様ですが、辞書の補完情報も指定できます。
この単語の小文字バージョンを、プライベートな辞書ファイルに挿入します。
wordにマッチする単語を辞書から探します。これらの単語は近い単語の新しいリストになるので、置換で数字をタイプして選択できるようになります。wordにはワイルドカードとして‘*’を使うことができます。
対話的なスペルチェックを終了します(ポイントはチェックされた単語の位置に残されます)。C-u M-$でチェックを再開できます。
対話的なスペルチェックを終了します(ポイントはチェックを開始したときの位置に戻ります)。
対話的なスペルチェックを終了して、スペルチェッカーのサブプロセスをkillします。
オプションの一覧を表示します。
Textモードおよびそれに関連するモードでは、M-TAB
(ispell-complete-word
)で、スペル訂正にもとづくバッファー内補完を行います。単語の最初の部分を入力してからM-TABをタイプすると、補完一覧が表示されます(ウィンドウマネージャーがM-TABを横取りしてしまう場合は、ESC TABまたはC-M-iをタイプします)。補完対象には番号か文字が振られているので、その番号か文字をタイプして選択します。
1度プロセスが開始されれば、スペルチェッカーのサブプロセスは待機状態で実行を続けるので、一連のスペルチェックコマンドは素早く完了します。プロセスを終了させたいときはM-x ispell-kill-ispellを使います。スペルの訂正を行うとき以外プロセスがCPU時間を使うことはないので、これは通常必要ありません。
スペルチェッカーは、スペルを2つの辞書から探します。それは標準辞書と個人用辞書です。標準辞書は変数ispell-local-dictionary
で指定されます。これがnil
のときは、変数ispell-dictionary
で指定されます。両方がnil
のとき、スペルプログラムは既定の辞書を使います。コマンドM-x ispell-change-dictionaryは、バッファーにたいする標準辞書をセットしてからサブプロセスを再起動することにより、これにより異なる標準辞書を使うことができます。個人用の辞書は、変数ispell-personal-dictionary
で指定します。これがnil
のとき、スペルプログラムは個人辞書を、各スペルチェッカーが指定する既定の場所から探します。
単語の補完には別の辞書が使われます。変数ispell-complete-word-dict
は、この辞書のファイル名を指定します。補完辞書は、単語の変化形を検知するためにスペルチェックが使用する、単語にたいするroot語(接辞を含まない語)とaffix語(接辞語)に関する情報を使用できないので、、別の辞書でなければなりません。補完辞書はもたないが、スペルチェック辞書はあもつ言語もいくつかあります。
Flyspellモードは、タイプしたテキストのスペルをタイプ時に自動的にチェックするマイナーモードです。認識できない単語を見つけると、その単語をハイライトします。M-x flyspell-modeとタイプすると、カレントバッファーのFlyspellモードを切り替えます。すべてのTextバッファーでFlyspellモードを有効にするには、text-mode-hook
に、flyspell-mode
を追加します。フックを参照してください。Flyspellモードは、ユーザーの移動にしたがって各単語をチェックする必要があるので、カーソル移動やスクロールコマンドにより速度低下するかもしれないことに注意してください。タイプしていないテキストや移動と関係ないテキストの自動チェックも行いません。それを行うためには、flyspell-region
やflyspell-buffer
を使用してください。
Flyspellモードが間違ったスペルの単語をハイライトしているとき、それをmouse-2
(flyspell-correct-word
)でクリックして、可能な定性とアクションを表示するメニューを表示できます。加えてC-.、またはESC-TAB
(flyspell-auto-correct-word
)はポイント位置の単語にたいする可能な訂正を提案し、C-c $
(flyspell-correct-word-before-point
)は可能な訂正のメニューをポップアップします。もちろん、間違ったスペルの単語を、常にお好みの方法で手修正できます。
Flyspell
Progモードは通常のFlyspellモードと同じように機能しますが、コメントと文字列に含まれた単語だけをチェックします。この機能はプログラムを編集する場合に便利です。M-x flyspell-prog-modeをタイプして、現在のバッファーにたいするこのモードの有効と無効を切り替えます。すべてのプログラミングに関連したモードでこのモードを有効にするには、prog-mode-hook
にflyspell-prog-mode
を追加します(フックを参照してください)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このチャプターでは一連の編集コマンドを記録して、後で簡単に繰り返す方法を説明します。
キーボードマクロ(keyboard macro)とは、Emacsのユーザーにより定義される、一連のキー入力からなるコマンドです。たとえばC-n M-d C-dを40回繰り返しタイプしていることに気付いたとしましょう。C-n M-d C-dを行うキーボードマクロを定義して、それを39回以上繰り返すことにより、作業スピードをあげることができます。
キーボードマクロは、コマンドを実行・記録することにより定義します。違う言い方をすると、キーボードマクロの定義では、初回はマクロの定義が実行されるということです。この方法により、頭だけで考えるのではなく、コマンドの影響を目で見ることができます。コマンド列の入力を終了して定義を終了するときは、キーボードマクロが定義されるとともに、入力したコマンド列の影響としてマクロが1回実行されたことになります。その後はマクロを呼び出すことにより、コマンド列全体を実行することができます。
キーボードマクロは、LispではなくEmacsコマンド言語(Emacs command language)で記述されている点が、通常のEmacsコマンドと異なります。しかしEmacsコマンド言語は、高度なことや一般的なことを記述するプログラム言語として、充分にパワフルとはいえません。そのような事項には、Lispを使わなければなりません。
17.1 基本的な使い方 | キーボードマクロの定義と実行。 | |
17.2 キーボードマクロリング | 以前のキーボードマクロが保存される場所。 | |
17.3 キーボードマクロカウンター | マクロに増加する番号を挿入する。 | |
17.4 変化のあるマクロの実行 | 毎回違うことを行うマクロの作成。 | |
17.5 キーボードマクロの命名と保存 | キーボードマクロの命名とファイルへの保存。 | |
17.6 キーボードマクロの編集 | キーボードマクロを編集するには。 | |
17.7 キーボードマクロのステップ編集 | キーボードマクロのインタラクティブな実行と編集。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
キーボードマクロの定義を開始します(kmacro-start-macro-or-insert-counter
)。
キーボードマクロを定義しているときは定義を終了します。それ以外の場合は一番最近のキーボードマクロを実行します(kmacro-end-or-call-macro
)。
最後のキーボードマクロを再実行してから、キーをマクロ定義に追加します。
最後のキーボードマクロを再実行せずに、キーをマクロ定義に追加します。
リージョンの中の各行の行頭にたいして、最後のキーボードマクロを実行します(apply-macro-to-region-lines
)。
(旧スタイル)キーボードマクロの定義を開始します(kmacro-start-macro
)。プレフィクスキーを与えると最後のマクロにキーを追加します。
(旧スタイル)マクロ定義を終了します(kmacro-end-macro
)。プレフィクス引数はそのマクロ自体を除外した繰り返し回数として機能します。
もっとも最後に定義したキーボードマクロを実行します(kmacro-end-and-call-macro
)。プレフィクス引数は繰り返し回数として機能します。
キーボードマクロの定義を開始するには、F3をタイプします。それからはキーを入力して実行を続けますが、それは同時にマクロ定義の一部になります。その間は、モードラインに‘Def’が表示されて、マクロの定義中であることを示します。終了するときはF4
(kmacro-end-or-call-macro
)をタイプして、定義を終了します。たとえば、
F3 M-f foo F4
これは1単語前方に移動してから、‘foo’を挿入するマクロを定義します。F3とF4は、マクロの一部とはならないことに注意してください。
マクロを定義した後は、F4でそれを呼び出すことができます。上記の例では、それはM-f foo againをタイプしたのと同じ効果をもちます(F4コマンドの2つの役割に注意してください。これはマクロを定義しているときはマクロの定義を終了し、そうでないときは最後のマクロを呼び出します)。F4に数引数‘n’を与えることもできます。これはマクロを‘n’回呼び出すことを意味します。引数に0を与えると、エラーになるか、C-g(MS-DOSではC-BREAK)をタイプするまで、マクロを永久に繰り返します。
上記の例は、キーボードマクロを使った便利なトリックをデモンストレイトする例です。テキストの一定間隔の位置にたいして繰り返し操作を行いたいときは、マクロの一部に移動コマンドを含めます。この例ではマクロの繰り返しにより、連続する単語の後ろに文字列‘foo’を挿入していきます。
キーボードマクロの定義を終了した後でも、C-u
F3をタイプすることにより、マクロの定義にキーストロークを追加できます。これはF3に続けてマクロの定義を再タイプするのと同じです。結果として、そのマクロの以前の定義が再実行されることになります。変数kmacro-execute-before-append
をnil
に変更すると、既存のマクロにキーストロークが追加されるまでは実行されません(デフォルトはt
)。最後に実行したキーボードマクロを再実行することなく、定義の最後にキーストロークを追加するには、C-u
C-u F3をタイプしてください。
コマンドがミニバッファーから引数を読みとる場合、ミニバッファーにたいする入力は、コマンドと一緒にマクロの一部となります。したがってマクロを再生すると、そのコマンドの引数は入力されたのと同じになります。たとえば、
F3 C-a C-k C-x b foo RET C-y C-x b RET F4
これはカレント行をkillして、バッファー‘foo’にそれをyankした後、元のバッファーに戻ります。
ほとんどのキーボードコマンドは、キーボードマクロの定義で普通に機能しますが、いくつか例外があります。C-g
(keyboard-quit
)をタイプすると、キーボードマクロの定義が終了します。C-M-c
(exit-recursive-edit
)は信頼できません。これはマクロの中で再帰編集(recursive
edit)を開始したときは期待通りに再帰編集から抜け出しますが、キーボードマクロの呼び出し前に開始された再帰編集を抜け出すには、キーボードマクロからも抜け出す必要があります。同様に、マウスイベントもキーボードマクロで使用できますが。信頼はできません。マクロによりマウスイベントが再生されるときは、マクロを定義したときのマウス位置が使用されます。この効果は予測が困難です。
コマンドC-x C-k r
(apply-macro-to-region-lines
)は、リージョン内の各行のにたいして、最後に定義されたキーボードマクロを繰り返します。これは1行ずつポイントをリージョン内の行頭に移動してからマクロを実行します。
上記で説明したF3とF4に加えて、Emacsはキーボードマクロを定義したり実行するための、古いキーバインドもサポートします。F3と同様にマクロ定義を開始するには、C-x
(
(kmacro-start-macro
)とタイプします。プレフィクス引数を指定すると、最後のキーボードマクロの定義に追加します。マクロ定義を終了するにはC-x
) (kmacro-end-macro
)とタイプします。一番最近のマクロを実行するには、C-x e
(kmacro-end-and-call-macro
)とタイプします。マクロ定義中にC-x
eを入力すると、マクロ定義を終了してからすぐに実行されます。C-x
eをタイプした後すぐにeをタイプすることにより、そのマクロを1回以上繰り返すことができます。(マクロの実行に使用されるときの)F4と同様、C-x
eには繰り返し回数を引数指定できます。
C-x )に、繰り返し回数を引数として与えることができます。これはマクロを定義した後、すぐにマクロが繰り返されることを意味します。マクロの定義は、定義することによりマクロが実行されるので、最初の1回として数えられます。したがってC-u 4 C-x )は、マクロを3回すぐに追加実行します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
すべての定義されたキーボードマクロは、キーボードマクロリング(keyboard macro ring)に記録されます。キーボードマクロリングはすべてのバッファーで共有され、1つだけしかありません。
リングの先頭にあるキーボードマクロを実行します(kmacro-end-or-call-macro-repeat
)。
キーボードマクロリングを、次のマクロ(古く定義されたもの)にローテートします(kmacro-cycle-ring-next
)。
キーボードマクロリングを前のマクロ(新しく定義されたもの)にローテートします(kmacro-cycle-ring-previous
)。
キーボードマクロリングを操作するすべてのコマンドは、同じC-x C-kを使います。これらのコマンドでは、すぐ後にコマンドを実行して繰り返す場合には、互いにC-x C-kプレフィクスを必要としません。たとえば、
C-x C-k C-p C-p C-k C-k C-k C-n C-n C-k C-p C-k C-d
これは、キーボードマクロリングを2つ前のマクロが先頭にくるようにローテートして、3回実行します。次にキーボードマクロリングをローテートして、元は先頭だったマクロを先頭に戻して1回実行します。次にキーボードマクロリングを1つ前のマクロが先頭にくるようにローテートして、それを実行します。そして最後にそれを削除しています。
コマンドC-x C-k C-k
(kmacro-end-or-call-macro-repeat
)は、マクロリングの先頭にあるキーボードマクロを実行します。もう一度すぐにC-kをタイプすると、マクロを繰り返すことができます。すぐにC-nかC-pをタイプすれば、マクロリングをローテートすることができます。
キーボードマクロを定義しているとき、C-x C-k C-kはF4と同様に振る舞いますが、すぐ後にタイプされた場合は異なります。このセクションで説明するほとんどのキーバインドは、C-x C-kプレフィクスが必要ない場合があります。たとえば、すぐにC-kをタイプした場合は、マクロを再実行します。
コマンドC-x C-k C-n (kmacro-cycle-ring-next
)およびC-x C-k C-p
(kmacro-cycle-ring-previous
)は、マクロリングをローテートして、次または前のキーボードマクロをリングの先頭に移動させます。新しく先頭となったマクロの定義は、エコーエリアに表示されます。お望みのマクロが先頭にくるまで、すぐにC-nまたはC-pを繰り返しタイプすれば、マクロリングのローテートを続けることができます。新しくマクロリングの先頭にきたマクロを実行するには、単にC-kをタイプします。
Emacsはマクロリングの先頭を、最後に定義されたキーボードマクロとして扱います。たとえば、そのマクロはF4で実行でき、C-x C-k nで名前をつけることができます。
キーボードマクロリングに格納できるマクロの最大数は、カスタマイズ可能な変数kmacro-ring-max
により決定されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
キーボードマクロには、それぞれカウンターが割り当てられています。これはマクロの定義を開始したとき0に初期化されます。このカレントカウンター(current counter)の数値をバッファーに挿入することもできます。カレントカウンターの数値は、マクロが呼び出された回数にもとづきます。バッファーにカウンターの値が挿入される度に通常、カウンターは増加します。
カレントカウンターに加えて、前回カレントカウンターが増加またはセットされたときにもっていた値を記録する、前回カウンター(previous counter)も保守します。C-u 0 C-x C-k C-iにより増分値0でカレントカウンターを増加させると、カレントカウンターの値も前回カウンターの値として記録されることに注意してください。
キーボードマクロの定義では、キーボードマクロカウンターの値をバッファーに挿入します(kmacro-start-macro-or-insert-counter
)。
キーボードマクロカウンターの値をバッファーに挿入します(kmacro-insert-counter
)。
キーボードマクロカウンターをセットします(kmacro-set-counter
)。
プレフィクス引数をキーボードマクロカウンターに加えます(kmacro-add-counter
)。
挿入するキーボードマクロカウンターの書式を指定します(kmacro-set-format
)。
キーボードマクロを定義しているとき、コマンドF3
(kmacro-start-macro-or-insert-counter
)は、キーボードマクロカウンターの現在の値をバッファーに挿入して、カウンターを1増加させます(マクロを定義していないとき、F3はマクロの定義を開始します。基本的な使い方を参照してください)。異なる増分の指定には、数引数を使うことができます。単にプレフィクスC-uを指定すると、前回カウンターの値を挿入して、カレントカウンターの値は変化しません。
例として数字が振られたリストを構築するために、キーボードマクロカウンターを使う方法を見てみましょう。以下のキーシーケンスを考えてください:
F3 C-a F3 . SPC F4
マクロ定義の一部として、現在の行の先頭に文字列‘0. ’が挿入されます。バッファーの他の箇所でF4でマクロを呼び出すと、その行の先頭に文字列‘1. ’が挿入されます。その後に呼び出すと‘2. ’、‘3. ’、...が挿入されます。
コマンドC-x C-k C-i
(kmacro-insert-counter
)は、F3と同様のことを行いますが、これはキーボードマクロの定義外でも使用できます。キーボードマクロが定義中でなく実行もされていない場合、これはキーボードマクロリングの先頭にあるマクロのカウンター値を挿入および増加します。
コマンドC-x C-k C-c
(kmacro-set-counter
)は現在のマクロカウンターを、数引数の値にセットします。マクロ内で使用した場合、マクロ実行ごとに処理します。プレフィクス引数に単にC-uを指定した場合、マクロの現在の繰り返し実行おいて、カウンターが最初にもっていた値に、カウンターをリセットします(この繰り返しにおける増加を取り消します)。
コマンドC-x C-k C-a
(kmacro-add-counter
)は、プレフィクス引数を現在のマクロカウンターに加えます。単にC-uを引数に指定すると、任意のキーボードマクロにより最後に挿入された値に、カウンターをリセットします(通常これを使うときは、最後の挿入は同じマクロによる同じカウンターです)。
コマンドC-x C-k C-f
(kmacro-set-format
)は、マクロカウンターを挿入するときに使われる書式の入力を求めます。デフォルトの書式は‘%d’で、これはパディングなしの10進数字が挿入されることを意味します。ミニバッファーに何も入力せずにexitすることにより、このデフォルト書式にリセットできます。format
関数(この関数はさらに1つの整数の引数をとります)が受け入れる書式文字列を指定できます(Formatting
Strings in The Emacs Lisp Reference
Manualを参照してください)。ミニバッファーに書式文字列を入力するときは、書式文字列をダブルクォーテーションで括らないでください。
キーボードマクロの定義および実行がされていないときにこのコマンドを使うと、新しい書式はそれ以降のマクロ定義すべてに影響を及ぼします。既存のマクロは、それが定義されたときの書式を使いつづけます。キーボードマクロ定義中に書式をセットすると、そのマクロが定義されている箇所に影響を及ぼしますが、それ以降のマクロには影響を与えません。マクロの実行においては、そのマクロ定義の時点の書式が使われます。マクロの実行中にマクロ書式を変更すると、これは定義中における書式の変更と同様、それ以降のマクロに影響を与えません。
C-x C-k C-fによりセットされた書式は、レジスターに格納された数字の挿入には影響しません。
マクロの繰り返しにおいてレジスターを増加してカウンターとして使う場合、これはキーボードマクロカウンターと同じことです。レジスターに数字を保存するを参照してください。大抵の用途では、キーボードマクロカウンターを使う方が単純です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
キーボードマクロで、query-replace
のように変更を行うか応答を求める効果を作ることができます。
マクロ実行中にこの箇所に到達すると確認を求めます(kbd-macro-query
)。
マクロ定義中に問い合わせを行いたい箇所でC-x qをタイプします。マクロ定義中はC-x qは何も行いませんが、後でマクロを実行するとC-x qは実行を続けるか対話的に確認を求めます。
以下はC-x qにたいする有効な応答です:
キーボードマクロの実行を続けます。
マクロのこの繰り返しでの残りの部分をスキップして、次の繰り返しを開始します。
マクロのこの繰り返しでの残りの部分をスキップして、これ以上の繰り返しを取り消します。
マクロの一部ではない編集を行うことができる、再帰編集レベル(recursive editing level)に入ります。C-M-cを使って再帰編集を抜けると、キーボードマクロを続行するか再び確認を求められます。ここでSPCをタイプすると、マクロ定義の残りの部分が実行されます。マクロの残りの部分が期待したように動作するためにポイントとテキストを残すのは、ユーザーの責任です。
C-x qにプレフィクス引数を指定したC-u C-x qは、完全に異なる関数を実行します。これはマクロ定義中およびマクロ実行中の両方で、キーボード入力を読みとる再帰編集に入ります。定義中のときは、再帰編集の中で行った編集はマクロの一部とはなりません。マクロ実行中は、再帰編集により各繰り返しにおいて特別な編集を行う機会が与えられます。再帰編集レベルを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
一番最近定義したキーボードマクロに、名前(持続期間はEmacsセッション中)を与えます(kmacro-name-last-macro
)。
一番最近定義したキーボードマクロを、キーにバインド(持続期間はEmacsセッション中)します(kmacro-bind-to-key
)。
キーボードマクロの定義を、Lispコードとしてバッファーに挿入します。
キーボードマクロを後で使うために保存するには、C-x C-k n
(kmacro-name-last-macro
)を使って、それに名前を与えることができます。これはミニバッファーを使って名前を引数として読み取り、最後のキーボードマクロの現在の定義を実行するための、名前を定義します(後でこのマクロの定義を追加した場合、その名前のマクロ定義は変更されません)。マクロ名はLispシンボルで、M-xで呼び出せ、global-set-key
でキーにバインドできる有効な名前をつけます。キーボードマクロ以外に定義されている名前を指定すると、エラーメッセージが表示され何も変更はされません。
C-x C-k b
(kmacro-bind-to-key
)の後に、バインドしたいキーシーケンスを続けることにより、最後のキーボードマクロ(の現在の定義)をキーにバインドすることもできます。グローバルキーマップ(global
keymap)の任意のキーシーケンスにバインドできますが、大部分のキーシーケンスはすでに他のバインドをもっているので、キーシーケンスの選択は慎重に行う必要があります。任意のキーマップで既存のバインドをもつキーシーケンスにバインドしようとすると、既存のバインドを置き換える前に確認を求めます。
既存のバインドの上書きに起因する問題を避けるには、キーシーケンスC-x C-k 0からC-x C-k 9と、C-x C-k AからC-x C-k Zを使います。これらのキーシーケンスは、キーボードマクロのバインド用に予約されています。これらのキーシーケンスにバインドするには、キーシーケンス全体ではなく数字か文字だけをタイプすればバインドできます。たとえば、
C-x C-k b 4
これは最後のキーボードマクロをキーシーケンスC-x C-k 4にバインドします。
1度マクロにコマンド名をつければ、その定義をファイルに保存できます。それは他の編集セッションでも使用できます。最初に定義を保存したいファイルをvisitします。次に以下のコマンドを使います:
M-x insert-kbd-macro RET macroname RET
これは後で実行するとき、今と同じ定義のマクロとなるLispコードをバッファーに挿入します(これを行うためにLispコードを理解する必要はありません。なぜならあなたのかわりにinsert-kbd-macro
がLispコードを記述するからです)。それからファイルを保存します。後でそのファイルをload-file
(EmacsのためのLispコードによるライブラリーを参照してください)でロードできます。initファイル~/.emacs (Emacs初期化ファイルを参照してください)に保存すれば、そのマクロはEmacsを実行する度に定義されます。
insert-kbd-macro
にプレフィクス引数を与えると、(もしあれば)macronameにバインドしたキーを記録するためのLispコードが追加されるので、ファイルをロードしたとき同じキーにマクロが割り当てられます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
最後に定義されたキーボードマクロを編集します(kmacro-edit-macro
)。
以前に定義されたキーボードマクロnameを編集します(edit-kbd-macro
)。
過去300回分のキーストロークを、キーボードマクロとして編集します(kmacro-edit-lossage
)。
C-x C-k C-eまたはC-x C-k RET
(kmacro-edit-macro
)をとタイプして、最後のキーボードマクロを編集できます。これはマクロ定義をバッファーに整形出力して、それを編集するために特化したモードに入ります。そのバッファーでC-h
mをタイプすると、マクロを編集する方法の詳細が表示されます。編集を終了するにはC-c C-cをタイプしてください。
名前をつけたキーボードマクロ、またはキーにバインドしたマクロは、C-x C-k e
(edit-kbd-macro
)とタイプして編集できます。このコマンドに続けてそのマクロを呼び出すときのキー入力(C-x
e、M-x name、またはその他のキーシーケンス)を入力します。
C-x C-k l
(kmacro-edit-lossage
)とタイプして、最近300回のキーストロークをマクロとして編集できます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
C-x C-k SPC
(kmacro-step-edit-macro
)とタイプして、最後のキーボードマクロをインタラクティブに1コマンドずつ再生および編集できます。マクロをqまたはC-gで終了しなければ、編集されたマクロでマクロリングの最後のマクロを置き換えます。
このマクロ編集機能は、最初(または次)に実行されるコマンドと、それにたいする操作を尋ねるプロンプトをミニバッファーに表示します。?を入力すれば、オプションの要約を表示できます。以下のオプションが利用可能です:
self-insert-command
に相当)には、TABが使われます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
オペレーティングシステムはファイルにデータを永続化するので、Emacsで編集するテキストの大部分はファイルから読み込んで、最終的にファイルに格納します。
ファイルを編集するには、Emacsにファイルを読み込み、ファイルのテキストを含むバッファーを準備するよう、指示しなければなりません。これを、ファイルのvisit(訪問)と呼びます。編集コマンドは直接バッファーのテキスト、つまりEmacs内部のコピーに適用されます。変更がファイルに反映されるのは、バッファーをファイルに保存(save)したときだけです。
ファイルのvisitや保存に加え、Emacsはファイルの削除、コピー、名前の変更、ファイルへの追加、ファイルの複数バージョンの保持、ディレクトリーの操作を行うことができます。
18.1 ファイルの名前 | ファイル名引数をタイプ、編集する方法。 | |
18.2 ファイルのvisit(訪問) | ファイルをvisitしてEmacsが編集する準備をする。 | |
18.3 ファイルの保存 | 保存して変更を永続化する。 | |
18.4 バッファーのリバート | 保存されていないすべての変更を取り消して前の状態に戻す。 | |
18.5 自動リバートーバッファーを自動的に最新に保つ | バッファーを自動的に最新に保つ。 | |
18.6 自動保存-災害にたいする防御 | 定期的な自動保存によりデータを失うことから守る。 | |
18.7 ファイルのエイリアス | 1つのファイルにたいする複数の名前を処理する。 | |
18.8 ファイルディレクトリー | ファイルディレクトリーの削除、作成、一覧。 | |
18.9 ファイルの比較 | 2つのファイルの異なる部分を探す。 | |
18.10 Diffモード | ファイルの異なる部分を編集するモード。 | |
18.11 ファイルのコピー、命名、リネーム。 | ||
18.12 その他のファイル操作 | ファイルにたいして行うその他のコマンド。 | |
18.13 圧縮ファイルへのアクセス | 圧縮されたファイルへのアクセス。 | |
18.14 ファイルアーカイブ | tar、zip、jar、...などのアーカイブファイルにたいする操作。 | |
18.15 リモートファイル | 他のマシンにあるファイルへのアクセス。 | |
18.16 ファイル名のクォート | ファイル名に含まれる特別な文字のクォート。 | |
18.17 ファイル名キャッシュ | 補完のための、よく使うファイルの一覧。 | |
18.18 ファイル検索の便利な機能 | ファイルを探すための便利な機能。 | |
18.19 イメージファイルのvisit | イメージファイルの閲覧。 | |
18.20 ファイルセット | 複数ファイルの処理。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ファイルを操作するEmacsコマンドの多くは、ミニバッファー(ミニバッファーでのファイル名を)を使って、ファイル名の指定を求めます。
ミニバッファーでは、通常の補完およびヒストリーコマンドを使うことができます(ミニバッファーを参照してください)。ファイル名の補完では、ファイル名の拡張子が変数completion-ignored-extensions
に含まれているファイルは無視されます(補完オプションを参照してください)。またほとんどのコマンドは、ファイルの読み込みにおいて、確認をともなう寛大な補完(permissive
completion with
confirmation)を使います。この補完では、存在しないファイル名が許されますが、存在しないファイル名の入力を完了するためにRETをタイプすると、Emacsは‘[Confirm]’を表示し、この確認に同意するために2番目のRETをタイプしなければなりません。詳細については、補完の終了を参照してください。
ミニバッファーのヒストリーコマンドは、ファイル名を読み取るための特別な機能をいくつか提供します。ミニバッファーヒストリーを参照してください。
それぞれのバッファーは、バッファーローカルな変数default-directory
に、デフォルトのディレクトリーを格納しています。ミニバッファーを使ってファイル名を読み取るとき、通常Emacsはミニバッファーの初期内容として、デフォルトディレクトリーを挿入します。変数insert-default-directory
をnil
に変更することにより、この挿入を抑制できます。常にEmacsは任意の相対パスで指定されたファイル名を、デフォルトディレクトリーにたいする相対パスとみなします。たとえばディレクトリーを指定しないファイル名は、デフォルトディレクトリーのファイルを指定します。
ファイルをvisitするとき、Emacsはvisitしているバッファーのdefault-directory
に、そのファイルのディレクトリーをセットします。C-x
bのようなコマンドを通じて、ファイルをvisitしていないバッファーを新たに作成すると、通常そのバッファーのデフォルトディレクトリーは、現在のバッファーのデフォルトディレクトリーをコピーします。現在のバッファーのdefault-directory
の値を見るために、M-x
pwdコマンドを使用できます。M-x
cdコマンドはディレクトリー名の入力を求め、バッファーのdefault-directory
もそのディレクトリーをセットします(これを行うことによりバッファーのファイル名は変更されません)。
例として、ファイル/u/rms/gnu/gnu.tasksをvisitしているとします。このときデフォルトディレクトリーは/u/rms/gnu/にセットされます。ファイル名を読み取るコマンドを呼び出して、ミニバッファーでディレクトリー名を省略して単に‘foo’と入力すると、これはファイル/u/rms/gnu/fooを指定したことになります。‘../.login’と入力すると/u/rms/.login、‘new/foo’と入力すると/u/rms/gnu/new/fooを指定したことになります。
ミニバッファーにファイル名をタイプするとき、2つのショートカットを使うことができます。2つのスラッシュは、2番目のスラッシュの前にあるすべてを無視します。そして‘~/’は、ユーザーのホームディレクトリーです。ミニバッファーでのファイル名を参照してください。
文字‘$’は、ファイル名を置き換える環境変数の代用として使われます。環境変数の名前は、‘$’の後ろのすべての英数字から構成されます。‘$’の後ろの、大カッコ(braces)に囲まれた変数名も使用できます。たとえばシェルコマンドexport
FOO=rms/hacks
は、名前がFOO
の環境変数をセットするために使われます。すると/u/$FOO/test.cと/u/${FOO}/test.cはどちらも、/u/rms/hacks/test.cの省略形となります。環境変数が定義されていないときは、何の置き換えも発生せず、文字‘$’はそれ自身を意味します。Emacs外部でセットされた環境変数は、それがEmacsの開始前に適用されたときだけ、Emacsに影響を与えることに注意してください。
‘$’により環境変数が展開されるようなとき、名前に‘$’を含むファイルにアクセスする場合は、‘$$’とタイプします。1つの‘$’が環境変数を展開するのと同時に、2つのペアは1つの‘$’に変換されます。かわりにファイル名を‘/:’でクォートすることもできます(ファイル名のクォートを参照してください)。名前が文字‘~’で始まるファイル名も、‘/:’でクォートするべきです。
ファイル名に非ASCII文字を含めることができます。ファイル名にたいするコーディングシステムを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ファイルをvisitします(find-file
)。
変更を許さない閲覧用として、ファイルをvisitします(find-file-read-only
)。
最後にvisitしたファイルとは異なるファイルを、かわりにvisitします(find-alternate-file
)。
別のウィンドウでファイルをvisitします(find-file-other-window
)。選択されたウィンドウに表示されているものは変更しません。
新しいフレームでファイルをvisitします(find-file-other-frame
)。選択されたフレームに表示されているものは変更しません。
内容を変換せずにファイルをvisitします。
ファイルをVisiting(訪問)するとは、そのファイル内容をEmacsのバッファーに読み込むことを意味するので、それを編集することができます。Emacsはvisitするファイルごとに、新しいバッファーを作成します。
ファイルをvisitするには、C-x C-f
(find-file
)とタイプして、visitしたいファイルの名前をミニバッファーで入力します。ミニバッファーでは、C-gをタイプして、コマンドを中止することができます。ミニバッファーでのファイル名の入力についての詳細は、ファイルの名前を参照してください。
ファイルは存在するが、システムが読み込みを許さない場合、エコーエリアにエラーメッセージが表示されます(GNUおよびUnixシステムでは、‘su’や‘sudo’のような方法を使用して、そのようなファイルをvisitできるかもしれない。リモートファイルを参照されたい。) それ以外の場合、スクリーンに新しいテキストが表示され、モードラインバッファー名が表示されることで、C-x C-fが成功したことを知ることができます。通常Emacsは、ファイル名からディレクトリー名を省いて、バッファー名を作ります。たとえば/usr/rms/emacs.texという名前のファイルは、バッファー名‘emacs.tex’となります。その名前のバッファーがすでにある場合、Emacsは一意な名前を作ります。通常の方法はディレクトリー名にもとづく接尾辞の追加です(たとえば‘<rms>’、‘<tmp>’など)が、違う方法を選択することもできます。バッファー名を一意にするを参照してください。
新しいファイルを作成するには、同じコマンドC-x C-fを使ってvisitするだけです。Emacsはエコーエリアに‘(New file)’と表示しますが、他の点では既存の空のファイルをvisitしたのと同じく振る舞います。
ファイルをvisitした後で編集コマンドにより行われた変更は、Emacsのバッファーに反映されます。バッファーを保存(save)するまでは、visitしているファイルに影響はありません。バッファーが保存されていない変更を含むとき、そのバッファーが変更されている(modified)といいます。これはバッファーを保存しなければ、その変更が失われることを意味します。モードラインの左余白の近くに2つのアスタリスクが表示され、バッファーが変更されていることを示します。
すでにEmacsがvisitしているファイルをvisitした場合、C-x C-fは他のコピーを作らず既存のバッファーに切り替えます。切り替えを行う前に、最後にvisitまたは保存した後にファイルが変更されているか確認します。もしファイルが変更されているとき、Emacsはそれの再読み込みを提案します。
large-file-warning-threshold
(デフォルトは10000000で、これは約10MB)より大きなファイルのvisitを試みると、Emacsは最初に確認を求めます。yを応えることによりファイルのvisitを続けて、lではファイルをリテラル(以下参照)にvisitします。
巨大なファイルではリテラルにファイルをvisitすることにより、種々の潜在的に高価な機能がオフに切り替えられるので、操作や編集が高速化されます。しかしEmacsは、Emacsバッファーの最大サイズ(Emacsが割り当てられるメモリー量の制限と、Emacsが扱える整数により制限されます)を超えるバッファーは、visitできないことに注意してください。この場合、Emacsは最大バッファーサイズを超えた旨を知らせるエラーメッセージを表示します。
ファイル名にシェル形式のワイルドカード文字が含まれている場合、Emacsはそれにマッチするすべてのファイルをvisitします。(大文字小文字を区別しないファイルシステムでは、Emacsは大文字小文字に関係なくワイルドカードをマッチします)。ワイルドカードには‘?’、‘*’および‘[…]’シーケンスが含まれます。ミニバッファーでワイルドカード‘?’をファイル名に入力するには、C-q
?とタイプする必要があります。ワイルドカード文字を実際に名前に含むファイルをvisitする方法についての情報は、ファイル名のクォートを参照してください。find-file-wildcards
をカスタマイズして、ワイルドカード機能を無効にすることができます。
無意識に間違ったファイル名をタイプして違うファイルをvisitした場合、C-x C-v
(find-alternate-file
)で実際に望むファイルをvisitできます。C-x C-vはC-x
C-fと似ていますが、これは現在のバッファーをkillします(変更されている場合は最初に保存するか確認を求めます)。C-x
C-vがvisitするファイルの名前を読み取るときは、ミニバッファーにデフォルトのファイル名全体を挿入して、ポイントをディレクトリー名の後に置きます。これは名前を少し間違えた場合などに便利です。
実際はディレクトリーであるファイルをvisitしたとき、EmacsはEmacsのディレクトリーブラウザーのDiredを呼び出します。Dired (ディレクトリーエディター)を参照してください。この振る舞いは、変数find-file-run-dired
をnil
にセットすることにより無効にできます。この場合、ディレクトリーをvisitするとエラーになります。
実際には他のファイルの集まりであるようなアーカイブファイル(file archives)の場合、アーカイブされたメンバーを操作できる、Diredに似た環境を呼び出す特別なモードでvisitします。これらの機能については、ファイルアーカイブを参照してください。
オペレーティングシステムが変更を許していない、または読み取り専用にしているファイルをvisitした場合、Emacsもバッファーを読み取り専用にするので、保存すると問題を起こすような変更を防ぐことができます。C-x
C-q (read-only-mode
)で、バッファーを書き込み可能にできます。その他のバッファー操作を参照してください。
予期せぬ入力による変更を防ぐために、読み込み専用でファイルをvisitしたい場合は、C-x C-fのかわりにコマンドC-x
C-r (find-file-read-only
)でvisitします。
C-x 4 f (find-file-other-window
)はC-x
C-fと同様ですが、指定したファイルを含むバッファーは、別のウィンドウで選択されます。C-x 4
fの前に選択されていたウィンドウは、すでに表示していたのと同じバッファーの表示を続けます。1つのウィンドウしか表示されていないときにこのコマンドを使うと、これはウィンドウを2つに分割し、1つのウィンドウには前に表示されていたのと同じバッファー、別の1つには新しい要求されたファイルを表示します。複数ウィンドウを参照してください。
C-x 5 f
(find-file-other-frame
)も同様ですが、新しいフレームををオープンするか、指定したファイルをすでに表示している既存のフレームを選択します。フレームとグラフィカルなディスプレーを参照してください。
グラフィカルなディスプレーでは、ファイルをvisitする追加の方法が2つあります。1つ目は、Emacsが適したGUIツールキットによりビルドされているとき、マウスによるコマンドの呼び出し(メニューバーやツールバーのクリックによる)は、ミニバッファーでファイル名の入力を求める代わりに、そのツールキット標準のファイル選択(file selection)ダイアログを表示します。GNU/LinuxおよびUnixプラットフォームでは、GTK+、LessTif、Motifツールキットとともに構築されていると、Emacsはこれを行います。MS-WindowsとMacでは、GUIバージョンのデフォルトにより行われます。これをカスタマイズする情報については、ダイアログボックスの使用を参照してください。
2つ目は、Emacsはのドラッグアンドドロップ(drag and drop)サポートで、通常のEmacsウィンドウにファイルをドロップすることにより、そのウィンドウでファイルをvisitします。例外としてDiredバッファーを表示しているウィンドウにファイルをドロップすると、表示されているディレクトリーにファイルを移動またはコピーします。詳細についてはドラッグアンドドロップとその他のDiredの機能を参照してください。
テキスト端末、およびGUIツールキットなしでビルドされているグラフィカルなディスプレーでは、アイテム‘Visit New File’と‘Open File’をもつメニューバーの‘File’メニューから、、ファイルをvisitできます。
文字エンコーディングと使用されている改行規則を検知するために、Emacsは自動的に内容をスキャンします。そして、それらをEmacsの内部エンコーディングとバッファーの改行規則に変換します。バッファーを保存するとき、Emacsは逆の変換を行い、元のエンコーディングと改行規則でファイルをディスクに書き込みます。コーディングシステムを参照してください。
ファイルにたいして特別なエンコーディングや変換を行わずに、非ASCII文字のシーケンスとして編集したいときは、M-x
find-file-literallyコマンドを使います。これはC-x C-fと同様ですが、フォーマット変換(Format Conversion in the Emacs Lisp Reference
Manualを参照してください)、文字コード変換(コーディングシステムを参照してください)、自動解凍(圧縮ファイルへのアクセスを参照してください)を行わず、require-final-newline
による最後の改行も追加しません(ファイル保存のカスタマイズを参照してください)。同じファイルをすでに通常(非リテラル)の方法でvisitしている場合、このコマンドはそれをリテラル(そのままの文字の列)としてvisitするかを尋ねます。
2つの特別なフック変数により、ファイルをvisitする操作を変更して拡張することができます。存在しないファイルをvisitすることにより、find-file-not-found-functions
の関数が実行されます。この変数は関数のリストを保有し、それらはどれか1つが非nil
を返すまで、(引数を指定せずに)1つずつ呼び出されます。これはノーマルフックではないため、その事実を示すために名前の最後が‘-hook’ではなく、‘-functions’で終わっています。
ファイルが存在するしないにかかわらず、ファイルをvisitするのに成功すると、引数なしで関数find-file-hook
を呼び出します。この変数はノーマルフックです。ファイルが存在しない場合、最初にfind-file-not-found-functions
を実行します。フックを参照してください。
ファイルを編集するために自動的にメジャーモードを指定し(ファイルのモードを選択するを参照してください)、そのファイルのために特別なローカル変数を定義する方法がいくつかあります(ファイル内のローカル変数を参照してください)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsでのバッファーの保存(Saving)は、バッファーの内容を、そのバッファーによりvisitされているファイルに書き戻すことを意味します。
18.3.1 ファイルを保存するコマンド | ファイルを保存するコマンドについて。 | |
18.3.2 バックアップファイル | Emacsがファイルの古いバージョンを保存する方法。 | |
18.3.3 ファイル保存のカスタマイズ | ファイルの保存のカスタマイズ。 | |
18.3.4 同時編集からの保護 | Emacsが2人のユーザーによる1つのファイルへの同時編集から保護する方法。 | |
18.3.5 ファイルのシャドーイング | ファイルを自動的に“shadows”コピーする。 | |
18.3.6 タイムスタンプの自動更新 | Emacsによる保存されたファイルのタイムスタンプの更新。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ファイルの保存と書き込みに関するコマンドが、いくつかあります。
現在のバッファーを、そのファイルに保存します(save-buffer
)。
任意、またはすべてのバッファーを、それらのファイルに保存します(save-some-buffers
)。
現在のバッファーが変更されたことを忘れます(not-modified
)。プレフィクス引数(C-u)を指定すると、現在のバッファーを変更済みとマークします。
現在のバッファーを、指定したファイル名で保存します(write-file
)。
現在のバッファーが保存される場所で、ファイル名を変更します。
ファイルを保存して変更を永続化させたいときは、C-x C-s
(save-buffer
)とタイプします。保存が完了すると、C-x C-sは以下のようなメッセージを表示します:
Wrote /u/rms/gnu/gnu.tasks
現在のバッファーが変更されていない(新規作成されたとき、または最後に変更されたときから変更していない)場合、保存しても意味がないので実際の保存は行われません。かわりにC-x C-sは、エコーエリアに以下のようなメッセージを表示します:
(No changes need to be saved)
C-u C-x C-sのようにプレフィクス引数を指定すると、Emacsはそのバッファーを次回の保存が行われるときバックアップするようマークします。バックアップファイルを参照してください。
コマンドC-x s
(save-some-buffers
)は、任意、またはすべての変更されたバッファーの保存を提案します。これはバッファーごとに何を行うか尋ねます。使用できる応答は、query-replace
と同様です。
このバッファーを保存し、残りのバッファーについて尋ねます。
このバッファーは保存せずに、残りのバッファーについて尋ねます。
このバッファーを保存し、残りのバッファーを尋ねることなくすべて保存します。
これ以上の保存をせずに、save-some-buffers
を終了します。
このバッファーを保存したら、他のバッファーをどうするか尋ねることなく、save-some-buffers
を終了します。
現在尋ねられているバッファーを閲覧します。Viewモードから抜けると、再びsave-some-buffers
はどうするか尋ねます。
save-some-buffers
をexitして、カレントで問い合わせ中だったバッファーをvisitします。
そのバッファーに対応するファイルとDiffをとり、どのような変更を保存するのか確認できます。これはコマンドdiff-buffer-with-file
(ファイルの比較を参照してください)を呼び出します。
これらのオプションについての、ヘルプメッセージを表示します。
save-some-buffers-default-predicate
の値をカスタマイズして、どのバッファーにたいしてEmacsが問い合わせるか制御できます。
Emacsを終了するキーシーケンスC-x C-cは、save-some-buffers
を呼び出すので、同じ質問をします。
バッファーを変更したが変更を保存したくないとき、保存されるのを防ぐためにできることがいくつかあります(それ以外のC-x
sまたはC-x C-cで間違って保存してしまうのはあなたの責任です)。まずできることは、M-~
(not-modified
)とタイプすることで、これはバッファーが変更されているというマークをクリアーします。これを行うと、保存コマンドに、バッファーが保存を必要しないと信じこませることができます(‘~’は数学のシンボルで、“not(否定)”として使われることがあります。したがってM-~はメタと“not”になります。)。かわりにファイルからテキストを読み込むことにより、ファイルをvisitまたは保存された後に行った、すべての変更を取り消すことができます。これはリバート(reverting:
復元)と呼ばれます。バッファーのリバートを参照してください(undoコマンドC-x
uを繰り返すことにより、変更がすべての変更を取り消すこともできますが、リバートの方が簡単です)。
M-x
set-visited-file-nameは、現在のバッファーがvisitしているファイルの名前を変更します。このコマンドはミニバッファーを使って、新しいファイル名を読み取ります。その後に、そのバッファーがそのファイル名のファイルをvisitしているとマークし、バッファー名も合わせて変更します。set-visited-file-name
は、新しくvisitするファイルへの保存はしません。これは後で保存するときのために、Emacs内のレコードを変更するだけです。これはバッファーを変更されている(modified)とマークするので、そのバッファーでの将来のC-x
C-sで、保存が行われます。
バッファーにたいして、違うファイルをvisitしているとマークしてすぐに保存したい場合は、C-x C-w
(write-file
)を使います。このコマンドは、set-visited-file-name
の後すぐにC-x
C-sをするのと同じですが、C-x
C-wはファイルが存在するとき確認を求める点が異なります。ファイルをvisitしていないバッファーでのC-x C-sは、C-x
C-wと同じ効果をもちます。したがってファイル名を読み取り、バッファーがそのファイルをvisitしているとマークした後、バッファー内容をそのファイルに保存します。ファイルをvisitしていないバッファーのデフォルトファイル名は、バッファー名と、バッファーのデフォルトディレクトリーから合成されます(ファイルの名前を参照してください)。
新しいファイル名が何らかのメジャーモードに関連する場合、大抵はC-x
C-wによりそのメジャーモードへの切り替えが行われます。コマンドset-visited-file-name
もこれを行います。ファイルのモードを選択するを参照してください。
Emacsがファイルを保存する際、ディスクの最新バージョンのファイル日付を確認して、それがEmacsが最後に読み込み、または書き込みしたときと異なる場合、Emacsはその事実をユーザーに知らせます。なぜならそれはおそらく同時編集による問題を示しており、それをすぐにユーザーに知らせる必要があるからです。Simultaneous Editingを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ほとんどのオペレーティングシステムでは、ファイルを書き換えるとファイルに入っていたそれまでの記録は、自動的に破棄されます。したがって、Emacsでファイルを保存すると、ファイルの古い内容は捨てられます。しかし実際に保存する前に、Emacsが慎重に古い内容をバックアップ(backup)ファイルと呼ばれる別のファイルにコピーすれば、古い内容は失われません。
Emacsは最初にバッファーからファイルに保存されたときだけ、バックアップファイルを作成します。その後ファイルを何回保存しようと、バックアップは変更されません。しかしバッファーをkillしてから、そのファイルを再びvisitすると、新しいバックアップファイルが作成されます。
ほとんどのファイルにたいして、変数make-backup-files
はバックアップファイルを作るかを決定します。ほとんどのオペレーティングシステムでは、デフォルト値はt
なので、Emacsはバックアップファイルを書き込みます。
バージョンコントロールシステム(version control system: バージョンコントロールを参照してください)で管理されているファイルにたいして、バックアップファイルを作るかは、変数vc-make-backup-files
により決定されます。バージョンコントロールシステムに以前のバージョンがある場合、バックアップファイルを作るのは不必要なので、デフォルト値はnil
です。
一般的なオプションを参照してください。
選択できるオプションは、Emacsにファイルごとに1つのバックアップを作らせる方法と、編集するファイルごとに番号がついた、一連のファイルを作る方法があります。単一または番号つきバックアップを参照してください。
変数backup-enable-predicate
のデフォルト値は、一時的なファイルのために使われるディレクトリー(変数temporary-file-directory
またはsmall-temporary-file-directory
で指定されます)のファイルは、バックアップしないような値になっています。
前に保存されたバッファーにたいしても、バッファーから他のバックアップファイルを作るよう、Emacsに明示的に指示することができます。バッファーをC-u C-x C-sで保存すると、この保存したバージョンが、次にバックアップするときのバックアップになります。C-u C-u C-x C-sはバッファーを保存しますが、最初に元のファイル内容を新しいバックアップファイルとします。C-u C-u C-u C-x C-sは両方を行います。まず前の内容でバックアップを作成し、次回に保存したときは、今回保存したものをバックアップにします。
変数backup-directory-alist
をカスタマイズして、指定したパターンにマッチする特定のファイルにたいして、指定したディレクトリーにバックアップを作成させることができます。典型的な使い方は、要素("."
.
dir)
を追加することにより、すべてのバックアップを絶対パスdirに作る方法です。異なるディレクトリーにある同じ名前のファイルによる、バックアップファイルの名前の衝突を避けるため、Emacsはバックアップファイルの名前を変更します。("."
.
".~")
を追加すると、これは元のファイルがあるディレクトリーに、非表示の.~というディレクトリーを作って、そこにバックアップを作成します。Emacsはバックアップを作るため、必要ならディレクトリーを作成します。
18.3.2.1 単一または番号つきバックアップ | バックアップファイルの命名方法。 | |
18.3.2.2 バックアップの自動削除 | Emacsによる余分な番号つきバックアップの削除。 | |
18.3.2.3 コピー vs. リネーム | コピーとリネームによるバックアップの作成。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsのバックアップファイル作成では、バックアップの名前は通常、編集されるファイル名の後ろに‘~’をつけて作成されます。したがってeval.cのバックアップファイルは、eval.c~になります。
アクセスコントロールによりEmacsが通常の名前でバックアップファイルを書き込めない場合、~/.emacs.d/%backup%~というバックアップファイルに書き込みます。この1つのファイルしか存在しないので、一番最近作られたバックアップだけが利用可能です。
Emacsは番号つきバックアップファイル(numbered backup files)を作ることもできます。番号つきバックアップファイルの名前は、元のファイル名の後ろに‘.~’と番号と‘~’をつけたものです。したがってeval.cのバックアップファイルは、eval.c.~1~、eval.c.~2~、...、eval.c.~259~、...となります。
変数version-control
は、単一のバックアップファイルを作るか、複数の番号つきバックアップファイルを作るかを決定します。有効な値は以下のとおりです:
nil
すでに番号つきバックアップのあるファイルにたいしては、番号つきバックアップを作ります。それ以外は単独のバックアップをつくります。これがデフォルトです。
t
番号つきバックアップを作ります。
never
番号つきバックアップをつくらず、常に単一のバックアップを作ります。
この変数をセットする通常の方法は、initファイルやcustomizationバッファーを通じて、グローバルにセットする方法です。しかし特定のバッファーにローカルにversion-control
をセットして、そのバッファーのバックアップ作成を制御することができます(ローカル変数を参照してください)。特定のファイルをvisitするとき、常にEmacsにversion-control
をローカルにセットさせることができます(ファイル内のローカル変数を参照してください)。Rmailモードのようないくつかのモードは、この変数をセットします。
さまざまなGNUユーティリティーにたいして、何をすべきか指示する環境変数VERSION_CONTROL
をセットすると、Emacsも開始時にこの環境変数にしたがって、Lisp変数version-control
をセットします。環境変数の値が‘t’または‘numbered’のときは、version-control
はt
になります。値が‘nil’または‘existing’のときは、version-control
はnil
になります。もし‘never’または‘simple’のときは、version-control
はnever
になります。
変数make-backup-file-name-function
に適切なLisp関数をセットすることにより、Emacsがバックアップファイル名を作る通常の方法をオーバーライドできます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ディスク容量の過度な消費を防ぐため、Emacsは自動的に番号つきバックアップを削除することができます。一般的にEmacsは一番古いバックアップと、一番新しいバックアップをいくつか保持し、その間にあるバックアップを削除します。これは新しいバックアップが作られる度に行なわれます。
2つの変数kept-old-versions
およびkept-new-versions
が、この削除を制御します。これらの変数の値は順に、削除せずに残す一番古い番号(小さい番号)のバックアップと、一番新しい番号(大きい番号)で、新しいバックアップが作られる度に評価されます。中間のバックアップ(一番古いものと一番新しいものを除いたもの)は、余分なバージョンで、これらのバックアップは削除されます。これらの変数の値は余分なバージョンを削除するとき、つまり新しいバックアップが作られた直後に使われます。新しく作られたバックアップは、kept-new-versions
のカウントに含まれます。デフォルトでは、両方の変数の値は2です。
delete-old-versions
がt
のとき、Emacsは何も尋ねずに余分なバックアップファイルを削除します。nil
(デフォルト)のとき、Emacsは余分なバージョンのバックアップを削除するか尋ねます。他の値の場合、Emacsはバックアップの自動削除をしません。
Diredの.(ピリオド)コマンドでも、古いバージョンを削除できます。大量のファイルに一度にフラグをつけるを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
バックアップファイルは、古いファイルをコピーまたはリネームすることで作ることができます。コピーとリネームは、古いファイルが複数の名前をもつ場合(ハードリンクされている場合)に、異なる効果をもちます。古いファイルがバックアップファイルにリネームされた場合、ハードリンクされた別の名前で参照されるファイルは、バックアップファイルとなります。かわりに古いファイルをコピーすると、ハードリンクされた別の名前で参照されるファイルは、編集中のファイルのままで、それらの名前でアクセスする内容は新しい内容となります。
バックアップファイルを作る方法は、編集中のファイルの所有者とグループにも影響します。コピーが使われた場合、それらは変化しません。リネームが使われた場合、そのユーザーがファイルの所有者となり、ファイルのグループはデフォルト(オペレーティングシステムごとにグループのデフォルトは異なります)のグループになります。
リネームとコピーの選択は、以下の変数により行われます:
backup-by-copying
が非nil
(デフォルトはnil
)の場合、コピーが使用されます。
backup-by-copying-when-linked
が非nil
(デフォルトはnil
)で、ファイルが複数の名前をもつ場合は、コピーが使用されます。
backup-by-copying-when-mismatch
が非nil
(デフォルトはt
)で、リネームによりファイルの所有者かグループが変更される場合は、コピーが使用されます。
backup-by-copying-when-mismatch
をnil
に変更すると、Emacsはファイルの所有者のユーザーIDとファイルのグループのグループIDのの数字をチェックします。もしいずれかの数字がbackup-by-copying-when-privileged-mismatch
の値より大きければ、backup-by-copying-when-mismatch
が非nil
であるかのように振る舞います。
ファイルがバージョンコントロールシステムで管理されている場合(バージョンコントロールを参照)、通常、Emacsは普通の方法でそのファイルのバックアップを作りません。しかしコミット(チェックインとも呼ばれる。バージョンコントロールの概念を参照されたい)は、バックアップを作るのと似たところがあります。これらの操作は通常ハードリンクをこわし、同じファイルにたいする別のファイル名でのvisitを切断します。Emacsにできることはありません。バージョンコントロールシステムがこれを行うのです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
変数require-final-newline
の値がt
のとき、ファイルの保存または書き込みにより、ファイルの終端に改行がないときは、何も尋ねずに改行を追加します。値がvisit
の場合、Emacsはファイルをvisitした直後に、終端に改行がないファイルの改行を追加します(これによりバッファーは変更されたとマークされます。undoはできません)。値がvisit-save
の場合、Emacsはそのような改行をvisitと保存のときに追加します。値がnil
の場合、Emacsはファイルの終端を変更しません。それ以外の非nil
値は、改行を追加するかをEmacsが尋ねることを意味します。デフォルトはnil
です。
ファイルの終端に常に改行があると想定する、特定の種類のファイルのためにデザインされたメジャーモードがいくつかあります。そのようなメジャーモードは、変数require-final-newline
に、変数mode-require-final-newline
の値(デフォルトはt
)をセットします。後者の変数の値をセットすることにより、これらのモードが終端の改行を取り扱う方法を制御できます。
通常プログラムがファイルに書き込むとき、オペレーティングシステムはデータをディスクにコミットする前に、ファイルのデータをメインメモリーにキャッシュします。これにより大幅にパフォーマンスを向上できます。たとえばラップトップを使っている場合、ファイルを書き込む度にディスクをスピンアップ(spin-up)しなくて済みます。しかし、キャッシュをディスクにコミットする前にオペレーティングシステムがクラッシュすることにより、データを失うリスクもあります。
このリスクを減少させるため、Emacsはファイルを保存した後にfsync
システムコールを呼び出すことができます。fsync
により、データを失うリスクを皆無にすることはできません。その理由の一部は、多くのシステムはfsync
を正しく実装していないことであり、他の理由の一部はEmacsのファイル保存手段は通常ディレクトリー更新に頼っており、これはfsync
が正しく実装されていても、クラッシュを生き延びることはできないでしょう。
write-region-inhibit-fsync
変数は、ファイルを保存した後にEmacsがfsync
を呼び出すかを制御します。この変数のデフォルト値は、Emacsを対話的に使用しているときはnil
、バッチモードの時はt
です(Batch Modeを参照)。
Emacsは自動保存ファイルの書き込みにfsync
を使うことはありません。なぜなら、それらのファイルのデータは、いずれにせよ失われるものだからです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
同時編集(Simultaneous editing)は、2人のユーザーが同じファイルをvisitして、両者が変更と保存を行ったときに発生します。これが発生していることを誰も知らせなければ、最初に保存したユーザーは、後で自分の変更が失われていることに気付くでしょう。
いくつかのシステムでは、Emacsは2番目のユーザーがファイルの変更を開始すると、すぐに警告を発します。また、すべてのシステムにおいて、Emacsはファイルを保存するときにチェックして、他のユーザーの変更を上書きすることを警告します。ファイルを保存するかわりに適切な訂正アクションをとることにより、他のユーザーの変更を失わなわずに済みます。
ファイルをvisitしているEmacsバッファーで最初の変更を行うとき、Emacsはファイルがロック(locked)されていることを記録します(これは同じディレクトリーにある、特別な内容の、特別な名前のシンボリックリンク7を作ることにより行われます。詳細は(elisp)File Locksを参照のこと)。変更を保存したとき、Emacsはロックを解除します。このアイデアは、ファイルをvisitしているEmacsバッファーに保存されていない変更があるとき、ファイルはロックされているとするものです。
変数create-lockfiles
をnil
にセットすることにより、ロックファイルの作成を抑制することができます。警告:これにより、この機能が提供する利点を失うことになります。
他のユーザーによりロックされているファイルをvisitしているバッファーの変更を開始すると、衝突(collision)が起こります。Emacsが衝突を検知すると、Lisp関数ask-user-about-lock
を呼び出して、何を行うか尋ねます。カスタマイズのためにこの関数を再定義できます。この関数の標準定義は、ユーザーに質問をして、3つの有効な応えを受け取ります。
ロックを横取りします。すでにファイルを変更したユーザーはロックを失い、あなたがロックを取得します。
続行します。他のユーザーがロックしている如何にかかわらずファイルの編集を続けます。
終了します。これはエラー(file-locked
)を引き起こし、バッファーの内容は変更されません。あなたが試みた修正は実際には行われません。
Emacsまたはオペレーティングシステムがクラッシュすると、偽のロックファイルが残ることがあり、このような偽のロックファイルによる警告を受けることがあります。偽の衝突だと確信できるときは、Emacsにとにかく実行させるpを使います。
ロックはファイル名にもとづいて機能するので、ファイルが複数の名前を持っていて、2人のユーザーがそれぞれ別のファイル名で同時編集を行うことを、Emacsが防ぐことはできないことに注意してください。
ロックファイルに書き込みできない状況がいくつかあります。たとえばシステム権限不足や他の理由により、Emacsがロックファイルが作成できない場合です。このような場合でも保存を試みたときに、ファイルの最終変更日時をチェックすることにより、Emacsは衝突を検知できます。最後にEmacsがvisitまたは保存したときからファイルが変更されているとき、それは他の何らかの手段によりファイルが変更されたことを示し、Emacsが保存を行うことによりそれらが失われることを意味します。そのようなときEmacsは警告メッセージを表示して、保存する前に確認を求めます。保存するときはyes、保存を取り消すときはnoまたはC-gと応えてください。
すでに同時編集が発生しているとき、バッファーとファイルを比較する方法の1つは、M-x diff-buffer-with-fileコマンドです。ファイルの比較を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
特定のファイルと等しいshadowコピーを1つ以上の場所、ことによると異なるマシン間で保持するように計画できます。これを行うにはまず、shadowファイルグループをセットアップしなければなりません。これはリストにあるサイト間で共有される同じ名前のファイルのセットです。ファイルグループは永続的で、将来のEmacsセッションでも、現在のセッションと同様に適用されます。一度グループをセットアップすると、Emacsを終了する度に、編集したファイルをグループの他のファイルにコピーします。M-x shadow-copy-filesをタイプすることにより、Emacsを終了せずにコピーすることもできます。
shadowクラスターは、ディレクトリーを共有するホストのグループなので、それらのコピーは、そのディレクトリーにあるすべてのファイルを更新するのに充分です。shadowクラスターはそれぞれ名前を持ち、プライマリーホスト(コピーを行うホスト)のネットワークアドレスと、プライマリーホスト以外でクラスターに含めるホストを選択するための正規表現を指定します。M-x shadow-define-clusterによりshadowクラスターを定義できます。
ファイルのシャドーイング(shadowing)をセットアップします。
サイト間で共有される単一のファイルを定義します。
ファイルのグループがマッチするすべてのファイルを、ホスト間で共有するようにします。
shadowファイルのクラスターnameを定義します。
すべての保留中のshadowファイルをコピーします。
ファイルにたいするshadow指示を取り消します。
shadowファイルグループをセットアップするには、M-x shadow-define-literal-groupまたはM-x shadow-define-regexp-groupを使います。詳細な情報は、これらの関数のドキュメント文字列を参照してください。
ファイルをshadowにコピーする前に、Emacsは確認を求めます。“no”を応えることにより、その時だけはコピーを回避できます。特定のファイルにたいして今後もshadowingを取り消したい場合、M-x shadow-cancelを使うことにより、shadowファイルグループを削除または変更します。
MS Widowsでは、ファイルのシャドーイングは利用できません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ファイルにタイムスタンプを書き込むことができます。これによりファイルを編集・保存する度に、タイムスタンプが自動的に更新されます。タイムスタンプは、ファイルの最初の8行になければならず、以下のような形式、
Time-stamp: <>
または以下のような形式です:
Time-stamp: " "
その後、フックbefore-save-hook
に関数time-stamp
を追加します(フックを参照してください)。ファイルを保存するとき、この関数は現在の日時で自動的にタイムスタンプを更新します。コマンドM-x
time-stampを使って、手動でタイムスタンプを更新することもできます。デフォルトではタイムスタンプの書式は、localeのセッティング(環境変数を参照してください)と、タイムゾーン(Time
of Day in The Emacs Lisp Reference
Manualを参照してください)にしたがいます。カスタマイズに関しては、Customグループのtime-stamp
を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ファイルをvisitしているバッファーにたいして、広範な変更をした後に気が変わったときは、リバート(revert: 復元)することにより。変更をファイルの保存されたバージョンに戻すことができます。間違えてリバートしてしまうことにより、大量の作業結果を失うこともあり得るので、Emacsは最初に確認を求めます。
revert-buffer
コマンドは、ファイルが少ししか変更されていないときは、前にポイントがあったテキスト部分とだいたい同じ位置にポイントを置くよう試みます。しかし広範な変更を行っていた場合、ポイントは大きく異なる場所に置かれることになります。
リバートはバッファーをnot modified(変更されていない)とマークします。しかし、これはリバートされた変更を単一の変更として、そのバッファーのundoヒストリーに追加します(Undo(取り消し)を参照)。したがって、リバート後に気が変わってリバートされた変更を元に戻したくなった場合は、C-/またはそのエイリアスをタイプして、それを行うことができます。
ファイルに関連付けられていない、Diredバッファーのようなバッファーでも、リバートすることができます。それらの場合、リバートはその内容を再計算することを意味します。C-x
bで明示的に作成したバッファーは、リバートできません。リバートを試みるとrevert-buffer
はエラーを報告します。
自動的かつ頻繁に変更されるファイル、たとえば実行を続けるプロセスのログ出力などを編集しているとき、Emacsが確認なしにリバートできたら便利でしょう。このような振る舞いをさせるには、変数revert-without-query
に正規表現のリストをセットします。ファイル名がそれらの正規表現の1つにマッチしたとき、find-file
およびrevert-buffer
は、バッファーが変更されていないときは、ファイルが変更される度に自動的にリバートします(もしテキストを編集していた場合、変更を放棄するのはおそらく正しくありません)。
visit中のファイルがディスク上で変更された際にバッファーを自動的にリバートするようにEmacsに指定できます。自動リバートーバッファーを自動的に最新に保つを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
visit中のファイルを別プログラムが変更した場合には、バッファーがvisit中のファイルと同期しなくなる可能性があります。これを最新に保つために、M-x auto-revert-modeをタイプしてAuto Revertモードを有効にできます。これはvisit中のファイルがディスク上で変更された際に、バッファーを自動的にリバートします。すべてのファイルバッファーで同じことを行うには、M-x global-auto-revert-modeをタイプしてGlobal Auto Revertモードを有効にします。
Auto Revertはバッファーに未保存の変更があったり、ディスク上のファイルが削除やリネームされた場合にはバッファーをリバートしません。
Auto
Revertモードの1つの使い方は、システムログのようなファイルを“tail”することです。これにより、それらのファイルにたいする、他のプログラムによる変更を、継続的に表示できます。これを行うには、ポイントをバッファーの最後に移動します。そうすればファイル内容が変更されても、ポイントはその位置に留まります。しかし、ファイルがファイルの終端方向に向かって変更されるだけだと確信できるときは、かわりにAuto
Revert Tailモード(auto-revert-tail-mode
)を使います。このモードは、これをより効果的に行います。Auto
Revert Tailモードは、リモートのファイルにたいしても機能します。
バッファーが自動リバートされたとき、メッセージが生成されます。これはauto-revert-verbose
を非nil
にセットすることにより、抑制できます。
Auto
Revertモードはリモートファイルのチェックやリバートは、通常は低速なので行いません。この挙動は変数auto-revert-remote-files
を非nil
にセットして変更できます。
デフォルトでは、Auto Revertモードはファイル通知(file
notifications)を使用して機能します。これにより、ファイルシステムへの変更が、OSからEmacsに報告されます。変数auto-revert-use-notify
をnil
にカスタマイズして、ファイル通知を無効にできます。その場合、Emacsは5秒ごとにポーリングして、ファイルの変更をチェックするでしょう。変数auto-revert-interval
を通じて、ポーリングの間隔を変更できます。
すべてのシステムでファイル通知がサポートされている訳ではありません。サポートされないシステムでは、auto-revert-use-notify
はデフォルトでnil
です。
デフォルトではAuto
Revertモードは、たとえファイル通知の使用中でもファイル変更の定期的なポーリングは行いません。多くの場合にはポーリングは不要であり、ポーリングをオフにして通知だけを信頼することにより電力が節減できます。これを行うには変数auto-revert-avoid-polling
に非nil
をセットします。しかし別のマシンからファイルを変更可能なUnix系マシン上の主要なネットワークファイルシステムのように、特定のファイルシステムでは通知は効果がありません。そのようなファイルシステムではポーリングが必要かもしれません。auto-revert-avoid-polling
が非nil
のときにポーリングを強制するには、を通知を使用するファイルから除外すべきファイルにマッチするようにauto-revert-notify-exclude-dir-regexp
をセットします。
Diredバッファー(Dired (ディレクトリーエディター)を参照)では、Auto Revertモードはそのバッファーのディレクトリーでファイルが作成、または削除されたとき更新を行います。
バージョンコントロールシステムの下にあるファイルを、以前のバージョンにリバーとするコマンドについては、バージョンコントロール操作のアンドゥを参照してください。バージョンコントロールシステムの下にあるファイルをvisitしているときの自動リバートの特性については、バージョンコントロールとモードラインを参照してください。
18.5.1 非ファイルバッファーの自動リバート | 非ファイルバッファーの自動リバートについて。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
通常Global Auto
Revertモードは、ファイルのバッファーだけをリバートします。非ファイルバッファーにたいして自動リバートを行うには、2つの方法があります。1つはそれらのバッファーにたいしてAuto
Revertモードを有効にする方法です(M-x
auto-revert-modeを使います)。もう1つはglobal-auto-revert-non-file-buffers
に非nil
値をセットする方法です。後者はそれが実装されているすべての種類のバッファーにたいして、自動リバートを有効にします(以下のメニューにリストされています)。
ファイルバッファーと同様、非ファイルバッファーはそれらにたいして作業を行っているときや、リバートすると失われてしまう情報が含まれているとき、通常はリバートすべきではありません。したがって、それらがmodified(変更されている)のときはリバートしません。非ファイルバッファーが変更されているとマークするのは、ファイルバッファーのときより通常難しいので、トリッキーになり得ます。
他のトリッキーな点に関する詳細は、効率の問題です。自動リバートはしばしばバッファーにたいするすべての可能な変更を検知しようとせず、広範または簡単に検知できる変更だけを検知します。したがって、非ファイルバッファーに自動リバートを有効にすることは、バッファーのすべての情報が最新であると常に保証はしませんし、手動によるリバートを無用にする必要もないからです。
それとは反対に、特定のバッファーはauto-revert-interval
で指定された秒数ごとに自動的にリバートします(これは現在のところBuffer
Menuだけに適用されます)。この場合、自動リバートはリバートの際、auto-revert-verbose
が非nil
でも、何もメッセージを表示しません。
いくつかの非ファイルバッファーは、バッファーのデフォルトディレクトリーのファイル通知によって信頼性をもって更新が可能です。Diredがその例です。メジャーモードはそのバッファーでbuffer-auto-revert-by-notification
に非nil
をセットしてこれを示すことができ、Auto
Revertが定期的なポーリングを行わなくすることができます。このような通知はディレクトリー自身にたいしてだけであり、ディレクトリーのファイルは含まれません。
詳細はバッファーの特性に依存し、それらは対応するセクションで説明されています。
18.5.1.1 Buffer Menuの自動リバート | Buffer Menuの自動リバートについて。 | |
18.5.1.2 Diredバッファーの自動リバート | Diredバッファーの自動リバートについて。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
非ファイルバッファーの自動リバートが有効なとき、必要性の有無にかかわらず、Buffer Menu
(複数バッファーにたいする操作を参照)
はauto-revert-interval
で指定された秒数ごとに自動的にリバートされます。(リバートする必要があるかチェックするのは、恐らく実際にリバートするより長い時間を要する)。
Buffer Menuがmodifiedと不適切にマークされたときは、gにより手動でリバートして自動リバートを再開します。しかし特定のバッファーにたいして削除や表示のマークをつけた場合は、慎重になる必要があります。なぜならリバートはすべてのマークを消去するからです。マークの追加はバッファーのmodifiedフラグをセットするという事実は、自動的なマークの消去からの自動リバートを防ぎます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Diredバッファーは、バッファーのメインディレクトリーのファイルリストが変化したとき(たとえば新しいファイルの追加や削除)だけ、自動リバートします。特定のファイルの情報が変化したとき(たとえばサイズの変化)や、サブディレクトリーへの追加は自動リバートしません。すべてのリストされた情報が最新であることを確実にするには、Diredバッファーで自動リバートが有効であっても、手動でgを使ってリバートする必要があります。メインディレクトリーにリストされているファイルへの変更や保存で、実際に自動リバートが起こるのに気付くかもしれません。これはファイルの変更や保存は、たとえばバックアップファイルやauto-saveファイルにより、高い確率でディレクトリー自身を変更するからです。しかし、これは保証されているわけではありません。
Diredバッファーがmodifiedとマークされ、残したい変更がない場合、大抵はgでバッファーを手動でリバートすることにより、自動リバートを再開できます。しかし1つ例外があります。ファイルにフラグやマークをつけた場合、安全にバッファーをリバートできます。これはフラグやマークを消去しません(もちろんマークされたファイルが削除されていない場合です)。しかしバッファーはリバートの後でさえmodifiedの状態に留まるので、自動リバートは再開しません。これは、もしファイルにたいしてフラグやマークをつけた場合、それはバッファーにたいして作業をしており、警告なしにバッファーが変更されることを望まないだろうからです。マークやフラグがある状態で自動リバートを再開したいときは、M-~を使ってバッファーをnon-modifiedとマークします。しかしマークやフラグの追加・削除・変更により、バッファーは再びmodifiedとマークされます。
現在のところ、リモートのDiredバッファーは、自動リバートされません。特定のファイルだけをリストするように、シェルのワイルドカードやファイル引数を与えられたDiredバッファーも同じです。*Find*および*Locate*は、どちらも自動リバートしません。
Diredバッファーの自動リバートは、いくつかのシステムでは満足に機能しないかもしれないことに注意してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsは定期的に、visitしているファイルを、実際に使っているファイルを変更せずに、別のファイルに自動的に保存するときがあります。これは自動保存(auto-saving)と呼ばれます。これはシステムがクラッシュしたとき、失われてしまう作業をある程度以下に制限するためのものです。
Emacsが自動保存するときだと決定すると、各バッファーを判断して、それらのバッファーの自動保存が有効で、最後に自動保存されてから変更されている場合には自動保存します。auto-save-no-message
変数がnil
(デフォルト)にセットされている際には、もし自動保存されているファイルが実際にあればエコーエリアに‘Auto-saving...’というメッセージが自動保存の間に表示されます。このメッセージを無効にするには、この変数を非nil
にカスタマイズしてください。自動保存の間のエラーはキャッチされるので、ユーザーがタイプして実行したコマンドに、干渉することはありません。
18.6.1 自動保存ファイル | ファイルを保存するまでの間、自動保存された変更が実際に保存されるファイル。 | |
18.6.2 自動保存の制御 | 自動保存をいつ、どのような間隔で行うかの制御。 | |
18.6.3 自動保存からのデータ復旧 | 自動保存ファイルからのテキストの復旧。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
自動保存は通常、visitしているファイルへの保存はしません。なぜなら永続化したくない変更を保存するのは、好ましくないからです。そのかわりに、自動保存はauto-saveファイルと呼ばれる別のファイルに保存し、visitしているファイルへの変更は、保存を明示的に要求したとき(C-x C-sなど)に行います。
auto-saveファイルの名前は通常、visitしているファイル名の前後に‘#’をつけて作られます。したがってfoo.cというファイルをvisitしているバッファーは、#foo.c#というファイルに自動保存されます。ファイルをvisitしていないバッファーのほとんどは、明示的に要求した場合だけ自動保存されます。それらのバッファーが自動保存されるとき、auto-saveファイル名は、バッファー名の前後に‘#’をつけて、その後ろに数字と文字を付け加えて一意な名前にします。たとえば送信メッセージを作成する*mail*バッファーは、#*mail*#704juuのような名前のファイルに、自動保存されます。Emacsの一部(関数make-auto-save-file-name
およびauto-save-file-name-p
)を違った方法で再プログラムしない限り、auto-saveファイル名はこの方法で作成されますバッファーの自動保存に使われるファイル名は、そのバッファーの自動保存をオンにしたときに計算されます。
変数auto-save-file-name-transforms
は、auto-saveファイル名をある程度制御することを許します。これに一連の正規表現を指定して置換することにより、auto-saveファイル名を変更します。デフォルト値は、リモートのファイル(リモートファイルを参照してください)を、ローカルマシンの一時ディレクトリーのauto-saveファイルに変換します。
大きなバッファーから大量のテキストを削除したとき、そのバッファーにたいする自動保存は一時的にオフになります。これは、もしテキストをうっかり削除してしまった場合、それがauto-saveファイルに含まれていて、そこから探せる方が便利だからです。これが発生した後、再び自動保存を有効にするには、バッファーをC-x C-sで保存するか、C-u 1 M-x auto-save-modeを使います。
別のauto-saveファイルではなく、visitしているファイル自体に自動保存したい場合は、グローバルなマイナーモードauto-save-visited-mode
を有効にします。このモードでは、自動保存は明示的な保存と等価です。このモードは上述のauto-save
と直交(orthogonal)するモードであり、両方同時に有効にできることに注意してください。しかし、いくつかのバッファーでauto-save
モードがアクティブで、かつ時代遅れのauto-save-visited-file-name
変数が非nil
値の場合、そのバッファーはauto-save-visited-mode
の影響を受けないでしょう。
auto-save-visited-mode
モードの自動保存処理の間隔は、変数auto-save-visited-interval
を使用してカスタマイズできます。auto-save-interval
とauto-save-timeout
は、auto-save-visited-mode
に影響を与えません。これらの変数の詳細は、自動保存の制御を参照してください。
バッファーのauto-saveファイルは、そのバッファーをvisitしているファイルに保存したとき削除されます(変数delete-auto-save-files
をnil
にセットすることにより、これを禁じることができます)。C-x
C-wまたはset-visited-file-name
で、visitされているファイル名を変更することにより、あたらしくvisitされているファイル名にもとづいてauto-saveファイル名はリネームされます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ファイルをvisitする度に、そのファイルバッファーの自動保存は、オンになります(バッチモードでは異なります。初期化オプションを参照してください)。この変数のデフォルトはt
なので、ファイルをvisitしているバッファーの自動保存は通常、常に行われます。現在のバッファーの自動保存を切り替えるには、M-x
auto-save-modeとタイプします。Auto Saveモードはバッファーローカルに動作するマイナーモードです(マイナーモードを参照してください)。
Emacsは最後に自動保存されてから何文字タイプしたかにもとづいて、定期的に自動保存を行います。変数auto-save-interval
は、自動保存と自動保存の間に何文字タイプされたかを指定します。デフォルトは300です。Emacsは小さすぎる値は受け付けません。auto-save-interval
を20より小さな値にカスタマイズした場合、Emacsは20と指定されたかのように振る舞います。
自動保存はタイピングをストップしたときも行われます。デフォルトでは30秒アイドル状態が続くと実行されます。(このときEmacsはガベージコレクションも実行します;
Garbage Collection in The Emacs Lisp Reference
Manualを参照してください)。この間隔を変更するには、変数auto-save-timeout
をカスタマイズします。実際の実行間隔は、現在のバッファーの大きさに応じて長くなります。これは、自動保存が実感できるほど時間がかかるような大きなバッファーを編集しているときは、それをなるべく無くすようにする狙いです。アイドル状態のときの自動保存は、2つの事を達成します。最初に、端末を少しの間離れるときなどに、すべての作業の保存を保証します。次に、実際にタイプしているときは自動保存を避けます。
auto-save-visited-mode
が有効なとき、Emacsはアイドル5秒後に、ファイルをvisitしているバッファーを自動保存するでしょう。アイドル時の間隔は、変数auto-save-visited-interval
でカスタマイズできます。
Emacsは、致命的なエラーが発生したときも自動保存を行います。これには‘kill %emacs’のようなコマンドによるEmacsジョブのkill、電話回線やネットワーク回線の切断が含まれます。
コマンドM-x do-auto-saveにより、明示的に自動保存を行うことができます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
コマンドM-x recover-file RET file RETにより、auto-saveファイルの内容を使って、失われたデータを復旧できます。これはfileをvisitして、(確認を求めた後で)auto-saveファイル#file#の内容をリストアします。その後C-x C-sで復旧したテキストを、file自身に保存できます。たとえばファイルfoo.cを、そのauto-saveファイル#foo.c#で復旧するには、以下のようにします:
M-x recover-file RET foo.c RET yes RET C-x C-s
M-x recover-fileは確認を求める前に、指定したファイルとauto-saveファイルのあるディレクトリー一覧を表示するので、ファイルのサイズや日付を確認できます。auto-saveの方が古い場合、M-x recover-fileはそれを読み込むように提案しません。
Emacsまたはコンピューターがクラッシュしたとき、M-x recover-sessionコマンドで編集していたすべてのファイルを、それらのauto-saveファイルで復旧できます。これは最初に中断されたセッションの記録された一覧を表示します。ポイントを移動して選択してから、C-c C-cをタイプします。
recover-session
は、そのセッションの間に編集されていた各ファイルについて、ファイルを復旧するか尋ねます。yと応えるとrecover-file
を呼び出し、通常の方法で復旧を行います。これは元のファイルとauto-saveファイルの日付を表示して、ファイルの復旧を行うかもう1度尋ねます。
recover-session
が完了すると、復旧を選択したファイルがEmacsバッファーに表示されます。実際にファイル自体を
更新するためには、これらを保存するのが唯一の方法です。
Emacsは中断されたセッションについての情報を、ディレクトリー~/.emacs.d/auto-save-list/の、.saves-pid-hostname~という名前のファイルに記録します。auto-save-list-file-prefix
をnil
にセットすると、復旧用にセッションが記録されなくなります。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
シンボリックリンクとハードリンクは、同じファイルを参照するためにいくつかの名前を使うことを可能にします。ハードリンクは、ファイルを直接参照する他の名前です。それらすべての名前は同じように有効で、それらの間に優先順位はありません。対照的にシンボリックリンクは、ある種の定義されたエイリアス(別名)です。fooがbarへのシンボリックリンクの場合、そのファイルをどちらの名前でも参照できますが、barが実際の名前で、fooはエイリアスに過ぎません。シンボリックリンクがディレクトリーを指すときは、さらに複雑なケースが発生します。
Emacsがすでに異なる名前でvisitしている場合、通常はエコーエリアにメッセージを表示して、そのファイルをvisitしている既存のバッファーを使います。これはハードリンクおよびシンボリックリンクをサポートしているシステム、または長いファイル名を切り詰めるシステムで長い名前のファイルを使っている場合、またはファイル名の大文字小文字を区別しないシステムで発生します。変数find-file-suppress-same-file-warnings
を非nil
値にセットすることにより、メッセージを表示しないようにできます。変数find-file-existing-other-name
をnil
にセットすれば、この機能全体を無効にできます。その場合、同じファイルを異なる名前でvisitすると、それぞれのファイル名で別々のバッファーが使われます。
変数find-file-visit-truename
が非nil
の場合、バッファー用に記録されるファイル名は、指定した名前ではなく、ファイルの本当の名前(これはすべてのシンボリックリンクを対象の名前で置き換えて作られます)が使われます。find-file-visit-truename
をセットするは、find-file-existing-other-name
にも暗に影響します。
シンボリックリンクを通じてアクセスされるようなディレクトリーにたいしては通常、優先的にリンクされた名前をEmacsに表示させたいときがあります。これを行うにはdirectory-abbrev-alist
をカスタマイズします。このリストの各要素は(from
.
to)
という書式です。これはディレクトリー名にfromが出現したときは常に、fromをtoで置き換えることを意味します。文字列fromは正規表現です(正規表現の構文を参照してください)。正規表現はディレクトリー名の最初の文字にマッチさせる必要があるので、‘\`’で始まります(埋め込みの改行をサポートするディレクトリー名の場合は、‘^’で無効にします)。toには同じディレクトリーを指す、絶対パスによる普通のディレクトリー名を指定する必要があります。文字列toでホームディレクトリーを指定するのに、‘~’を使用しないでください。Emacsはこれらの変換を個別に行います。以下は通常シンボリックリンク/fsfでアクセスされる、/home/fsfを指定する例です:
(("\\`/home/fsf" . "/fsf"))
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ファイルシステムは、ファイルをディレクトリーにグループ化します。ディレクトリーリストは、ディレクトリーに含まれるファイルのリストです。Emacsはディレクトリーを作成および削除するコマンドを提供し、簡単な形式(ファイル名のみ)、および詳細な形式(サイズ、日付、その他の属性を含む)のディレクトリーリストを作成します。EmacsにはDiredと呼ばれるディレクトリーブラウザーも含まれています。詳細はDired (ディレクトリーエディター)(C-x dで呼び出せる)を参照してください。
簡単なディレクトリーリストを表示します(list-directory
)。
詳細なディレクトリーリストを表示します。
dirnameという名前の新しいディレクトリーを作成します。
dirnameという名前のディレクトリーを削除します。もし空でない場合、それらを再帰的に削除するか尋ねます。
ディレクトリーリストを表示するコマンドは、C-x C-d
(list-directory
)です。これはミニバッファーを使って、リストを表示するディレクトリーと、リストするファイルを指定するワイルドカードが含まれたパターンの両方により、ファイル名を読み取ります。たとえば
C-x C-d /u2/emacs/etc RET
これはディレクトリー/u2/emacs/etcのファイルをリストします。以下はファイル名のパターンを指定する例です。
C-x C-d /u2/emacs/src/*.c RET
通常、C-x C-dは名前だけを含む、簡単なディレクトリーリストを表示します。数引数(値は関係なし)は、サイズ、日付、所有者を含む詳細な一覧を作成するよう指示します。
ディレクトリーリストのテキストは、主に下位プロセスとしてls
を実行することにより取得されます。2つのEmacs変数が、ls
に指定するスイッチを制御します。list-directory-brief-switches
には、簡単な一覧に使うためのスイッチを文字列で指定します(デフォルトは"-CF"
)。list-directory-verbose-switches
には、詳細な一覧に使うためのスイッチを文字列で指定します(デフォルトは"-l"
)。
詳細なディレクトリーのリストでは、Emacsはディレクトリーを含むディスク上のフリー領域サイズに関する情報を追加します。
コマンドM-x
delete-directoryは、ミニバッファーを使ってディレクトリー名の入力を求め、空のときはディレクトリーを削除します。ディレクトリーが空でない場合、再帰的に削除するか確認を求めます。“Trash(ごみ箱)”(または“Recycle
Bin”)の機能をもつシステムでは、変数delete-by-moving-to-trash
をt
に変更することにより、指定したディレクトリーを無条件に削除するかわりに、ごみ箱に移動します。ごみ箱の使い方についての情報は、その他のファイル操作を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
コマンドM-x
diffは、ミニバッファーを使って2つのファイル名の入力を求め、*diff*という名前のバッファーに、2つのファイルの違いを表示します。これはdiff
プログラムに、変数diff-switches
で指定されたオプションを指定して実行することにより機能します。diff-switches
には文字列を指定します。デフォルトはunified
context diff形式を指定する"-u"
です。プログラムについての情報は、Diff in Comparing and Merging Filesを参照してください。
diff
コマンドの出力は、Diffモードと呼ばれるメジャーモードを使って表示されます。Diffモードを参照してください。
(より高機能な)代替物はM-x ediffです(Ediff in The Ediff Manualを参照)。
コマンドM-x
diff-backupは指定したファイルと、そのファイルの一番最近のバックアップを比較します。バックアップファイル名を指定したときは、diff-backup
は指定されたバックアップファイルと、それの元となるファイルを比較します。それ以外の点はM-x
diffと同じです。
コマンドM-x diff-buffer-with-fileは指定されたバッファーと、それに対応するファイルを比較します。これはバッファーを保存すると、ファイルにどのような変更がされるかを表示します。
コマンドM-x diff-buffersは指定した2つのバッファーのコンテンツを比較します。
コマンドM-x compare-windowsはカレントウィンドウと、カレントウィンドウの前に選択されていたウィンドウを比較します(Emacsのウィンドウについての詳細は、複数ウィンドウを参照してください)。比較はそれぞれのウィンドウのポイント位置から、それぞれのバッファーのポイントの初期位置を、対応するバッファーのマークリング(マークリングを参照)にpushした後に開始されます。それから各ウィンドウのポイントを1文字ずつ前方に移動していきます。文字がマッチしなくなるとコマンドは終了します。
コマンドを開始したとき、2つのウィンドウのポイントの後ろのテキストがマッチしない場合、M-x compare-windowsは2つのウィンドウでマッチするテキストが見つかるまでポイントを進めてから終了します。したがってM-x compare-windowsを繰り返し使うと、毎回1つのマッチする範囲をスキップするか、次の開始点を探します。
数引数を指定すると、compare-windows
は空白文字の違いを無視します。変数compare-ignore-case
が非nil
の場合、大文字小文字の違いを無視して比較します。変数compare-ignore-whitespace
が非nil
の場合、compare-windows
はデフォルトでは空白文字の違いを無視しますが、数引数が指定されたときは、その回のコマンド呼び出しでは、これをオフにします。
M-x
smerge-modeを使って、Smergeモードに切り替えることができます。これはdiff3
プログラムの出力を編集するマイナーモードです。これは通常、バージョン管理システムと、バージョン管理システムの外でのupdateをマージするとき、ファイルへの変更が競合して失敗した結果です。Smergeモードは特定の変更を選択することにより、競合を解決するコマンドを提供します。
ファイルをマージする強力なインターフェースを提供するEmerge機能については、 Emergeでのファイルのマージを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Diffモードは、M-x
diffや他の同様なコマンドの出力のために使用されるメジャーモードです。この種の出力はpatchと呼ばれます。なぜならそれが特定の変更を自動的に適用するために、patch
コマンドに渡されるからです。手動でDiffモードを選択するには、M-x
diff-modeとタイプします。
パッチに指定された変更は、hunk(欲張り)にグループ化されます。これは変更された行を1行以上含むテキストと、それに隣接するテキストです。hunksもまた、変更のコンテキストを提供するために、変更されていない行も含みます。それぞれのhunkにはhunkヘッダーが前についていて、これはhunkの変更が発生した、古い行番号と、新しい行番号が指定されます。Diffモードは実際のhunkの内容と区別するため、hunkヘッダーをハイライトします。
パッチ内の最初のhunkの前にはファイルヘッダーがあり、それはそのファイルの新たなバージョンと古いバージョンの名前と、それらのタイムスタンプを示します。パッチが複数ファイルの変更を表す場合、各ファイルがそのファイルの変更の最初のhunkの前にそのようなヘッダーをもつことになります。
他のバッファーと同様に、Diffモードのバッファーを編集することができます(もし読み込み専用の場合、最初にそれを書き込み可にする必要があります。その他のバッファー操作を参照のこと)。hunkを編集すると、Diffモードはpatchを正しい状態に保ち、patch
により正しく適用できるように、hunkヘッダーの行番号を自動的に修正しようと試みます。自動的な行番号の修正を無効にするには、変数diff-update-on-the-fly
をnil
に変更してください。
DiffモードはM-g M-nやエラーメッセージを処理する他のコマンドによりコンパイラーのエラーメッセージとして扱われるようにhunkをアレンジします(Compilationモードを参照)。したがって、対応するソースの位置をvisitするために、Compilationモードのコマンドを使用できます。
それに加えてDiffモードは、移動、操作、patchの一部を適用するために、以下のコマンドを提供します:
次のhunk-startに移動します(diff-hunk-next
)。プレフィクス引数を指定した場合は、次のn番目のhunkに前方へ移動します。
デフォルトではDiffモードはEmacsが表示する際により良い粒度で変更をハイライトできるようにhunkをリファイン(refine:
洗練する)します。diff-refine
にシンボルnavigation
をセットすると、Diffはこのコマンドやdiff-hunk-prev
で移動したhunkだけをリファインします。
前のhunkが開始される位置に移動します(diff-hunk-prev
)。プレフィクス引数を指定した場合には、前のn番目のhunkに後方へ移動します。diff-refine
にシンボルnavigation
をセットしていれば、このコマンドはM-nと同様に移動先のhunkをリファインします。
複数ファイルへのpatchで、次のファイルが開始される位置に移動します(diff-file-next
)。プレフィクス引数を指定した場合は、次のn番目のファイルの先頭へ、前方に移動します。
複数ファイルへのpatchで、前のファイルが開始される位置に移動します(diff-file-prev
)。プレフィクス引数を指定した場合は、前のn番目のファイルの先頭へ、後方に移動します。
ポイントがある位置のhunkをkillします(diff-hunk-kill
)。
複数ファイルへのpatchで、現在のファイル部分をkillします(diff-file-kill
)。
そのhunkを、ターゲットファイルに適用します(diff-apply-hunk
)。C-uによるプレフィクス引数を与えた場合は、このhunkをリバート(“新しい”バージョンを“古い”バージョンに変更するリバースhunkを適用する)します。diff-jump-to-old-file
が非nil
なら、かわりにsのhunkを“古い”バージョンに適用します。
ポイント位置のhunkの変更を、よりよい粒度でハイライトします(diff-refine-hunk
)。これにより変更された各行について実際に変更された箇所を確実に見ることができます。
デフォルトではDiffモードはEmacsがhunkを表示する際にhunkをリファインするので、diff-refine
を非デフォルト値にカスタマイズしている場合にはこのコマンドが有用だと思うかもしれません。
そのhunkに対応するソースファイルの該当行にジャンプします(diff-goto-source
)。デフォルトではファイルヘッダーの最初に示される、“新しい”バージョンのファイルにジャンプします。プレフィクス引数を与えた場合には、かわりに“古い”バージョンにジャンプします。diff-jump-to-old-file
が非nil
なら、このコマンドはデフォルトで“古い”バージョンにジャンプして、プレフィクス引数の意味も逆になります。プレフィクス引数が8より大(たとえばC-u
C-u C-c
C-cとタイプした場合)なら、このコマンドは次回呼び出しにたいしてdiff-jump-to-old-file
のセットも行います。ソースファイルがバージョンコントロール(バージョンコントロールを参照)の配下にある場合には、デフォルトでは作業ファイルにジャンプします。プレフィクス引数を与えると、ポイントが古い行にあれば“旧”リビジョン(古いリビジョンの調査と比較を参照)、それ以外なら“新”リビジョンにジャンプします。
このパッチでEdiffセッションを開始します。Ediff in The Ediff Manualを参照してください。
表示を現在のhunkに制限します(diff-restrict-view
)。ナローイングを参照してください。プレフィクス引数を指定すると、複数ファイルへのpatchで、表示を現在のファイルに制限します。制限を解除するには、C-x
n w (widen
)を使います。
バッファー全体にたいする比較方向を逆転します(diff-reverse-direction
)。プレフィクス引数を与えた場合は、カレントリージョンの内部でのみ方向を逆転します(マークとリージョンを参照)。方向の逆転とは、hunkとファイル冒頭のヘッダーを、“新しい”バージョンから“古い”バージョンにするパッチを生成するように変更することを意味します。
ポイント位置でhunkを2つの別個のhunkに分割します(diff-split-hunk
)。これはhunkヘッダーの挿入ち、カレントhunkのヘッダーの変更を行います。これは手動でpatchを編集するために有用で、diff
プログラムに-uまたは--unifiedオプションを指定して生成された、unified
diff
format(統一diffフォーマット)だけで機能します。diff
に-cまたは--contextオプションを指定して生成された、context
diff format(コンテキストdiffフォーマット)のhunkを分割するには、最初にC-c C-uで、バッファーをunified
diff formatに変換する必要があります。
バッファー全体を、context diff
formatに変換します(diff-unified->context
)。プレフィクス引数を指定すると、リージョンのhunkだけを変換します。
バッファー全体をunified diff
formatに変換します(diff-context->unified
)。プレフィクス引数を指定すると、unified
formatからcontext formatに変換します。マークがアクティブのときは、リージョンのhunkだけを変換します。
空白文字の変更を無視して、カレントhunkを再生成します(diff-ignore-whitespace-hunk
)。
それぞれのhunkについて、C-x 4 aが行うようにChangeLog(変更ログを参照してください)のエントリーを生成します(diff-add-change-log-entries-other-window
)。これは、あとで実際に変更の説明を記入できるように、変更ログの雛形を作ります。DiffモードでのC-x
4
a自体は、現在のhunkのファイルのためのものですが、関数名はpatch自体から取得します。これはpatchにより削除される関数のための、ログエントリーを作るのに有用です。
patchには変更された行の行末に、無意識に入力された望んでいない空白文字が含まれている場合があります。この問題を扱うには2つの方法があります。1つ目はDiffバッファーでWhitespaceモード(不要なスペースを参照してください)を有効にする方法で、これは自動的に変更された行の行末にある空白文字をハイライトします。2つ目はコマンドM-x diff-delete-trailing-whitespaceを使う方法で、patchにより変更された行の行末の空白文字を検索して、patchとpatchされたソースファイルの両方からそれを取り除きます。このコマンドは変更を保存しないので、ユーザーが変更を保存するか決定することができます(変更されたファイルはエコーエリアに表示されます)。プレフィクス引数を指定すると、patchされた(“新しい”)ファイルではなく、元の(“古い”)ソースファイルを変更しようと試みます。
非nil
ならhunk内のソース断片は適切なメジャーモードに応じてハイライトされます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsにはファイルをコピー、命名、リネームするためのコマンドがいくつかあります。これらはすべてミニバッファーを使用してold(またはtarget)とnewの2つのファイル名を読み取り、それらをコピー、またはファイル名に調整します。これらのコマンドは、ワイルドカードを含むファイル名は許容しません。
これらすべてのコマンドは、引数newが単なるディレクトリー名(Directory Names in the Emacs Lisp Reference Manualを参照)の場合には、そのディレクトリーを実際の新しい名前として、oldをそれの非ディレクトリー成分とします。たとえば、コマンドM-x rename-file RET ~/foo RET /tmp/ RETは、~/fooを/tmp/fooにリネームします。GNU、およびその他のPOSIXシステムでは、ディレクトリー名は‘/’で終端されます。
これらのコマンドはすべて、新しいファイル名がすでに存在する場合は確認を求めます。
M-x copy-fileはファイルoldのコンテンツを、ファイルnewにコピーします。
M-x copy-directoryは、シェルコマンドcp
-r
と同じようにディレクトリーをコピーします。newがディレクトリー名の場合、このコマンドはoldディレクトリーのコピーを作成して、それをnewの下に配します。それ以外では、このコマンドはoldのコンテンツを、新しいnewという名前のディレクトリーにすべてコピーします。
M-x rename-fileは、ファイルoldをnewにリネームします。すでにファイル名newが存在する場合、確認にyesと答えなければリネームは行われません。なぜなら、名前newの古い内容が失われてしまうからです。oldとnewが異なるファイルシステム上にある場合は、ファイルoldがコピーされた後に削除されます。
ファイルがバージョンコントロール(バージョンコントロールを参照してください)の配下にある時は、M-x rename-fileのかわりにM-x vc-rename-fileを使ってリネームします。バージョンコントロールされたファイルの削除とリネームを参照してください。
M-x add-name-to-fileは、既存のファイルの古い名前を削除せずに、新しい名前を追加します。新しい名前は、既存のファイルのハードリンクとして作成されます。新しい名前は、そのファイルがあるのと同じファイルシステムになければなりません。MS-Windowsでは、このコマンドはファイルがNTFSファイルシステムにあるときだけ機能します。MS-DOS、およびその他いくつかのリモートシステムタイプでは、ファイルをコピーすることにより機能します。
M-x make-symbolic-linkは、targetを指すnewという名前のシンボリックリンクを作成します。これにより、今後newというファイルを開こうとすると、その時点でtargetという名前のファイルが何であれ、ファイルのオープンが行われたときは、そのファイルを開きます。その時点でtargetという名前のファイルが存在しないときはエラーになります。このコマンドは引数targetを展開しないので、リンクの対象を相対パスで指定できます。しかし、このコマンドはtarget内の先頭の‘~’は展開するので、簡単にホームディレクトリーを指定できます。また、先頭の‘/:’は取り除くので、リテラル‘~’および‘/:’で始まる相対パスを指定することができます。ファイル名のクォートを参照してください。MS-Windowsでは、このコマンドはMS Windows Vista以降だけで機能します。newがリモートのときは、そのシステムタイプに依存して機能します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsには、ファイルを操作する他のコマンドがたくさん存在します。それらはすべて1つのファイルを操作します。ファイル名にワイルドカードは指定できません。
M-x
delete-fileはファイルの入力を求め、そのファイルを削除します。1つのディレクトリーにある、複数のファイルを削除する場合、delete-file
よりDiredを使う方が便利でしょう。Diredでのファイルの削除についてを参照してください。
M-x move-file-to-trashは、ファイルをシステムのTrash(またはRecycle Bin)に移動します。この機能は、ほとんどのオペレーティングシステムで利用可能です。Trashに移動されたファイルは、後で気が変わったとき元に戻すことができます(trashに移動されたファイルのリストアはシステムに依存する)。
デフォルトでは、Emacsの削除コマンドはTrashを使いません。一般的な削除コマンドでTrash(それが利用可能な場合)を使うには、変数delete-by-moving-to-trash
をt
に変更します。これはコマンドM-x
delete-fileとM-x delete-directory
(ファイルディレクトリーを参照してください)、およびDired (Diredでのファイルの削除についてを参照してください)の削除コマンドに影響を与えます。M-x delete-fileおよびM-x
delete-directoryにプレフィクス引数を与えると、delete-by-moving-to-trash
の値にかかわらず、Trashを使わずに完全に削除します。
ファイルがバージョンコントロール(バージョンコントロールを参照してください)の配下にある時は、M-x delete-fileのかわりにM-x vc-delete-fileを使って、ファイルを削除します。バージョンコントロールされたファイルの削除とリネームを参照してください。
M-x insert-file(C-x iも)は、指定したファイルの内容のコピーを、現在のポイント位置に挿入し、ポイントの位置は変更せずに挿入された内容の前に残します。挿入した内容の後の位置はマークリングに追加され、マークは非アクティブになります(マークリングを参照してください)。
M-x insert-file-literallyもM-x insert-fileと同様ですが、ファイルはliterally(そのまま)挿入されます。つまりM-x find-file-literallyコマンド(ファイルのvisit(訪問)を参照してください)と同様に、特別なエンコーディングや変換なしに、ASCII文字の並びとして扱われます。
M-x write-regionはM-x
insert-fileの逆です。このコマンドはリージョンの内容を、指定されたファイルにコピーします。M-x
append-to-fileはリージョンのテキストを、指定されたファイルの末尾に加えます。テキストの追加を参照してください。変数write-region-inhibit-fsync
の値は、これらのコマンドおよびファイルの保存に影響を与えます。ファイル保存のカスタマイズを参照してください。
M-x set-file-modesはファイル名と、その後にファイルモード(file
mode)を読み込んで、指定されたファイルにそのファイルモードを適用します。ファイルモード(またはファイルパーミッション(file
permissions)とも呼ばれます)は、ファイルが読み込み可能か、書き込み可能か、実行可能か、そしてそれは誰にたいしてなのかを決定します。このコマンドは、chmod
コマンドに指定する形式の、シンボルまたは8進のファイルモードを読み取ります。たとえば‘u+x’は、そのファイルを所有するユーザーに実行可能の権限を追加することを意味します。ファイルモードをサポートしないオペレーティングシステムでは、効果はありません。chmod
はこの関数の便利なエイリアスです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsは、圧縮されたファイルをvisitするとき、自動的に解凍します。また、それらのファイルを変更して保存するときも、自動的に再圧縮します。Emacsは圧縮ファイルを名前で認識します。ファイル名が‘.gz’で終わっていれば、それはファイルがgzip
で圧縮されていることを示します。他の拡張子の場合は、他の圧縮プログラムを示します。
自動的な解凍と圧縮は、Emacsがファイル内容を操作するすべてに適用されます。これにはvisit、保存、内容のバッファーへの挿入、ロード、バイトコンパイルが含まれます。
この機能を無効にするには、コマンドM-x
auto-compression-modeとタイプします。変数auto-compression-mode
をカスタマイズすることにより、永続的に無効にすることができます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
名前が‘.tar’で終わるファイルは通常、tar
プログラムで作られたアーカイブです。Emacsはそれらを、Tarモードと呼ばれる特別なモードで表示します。これは内容をDiredに似たリストで提供します(Dired (ディレクトリーエディター)を参照してください)。リストの移動はDiredのときと同様で、アーカイブに含まれるファイルをvisitできます。しかしTarモードでは、Diredコマンドのすべてが利用可能ではありません。
Auto Compressionモードが有効な場合(圧縮ファイルへのアクセスを参照してください)、Tarモードは圧縮アーカイブ(ファイルの拡張子が‘.tgz’、.tar.Z
、.tar.gz
)も使うことができます。
キーe、f、RETはすべて、ファイルをファイル自身のバッファーに展開します。それをバッファーで編集して、バッファーを保存すると、編集されたバージョンでTarバッファーのものを置き換えます。Tarバッファーでファイル名をマウスでクリックしても、同様なことが行えます。vはファイルをバッファーにViewモードで展開します(Viewモードを参照してください)。oは、ファイルを展開して他のウィンドウで表示するので、ファイルの編集とアーカイブの操作を同時に行うことができます。
キーIは、新しい(標準)ファイルをアーカイブに追加します。ファイルは最初は空ですが、上記のコマンドを使用してすぐに編集することができます。このコマンドはカレントのファイルの前に新しいファイルを挿入するので、Tarバッファーの最上行で使用すると、新しいファイルがアーカイブの最上行となり、バッファーの最後で使用すると、新しいファイルがアーカイブの最下行になります。
Diredと同様に、dは後でxを使ったときにファイルを削除するためにマークし、uはマークを外します。Cはファイルをアーカイブからディスクにコピーし、Rはアーカイブのファイルをリネームします。gはバッファーをディスク上のアーカイブでリバートします。キーM、G、Oは、ファイルのパーミッションビット、グループ、所有者を変更します。
Tarバッファーの保存により、構成要素に変更が施された、新しいバージョンのアーカイブをディスクに書き込みます。
Tarモードを使うのに、tar
プログラムは必要ありません。Emacsは直接アーカイブを読み込みます。しかし圧縮アーカイブへのアクセスには、適切な解凍プログラムが必要です。
arc
、jar
、lzh
、zip
、rar
、7z
、zoo
、および自己解凍実行形式のexe
には、互いに似通った異なるArchiveモードが使われます。
ArchiveモードのキーバインドはTarモードと同様で、それに加えてキーmは後に続く操作のためにファイルをマークし、M-DELはマークされたファイルのマークをすべて外します。キーaは、1行に収まらないようなアーカイブの、詳細なファイル情報の表示を切り替えます。ファイルのリネーム、ファイルモードや所有者の変更をサポートするアーカイブ書式は、いくつかに限られます。
Tarモードとは異なり、Archiveモードはアーカイブの展開と格納に、アーカイブプログラムを実行します。しかし、展開したりアーカイブ内のファイルを操作するときだけこれらのプログラムが必要で、アーカイブの目録を見るには必要ありません。プログラム名とセットできるオプションの詳細は、Customizeグループ‘Archive’でセットできます(カスタマイズグループを参照してください)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
他のマシンにあるファイルを、特別なファイル名構文を使って参照できます:
/method:host:filename /method:user@host:filename /method:user@host#port:filename
このリクエストを発行するために、Emacsはssh
のような、リモートログインプログラムを使います。どのmethodを使うかは、常にファイル名で指定しなければなりません。たとえば/ssh:user@host:filenameはssh
を使います。ファイル名のmethodに擬似methodの‘-’を使用したとき、Emacsは以下によりmethodを選択します:
tramp-default-method
が‘ftp’にセットされているとき、EmacsはFTPを使います。
ssh-agent
が実行されているとき、Emacsはscp
を使います。
ssh
を使います。
変数tramp-mode
をnil
にセットすることにより、リモートファイル名の機能を完全にオフにすることができます。個別のケースについて機能をオフにするには、ファイル名を‘/:’でクォートします(ファイル名のクォートを参照してください)。
FTPを通じたリモートファイルへのアクセスは、以下で説明するAnge-FTPパッケージで処理されます。他の方法によりリモートファイルへのアクセスはTrampパッケージにより処理され、これにはそれ自身のマニュアルがあります。The Tramp Manual in The Tramp Manualを参照してください。
Ange-FTPパッケージでは、リモートファイル名にユーザー名userがしているときは、FTPを通じてその名前でログインします。userが指定されていないとき、Emacsはローカルシステムのユーザー名でログインします。しかし変数ange-ftp-default-user
に文字列がセットされているときは、かわりにその文字列を使用します。Emacsは、ログイン時にパスワードの入力も求めます。
パフォーマンス的な理由により、FTPを通じたファイルのアクセス時に、デフォルトではEmacsはバックアップファイルを作成しません。バックアップを作成するには、変数ange-ftp-make-backup-files
を非nil
値に変更してください。
デフォルトではリモートファイルの自動保存ファイルは、変数auto-save-file-name-transforms
で指定された、ローカルマシンの一時ディレクトリーに作成されます。自動保存ファイルを参照してください。
匿名FTPでアクセスできるファイルをvisitするには、特別なユーザー名‘anonymous’または‘ftp’を使います。これらのユーザー名にたいするパスワードは、特別に処理されます。これは変数ange-ftp-generate-anonymous-password
により制御されます。この変数の値が文字列の場合、その文字列がパスワードとして使用されます。非nil
(デフォルト)の場合、user-mail-address
の値が使用されます。nil
の場合、Emacsは通常どおりパスワードの入力を求めます(パスワードの入力を参照してください)。
セキュリティー上の理由で、リモートマシンとの間にあるファイアーウォール(firewall)により、ファイルにアクセスできないときがあります。対象ファイルにアクセスできるマシンからゲートウェイ(gateway)マシンにログインできて、FTPサーバーがゲートウェイ機能をサポートしている場合は、リモートファイル名を使うことができます。これを行うには変数ange-ftp-gateway-host
にゲートウェイマシンの名前をセットして、ange-ftp-smart-gateway
をt
にセットする必要があります。それ以外の場合でもリモートファイル名が機能するようにできますが、その方法は複雑です。これらの方法は、M-x
finder-commentary RET ange-ftp RETとタイプして読むことができます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
特殊な文字や構文を含むファイルにたいする特別な効果を防ぐために、絶対ファイル名をクォートできます。これを行うには先頭に‘/:’を追加します。
たとえばリモートにあるように見える名前の、ローカルなファイルの名前をクォートすることにより、リモートファイル名として扱われないようにすることができます。したがって名前が/foo:というディレクトリーがあり、そこにbarという名前のファイルがある場合、Emacsでは、そのファイルを‘/:/foo:/bar’という名前で参照できます。
リモートファイル名もローカル部分の特殊文字だけをクォートしたい場合はローカル部分だけをクォートできます。たとえば‘/ssh:baz:/:/foo:/bar’は、ホストbaz上のディレクトリー/foo:のファイルbarを参照します。
‘/:’は、‘~’がユーザーのホームディレクトリーを意味する、特別な文字として扱われることを防ぐこともできます。たとえば/:/tmp/~hackは、ディレクトリー/tmpのファイル~hackを参照します。
‘/:’によるクォートは、ミニバッファーでの名前に‘$’を含むファイル名の入力にも使用できます。これが機能するには、ミニバッファーの最初の内容が‘/:’で始まらなければなりません(2回‘$’を記述することでも同様な効果が得られます。詳細はFile Names with $を参照してください)。
ファイルをvisitするときに、ワイルドカードをクォートすることもできます。たとえば/:/tmp/foo*barは、ファイル/tmp/foo*barをvisitします。
同じ効果を得るための別の方法は、/tmp/foo[*]barと入力する方法です。これは/tmp/foo*barだけにマッチするワイルドカード指定です。しかしクォートしなくても同じ結果が得られるので、ワイルドカード文字をクォートする必要がない場合がたくさんあります。たとえば/tmpの中に‘foo’で始まり‘bar’で終わるファイルがfoo*barだけの場合、/tmp/foo*barと指定することにより、/tmp/foo*barだけをvisitすることができます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ファイル名キャッシュ(file name
cache)により、ファイルがどこにあるか正確に覚えていなくても、名前でファイルがどこにあるかを簡単に指定することができます。ファイル名をミニバッファーでタイプするとき、C-TAB
(file-cache-minibuffer-complete
)で、ファイル名キャッシュを使ったファイル名を補完が行なわれます。C-TABを繰り返すと、最初にタイプした内容から補完できる利用可能な候補を順番に表示します(しかしC-TAB文字は、多くのテキスト端末でタイプできないことに注意してください)。
ファイル名キャッシュは自動的に充填されません。かわりに以下のコマンドを使ってファイル名をキャッシュにロードします。
directoryの各ファイルを、ファイル名キャッシュに加えます。
directoryの各ファイルを、ファイル名キャッシュに加えるとともに、ネストされたサブディレクトリーのすべてのファイルを、ファイル名キャッシュに加えます。
directoryの各ファイルを、ファイル名キャッシュに加えるとともに、ネストされたサブディレクトリーのすべてのファイルを、ファイル名キャッシュに加えます。ファイルの検索には、locate
を使用します。
variableにリストされた各ディレクトリーのファイル名を、ファイル名キャッシュに加えます。variableはLisp変数で、load-path
と同様、値はディレクトリーのリストです。
キャッシュをクリアーして、すべてのファイル名を削除します。
ファイル名キャッシュは永続的ではありません。キャッシュが維持されるのはEmacsのセッションの間だけです。キャッシュの内容は、file-cache-display
コマンドで閲覧できます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このセクションでは、最近開いたファイルの検索、バッファーからのファイル名の読み取りなどの便利な機能を紹介します。
M-x
recentf-modeでRecentfモードを有効にすると、‘File’メニューに最近開いたファイルを含むサブメニューが含まれるようになります。M-x
recentf-save-listは現在のrecentf-list
をファイルに保存して、M-x
recentf-edit-listでそれを編集できます。
M-x
ffapコマンドは、find-file
を一般化した、より強力なデフォルト決定のための機能で、基本的にはポイント位置のテキストにもとづいて決定を行ないます。Partial
Completionモードはfind-file
を拡張する、ffap
とともに使用できるその他の機能を提案します。補完オプションを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
イメージファイルをvisitすることによりImageモードが選択されます。このメジャーモードではC-c C-c
(image-toggle-display
)とタイプすることにより、Emacsバッファーでファイルのイメージ表示とイメージの元となるテキスト(またはraw
byte)表示を切り替えることができます。さらにC-c C-x
(image-toggle-hex-display
)とタイプすると、Emacsバッファー内でイメージとしてファイルを表示、または16進表記で表示を切り替えることができます。ファイルのイメージ表示は、Emacsがそのようなイメージの表示をサポートするようにコンパイルされているときだけ機能します。
イメージを表示するウィンドウよりイメージの幅または高さが大きければ、通常のポイント移動キー(C-f、C-p、...)によりイメージの他の部分が表示されます。しかしデフォルトではイメージはウィンドウにフィットするように自動的にリサイズされるので、これはオプションimage-auto-resize
とimage-auto-resize
を使用してデフォルトの挙動をカスタマイズしている場合だけ必要になります。
手動でイメージをリサイズするには、イメージをウィンドウの幅と高さにフィットさせる、s
bにバインドさているコマンドimage-transform-fit-both
を使用できます。スケール因子(scale
factor)を指定してイメージをスケールするには、s
sにバインドされたコマンドimage-transform-set-scale
を使用します。すべての変換を初期状態にリセットするには、s
0にバイドされたimage-transform-reset
を使用してください。
n (image-next-file
)やp
(image-previous-file
)を押下して、同一ディレクトリー内の次または前のイメージファイルをvisitできます。
イメージの閲覧時に、後で処理するために(たとえば別の場所へコピーするために一群のイメージを選択したいとき)ファイルをマークできると便利なことがあります。m
(image-mode-mark-file
)コマンドは、カレントファイルのディレクトリーを表示中のすべてのDiredバッファーのカレントファイルをマークします。そのようなバッファーがオープンされていなければ、新たなバッファーにディレクトリーがオープンされます。ファイルのマークをオフにするにはコマンドu
(image-mode-mark-file
)を使用します。最後にカレントバッファーのファイル名だけをkillリングにコピーしたければ、コマンドw
(image-mode-copy-file-name-as-kill
)を使用できます。
アニメーションが可能なイメージの場合、コマンドRET
(image-toggle-animation
)で、アニメーションの開始と停止ができます。オプションimage-animate-loop
が非nil
でなければ、アニメーションの再生は1回です。f
(image-next-frame
)とb
(image-previous-frame
)により、アニメーションの各フレームを切り替えることができます。これらのコマンドは数引数を指定することにより、指定した数の分だけ先のフレームを表示できます。F
(image-goto-frame
)により、特定のフレームを指定することができます。フレームは1からインデックスがつきます。a
+ (image-increase-speed
)とタイプすると、アニメーションのスピードが早くなり、a -
(image-decrease-speed
)で遅くなります。またa r
(image-reverse-speed
)で逆再生されます。コマンドa 0
(image-reset-speed
)は、スピードを元の値にリセットします。
EmacsがImageMagickのサポートつきでコンパイルされている場合、さまざまなイメージを描画するのに、ImageMagickを使うことができます。変数imagemagick-enabled-types
は、EmacsがImageMagickを使って描画できるイメージの種類のリストです。リストの各要素は、ImageMagick内部でのイメージ種類にたいする名前で、シンボルまたは等価な文字列で指定します(たとえばBMP
は.bmpイメージです)。利用可能なイメージの種類にたいしてImageMagickを有効にするには、imagemagick-enabled-types
をt
に変更します。変数imagemagick-types-inhibit
は、変数imagemagick-enabled-types
の値にかかわらずmImageMagickを使わずに描画するイメージ種類のリストです(リストのデフォルトにはC
およびHTML
などが含まれ、これらはImageMagickはイメージとして描画できるが、Emacsはイメージとして描画しないものです)。ImageMagickを完全に無効にするには、imagemagick-types-inhibit
をt
に変更してください。
要求されるイメージフォーマットにたいするネイティブサポートをEmacsがもたず、かつimage-use-external-converter
が非nil
なら、Emacsは表示の前に要求されるイメージをPNGに変換するために使用可能な外部ユーティリティーの存在有無の判定を試みます。このイメージ変換には現在のところGraphicsMagick、ImageMagick、ffmpeg
がサポートされています。
Image-Diredパッケージはイメージをサムネールとして表示するのにも使用されます。Diredでのイメージとサムネイルの閲覧を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
定期的に特定のファイルのグループを編集する場合、それらをファイルセット(fileset)として定義できます。これによりvisit、query-replace
、シェルコマンドなどの特別な操作を、すべてのファイルに一度に行うことができます。ファイルセットを使うには、initファイル(Emacs初期化ファイルを参照)に、式(filesets-init)
を追加しなければなりません。これはメニューバーの‘File’メニューに、サブメニュー‘Filesets’を追加します。
ファイルセットを定義する一番簡単な方法は、ファイルを1つずつ追加する方法です。ファイルセットnameにファイルを追加するには、そのファイルをvisitしてM-x filesets-add-buffer RET name RETをタイプします。ファイルセットnameが存在しない場合、現在のファイルだけを含む新しいファイルセットを作成します。コマンドM-x filesets-remove-bufferは、ファイルセットから現在のファイルを削除します。
M-x filesets-edit(または‘Filesets’メニューの‘Edit Filesets’を選択)で、ファイルセットを直接編集することもできます。編集はCustomizeバッファーで行われます(Easy Customizationインターフェースを参照してください)。ファイルセットは通常、単純なファイルのリストですが、ファイル名にマッチする正規表現で、ファイルセットを定義することもできます。より複雑なファイルセットの例は、Customizeバッファーに記されています。将来のEmacsセッションで同じファイルセットを使うには、‘Save for future sessions’を選択するのを忘れないでください。
コマンドM-x filesets-openを使って、ファイルセットのすべてのファイルをvisitし、それらをM-x filesets-closeで閉じることができます。M-x filesets-run-cmdを使って、ファイルセットのすべてのファイルにたいして、シェルコマンドを実行します。これらのコマンドは‘Filesets’メニューからも利用可能で、メニューには既存のファイルセットが、サブメニューとして表示されています。
異なるコンセプトのファイルセット(バージョンコントロール操作のためにグループにまとめられたファイル)については、バージョンコントロールを参照してください。この種のファイルセットには名前がなく、Emacsセッション間で引き継がれません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsで編集するテキストは、バッファー(buffer)と呼ばれるオブジェクトの中に存在します。ファイルをvisitするたびに、そのファイルのテキストを保持するために、バッファーが使われます。Diredを呼び出すたびに、ディレクトリーリストを保持するためにバッファーが使われます。C-x mでメッセージを送信すると、メッセージのテキストを保持するためにバッファーが使われます。コマンドのドキュメントは、*Help*という名前のバッファーに表示されます。
バッファーは使用されているかぎりは存在して、ユーザー(バッファーのkillを参照)またはEmacs(たとえばEmacsのexit時。Emacsからのexitを参照)がもはや必要としなくなったときに削除(または“kill”)されます。
それぞれのバッファーは、任意の長さの一意な名前を持っています。バッファーがウインドウに表示されているとき、バッファーの名前はモードライン(モードラインを参照してください)に表示されます。バッファー名での大文字と小文字の違いは重要です。ほとんどの場合、ほとんどのバッファーはvisitしているファイルから作られ、それらの名前はファイル名から生成されます。しかし、新しい空のバッファーを、任意の名前で作成することもできます。新しく開始されたEmacsにはいくつかのバッファーがあり、それらの中には*scratch*という名前の、Lisp式を評価するのに使用されるバッファーも含まれます。そのバッファーはファイルに関連付けられていません(Lisp Interactionバッファーを参照してください)。
選択されるバッファーは、常に1つだけです。そのバッファーをカレントバッファー(current buffer: 現在のバッファー)と呼びます。「コマンドは“そのバッファー(the buffer)”を操作します」という言い方をするときがあります。これはカレントバッファーを操作するというのが、本当の意味です。Emacsのウィンドウが1つだけのとき、そのウィンドウに表示されているバッファーがカレントになります。複数のウィンドウがあるとき、選択されたウィンドウに表示されているバッファーがカレントになります。複数ウィンドウを参照してください。
バッファーのコンテンツ(contents: 内容)とは、オプションでテキストプロパティ(Text propertiesを参照)のセットをもつ一連の文字から構成されます。テキストプロパティにより、文字により多くの情報を指定できます。
バッファーのテキスト的な内容は別として、それぞれのバッファーはいくつかの情報を記録しています。それらは、(もしあれば)visitしているファイルは何か、変更されているか、有効なメジャーモードとマイナーモードは何か(メジャーモードとマイナーモードを参照してください)、などの情報です。これらは、バッファーローカルな変数(buffer-local variables)に格納され、これらの変数はバッファーごとに異なる値をもつことができます。ローカル変数を参照してください。
バッファーのサイズは、いくつかの最大値を超えて大きくすることはできません。これは一番大きいバッファーの位置が、Emacsの整数(Emacs integers)で表されることにより定義されます。なぜならEmacsはそのデータ型を使用して、バッファーの位置を追跡するからです。通常の64ビットマシンでは、バッファーの最大サイズは2^{61} - 2バイト、およそ2EiBです。通常の32ビットマシンでは、バッファーの最大サイズは通常2^{29} - 2バイト、およそ512MiBです。バッファーのサイズはシステムのメモリー量によっても制限されます。
19.1 バッファーの作成と選択 | 新しいバッファーの作成と既存のバッファーの再選択。 | |
19.2 既存のバッファーを一覧する | 既存のバッファーリストの取得。 | |
19.3 その他のバッファー操作 | リネーム、読み取り専用属性の変更、テキストのコピー。 | |
19.4 バッファーのkill | 不必要なバッファーのkill。 | |
19.5 複数バッファーにたいする操作 | すべてのバッファーにたいするリストの操作と、複数バッファーにたいする操作。 | |
19.6 インダイレクトバッファー | 他のバッファーのテキストを共有するインダイレクトバッファー。 | |
19.7 バッファー処理の便利な機能とカスタマイズ | バッファー操作のための便利な機能とカスタマイズ。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
bufferという名前のバッファーを、選択または作成します(switch-to-buffer
)。
同様ですが、他のウィンドウでbufferを選択します(switch-to-buffer-other-window
)。
同様ですが、別のフレームでbufferを選択します(switch-to-buffer-other-frame
)。
バッファーリストの、前のバッファーを選択します(previous-buffer
)。
バッファーリストの、次のバッファーを選択します(next-buffer
)。
数字nを読み取って、カレントバッファーではない、一番最近選択された、別のウィンドウにあるバッファーの、n行目に移動します。
C-x b
(switch-to-buffer
)コマンドは、ミニバッファーを使ってバッファー名を読み取ります。それからそのバッファーをカレントとして、現在選択されたウィンドウに表示します。空の入力は、そのとき他のウィンドウに表示されていない、一番最近カレントだったバッファーを指定します。
バッファー名を入力するとき、通常の補完とヒストリーコマンドを使うことができます(ミニバッファーを参照してください)。C-x bおよび関連するコマンドは、ミニバッファーの補完に、確認つきの寛大な補完(permissive completion with confirmation)を使うことに注意してください。存在しないバッファー名にたいする補完の後、すぐにRETをタイプすると、Emacsは‘[Confirm]’を出力し、バッファー名を確定するために2回目のRETをタイプしなければなりません。詳細は、補完の終了を参照してください。その他の補完オプションと機能についての詳細は、補完オプションを参照してください。
存在しないバッファーを指定すると、C-x
bはファイルをvisitしていない新しい空のバッファーを作成し、編集用にそのバッファーを選択します。変数major-mode
は、新しいバッファーのメジャーモードのデフォルトを決定します。デフォルトでは、これはFundamentalモードです。メジャーモードを参照してください。新しいバッファーを作る1つの理由は、それを一時的なノートとして使うためです。これを保存しようと試みると、Emacsは保存に使うファイル名を尋ね、バッファーのメジャーモードは、ファイル名にもとづきメジャーモードを再割り当てします(ファイルのモードを選択するを参照してください)。
少ないバッファーの切り替えでは、コマンドC-x LEFTおよびC-x
RIGHTを使うのが便利です。C-x LEFT
(previous-buffer
)は前のバッファー(現在のフレームの一番最近選択されたバッファー順)、C-x
RIGHT
(next-buffer
)は逆方向のバッファーに移動します。いずれのコマンドもプレフィクス数引数をサポートており、それは繰り返し回数として機能します。
現在のウィンドウとは別のウィンドウにバッファーを選択するには、C-x 4 b
(switch-to-buffer-other-window
)とタイプします。これはミニバッファーを使ってバッファー名の入力を求め、選択されているウィンドウではない別のウィンドウに、そのバッファーを表示して、そのウィンドウを選択します。
同様にC-x 5 b
(switch-to-buffer-other-frame
)はバッファー名の入力を求め、他のフレーム(フレームとグラフィカルなディスプレーを参照)にそのバッファーを表示して、そのフレームを選択します。他のウィンドウまたはフレームにすでにバッファーが表示されている場合、Emacsは新しく作成するのではなく、そのウィンドウまたはフレームを選択します。
C-x 4 bおよびC-x 5 bコマンドが表示するウィンドウまたはフレームを取得する方法については、ウィンドウでのバッファーの表示を参照してください。
これらに加えて、C-x C-fや、その他のファイルをvisitするコマンドでも、すでにファイルをvisitしているバッファーに切り替えることができます。ファイルのvisit(訪問)を参照してください。
プレフィクス引数だけを指定したC-u M-g M-g
goto-line
は、ミニバッファーを使って数字nを読み取り、別のウィンドウにあるカレントバッファー以外の、一番最近選択されたバッファーを選択して、ポイントをそのバッファーのn行目の先頭に移動します。これは他のバッファーの行番号を参照するバッファーで特に有用です。ポイントが数字の直後にある場合、goto-line
はnのデフォルトとしてその数字を使います。ただのC-uではないプレフィクス引数では、異なる振る舞いをすることに注意してください。C-u
4 M-g
M-gはミニバッファーから数字を読み取らず、カレントバッファーの4行目にジャンプします(プレフィクス引数を指定しないM-g
M-gは、数字nを読み取ってカレントバッファーのn行目に移動することを思い出してください。ポイント位置の変更を参照してください)。
Emacsはスペースで開始される名前のバッファーを、内部的な用途のために使用しています。それらのバッファーは特別な方法で扱われます。たとえば、それらのバッファーではundo情報が記録されません。そのようなバッファー名を使うことは避けるのが最良です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
既存のバッファーをリストします(list-buffers
)。
既存のバッファーのリストを表示するには、C-x C-bとタイプします。これにより、*Buffer List*という名前のバッファーにバッファーメニューがポップアップします。リストの各行にはバッファー名、サイズ、メジャーモード、visitしているファイルが表示されます。バッファーは、カレントだった順でリストされます。したがって、一番最近カレントだったバッファーが先頭に表示されます。このセクションでは、バッファーリストが表示される方法と、リスト内に示されるさまざまなものの解釈の仕方について説明します。*Buffer List*バッファーの特別なモードと、利用可能なコマンドについては、複数バッファーにたいする操作を参照してください。
行の最初のフィールドの‘.’は、そのバッファーがカレントであることを示します。‘%’は読み取り専用バッファーであることを示します。‘*’はそのバッファーが変更されていることを示します。いくつかのバッファーが変更されていて、それらを保存するべきだと思ったときは、C-x s (ファイルを保存するコマンドを参照してください)で保存します。以下はバッファーリストの例です:
CRM Buffer Size Mode File . * .emacs 3294 Emacs-Lisp ~/.emacs % *Help* 101 Help search.c 86055 C ~/cvs/emacs/src/search.c % src 20959 Dired by name ~/cvs/emacs/src/ * *mail* 42 Mail % HELLO 1607 Fundamental ~/cvs/emacs/etc/HELLO % NEWS 481184 Outline ~/cvs/emacs/etc/NEWS *scratch* 191 Lisp Interaction * *Messages* 1554 Messages
この例でバッファー*Help*は、ヘルプを要求されたことにより作成されます(ヘルプを参照してください)。これはファイルをvisitしていません。バッファーsrc
は、ディレクトリー~/cvs/emacs/src/にたいして、Diredが作成したバッファーです。ファイルをvisitしているバッファーだけを一覧するには、C-u
C-x C-bのように、コマンドにプレフィクス引数を与えます。
list-buffers
は名前がスペースで始まるバッファーを省略します(そのバッファーがファイルをvisitしていない限り)。これらのバッファーは、Emacsにより内部的に使用されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
バッファーの読み取り専用の状態を切り替えます(read-only-mode
)。
カレントバッファーの名前を変更します。
カレントバッファーの末尾に‘<number>’を加えてリネームします。
バッファーbufferをスクロールして閲覧します。Viewモードを参照してください。
バッファーを読み取り専用にすることができます、これはバッファーのテキストにたいして挿入や削除を行うコマンドが許されないことを意味します(とはいえ、他のC-x RET fのようなコマンドは、バッファーを変更済みとマークすることは可能。ファイルのテキストにたいするコーディングシステムの指定を参照されたい)。読み取り専用バッファーのモードラインでは、左余白の近くに‘%%’または‘%*’が表示されます。モードラインを参照してください。読み取り専用バッファーは通常、DiredやRmailのように、そのバッファーのテキストを操作する専用コマンドをもつ、サブシステムにより作成されます。アクセスが制御されているファイルをvisitしたときも、そのバッファーに書き込めない旨が通知されます。
コマンドC-x C-q
(read-only-mode
)は、読み取り専用バッファーを書き込み可能に、書き込み可能なバッファーを読み取り専用にします。これは各バッファーにローカルな変数buffer-read-only
をセットすることにより機能します(値が非nil
のときバッファーは読み取り専用)。オプションview-read-only
を非nil
値に変更すると、C-x
C-qでバッファーを読み取り専用にしたとき、そのバッファーでViewモードが有効になります(Viewモードを参照してください)。
M-x rename-bufferは、カレントバッファーの名前をリネームします。新しい名前はミニバッファーで指定します。デフォルトはありません。他のバッファーで使用済の名前を指定するとエラーとなり、リネームされません。
M-x rename-uniquelyは、カレントバッファーの後ろに数字を追加して、似てはいるが異なる名前を作成します。このコマンドに引数は必要ありません。これは複数のshellバッファーを作成するのに便利です。*shell*バッファーをリネームしてから、再度M-x shellを行うと、これは新しく*shell*という名前のバッファーを作成します。一方リネームされた古いshellバッファーは、新しい名前で実行を続けます。この方法はmailバッファー、compilationバッファー、そして特定の名前で特別なバッファーを作成するEmacs機能に適しています(これらの機能のいくつか、たとえばM-x compile、M-x grepなどでは、コマンドを再度実行する前に他のバッファーに切り替える必要があります。さもないとカレントバッファーの名前を変更せずに、そのバッファーを再使用します)。
コマンドM-x append-to-bufferおよびM-x insert-bufferも、あるバッファーから他のバッファーへテキストをコピーするのに使用できます。テキストの追加を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
しばらくの間、Emacsセッションを続けていると、多くのバッファーが溜まってしまう場合があります。必要のないバッファーをkillしたほうがよいと思うかもしれません(他のエディターではこの操作をclose(閉じる)と呼び、“バッファーを閉じる”とか、ファイルをvisitしているバッファーでは“ファイルを閉じる”のように表現するものもあります)。ほとんどのオペレーティングシステムでは、バッファーをkillすることにより、バッファーのためにEmacsが使用していたメモリーをオペレーティングシステムに解放するので、他のプログラムがそれを使えるようになります。以下はバッファーをkillするコマンドです:
バッファーbufferをkillします(kill-buffer
)。
バッファーを1つずつkillするか尋ねます。
正規表現にマッチするすべてのバッファーをkillするか尋ねます。
C-x k
(kill-buffer
)は、ミニバッファーで指定した名前のバッファーを1つkillします。RETだけをタイプしたときはデフォルトが使われ、これはカレントバッファーをkillします。カレントバッファーをkillすると、最近カレントだったが、今は別のウィンドウにも表示されていないバッファーがカレントになります。ファイルをvisitしているバッファーが変更されているとき、それをkillしようとすると確認を求められます。そのバッファーをkillする前に、確認にyesを応えなければkillできません。
コマンドM-x
kill-some-buffersは、各バッファーについて1つずつ確認を求めます。yesと応えると、kill-buffer
と同様にバッファーをkillすることを意味します。このコマンドは名前がスペースで始まる、Emacsが内部的に使用するバッファーは無視します。
コマンドM-x
kill-matching-buffersは、正規表現の入力を求め、名前がその正規表現にマッチするすべてのバッファーをkillします。正規表現の構文を参照してください。kill-some-buffers
と同様、このコマンドはkillする前に確認を求めます。このコマンドは通常、名前がスペースで始まる、Emacsが内部的に使うバッファーを無視します。内部的なバッファーも同じようにkillするには、プレフィクス引数を指定してkill-matching-buffers
を呼び出します。
さまざまなバッファーをkillするにはBuffer Menu機能も便利です。複数バッファーにたいする操作を参照してください。
バッファーがkillされるときに特別な処理を行いたい場合、フックkill-buffer-hook
にフック関数を追加できます(フックを参照してください)。
(多くの人がそうしているように)何日間も1つのEmacsセッションを使っていると、何日か前に使ったバッファーが溜まってくるかもしれません。コマンドM-x
clean-buffer-listは、それらを一掃するのに便利です。これは長い間使用されていない、変更されていないバッファーをすべてkillします。3日間表示されていない普通のバッファーはkillされます。しかし自動的にkillされるべきではない特定のバッファーを指定したり、使われていない時間が短いバッファーでもkillするように指定できます。これらのデフォルト、およびこのコマンドの挙動の他の動向は、clean-buffer-list
のドキュメント文字列で説明されている、いくつかのオプションをカスタマイズすることにより制御できます。
Midnightモードを有効にすることにより、1日ごとにバッファーを一掃することもできます。Midnightモードは毎日真夜中にclean-buffer-list
、またはノーマルフックmidnight-hook
に指定された関数を実行します(フックを参照してください)。Midnightモードを有効にするには、Customizationバッファーを使って変数midnight-mode
をt
にセットします。Easy Customizationインターフェースを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
すべてのEmacsバッファーの、バッファーリストの編集を開始します。
同様ですが、別のウィンドウで行います。
C-x C-b (既存のバッファーを一覧するを参照してください)でオープンされるBuffer Menuは、単にバッファーを一覧するだけではありません。これはDiredに似たインターフェースで、バッファーにたいしてさまざまな操作を行うことができます。ここでは、バッファーの保存、kill(Diredとの一貫性を保つため、ここではそれらを削除(delete)する、と呼びます)、表示ができます。
Buffer Menuを使うにはC-x C-bとタイプして、*Buffer List*バッファーが表示されたウィンドウに切り替えます。M-x buffer-menuとタイプして、選択されたウィンドウにBuffer Menuを開くこともできます。コマンドM-x buffer-menu-other-windowは、Buffer Menuを別のウィンドウに開いて、そのウィンドウを選択します。
Buffer Menuは読み取り専用バッファーで、このセクションで説明する特別なコマンドだけを通じて変更します。このバッファーでは、通常のカーソル移動コマンドを使うことができます。以下のコマンドは、バッファーのカレント行に適用されます。
そのバッファーの削除(kill)フラグをセットしてから、ポイントを次の行に移動します(Buffer-menu-delete
)。削除フラグは、各行のバッファー名の前の文字‘D’により示されます。削除はxコマンド(以下参照)をタイプしたときだけ発生します。
dと同様ですが、ポイントを下ではなく上に移動します(Buffer-menu-delete-backwards
)。
そのバッファーの保存フラグをセットします(Buffer-menu-save
)。保存フラグは各行のバッファー名の前の文字‘S’により示されます。保存はxコマンド(以下参照)をタイプしたときだけ発生します。同じバッファーに保存と削除の両方をリクエストできます。
すべての削除および保存フラグを処理します(Buffer-menu-execute
)。
カレント行のすべてのフラグを取り除いてから、下に移動します(Buffer-menu-unmark
)。プレフィックス引数を指定した場合は、フラグを取り除いた後、上に移動します。
前の行に移動して、その行のすべてのフラグを取り除きます(Buffer-menu-backup-unmark
)。
すべて行から特定のフラグを取り除きます(Buffer-menu-unmark-all-buffers
)。これは、1文字の入力を求めて、その文字でマークされたバッファーのマークを取り除きます。RETをタイプした場合は、すべてのマークを取り除きます。
すべての行のすべてのフラグを取り除いてから、下に移動します(Buffer-menu-unmark-all
)。
フラグを取り除くコマンドdとC-dには、繰り返し回数として数引数を指定できます。
以下のコマンドは、カレント行にリストされたバッファーを即座に処理します。これらのコマンドにも、繰り返し回数を数引数として指定できます。
バッファーを変更されていない(unmodified)とマークします(Buffer-menu-not-modified
)。ファイルを保存するコマンドを参照してください。
バッファーの読み取り専用属性を切り替えます(Buffer-menu-toggle-read-only
)。その他のバッファー操作を参照してください。
そのバッファーを、tagsテーブルとしてvisitします(Buffer-menu-visit-tags-table
)。タグテーブルの選択を参照してください。
以下は、他のバッファーを選択するために使われるコマンドです:
Buffer Menuメニューを閉じます(quit-window
)。一番最近に表示されていたバッファーが、その場所に表示されます。
そのウィンドウの*Buffer
List*バッファーを置き換えて。この行のバッファーを選択します(Buffer-menu-this-window
)。
C-x 4 bのように*Buffer
List*を表示したまま、その行のバッファーを他のウィンドウで選択します(Buffer-menu-other-window
)。
この行のバッファーを他のウィンドウで表示しますが、選択はしません(Buffer-menu-switch-other-window
)。
この行のバッファーを、フレーム全体のウィンドウで選択します(Buffer-menu-1-window
)。
現在のフレームを2つのウィンドウにセットアップして、この行のバッファーを一方のウィンドウで選択し、もう一方のウィンドウに以前のカレントバッファー(*Buffer
List*)は除く)を表示します(Buffer-menu-2-window
)。
この行のバッファーをbury(つまりバッファーリストの最後)に移動します(Buffer-menu-bury
)。
vコマンドで抜けるとき、この行のバッファーを他のウィンドウで表示されるようにマークします(Buffer-menu-mark
)。表示フラグは行の先頭に文字‘>’で示されます(1つのバッファーが削除と表示のフラグを両方もつことはないでしょう)。
この行のバッファーを選択し、mコマンドでフラグづけされたバッファーも他のウィンドウで表示します(Buffer-menu-select
)。バッファーにフラグをつけていないとき、このコマンドは1と等価です。
以下はバッファーリスト全体に影響を与えるコマンドです:
ポイントがある列の数値にしたがって、Buffer
Menu全体をソートします。数引数nを指定すると、n番目の列でソートします(tabulated-list-sort
)。
カレント列の幅をn文字(プレフィクス引数)広くします。
カレント列の幅をn文字(プレフィクス引数)狭くします。
非ファイルバッファーを削除または再挿入します(Buffer-menu-toggle-files-only
)。このコマンドは、そのようなバッファーがバッファーリストに含まれるか否かを切り替えます。
バッファー*Buffer
List*は通常、バッファーの作成およびkillにより自動的に更新はされません(内容は単なるテキストです)。バッファーを作成・削除・リネームした場合、それが行われたか確かめるために*Buffer
List*を更新するには、g (revert-buffer
)とタイプします。このバッファーのAuto
Revertモードを有効にすれば、このバッファーが変更されたとマークされない限り、auto-revert-interval
秒ごとに定期的に更新させることができます。Global
Auto
Revertモードは、global-auto-revert-non-file-buffers
が非nil
のときだけ、*Buffer
List*バッファーに適用されます。
詳細はglobal-auto-revert-non-file-buffersを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
インダイレクトバッファー(indirect buffer: 間接バッファー)は、そのインダイレクトバッファーのベースバッファー(base buffer: 基底バッファー)と呼ばれる、他のバッファーのテキストを共有します。ある点においては、ファイルに置けるシンボリックリンクの、バッファー版に例えることができます。
ベースバッファーbase-bufferの、インダイレクトバッファーindirect-nameを作成します。
カレントバッファーの、インダイレクトバッファーを作成します。
カレントバッファーのインダイレクトバッファーを作成して、それを別のウィンドウで選択します(clone-indirect-buffer-other-window
)。
インダイレクトバッファーのテキストは、常にベースバッファーのテキストと等しく、どちらかを編集すると、その変更はすぐにもう一方から見えるようになります。しかし他の観点では、インダイレクトバッファーとベースバッファーは、完全に分離されています。これらのバッファーは異なる名前、異なるポイント値、異なるナローイング、異なるマーカー、異なるメジャーモード、異なるローカル変数をもつことができます。
インダイレクトバッファーはファイルをvisitできませんが、ベースバッファーはvisitできます。インダイレクトバッファーの保存を試みると、それは実際にはベースバッファーの保存として機能します。ベースバッファーをkillするとインダイレクトバッファーもkillされますが、インダイレクトバッファーのkillは、ベースバッファーに影響を与えません。
インダイレクトバッファーの1つの使い方としては、アウトラインの複数の視点からの表示です。複数ビューによるアウトラインの閲覧を参照してください。
手早くインダイレクトバッファーを作成するには、コマンドM-x
clone-indirect-bufferを使う方法があります。これはカレントバッファーをベースバッファーとする、インダイレクトバッファーを作成して選択します。数引数を指定すると、インダイレクトバッファーの名前の入力を求めます。指定しない場合、カレントバッファー名の後ろに‘<n>’を付加した名前を使います。C-x
4 c (clone-indirect-buffer-other-window
)は、M-x
clone-indirect-bufferと同様に機能しますが、新しいバッファーを他のウィンドウで選択します。これらの関数はインダイレクトバッファーを作成した後、フックclone-indirect-buffer-hook
を実行します。
インダイレクトバッファーを作成する、より一般的な方法はコマンドM-x make-indirect-bufferです。これはバッファーbase-bufferから、名前がindirect-nameのインダイレクトバッファーを作成します。これらの名前は、ミニバッファーを使って入力が求められます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このセクションではバッファーを切り替えをもっと便利にする、モードと機能をいくつか説明します。
19.7.1 バッファー名を一意にする | ディレクトリー部分でバッファー名を一意にする。 | |
19.7.2 素早いミニバッファーの選択 | 素早いミニバッファーの選択について。 | |
19.7.3 バッファーメニューのカスタマイズ | バッファーメニューの設定。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
同じ名前のファイルを複数のバッファーでvisitしているとき、Emacsはバッファーに区別可能な名前をつけなければなりません。デフォルトの方法はファイルをディレクトリーの一部を後ろに追加する方法です。たとえば同時にファイル/foo/bar/mumble/nameと/baz/quux/mumble/nameをvisitしている場合、バッファーの名前は‘name<bar/mumble>’と‘name<quux/mumble>’になるでしょう。Emacsは名前を一意にするために必要な分だけ、ディレクトリー名の一部を追加します。
オプションuniquify-buffer-name-style
をカスタマイズして、一意なバッファー名を構築するための異なるスタイルを選択することができます。
命名方法forward
は、バッファー名の先頭部分に、ファイルのディレクトリー名の一部を含めます。この方法を使うとファイル/u/rms/tmp/Makefileと/usr/projects/zaphod/Makefileをvisitしているバッファーの名前は、‘tmp/Makefile’と‘zaphod/Makefile’になるでしょう。
対照的に命名方法post-forward
は、バッファーを‘Makefile|tmp’および‘Makefile|zaphod’と名づけます。デフォルトのpost-forward-angle-brackets
は、post-forward
と同様ですが、一意なパスを山形カッコ(angle
brackets)で囲います。命名方法reverse
では、‘Makefile\tmp’および‘Makefile\zaphod’となります。post-forward
とreverse
の重要な違いは、2つのファイルを区別するのに1つのディレクトリ名では不足するときです。reverse
はディレクトリー名を逆順にして命名するので、ファイル/top/middle/fileは‘file\middle\top’となります。一方post-forward
はディレクトリー名を正順でファイル名に追加するので‘file|top/middle’となります。uniquify-buffer-name-style
がnil
にセットされていると、バッファー名の後ろに単に‘<2>’、‘<3>’と加えることにより、バッファー名を作成します。
タイプする前にバッファー名に注意すれば、バッファー名にディレクトリー名を付加する方法に重要な違いはありません。しかしルールを知った経験豊富なユーザーは、それほど注意する必要はないでしょう。そして、その場合いずれかのルールでバッファー名が表示されていれば,思い出し利用するのが容易になることでしょう。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
グローバルなマイナーモードのIcompleteモードは、ミニバッファーで利用可能な補完候補を素早く選択する便利な方法を提供します。これが有効な場合、ミニバッファーでタイプすることにより、すでにタイプした文字にマッチする、利用可能な候補を連続で表示します。
C-jとタイプすることにより、常にリストの最初の補完候補を選択できます。つまり特定の補完候補を選択するには、まずその候補をリストの先頭にすることです。これを行うには2つの方法があります。1つ目の方法は、補完候補の名前をさらにタイプすることにより、違う候補が含まれないように、希望する補完候補にリストを絞りこむ方法です。もう1つはC-.およびC-,を使って、望む候補が先頭にくるまでリストをローテートする方法です。
M-TABはC-jのようにリストの最初の補完候補を選択しますが、ミニバッファーを抜けないので、さらに編集を続けることができます。これはファイル名の入力で通常使われます。M-TABにより、いくつかのディレクトリー階層をたどることができます。
Icompleteモードを有効にするには、M-x
icomplete-modeとタイプするか、変数icomplete-mode
をt
にカスタマイズします(Easy Customizationインターフェースを参照してください)。
FidoモードはIcompleteの代替えとなるモードです。このモードはIcompleteモードと非常に似ていますが、Idoモードと呼ばれるポピュラーな拡張の機能のいくつかを残しています(実際のところこのモード名は“Fake
Ido”から継承された)。特にFidoモードではC-sとC-rを補完リストのローテートにも使用し、C-kはリスト内のファイル削除やバッファーのkillに使用できます。他に特筆すべき観点はデフォルトの保管スタイルとしてflex
を使用する点です(補完候補が選択される方法を参照)。これを変更するには初期化ファイル(Emacs初期化ファイルを参照)に以下を追加してください:
(defun my-icomplete-styles () (setq-local completion-styles '(initials flex))) (add-hook 'icomplete-minibuffer-setup-hook 'my-icomplete-styles)
Fidoモードを有効にするにはM-x
fido-modeとタイプするか、変数fido-mode
をt
にカスタマイズしてください(Easy Customizationインターフェースを参照)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
M-x list-buffersと同様にバッファーリストを作成しますが、カスタマイズが可能です。
バッファーのリストを作成して、Dired様式でそれらを操作できるようにします。
M-x bs-showは、通常C-x
C-bで表示されるのと同じようなバッファーリストを表示しますが、これはより柔軟な方法で表示をカスタマイズできます。たとえば、表示すべきバッファー属性のリスト、バッファー名の列幅の最小と最大、決して表示されないバッファーや常に表示するバッファー名にたいする正規表現を指定することができます。通常のバッファーリストよりこちらのほうが好ましい場合、このコマンドをC-x
C-bにバインドできます。このバッファーリストをカスタマイズするには、Customグループのbs
(Easy Customizationインターフェースを参照)を使用するか、bs-customizeを呼び出してください。
MSBグローバルマイナーモード(“MSB”は“mouse select buffer”が由来)は、カスタマイズ可能なマウスによる別のBuffer
Menuを、好みに応じて提供します。これは通常C-Down-mouse-1、またはC-F10にバインドされているmouse-buffer-menu
と、そのコマンドを置き換えます。メニューはCustomグループmsb
でカスタマイズが可能です。
IBufferとは、バッファーのリストを閲覧して、フィルタリング、マーキング、さまざまな方法によるソート、およびバッファーにたいする処理を含む、Dired(Dired (ディレクトリーエディター)を参照)に似た操作をバッファーに行うメジャーモードです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsのフレームは、2つ以上のウィンドウに分割できます。複数のウィンドウで異なるバッファーを表示したり、1つのバッファーの異なる部分を表示できます。複数フレームは自ずと複数ウィンドウになります。なぜならフレームには、それぞれウィンドウがあるからです。ウィンドウは1つのフレームだけに属します。
20.1 Emacsウィンドウの概念 | Emacsウィンドウの紹介。 | |
20.2 ウィンドウの分割 | 既存のウィンドウを分割して新しいウィンドウを作る。 | |
20.3 他のウィンドウの使用 | 他のウィンドウへの移動と操作。 | |
20.4 他のウィンドウでの表示 | 他のウィンドウのファイルまたはバッファーの検索。 | |
20.5 ウィンドウの削除とリサイズ | ウィンドウの削除とサイズ変更。 | |
20.6 ウィンドウでのバッファーの表示 | Emacsがバッファーを表示するためにウィンドウを選択する方法。 | |
20.7 ウィンドウ処理のための便利な機能 | ウィンドウ処理の便利な機能。 | |
20.8 ウィンドウのタブライン | ウィンドウタブライン。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsの各ウィンドウには、常に1つのEmacsバッファーが表示されます。1つのバッファーは、複数のウィンドウに表示される場合があります。この場合、バッファーのテキストへの任意の変更は、それが表示されているすべてのウィンドウで表示されます。しかし各ウィンドウは独自にポイント値をもっているので、ウィンドウごとにバッファーの異なる部分を表示できます。
常に1つのEmacsウィンドウが、選択されたウィンドウとなります。このウィンドウに表示されているバッファーが、カレントバッファーとなります。グラフィカルなディスプレーでは、選択されたウィンドウのカーソルは、点滅する塗りつぶされたカーソルとなり、選択されていないウィンドウでは、中抜きボックスのカーソルになります。テキスト端末では、カーソルは選択されたウィンドウだけで描画されます。カーソルの表示を参照してください。
ポイントを移動するコマンドは、選択されたEmacsウィンドウのポイント値だけに影響します。他のEmacsウィンドウのポイント値は、たとえ同じバッファーを表示していたとしても変更されません。これと同じことは、C-x
bのようなバッファー切り替えコマンドについても言えます。これらは他のウィンドウには影響を与えません。しかしC-x 4
bのような、別のウィンドウを選択して、バッファーを切り替えるコマンドもあります。(たとえば)C-h f
(describe-function
)やC-x C-b
(list-buffers
)を含む、ウィンドウで情報を表示するコマンドは、選択されたウィンドウに影響を与えることなく、通常は選択されていないウィンドウ内にバッファーを表示することにより機能します。
複数ウィンドウで同じバッファーを表示しているとき、これらは異なるリージョンを持ちます。なぜなら、それらは異なるポイント値を持つことができるからです。しかしバッファーごとにマーク位置は1つだけなので、これらは同じマーク位置をもちます。
それぞれのウィンドウには、独自のモードラインがあり、それにはバッファー名、変更状態、そのウィンドウに表示されているバッファーのメジャーモードとマイナーモードが表示されます。選択されたウィンドウのモードラインは、異なる色で表示されます。詳細については、モードラインを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
選択されたウィンドウを上下に2分割します(split-window-below
)。
選択されたウィンドウを左右に2分割します(split-window-right
)。
ウィンドウのモードライン上では、ウィンドウを分割します。
C-x 2
(split-window-below
)は、選択されたウィンドウを上下に2つのウィンドウに分割します。分割した後は、上が選択されたウィンドウになり、新たに分割されたウィンドウが下になります。2つのウィンドウは最初同じポイント値をもち、(可能な限り)同じバッファー部分を表示します。必要ならポイントをスクリーン上に残したまま、ウィンドウをスクロールできます。デフォルトでは2つのウィンドウの高さは、元のウィンドウの高さの半分になります。正の数引数は上のウィンドウの高さが何行分かを指定し、負の数引数は下のウィンドウが何行分の高さかを指定します。
変数split-window-keep-point
をnil
に変更すると、C-x
2はスクリーンに表示されるテキストができるだけ前と同じになるように、ウィンドウに表示されるバッファー部分と、各ウィンドウのポイント位置を調整します。さらにポイントが元のウィンドウの下半分にあったときは、上ではなく下のウィンドウが選択されます。
C-x 3
(split-window-right
)は、選択されたウィンドウを左右に2つのウィンドウに分割します。左のウィンドウが選択されたウィンドウとなり、右のウィンドウには同じバッファーの同じ部分が表示され、ポイント位置も同じです。正の数引数は左のウィンドウの幅を列数で指定し、負の数引数は右のウィンドウの幅を数引数で指定します。
ウィンドウをC-x
3で分割すると、分割されたウィンドウの幅はフレーム全体の幅より小さくなります。ウィンドウの幅が狭くなりすぎると、継続行が使われたバッファーを読むことが困難になる場合があります(継続行を参照してください)。したがってウィンドウの幅が50列より狭くなったとき、Emacsは自動的に行を切り詰めに切り替えます。この切り詰めは、変数truncate-lines
の値に関係なく発生します(行の切り詰めを参照してください)。truncate-lines
のかわりに、この自動切り詰めを制御するのは、変数truncate-partial-width-windows
です。この変数の値が正の整数(デフォルトは50)の場合、それは自動的な行切り詰めが発生する前の、分割ウィンドウの最小のトータル幅(total
width)を指定します。この値がnil
の場合、自動的な行切り詰めは無効です。他の非nil
値では、分割されたウィンドウの幅に関係なく、Emacsは行を切り詰めます。ウィンドウのトータル幅(total
width)とは、window-total-width
(Window Sizes in The Emacs
Lisp Reference
Manualを参照してください)で報告される列単位の値で、これにはフリンジと、継続および切り詰めのためのグリフ、マージン、スクロールバーが含まれます。
テキスト端末では、左右に分割されたウィンドウを垂直に分割する分割線は、vertical-border
フェイスで描画されます。
ウィンドウのモードライン上でC-mouse-2をクリックすると、クリックした位置に垂直分割線を配してウィンドウを分割します。Emacsがコンパイルされた方法に依存しますが、ウィンドウのスクロールバー上でC-mouse-2をクリックすると、クリックした位置に水平分割線を配してウィンドウを分割します(この機能は、EmacsがGTK+のスクロールバーを使っているときは機能しません)。
デフォルトでは、ウィンドウを分割したとき、Emacsは分割されたウィンドウのサイズをフレームのデフォルトフォントの整数倍にします。これによりスクリーンが正確に2分割されない場合があります。変数window-resize-pixelwise
を非nil
値にセットすると、Emacsは分割されたウィンドウのサイズを、同じピクセル数にします(元のサイズが奇数のピクセル数の場合、1ピクセル増減されます)。フレームのピクセル数がフレームの文字サイズ倍でない場合、このオプションがnil
でも、少なくとも1つのウィンドウがピクセル幅のサイズ変更をされることに注意してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
他のウィンドウを選択します(other-window
)。
次のウィンドウを上方にスクロールします(scroll-other-window
)。
次のウィンドウを下方にスクロールします(scroll-other-window-down
)。
ウィンドウのテキスト領域をmouse-1でクリックすると、そのウィンドウを選択してクリックした位置にポイントを移動します。モードラインをクリックすると、ポイントを移動せずにそのウィンドウを選択します。
キーボードでC-x o
(other-window
)をタイプして、ウィンドウを切り替えることができます。oは“other”のoで、0(ゼロ)ではありません。2つ以上のウィンドウがある時、このコマンドはすべてのウィンドウを順繰りに選択します(一般的に上からした、左から右)。一番右または一番下のウィンドウの後は、左上のウィンドウに戻ります。数引数は上記の順番で何番目のウィンドウに移動するかを意味します。負の引数は逆向きで同じことを行います。ミニバッファーがアクティブのとき、ミニバッファーウィンドウはこの順番では最後のウィンドウになります。ミニバッファーのウィンドウから他のウィンドウに切り替えて、後からミニバッファーに戻って引数の入力を終了させることができます。ミニバッファーでの編集を参照してください。
other-window
コマンドは通常は(別フレームが設定されていないかぎり)カレントフレームの次のウィンドウだけに切り替えます。マルチフレーム環境において、このサイクルの一部にすべてのフレームのウィンドウを含めたければ、C-x
oをnext-window-any-frame
コマンドにリバインドすることができます(コマンドをリバインドする方法は対話的なキーバインディングの変更を参照)。
通常のスクロールコマンド(ディスプレーの制御を参照)は選択されたウィンドウだけに適用されますが、次のウィンドウをスクロールするコマンドは他にもあります。C-M-v
(scroll-other-window
)はC-x
oにより選択されるようなウィンドウをスクロールします。このコマンドは別の観点から見るとC-vのように振る舞います。いずれのコマンドもバッファーテキストをウィンドウから相対的に上方へ移動して、どちらも正と負の引数を受け取るからです
(ミニバッファーではミニバッファーに関連付けられたヘルプウィンドウがあれば、C-M-vは標準的なサイクル順での次ウィンドウではなくヘルプウィンドウをスクロールする。ミニバッファーでの編集を参照)。C-M-S-v
(scroll-other-window-down
)は同様の方法で次のウィンドウを下方にスクロールします。
mouse-autoselect-window
を非nil
値にセットしている場合、マウスが選択されたウィンドウ以外のウィンドウに移動すると、そのウィンドウが選択されます。この機能はデフォルトでオフです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
C-x
4は、異なるウィンドウ(他の既存のウィンドウや、選択されたウィンドウを分割することにより新たに作成されたウィンドウ)のバッファーに切り替える、さまざまなコマンドのプレフィクスキーです。Emacsがウィンドウを選択または作成する方法については、display-buffer
が機能する方法を参照してください。
他のウィンドウのバッファーbufnameを選択します(switch-to-buffer-other-window
)。バッファーの作成と選択を参照してください。
バッファーbufnameを選択せずに、別のウィンドウに表示します(display-buffer
)。ウィンドウが選択される方法についての詳細は、ウィンドウでのバッファーの表示を参照してください。
ファイルfilenameをvisitして、他のウィンドウでバッファーを選択します(find-file-other-window
).
ファイルのvisit(訪問)を参照してください。
directoryのDiredバッファーを、別のウィンドウで選択します(dired-other-window
)。Dired (ディレクトリーエディター)を参照してください。
C-x m (メールの送信を参照してください)と同様に、メールメッセージの編集を開始しますが、別のウィンドウで行います(compose-mail-other-window
)。
M-.
(識別子のリファレンスを探すを参照してください)と同様に、識別子の定義を検索しますが、別のウィンドウで行います(xref-find-definitions-other-window
)。
ファイルfilenameを読み取り専用でvisitして、別のウィンドウでバッファーを選択します(find-file-read-only-other-window
)。ファイルのvisit(訪問)を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
選択されたウィンドウを削除します(delete-window
)。
フレームから選択されたウィンドウ以外のすべてのウィンドウを削除します(delete-other-windows
)。
選択されていたウィンドウを削除して、それに表示されていたバッファーをkillします(kill-buffer-and-window
)。このキーシーケンスの最後の文字はゼロです。
指定されたbufferを表示しているウィンドウを削除します。
選択されたウィンドウの高さを増やします(enlarge-window
)。
選択されたウィンドウの幅を増やします(enlarge-window-horizontally
)。
選択されたウィンドウの幅を減らします(shrink-window-horizontally
)。
バッファーに多くの行数が必要ない場合、そのウィンドウを縮小します(shrink-window-if-larger-than-buffer
)。
すべてのウィンドウの高さを同じにします(balance-windows
)。
選択されたウィンドウを削除するには、C-x 0
(delete-window
)とタイプします(これはゼロです)。一度ウィンドウが削除されると、そのウィンドウが占めていたスペースは隣接したウィンドウに与えられます(しかしミニバッファーの場合、それがアクティブな場合でも適用されません)。ウィンドウの削除は、ウィンドウを表示用に使っていたバッファーに影響を与えません。そのバッファーは存在し続け、C-x
bで切り替えることができます。
C-x 4 0 (kill-buffer-and-window
)は、コマンドC-x
0より強力なコマンドです。これはカレントバッファーをkillしてから、選択されたウィンドウを削除します。
C-x 1
(delete-other-windows
)は、選択されたウィンドウ以外のすべてのウィンドウを削除します。選択されたウィンドウはフレーム全体に拡張されます(このコマンドは、ミニバッファーのウィンドウがアクティブのとき使うことができません。これを試みるとエラーがシグナルされます)。
M-x delete-windows-onは、特定のバッファーを表示するウィンドウを削除します。これは、そのバッファーの入力を求めます(デフォルトはカレントバッファー)。C-u 0のようにプレフィックス引数が0の場合、このコマンドはカレントディスプレイ上のフレームのウィンドウだけを削除します。
コマンドC-x ^
(enlarge-window
)は、フレームの高さを変えずに垂直方向に隣接するウィンドウのスペースを縮小して、選択されたウィンドウの高さを増やします。正の数引数を与えると、このコマンドは指定した行数分ウィンドウの高さを増やします。負の数引数を与えると、指定した行数分ウィンドウの高さを増やします。垂直方向に隣接するウィンドウが存在しない場合(たとえばウィンドウの高さがフレーム全体の高さと同じとき)、エラーをシグナルします。このコマンドは変数window-min-height
(デフォルトは4)で指定された、最小行数よりウィンドウの高さを縮小しようとしても、エラーをシグナルします。
同様にC-x }
(enlarge-window-horizontally
)は、選択されたウィンドウの幅を増やし、C-x {
(shrink-window-horizontally
)は幅を減らします。これらのコマンドは、変数window-min-width
(デフォルトは10)で指定された最小列数よりウィンドウの幅を縮小すると、エラーをシグナルします。
モードライン(モードラインのマウスコマンドを参照してください)、またはウィンドウ分割線(window dividers。ウィンドウdividerを参照してください)をマウスでクリックすることにより、ウィンドウの高さの変更およびウィンドウの分割や削除を行なう、別の方法を提供します。
C-x -
(shrink-window-if-larger-than-buffer
)は、バッファー全体を表示するのに必要な高さより選択されたウィンドウの高さが大きいときは、選択されたウィンドウの高さを減らします。余った行数はフレームの他のウィンドウに与えられます。
C-x +
(balance-windows
)を使って、選択されたフレームのすべてのウィンドウの高さを均等にすることもできます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ユーザーのコマンドの結果として、任意のバッファーが表示またはポップアップされるのは、Emacsでは一般的な処理です。コマンドがこれを行うには、いくつかの異なる方法があります。
C-x C-f
(find-file
)のような多くのコマンドは、デフォルトでは選択されたウィンドウを“乗っ取って”バッファーを表示します。
選択されたウィンドウを乗っ取らずに、たとえばウィンドウを分割して新しいウィドウを作り、そこにバッファーを表示するといったような、利口な表示を試みるコマンドがいくつかあります。さまざまなヘルプコマンド(ヘルプ)を含む、そのようなコマンドは内部的にdisplay-buffer
を呼び出すことにより機能します。詳細は、display-buffer
が機能する方法を参照してください
他のコマンドはdisplay-buffer
と同じことを行いますが、それに加えてバッファーの編集を開始できるように、表示されたウィンドウを選択します。コマンドM-g
M-n (next-error
)が1つの例です(Compilationモードを参照してください)。そのようなコマンドは、内部的に関数pop-to-buffer
を呼び出すことにより機能します。Switching to a Buffer in a Window in The Emacs Lisp Reference
Manualを参照してください。
名前が-other-window
で終わるコマンドは、display-buffer
と同じように振る舞います。例外はそれらが決して選択されたウィンドウに表示しない点です。これらのコマンドのいくつかは、プレフィクスキーC-x
4にバインドされています(他のウィンドウでの表示を参照してください)。
名前が-other-frame
で終わるコマンドは、display-buffer
と同じように振る舞います。例外は、i)選択されたウィンドウに決して表示しない、ii)望むバッファーを表示するために新たなフレームを作成するか、他のフレーム上のウィンドウを使用する、という2点です。これらのコマンドのいくつかは、プレフィクスキーC-x
5にバインドされています。
20.6.1 display-buffer が機能する方法 | ||
20.6.2 編集不可バッファーの表示 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
display-buffer
が機能する方法display-buffer
コマンド(およびこのコマンドを内部的に呼び出すコマンド)は、以下で与えられたステップに従って、表示するウィンドウを選択します。このステップの順番を変更する方法については、Choosing a Window for Displaying a Buffer in The Emacs Lisp
Reference Manualを参照してください。
display-buffer-alist
(Choosing a Window for Displaying a Buffer in The
Emacs Lisp Reference
Manualを参照)にバッファー名にマッチする正規表現を追加して、アクション関数display-buffer-same-window
(Action Functions for Buffer Display in The Emacs Lisp Reference
Manualを参照)でそれを参照することにより、Emacsにスキップしないよう告げることができます。たとえば、選択されたウィンドウ内に優先的にバッファー*scratch*を表示するには、以下のように記述します:
(customize-set-variable 'display-buffer-alist '("\\*scratch\\*" (display-buffer-same-window)))
デフォルトでは、display-buffer-alist
はnil
です。
reusable-frames
エントリー(Action Alists for Buffer Display in The Emacs
Lisp Reference
Manualを参照)を使用している場合は、他のフレームのウィンドウも再利用可能です。これを行う例は、次のステップを参照してください。
display-buffer-base-action
(Choosing a Window for Displaying a Buffer in The
Emacs Lisp Reference Manualを参照)の値を変更してください:
(customize-set-variable 'display-buffer-base-action '((display-buffer-reuse-window display-buffer-pop-up-frame) (reusable-frames . 0)))
このカスタマイズでは、すべての可視およびアイコン化されたフレーム上の再利用可能なウィンドウを検索するステップを先行して試みるでしょう。
分割は垂直または水平に行われる可能性があり、それは変数split-height-threshold
およびsplit-width-threshold
に依存します。これらの変数には整数値を指定します。split-height-threshold
が選択されたウィンドウの高さより小さい場合、分割により下が新しいウィンドウになります。上記以外の場合、split-width-threshold
が選択されたウィンドウの幅より小さい場合、分割により右が新しいウィンドウになります。どちらの条件も適用できなかったとき、Emacsは分割により下を新しいウィンドウにしようと試みますが、それは選択されたウィンドウが以前に分割されていなかった場合に限られます(過剰な分割を避けるため)。
reusable-frames
(上記参照)により、他のフレームのウィンドウかもしれません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ウィンドウに表示されるバッファーの中には、編集のためではなく閲覧するためのものがあります。Helpコマンド(ヘルプを参照)は通常、この目的のために*Help*と呼ばれるバッファーを使用し、ミニバッファーの補完(補完を参照)は別の*Completions*と呼ばれるバッファーなどを使用します。このようなバッファーは通常、短時間しか表示されません。
Emacsは通常、このような一時的に表示されるウィンドウを、前のサブセクションで説明したようにdisplay-buffer
を通じて表示します。一方、*Completions*バッファーは通常、そのフレームにいくつウィンドウが表示されているかに関わらず、選択されたフレームの最下のウィンドウに表示されます。
一時的なバッファーを他のやり方でEmacsに表示させたい場合、変数display-buffer-alist
(Choosing a Window for Displaying a Buffer in The Emacs Lisp
Reference
Manualを参照)をカスタマイズしてください。たとえば、常に選択されたウィンドウの下に*Completions*を表示するには、初期化ファイル(Emacs初期化ファイルを参照)で以下のフォームを使用します:
(customize-set-variable 'display-buffer-alist '(("\\*Completions\\*" display-buffer-below-selected)))
Emacsは通常、バッファーの内容のすべてを表示するのに必要な大きさのウィンドウを作成するという点において、*Completions*バッファーは特別です。たとえば*Help*バッファーなど、他の一時表示でこのようなウィンドウのリサイズを行なうには、マイナーモード(マイナーモードを参照)のtemp-buffer-resize-mode
(Temporary Displays in The Emacs Lisp Reference
Manualを参照)に切り替えます。
temp-buffer-resize-mode
でリサイズされるウィンドウの最大サイズは、オプションtemp-buffer-max-height
とtemp-buffer-max-width
(Temporary Displays in The Emacs Lisp
Reference Manualを参照)で制御できます。最大サイズは、ウィンドウが含まれるフレームのサイズを超えることはできません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Winnerモードはウィンドウの設定変更(たとえばフレームのウィンドウがどのように分割されたか)を記録するグローバルマイナーモードなのでそれらをundoできます。WinnerモードはM-x
winner-mode、または変数winner-mode
をカスタマイズすることにより切り替えることができます。このモードが有効な場合には、C-c
left (winner-undo
)は左のウィンドウの設定変更をundoします。undoしてから気が変わったら、C-c
right (M-x
winner-redo
)を使ってundoした変更をredo(再実行)することができます。WinnerモードによるC-c
leftとC-c
rightのバインドを抑制するために、変数winner-dont-bind-my-keys
を非nil
値にカスタマイズできます。デフォルトではWinnerモードはフレームごとに最大200個のウィンドウ設定を格納しますが、変数winner-ring-size
により変更できます。Winnerモードにリストアさせたくないようなウィンドウをもつバッファーがある場合には、それらの名前を変数winner-boring-buffers
か正規表現winner-boring-buffers-regexp
に追加しください。
Followモード(M-x follow-mode)は、複数のウィンドウの同じバッファーを同期するので、バッファーの隣接した部分が常に表示されます。Followモードを参照してください。
Windmoveパッケージはフレーム内で隣接するウィンドウに方向的に移動するコマンドを定義します。M-x windmove-rightはカレントで選択されたウィンドウのすぐ右のウィンドウを選択して、他の方向(left、up、down)にたいしても同じように機能します。M-x windmove-default-keybindingsにより、これらのコマンドはS-right等にバインドされます。これを行うことにより、それらのキーによるシフト選択は無効になります(シフト選択を参照)。ウィンドウを方向的に選択するコマンドにたいしても同じ方法でキーバインディングを定義できます。次のコマンドが表示しようとするバッファー用のウィンドウをどの方向に表示するか指定するコマンドのを定義にはM-x windmove-display-default-keybindingsを使用できます。方向的にウィンドウを削除するコマンド用にキーバインディングを定義するにはM-x windmove-delete-default-keybindings、選択されたウィンドウと指定方向のウィンドウのコンテンツの入れ替えるコマンド用のキーバインディングの定義にはM-x windmove-swap-states-in-directionがあります。
コマンドM-x compare-windowsは、異なるウィンドウに表示されたテキストを比較します。ファイルの比較を参照してください。
Scroll Allモード(M-x scroll-all-mode)は、スクロールおよびポイント移動コマンドが、表示されているすべてのウィンドウに適用されるグローバルマイナーモードです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
コマンドglobal-tab-line-mode
は各ウィンドウのスクリーン行上端へのタブライン(tab
line)の表示を切り替えます。タブラインは各バッファーにたいしてウィンドウ内に特別なボタン(“tabs”)を表示して、対応するボタンをクリックすることによりバッファーを切り替えることができます。+アイコンをクリックすればバッファーのウィンドウローカルタブに新たなバッファーを追加、タブのxアイコンをクリックすればバッファーを削除します。タブライン上のマウスホイールはタブを水平方向にスクロールします。
前のウィンドウローカルタブの選択はC-x LEFT
(previous-buffer
)、次のタブの選択はC-x RIGHT
(next-buffer
)をタイプすることと等価です。いずれのコマンドも繰り返し回数としてプレフィクス数引数をサポートします。
タンブラインに優先されるコンテンツを定義するために、変数tab-line-tabs-function
をカスタマイズできます。デフォルトでは上述のようにそのウィンドウで以前visitしたすべてのバッファーが表示されます。しかしカレントバッファーと同じメジャーモードのバッファーリストを表示したり、メジャーモードでグループ化したバッファー(最初のタブでモード名をクリックするとバッファーの別グループを選択可能なすべてのメジャーモードが表示される)を表示するようにセットすることもできます。
タブラインはタブバーとは異なることに注意してください(タブバーを参照)。各フレーム上端にあるタブバーのタブはバッファーをもつ複数のウィンドウを含むウィンドウ設定間を切り替えますが、各ウィンドウ上端にあるタブラインのタブはウィンドウ内のバッファーの切り替えに使用します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsがグラフィカルなディスプレー(たとえばXウィンドウシステム)で開始されたときは、システムレベルのグラフィカルな表示領域(display region)を占有します。このマニュアルではこれをフレームと呼び、“ウィンドウ”という言葉はフレームでバッファーを表示する部分のために使います。フレームには最初1つのウィンドウが含まれていますが、これを複数のウィンドウに分割することができます。フレームには通常、メニューバー、ツールバー、エコーエリアも含まれます。
追加のフレームを作ることもできます(フレームの作成を参照してください)。同じEmacsセッションで作られたすべてのフレームは、背後にあるバッファーや、その他のデータにアクセスします。たとえば1つ以上のフレームで表示されているバッファーは、あるフレームに表示されているものに変更を加えると、即座に他のフレームに反映されます。
C-x C-cとタイプすると、現在表示されているすべてのフレームを閉じて、他に表示されているフレームがなければ、Emacsセッションを終了します(Emacsからのexitを参照してください)。選択されたフレームだけを閉じるには、C-x 5 0(これはoではなくゼロです)とタイプします。
このセクションでは、グラフィカルなディスプレーに特有の機能(特にマウスコマンド)と、複数フレームを管理する機能について説明します。テキスト端末では、これらの機能の多くは利用できません。しかしテキスト端末で複数のフレームを作ることは可能です。そのようなフレームは1度に1つだけ表示され、テキスト画面全体を占有します(非ウィンドウ端末を参照してください)。テキスト端末の中には、マウスを使うことが可能なものがいくつかあります(GNUおよびUnix systemsでこれを行うには、テキスト端末でのマウスの使用を、MS-DOSでこれを使うには、 MS-DOSでびマウスの使用方法を参照してください )。メニューはすべてのテキスト端末でサポートされています。
21.1 編集のためのマウスコマンド | マウスによる移動、切り取り、貼り付け。 | |
21.2 単語と行にたいするマウスコマンド | 単語または行全体を選択するマウスコマンド。 | |
21.3 マウスで参照をフォローする | リストからアイテムを選択するのにマウスを使う。 | |
21.4 メニューにたいするマウスクリック | メニューを表示させるマウスクリック。 | |
21.5 モードラインのマウスコマンド | モードライン上でのマウスクリック。 | |
21.6 フレームの作成 | さまざまな内容とともに追加のEmacsフレームを作成する。 | |
21.7 フレームコマンド | フレームのアイコン化とフレームの切り替え。 | |
21.8 フォント | フレームフォントの変更。 | |
21.9 スピードバーフレーム | スピードバーフレームの作り方と使い方。 | |
21.10 複数ディスプレー | 1つのEmacsインスタンスが複数ディスプレーと通信する方法。 | |
21.11 フレームパラメーター | フレームのカラーや他のモードの変更。 | |
21.12 スクロールバー | スクロールバーの有効と無効、および使い方。 | |
21.13 ウィンドウdivider | マウスでドラッグできるウィンドウセパレーター。 | |
21.14 ドラッグアンドドロップ | ファイルを開いたりテキストを挿入するのにドラッグアンドドロップを使う。 | |
21.15 メニューバー | メニューバーの有効と無効。 | |
21.16 ツールバー | ツールバーの有効と無効。 | |
21.17 タブバー | タブバーの有効と無効。 | |
21.18 ダイアログボックスの使用 | ダイアログボックス使用の制御。 | |
21.19 ツールチップ | マウスの現在位置の情報の表示。 | |
21.20 マウスの回避 | マウスポインターがテキストを隠すのを防ぐ。 | |
21.21 非ウィンドウ端末 | フレームを1つだけ表示する端末での複数フレーム。 | |
21.22 テキスト端末でのマウスの使用 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
クリックした場所にポイントを移動します(mouse-set-point
)。
ドラッグにより選択されたテキストを取り囲むリージョンをアクティブ化して、そのテキストをプライマリー選択に置きます(mouse-set-region
)。
クリックした場所にポイントを移動して、そこにプライマリー選択の内容を挿入します(mouse-yank-primary
)。
リージョンがアクティブなときは、近くにあるリージョンの終端をクリックした位置に移動します。アクティブでないときは現在のポイントにマークをセットして、ポイントをクリックした位置に移動します。結果となるリージョンはkillリングに保存されます。2回目のクリックでリージョンをkillします(mouse-save-then-kill
)。
ドラッグにより選択されたテキストを取り囲む矩形リージョンをアクティブにします。矩形領域(Rectangles)を参照してください。
もっとも基本的なマウスコマンドはmouse-set-point
で、これはウィンドウのテキスト領域でマウスの左ボタン、mouse-1をクリックすることにより呼び出されます。これはポイントをクリックされた位置に移動します。そのウィンドウが選択されたウィンドウでなかったとき、そのウィンドウが選択されたウィンドウになります。mouse-1をダブルクリックして、リージョンをアクティブにすることもできます(単語と行にたいするマウスコマンドを参照)。
クリックしたフレームが選択されたフレームでなかった場合は通常、クリックされたフレームが選択されたフレームになるのに加えて、ウィンドウも選択されてカーソルがセットされます。Xウィンドウシステムでは、変数x-mouse-click-focus-ignore-position
をt
にセットすることにより、これを変更できます。この場合、選択されていないフレームへの最初のクリックではフレームだけを選択し、他は変更しません。次にクリックするとそのウィンドウを選択してカーソルをその位置にセットします。
mouse-1を押してテキストの周辺をドラッグすると、最初にマウスボタンを押した位置にマークが置かれ、ボタンを離した位置にポイントがセットされ(マークとリージョンを参照してください)、その領域がアクティブになります(mouse-set-region
)。それに加えてリージョンのテキストがプライマリー選択となります(他のウィンドウアプリケーションにたいするカットアンドペーストを参照してください)。
変数mouse-drag-copy-region
を非nil
値に変更すると、テキストの周囲をドラッグすることにより、そのテキストをkillリングに追加します。デフォルトはnil
です。
ドラッグしている途中でマウスがウィンドウの上または下を超えた場合、マウスがウィンドウ内に戻るまで、ウィンドウが一定の割合でスクロールします。この方法により、スクリーン全体に収まらないリージョンを選択できます。1度に何行スクロールするかは、マウスがウィンドウの縁からどれだけ離れたかに依存します。変数mouse-scroll-min-lines
は、最小ステップサイズを指定します。
マウスの真ん中のボタン、mouse-2をクリックすると、クリックした位置にポイントを移動して、プライマリー選択の内容を挿入します(mouse-yank-primary
)。他のウィンドウアプリケーションにたいするカットアンドペーストを参照してください。この振る舞いは、他のXアプリケーションと一貫性があります。かわりにmouse-2を、mouse-yank-at-click
にバインドできます。これはクリックした位置にyankするコマンドです。
変数mouse-yank-at-point
を非nil
値に変更すると、mouse-2はポイントを移動しません。これはどこをクリックしたか、フレームのどのウィンドウをクリックしたかに関係なく、ポイントのある位置にテキストを挿入します。この変数はmouse-yank-primary
とmouse-yank-at-click
の両方に影響します。
マウスの右ボタン、mouse-3をクリックすると、コマンドmouse-save-then-kill
が実行されます。これはどこをクリックしたかと、リージョンの状態に依存していくつかのアクションを処理します。
mouse-save-then-kill
コマンドは、変数mouse-drag-copy-region
の値にもしたがいます(上記参照)。変数の値が非nil
のときは、コマンドがアクティブなリージョンをセットまたは調整したとき、常にリージョンのテキストはkillリングにも追加されます。一番最近のkillリングのエントリーが同じ方法で追加されたものである場合、新しいエントリーを作成せず、そのエントリーを置き換えます。
上記で説明した任意のマウスコマンドを使ってセットしたリージョンは、シフト選択以外のマウス移動コマンド、および通常のマークを非アクティブ化する方法により、マークが非アクティブになります。シフト選択を参照してください。
スクロールに使うことができる“ホイール”があるマウスもいくつかあります。ほとんどのグラフィカルなディスプレーでEmacsはデフォルトでマウスホイールによるウィンドウのスクロールをサポートします。この機能を切り替えるにはM-x
mouse-wheel-modeを使います。変数mouse-wheel-follow-mouse
およびmouse-wheel-scroll-amount
は、(どこでホイールによるスクロール操作が行われたかによる)スクロール対象の選択方法と、バッファーがスクロールされる量を決定します。変数mouse-wheel-progressive-speed
は、スクロールの早さがホイールを移動した早さにリンクするかを決定します。このモードはデフォルトフェイス高さの増加と減少もサポートしており、デフォルトではCtrl修飾によるスクロールにバインドされています。
チルトホイール(横スクロール)つきのマウス、あるいはタッチパッドがサポートしていれば、Emacsは水平スクロールもサポートします。この機能はデフォルトではオフです。変数mouse-wheel-tilt-scroll
を非nil
値にカスタミズすればオンになります。デフォルトではマウスホイールをチルトするとチルトした方向にウィンドウのビューがスクロールします。つまり右にチルトするとウィンドウは右にスクロールするのでウィンドウに表示されていたテキストは水平左方向に移動します。水平スクロールの方向を逆転したい場合は、変数mwheel-flip-direction
を非nil
値にカスタマイズしてください。
Imageモード(イメージファイルのvisitを参照)ではイメージ上にマウスポインターがあるときには、Ctrl修飾とともにマウスホイールのスクロールはマウスポインター下のイメージをスケーリングします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下のmouse-1の変種は、1度に単語全体または行全体を選択します。Emacsは選択されたテキスト周辺のリージョンをアクティブにして、killリングにもコピーされます。
クリックした単語や文字周辺のテキストを選択します。
シンボルの構文をもつ文字(C modeでのアンダースコアーなど)をダブルクリックすると、シンボルを取り囲むその文字を選択します。開きカッコ(または閉じカッコ)の構文をもつ文字をダブルクリックすると、そのカッコで始まる(または終わる)グループを選択します。区切り文字の構文をもつ文字(Cのシングルクォーテーションやダブルクォーテーション)をダブルクリックすると、文字列定数を選択します(Emacsはその文字により開始するのか(または終了するのか)を、発見的な手法を使って見つけ出します)。
カッコによるグループ化、または文字列の区切り文字の先頭をダブルクリックすると、そのリージョンの最後にポイントが移動します。新たな位置を表示するために必要なら、バッファーの表示を前方にスクロールします。カッコによるグループ化、または文字列の区切り文字の終端をダブルクリックしても、デフォルトではポイントはそのリージョンの終端に留まり、リージョンの先頭がウィンドウ上端より上にある場合は表示されません。必要ならバッファーの表示を後方にスクロールすてリージョンの先頭に移動するように変更するには、ユーザーオプションmouse-select-region-move-to-beginning
を非nil
にセットしてください。
単語全体を単位として、ドラッグした箇所のテキストを選択します。
クリックした行を選択します。
行全体を単位として、ドラッグした箇所のテキストを選択します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsのバッファーにはボタンや、アクティブ化(例えばクリック)したとき何らかのアクション(例えば参照をフォローする)を行う、ハイパーリンクを含むものがあります。ボタンのテキストは通常、アンダーラインが引かれていたり、周囲にボックスが描かれて、視覚的にハイライトされています。ボタンの上にマウスを移動すると、マウスカーソルの形状が変化して、ボタンがライトアップされます。変数mouse-highlight
をnil
に変更すると、Emacsはこのハイライト機能を無効にします。
ボタンをアクティブにするには、ポイントをそこに移動してRETをタイプするか、mouse-1またはmouse-2でボタンをクリックします。たとえばDiredバッファーでは、ファイル名がボタンです。これをアクティブにすることにより、Emacsはそのファイルをvisitします(Dired (ディレクトリーエディター)を参照してください)。*Compilation*バッファーでは、各エラーメッセージがボタンです。これをアクティブにすることにより、そのエラーにたいするソースコードをvisitします(Emacs下でのコンパイルの実行を参照してください)。
ボタンをmouse-1でクリックすると、ボタンがアクティブになりますが、マウスボタンを押してから離すまで一定時間(厳密に言うと450ミリ秒以上)が経過すると、Emacsはボタンをアクティブにせず、ポイントをクリックした場所に移動します。この方法によりボタンをアクティブにせずにポイントを移動するのに、マウスを使用できます。マウスをボタンの上にドラッグすると、通常どおりリージョンをセットして、ボタンはアクティブにしません。
ボタンにたいしてmouse-1がどのように適用されるかは、mouse-1-click-follows-link
をカスタマイズすることにより変更できます。変数の値が正の整数の場合、それはボタンのアクティブ化を取り消すのに、何ミリ秒マウスボタンを押しつづける必要があるかを指定します。前のパラグラフで説明したように、デフォルトは450です。値がnil
の場合、mouse-1は単にクリックした場所にポイントを移動するだけで、ボタンをアクティブにしません。値がdouble
の場合、シングルクリックでポイントのセット、ダブルクリックでボタンをアクティブにします。
選択されていないウィンドウのボタンでも通常、mouse-1でクリックすればボタンがアクティブになります。変数mouse-1-click-in-non-selected-windows
をnil
に変更した場合、選択されていないウィンドウのボタンをmouse-1でクリックすると、クリックした位置にポイントを移動してウィンドウを選択しますが、ボタンはアクティブになりません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
CtrlおよびSHIFTで修飾されたマウスクリックにより、メニューが表示されるものがいくつかあります。
このメニューはバッファーを選択するためのものです。
MSB(“mouse select buffer”)グローバルマイナーモードは、このメニューをスマートで、よりカスタマイズ可能なものにします。 バッファーメニューのカスタマイズを参照してください。
このメニューには、フェイスや他のテキストプロパティーをテストしたり、それらを設定するものが含まれます(後者は主にEnriched textを編集するのに便利です。Enrichedテキストを参照してください)。
このメニューは、モードに特有なメニューです。Menu-barモードがオンの場合、ほとんどのモードでは、このメニューに、そのモード特有なメニューバーのメニューと同じアイテムを表示します。このボタンに異なるメニューを指定するモードもいくつかあります。Menu-barモードがオフの場合、このメニューにはモード特有のメニューだけでなく、本来メニューバーに含まれるべきすべてのアイテムが含まれるので、メニューバーを表示せずに、それらにアクセスすることができます。
このメニューはそのウィンドウのバッファーの、デフォルトのフェイスを変更するためのものです。テキストのスケールを参照してください。
グラフィカルなアプリケーションには、mouse-3をモード特有なメニューに使うものもいくつかあります。mouse-3でmouse-save-then-kill
コマンドを実行するかわりに、Emacsにこのようなメニューを表示させるには、以下の行をinitファイルに追加してmouse-3をリバインドします(initファイル内でのキーのリバインドを参照してください)。
(global-set-key [mouse-3] 'mouse-popup-menubar-stuff)
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ウィンドウのモードラインをマウスでクリックして、ウィンドウを選択したり操作することができます。
モードラインのいくつかの領域、たとえばバッファー名や、メジャーモードおよびマイナーモードは、独自のマウスバインディングをもっています。これらの領域にマウスを移動すると、その領域がハイライトされ、特別なバインディングが表示されます(ツールチップを参照してください)。このセクションのコマンドは、それらの領域には適用できません。
モードラインをmouse-1でクリックすると、それが属するウィンドウを選択します。モードライン上でmouse-1でドラッグすることにより、それを移動することができるので、ウィンドウの高さを変更することができます。マウスでの高さの変更により、ウィンドウが削除されることはありません。ウィンドウの高さが定められた最小値より小さくなる場合は、拒絶されます。
モードラインをmouse-2でクリックすると、そのウィンドウがフレーム全体に表示されます。
モードラインをmouse-3でクリックすると、それが属するウィンドウを削除します。フレームにウィンドウが1つしかないときは、何もしません。
モードラインをC-mouse-2でクリックすると、クリックした位置でウィンドウを左右に分割します(ウィンドウの分割を参照してください)。
さらに、左右に並んだモードラインの間にある分割線を、mouse-1でクリックしてドラッグすることにより、垂直の境界線を左右に移動できます。
ウィンドウのサイズ変更は、window-resize-pixelwise
の値に影響されることに注意してください。詳細はウィンドウの分割を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
プレフィクスキーC-x 5は、C-x 4に類似しています。C-x 4コマンドが、選択されたフレームの別ウィンドウにバッファーを表示するのにたいして、C-x 5は異なるフレームを使います。可視またはアイコン化(“最小化”とも言われる。Visibility of Frames in The Emacs Lisp Reference Manualを参照)されたフレームで、すでに要求されたバッファーが表示されている場合、そのフレームを手前に表示して非アイコン化(“最小化解除”)されます。それ以外の場合は、新しいフレームが現在の表示端末に作成されます。
以下のC-x 5コマンドは、選択するバッファーを検索したり作成する方法が異なります。
新しいフレームを作成します(make-frame-command
)。
バッファーbufnameを他のフレームで選択します。これはswitch-to-buffer-other-frame
を実行します。
ファイルfilenameをvisitして、そのバッファーを他のフレームで選択します。これはfind-file-other-frame
を実行します。ファイルのvisit(訪問)を参照してください。
ディレクトリーdirectoryにたいするDiredバッファーを、他のフレームで選択します。これはdired-other-frame
を実行します。Dired (ディレクトリーエディター)を参照してください。
他のフレームでメールメッセージの作成を開始します。これはcompose-mail-other-frame
を実行します。これはC-x
mの異なるフレーム版です。メールの送信を参照してください。
他のフレームで識別子の定義を検索します。これはxref-find-definitions-other-frame
を実行する、M-.の複数フレーム版です。識別子のリファレンスを探すを参照してください。
ファイルfilenameを読み取り専用でvisitして、そのバッファーを他のフレームで選択します。これはfind-file-read-only-other-frame
を実行します。ファイルのvisit(訪問)を参照してください。
フレームパラメーター(frame parameters)を指定することにより、新しく作成されるフレームの外見と動作を制御できます。フレームパラメーターを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下のコマンドは、フレームを削除したり操作するために使われます:
選択されたフレームを削除します(delete-frame
)。1つしかフレームがないときは、エラーをシグナルします。
選択されたEmacsフレームを最小化(またはアイコン化)します(suspend-frame
)。Emacsからのexitを参照してください。
他のフレームを選択して手前に表示します。このコマンドを繰り返すと、端末のすべてのフレームを循環することができます。
現在の端末の、選択されたフレーム以外のすべてのフレームを削除します。
カレントフレームの最大化を切り替えます。フレームが最大化されているときはスクリーン全体に表示されます。
カレントフレームのフルスクリーンモードを切り替えます(フルスクリーンと最大化の違いは、前者がウィンドウマネージャーの装飾を隠すことで、これによりEmacs自身のスクリーンスペースが若干増えます)。
フレームを本当に最大化またはフルスクリーンにするためには、変数frame-resize-pixelwise
を非nil
値にカスタマイズする必要があるウィンドウマネージャーもいくつかあります。この変数を非nil
値にセットすると、一般的にフレームのサイズ変更を行や列の整数倍ではなく、ピクセル単位で行うことができます。
C-x 5 0
(delete-frame
)コマンドは、選択されたフレームを削除します。しかしEmacsセッションとの対話能力が失われるのを防ぐため、Emacsセッションの最後のフレームの削除は拒絶します。Emacsがデーモンとして実行されているとき(サーバーとしてのEmacsの使用を参照してください)は、普通の対話的なフレームがすべて削除された後も、常に仮想的なフレーム(virtual
frame)が残ります。この場合、C-x 5
0は最後の対話的なフレームを削除できます。Emacsセッションに再接続するには、emacsclient
を使うことができます。
C-x 5 1
(delete-other-frames
)コマンドは、現在の端末(端末にはグラフィカルなディスプレーとテキスト端末の両方が含まれます)の、カレントのフレーム以外のすべてのフレームを削除します。非ウィンドウ端末を参照してください)。他のグラフィカルなディスプレー、またはテキスト端末で開いたフレームをもっている場合、これらは削除されません。
C-x 5 o
(other-frame
)コマンドは、現在の端末の次のフレームを選択します。EmacsをXウィンドウシステム上のウィンドウマネージャーで使っていて、どんなフレームだろうと、マウスカーソルが上にくるとそのフレームを選択(またはフォーカスを与える)するようになっている場合、このコマンドが正常に機能するために、変数focus-follows-mouse
をt
に変更する必要があります。これはC-x
5 oを呼び出し、マウスカーソルを選択されたフレームにワープさせます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
デフォルトではEmacsはグラフィカルなディスプレーでテキストを表示するのに10ポイントのmonospaceフォントを使います。フォントのサイズはインタラクティブに変更可能です(テキストのスケールを参照)。
異なるフォントを指定するために複数の異なる方法があります:
font
パラメーターを指定するように、変数default-frame-alist
を変更する行をinitファイルに追加します:
(add-to-list 'default-frame-alist '(font . "DejaVu Sans Mono-10"))
これはこのinitファイルで再起動した後の、Emacsが作るすべてのグラフィカルなフレームのデフォルトを、指定したフォントにします。
emacs.font: DejaVu Sans Mono-12
Xリソースファイルが効果を表すには、Xを再起動するかxrdb
コマンドを使わなければなりません。Xリソースを参照してください。Xリソースファイルでは、フォント名をクォートしないでください。
font-use-system-font
をt
(デフォルトはnil
)にセットして、Emacsにデフォルトのシステムフォントを使うように指示できます。これが機能するには、EmacsがGsetting(または古いGconf)のサポートつきでコンパイルされていなければなりません。
現在使っているフォントをチェックするには、C-u C-x =コマンドが有用です。これはポイント位置の文字の説明と、それを描画しているフォント名を表示します。
フォント名を表現する異なる方法がいくつか存在します。1番目はFontconfigパターンを使う方法です。Fontconfigパターンは以下の形式をもちます:
fontname[-fontsize][:name1=values1][:name2=values2]...
このフォーマットでは、大カッコ(brackets)の中の要素は省略可能です。fontnameは、‘Monospace’や‘DejaVu Sans Mono’のような、フォントのファミリー名です。fontsizeは、フォントのポイントサイズ(1プリンターポイントはおよそ1/72インチです)で、エントリー‘name=values’は、フォントのslantやweightなどのセッティングを指定します。valuesには1つの値か、カンマで区切られた値のリストを指定します。それらに加えていくつかのプロパティー値は、ある種のプロパティー名だけで有効なものがあり、それらについては‘name=’部分を省略できます。
以下は、一般的なフォントプロパティーの一覧です:
‘italic’、‘oblique’、‘roman’のうちの、どれか1つです。
‘light’、‘medium’、‘demibold’、‘bold’、‘black’のうちの、どれか1つです。
slantとweightを組み合わせた、特別なstyleを定義するフォントがいくつかあります。たとえば‘Dejavu Sans’は、‘book’ styleを定義し、これはslantおよびweightプロパティーをオーバーライドします。
‘condensed’、‘normal’、‘expanded’のうちの、どれか1つです。
‘monospace’、‘proportional’、‘dual-width’、‘charcell’のうちの、どれか1つです。
以下はFontconfigパターンの例です:
Monospace Monospace-12 Monospace-12:bold DejaVu Sans Mono:bold:italic Monospace-12:weight=bold:slant=italic
Fontconfigパターンの、より詳細な説明は、Fontconfigのマニュアルを参照してください。これはFontconfigとともに配布されており、https://fontconfig.org/fontconfig-user.htmlからオンラインで利用可能です。
MS-Windowsではすべてのフォントにたいしてfontname[-fontsize]形式のサブセットだけがサポートされています。これらの形式すべてにたいして完全なFontconfigパターンは機能しないかもしれません。
フォントを指定する2番目の方法は、GTKフォントパターンを使う方法です。これらは以下の構文を使います。
fontname [properties] [fontsize]
fontnameはファミリー名、propertiesはスペースで区切られたプロパティー値のリストで、fontsizeはポイントサイズです。GTKフォントパターンで指定するプロパティーは以下のようなものでしょう:
以下にGTKフォントパターンの例をいくつか示します:
Monospace 12 Monospace Bold Italic 12
MS-Windowsではfontnameのサブセットだけがサポートされています。
フォントを指定する3番目の方法はXLFD(X Logical Font Description)を使う方法であり、MS-Windowsでもサポートされています。これはXでフォントを指定する際の伝統的な手法です。以下のように、各XLFDは14の単語か数字をダッシュで区切ったものからなります:
-misc-fixed-medium-r-semicondensed--13-*-*-*-c-60-iso8859-1
XLFDでのワイルドカード文字(‘*’)は、任意の文字の並び(noneを含む)にマッチし、‘?’は任意の1文字にマッチします。しかしマッチングは実装依存で、長い名前の中のダッシュにたいするワイルドカードのマッチが不正確なことがあります。信頼できる結果を得るためには、14個すべてのダッシュを指定して、ワイルドカードを1つのフィールドだけに使います。XLFDでは大文字小文字の違いは重要ではありません。XLFDの構文は以下のとおりです:
-maker-family-weight-slant-widthtype-style… …-pixels-height-horiz-vert-spacing-width-registry-encoding
エントリーは以下の意味をもちます:
フォントのmanufacturer(製造者名)です。
フォントのファミリー名です(たとえば‘courier’)。
フォントのweightで、通常は‘bold’、‘medium’、‘light’のどれかです。他の値をサポートするフォント名もいくつかあります。
フォントのslantで、通常は‘r’(roman)、‘i’(italic)、‘o’(oblique)、‘ri’(reverse italic)、‘ot’(other)のどれかです。他の値をサポートするフォント名もいくつかあります。
フォントのwidthで、通常は‘normal’、‘condensed’、‘semicondensed’、‘extended’のどれかです。他の値をサポートするフォント名もいくつかあります。
オプションの追加のstyle名です。通常これは空で、ほとんどのXLFDでは、この位置に2つのハイフンを続けて指定します。style名には、‘ja’や‘ko’のような、ISO-639 language nameの2文字を指定することもできます。CJKスクリプトをサポートするいくつかのフォントは、style名の部分にこの記述をもちます。
フォントのheightをピクセルで指定します。
プリンターのポイントの1/10を単位とした、スクリーン上のフォントのheightです。フォントのポイントサイズの10倍です。垂直解像度(vertical resolution)を与えれば、heightとpixelsは比例します。したがって一方を指定して、もう一方に‘*’を指定するのが一般的です。
フォントが意図するインチあたりのピクセル数で表した、水平解像度(horizontal resolution)です。
フォントが意図するインチあたりのピクセル数で表した、垂直解像度(vertical resolution)です。通常、システムのフォント解像度は、スクリーンにたいして正しい値になっています。したがって、これとhorizには‘*’を指定するのが普通です。
これには‘m’(monospace)、‘p’(proportional)、‘c’(character cell)を指定します。
ピクセル単位で表した文字の平均widthの10倍です。
フォントを描画するXフォント文字セット(X font character
set)です(Xフォント文字セットはEmacs文字セットと同じではありませんが、似ています)。フォントの選択をチェックするのに、xfontsel
コマンドを使うことができます。通常は、registryに‘iso8859’、encodingに‘1’を使うべきです。
フォントを指定する4番目の方法は、フォントニックネーム(font nickname)を使う方法です。特定のフォントは通常のフォント指定のかわりに、短いニックネームをもつものがあります。たとえば‘6x13’は以下と同じです
-misc-fixed-medium-r-semicondensed--13-*-*-*-c-60-iso8859-1
この形式はMS-Windowsではサポートされていません。
X上でのEmacsは、2つのタイプのフォントを認識します。1つはクライアントサイドのフォントで、これはXftおよびFontconfigライブラリーにより提供されます。もう1つはサーバーサイドのフォントで、これはXサーバー自身により提供されます。ほとんどのクライアントサイドフォントは、アンチエイリアシング(antialiasing)やサブピクセルンティング(subpixel hinting)などの、サーバーサイドフォントにはない、進んだフォント機能をサポートします。FontconfigとGTKパターンは、クライアントサイドフォントだけにマッチします。
すべての文字が同じ幅をもつ固定幅フォントを使いたいと思うでしょう。XftおよびFontconfigフォントでは、fc-list
コマンドを使って、以下のようにして利用可能な固定幅フォントを一覧することができます。
fc-list :spacing=mono fc-list :spacing=charcell
サーバーサイドのXフォントにたいしては、xlsfonts
プログラムを使って、以下のようにして利用可能な固定幅フォントを一覧することができます。
xlsfonts -fn '*x*' | grep -E '^[0-9]+x[0-9]+' xlsfonts -fn '*-*-*-*-*-*-*-*-*-*-*-m*' xlsfonts -fn '*-*-*-*-*-*-*-*-*-*-*-c*'
XLFDのspacingフィールドが、‘m’または‘c’のフォントは固定幅フォントです。特定のフォントの外見を見るには、以下のようにxfd
コマンドを使います:
xfd -fn 6x13
これはフォント‘6x13’の全体を表示します。
Emacsを実行しているときは、特定の種類のテキスト(テキストのフェイスを参照してください)や、特定のフレーム(フレームパラメーターを参照してください)のフォントをセットすることもできます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
スピードバー(speedbar)は、簡単に他のフレームを操作したり処理するための、特別なフレームです。スピードバーが存在するとき、それは常にアタッチされたフレーム(attached frame)と呼ばれる、特定のフレームに対応しています。すべてのスピードバー操作は、そのフレームにたいして処理されます。
M-x speedbarとタイプすると、スピードバーを作成して、カレントフレームに関連付けます。スピードバーを解除するには、再度M-x speedbarとタイプするか、スピードバーを選択してqとタイプします(他のEmacsフレームを削除するのと同じ方法で、スピードバーフレームを削除することもできます)。スピードバーを他のフレームに関連付けたいときは、一旦解除してから、そのフレームでM-x speedbarを呼び出します。
スピードバーは、さまざまなモードを処理できます。デフォルトモードはFile Display(ファイル表示)モードで、これはアタッチされたフレームの、選択されたウィンドウのカレントディレクトリーのファイルを、1行に1ファイルずつ表示します。ディレクトリー以外をクリックすると、アタッチされたフレームの、選択されたウィンドウでそのファイルをvisitし、ディレクトリーをクリックすると、スピードバーでそのディレクトリーを表示します(マウスで参照をフォローするを参照してください)。各行には‘[+]’や‘<+>’が記されたボックスがあり、それをクリックすると、そのアイテムの内容を展開します。ディレクトリーを展開すると、ディレクトリーの内容を、ディレクトリー自身の行の下に加えてスピードバー表示します。通常のファイルを展開すると、ファイルの中のtagリストをスピードバー表示に加えます。tag名をクリックして、アタッチされたフレームの選択されたウィンドウで、tagにジャンプできます。ファイルまたはディレクトリーが展開されているときは、‘[+]’が‘[-]’に変化します。ボックスを再度クリックすると、アイテムを収納して、内容を隠すことができます。
キーボードを使ってスピードバーを操作することもできます。スピードバーでポイントのある行でRETをタイプするのは、そのアイテムをクリックするのと等しく、SPCはアイテムを展開または収納します。Uは、カレントディレクトリーの親ディレクトリーを表示します。カレント行のファイルをコピー、削除、リネーム<するには、C、D、Rをタイプします。新しいディレクトリーを作成するには、Mをタイプします。
スピードバーのモードで、他に一般的な目的に使われるのはBuffer Display(バッファー表示)モードです。このモードでは、スピードバーはEmacsバッファーのリストを表示します。このモードに切り替えるにはスピードバーでbをタイプします。File Displayモードに戻るには、fをタイプします。スピードバーのウィンドウのどこかをmouse-3でクリック(またはモードラインをmouse-1でクリック)して、ポップアップメニューの‘Displays’を選択しても、表示モードを変更することができます。
Rmailモード、Info、GUDを含むいくつかのメジャーモードは、スピードバーに選択可能な便利なアイテムを配する、特別な方法をもっています。たとえばRmailモードでは、スピードバーはRmailファイルのリストを表示し、カレントメッセージを他のRmailファイルに移動する場合は、それの‘<M>’ボックスをクリックします。
スピードバーの使い方とプログラミングに関する詳細は、Speedbar in Speedbar Manualを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
1つのEmacsが、1つ以上のXディスプレーと通信できます。最初、Emacsは環境変数DISPLAY
、または‘--display’オプション(初期化オプションを参照してください)で指定された、ただ1つのディスプレーに表示されます。他のディスプレーに接続するには、コマンドmake-frame-on-display
を使います:
ディスプレーdisplayに新しいフレームを作成します。
1つのXサーバーは、1つ以上のスクリーンを処理できます。1つのサーバーに属する2つのスクリーンでフレームを開いた場合、Emacsはそれらが1つのキーボードを共有するのを知っているので、これらのスクリーンから到着するすべてのコマンドを1つの入力ストリームとして扱います。
異なるXサーバーでフレームを開いた場合、Emacsは各サーバーごとに別な入力ストリームを作成します。各サーバーは、それぞれ選択されたフレームをもちます。特定のXサーバーで入力したコマンドは、そのサーバーの選択されたフレームに適用されます。
マルチモニターディスプレイではコマンドmake-frame-on-monitor
が使用可能です:
モニターmonitor上にスクリーン領域がカレントディスプレイの一部であるようなフレームを新たに作成します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
変数default-frame-alist
の中の、フレームパラメーター(frame
parameters)のデフォルトリストを指定することにより、すべてのフレームのデフォルトの外見と振る舞いを制御することができます。この値はエントリーのリストで、各エントリーにはパラメーター名と、そのパラメーターの値を指定します。これらのエントリーはEmacsが新しいフレームを作るとき(初期フレームを含む)に効果を及ぼします。
たとえば以下のファイルをinitファイル(Emacs初期化ファイルを参照してください)に追加することにより、デフォルトのフレーム幅が90列、デフォルトのフレーム高さが40行、デフォルトフォントに‘Monospace-10’を指定します。
(add-to-list 'default-frame-alist '(width . 90)) (add-to-list 'default-frame-alist '(height . 40)) (add-to-list 'default-frame-alist '(font . "Monospace-10"))
フレームパラメーターのリストと、その効果については、Frame Parameters in The Emacs Lisp Reference Manualを参照してください.
変数initial-frame-alist
をカスタマイズすることにより、初期フレームだけに適用されるフレームパラメーターのリストを指定することもできます。
EmacsがX ツールキットを使ってコンパイルされている場合、カラーとフォントを指定するフレームパラメーターは、メニューとメニューバーには影響を及ぼしません。なぜなら、それらはEmacsが直接描画しているのではなく、ツールキットにより描画されているからです。
フレームの外観と振る舞いも、Xリソースを通じてカスタマイズできます(Xのオプションとリソースを参照)。これらはinitファイル内で指定された初期フレームのパラメーターをオーバーライドします。
セッションの保存とリストアのためにdesktopライブラリーを使用している場合は、desktopファイルに記録されたフレームが、これらのパラメーターとともにリストアされることに注意してください。これらのフレームがリストアされるときは、initファイル内でdefault-frame-alist
およびinitial-frame-alist
で指定されているフレームパラメーターよりも、記録されたパラメーターが優先されます。これを避ける方法については、Emacsセッションの保存を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
グラフィカルなディスプレーでは、Emacsウィンドの横に垂直スクロールバー(vertical scroll bar)があります。スクロールバーのupボタンまたはdownボタンをmouse-1でクリックすると、ウィンドウを1行ずつスクロールします(しかし、これらのボタンがないようにスクロールバーをカスタマイズできるツールキットもある)。スクロールバー内部のボックスの上または下をmouse-1でクリックすると、M-vまたはC-vと同様に、ほぼウィンドウ全体の高さ分スクロールします(ポイント位置の変更を参照) (これも、いくつかのツールキットでは動作が異なるかもしれない)。スクロールバー内部のボックスをドラッグすると、連続してスクロールします。
EmacsがXウィンドウシステム上でXツールキットサポートなしでコンパイルされている場合、スクロールバーは違った振る舞いをします。スクロールバーの任意の箇所をmouse-1でクリックするとC-vのように前方にスクロールし、mouse-3でクリックするとM-vのように後方にスクロールします。スクロールバーでmouse-2をクリックすると、スクロールバー内部のボックスを上下にドラッグできます。
垂直スクロールバーの使用を切り替えるには、M-x scroll-bar-modeとタイプします。このコマンドは、まだ作成されていないフレームも含めて、すべてのフレームに適用されます。選択されたフレームの垂直スクロールバーだけ切り替えたい場合は、コマンドM-x toggle-scroll-barを使用してください。
起動時に垂直スクロールバーの使用を制御するには、変数scroll-bar-mode
(カスタマイズを参照)をカスタマイズします。この変数の値は、right
(ウィンドウの右にスクロールバーを配します)、left
(ウィンドウの左にスクロールバーを配します)、nil
(垂直スクロールバーを無効にします)のどれかです。EmacsがXウィンドウシステム上でGTK+サポートつきでコンパイルされている、またはMS-Windows、macOSの場合、デフォルトでは右にスクロールバーを配します。EmacsがXウィンドウシステム上でGTK+サポートなしでコンパイルされている場合、(古いXアプリケーションの慣例にしたがって)スクロールバーを左に配します。
Xリソース‘verticalScrollBars’を使って、スクロールバーの有効または無効にすることができます(Xリソースを参照してください)。スクロールバーの幅を制御するにはフレームパラメーターscroll-bar-width
を変更してください(Frame
Parameters in The Emacs Lisp Reference Manualを参照してください)。
(GTK+またはMotifとともに)X上でEmacsを使っている場合、変数scroll-bar-adjust-thumb-portion
をカスタマイズして、スクロールバーのオーバースクロール(overscrolling:
たとえばバッファーの最後が表示されていてもさらに下にスクロールします)を制御できます。変数の値が非nil
の場合、バッファーの最後が表示されていてもスクロールバーを下にドラッグできます。nil
の場合、バッファーの最後が表示されたとき、内部のボックスはスクロールバーの最下になります。バッファー全体が表示されているときは、オーバースクロールできません。
スクロールバーの視覚的な外見は、scroll-bar
フェイスにより制御されます。
グラフィカルなフレームでは、垂直スクロールバーは暗に横並びのウィンドウを区別する役目を担っています。垂直スクロールバーが無効なとき、Emacsはデフォルトでは幅1ピクセルの垂直ボーダー(vertical
border)によりそのようなウィンドウを区別します。このボーダーは右側のウィンドウの最初の1ピクセルの列を占め、したがってそこに表示されていたグリフの左端ピクセルの上に上書きされることになるでしょう。これらのピクセルに重要な情報が含まれる場合は、window
dividerを有効にしてそれらを可視にできます(ウィンドウdividerを参照)。垂直ボーダーの見栄えを複製するには、フレームのright-divider-width
パラメーターを1にセットして、window-divider
フェイスをvertical-border
のフェイスから継承してください(Window Dividers in The Emacs Lisp Reference Manualを参照)。
ツールキットサポート付きのグラフィカルなディスプレーでは、Emacsは各ウィンドウの最下に水平スクロールバー(horizontal scroll bar)も提供します。スクロールバーのleftボタンまたはrightボタンをmouse-1でクリックすると、ウィンドウを1列ずつ水平にスクロールします(これらのボタンを表示しないようスクロールバーをカスタマイズできるツールキットがあることに注意)。スクロールバーの内部ボックスの左または右下をmouse-1でクリックすると、ウィンドウは4列スクロールします。スクロールバー内部のボックスをドラッグすると、連続してスクロールします。
このような水平スクロールにより、そのウィンドウのポイント位置が、右側または左側の見えない場所になるかもしれないことに注意してください。文字をタイプしてテキストを挿入したり、キーボードコマンドでポイントを移動することにより通常、ポイントは視界に戻るでしょう。
水平スクロールバーの使用を切り替えるには、M-x horizontal-scroll-bar-modeとタイプします。このコマンドは、まだ作成されていないフレームも含めて、すべてのフレームに適用されます。選択されたフレームの水平スクロールバーだけ切り替えたい場合は、コマンドM-x toggle-horizontal-scroll-barを使用してください。
起動時に水平スクロールバーの使用を制御するには、変数horizontal-scroll-bar-mode
をカスタマイズしてください。
Xリソース‘horizontalScrollBars’を使って、水平スクロールバーを有効または無効にすることができます(Xリソースを参照してください)。スクロールバーの高さを制御するには、フレームパラメーターscroll-bar-height
を変更してください(Frame
Parameters in The Emacs Lisp Reference Manualを参照してください)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
グラフィカルなディスプレーでは、ウィンドウの外観を分割するために、window dividersを使用することができます。window dividersはマウスでドラッグできるバーなので、隣接したウィンドウを簡単にリサイズできます。
window dividersの表示を切り替えるには、コマンドM-x window-divider-modeを使用します。
dividersをどこに表示するかカスタマイズするには、オプションwindow-divider-default-places
を使用します。変数の値にはbottom-only
(dividersをウィンドウの下だけに表示します)、right-only
(dividersをウィンドウの右だけに表示します)、またはt
(下と右の両方に表示します)を指定します。
このモードにより表示されるwindow
dividersの幅を調整するには、オプションwindow-divider-default-bottom-width
およびwindow-divider-default-right-width
をカスタマイズします。
ウィンドウの列の最初の1ピクセル(window dividerが無効な場合は横並びのウィンドウを区別する垂直ボーダーに使用されます)を可視とするwindow dividerは、垂直スクロールバーが無効のときにも有用です(スクロールバーを参照)。
window dividersについての詳細は、Window Dividers in The Emacs Lisp Reference Manualを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ほとんどのグラフィカルなデスクトップ環境で、Emacsはドラッグアンドドロップ(drag and drop)操作にたいする、基本的なサポートを提供します。たとえばEmacsのフレームにテキストをドロップすると、ドロップされた箇所にテキストを挿入し、ファイルをドロップすると、Emacsフレームはそのファイルをvisitします。特別なケースとしては、Diredバッファーにファイルをドロップすることにより、バッファーに表示されているディレクトリーにファイルを移動またはコピーします(アプリケーションの慣例に基づきます)。
ファイルをドロップすると、通常はドロップされたウィンドウでファイルをvisitします。そのような場合に、新しいウィンドウでファイルをvisitしたいときは、変数dnd-open-file-other-window
をカスタマイズします。
現在のところ、XDNDおよびMotif drag and drop protocolsと、古いKDE 1.x protocolがサポートされています。
Emacsはオプションで、テキストのリージョンを他のバッファーの他の部分へドラッグする操作もサポートします。これを有効にするには、変数mouse-drag-and-drop-region
を非nil
値にカスタマイズしてください。通常そのテキストは、ドロップ先が元のリージョンと同じなら移動(カットアンドペースト)され、他のバッファーならそのリージョンがコピーされます。この変数の値が‘shift’、‘control’、‘alt’のような修飾キー名の場合、その修飾キーを押しながらテキストをドロップすると、ドロップ先がドラッグ元と同じバッファーでも、テキストはカットされずにコピーされます。
ドラッグ元とドロップ先が異なるバッファーのときにもテキストをカットするためには、オプションmouse-drag-and-drop-region-cut-when-buffers-differ
を非nil
値にセットします。デフォルトでは、グラフィカルなディスプレイの選択されたテキストはツールチップ内に表示され、ドラッグ中にはマウスカーソルとともにポイントが移動します。このような動作を抑止するには、オプションmouse-drag-and-drop-region-show-tooltip
、および/またはmouse-drag-and-drop-region-show-cursor
にnil
をセットしてください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
M-x
menu-bar-modeで、メニューバーの使用を切り替えることができます。引数を指定しないと、このコマンドはグローバルマイナーモードのMenu
Barを切り替えます。引数を指定した場合、引数が正ならMenu
Barモードをオンにして、負ならオフにします。起動時にメニューバーの使用を制御するには、変数menu-bar-mode
をカスタマイズしてください。
熟練したユーザーは、テキストのために更なる行を得るために、メニューをオフにしている場合がしばしばあります(特にテキスト端末時)。メニューバーがオフでも、ポップアップメニューをサポートするディスプレーなら、C-mouse-3でメニュー内容を含むポップアップメニューを表示できます。メニューにたいするマウスクリックを参照してください。
メニューバーのコマンドを呼び出す方法については、メニューバーを参照してください。メニューバーのメニューの視覚的な外見をカスタマイズする方法は、Xのオプションとリソースを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
グラフィカルなディスプレーでは、Emacsはフレームのトップ、メニューバーの直下にツールバー(tool bar)を配します。これはマウスでクリックすることにより、さまざまなコマンドを呼び出すことができるアイコンが1列に並んだものです。
(デフォルトの)グローバルツールバーは、一般的なコマンドを含みます。自身のツールバーを定義するメジャーモードもいくつか存在します。バッファーがそれらのメジャーモードの場合、モードのツールバーにより、グローバルツールバーが置き換えられます。
ツールバーの使用を切り替えるには、M-x
tool-bar-modeとタイプします。このコマンドは、まだ作成されていないフレームを含むすべてのフレームに適用されます。起動時にツールバーの使用を制御するには、変数tool-bar-mode
をカスタマイズします。
EmacsがGTK+サポートつきでコンパイルされている場合、ツールバーアイテムには、イメージ、テキストラベル、またはそれら両方を含むことができます。デフォルトではEmacsはGnomeデスクトップの、ツールバースタイルセッティングにしたがいます。もし何も定義されていない場合、ツールバーのアイテムにはイメージだけが表示されます。特定のツールバースタイルを強要するには、変数tool-bar-style
をカスタマイズしてください。
フレームパラメーターtool-bar-position
で、GTK+ツールバーのためのツールバーの配置を制御することもできます。Frame
Parameters in The Emacs Lisp Reference Manualを参照してください。
NSビルドはツールバーをウィンドウ装飾と判断するため、ウィンドウが装飾されていないときはツールバーを表示しません。Frame Parameters in The Emacs Lisp Reference Manualを参照してください。macOSでは、フレームがフルスクリーンのときツールバーは表示されませんが、スクリーン上端にマウスポインターを移動することにより表示することができます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
グラフィカルなディスプレーとテキスト端末では、Emacsはオプションでフレームのトップ、メニューバーの直下にタブバー(Tab Bar)を表示できます。タブバーとはタブ(tabs)の行(そのフレーム上のウィンドウ設定間を切り替えるためにクリック可能)です。
タブバー上の各タブは永続的なウィンドウ設定を表します。タブの名前はウィンドウ設定で可視なバッファーの名前のリストから構成されます。タブをクリックすることによってタブに記録されたウィンドウ設定(以前そのタブがカレントタブだったときにフレームで使用されたウィンドウとバッファーの設定)に切り替わります。
セッションの保存とリストアにデスクトップライブラリー(Emacsセッションの保存を参照)を使用している場合には、タブバーのタブは関連付けられたウィンドウ設定とともにデスクトップファイルに記録されて、それはセッションをリストアした後に利用することができます。
タブバーはタブラインとは異なることに注意してください(ウィンドウのタブラインを参照)。各ウィンドウ上端にあるタブラインのタブはバッファーの切り替え、各フレーム上端にあるタブバーのタブは複数のウィンドウとバッファーを含むウィンドウ設定の切り替えに使用します。
タブバーの使用を切り替えるには、M-x
tab-bar-modeとタイプします。このコマンドは、まだ作成されていないフレームを含むすべてのフレームに適用されます。起動時にタブバーの使用を制御するには、変数tab-bar-mode
をカスタマイズします。
変数tab-bar-show
はTab
Barモードを自動的にオンにするかどうかを制御します。この値がt
なら、新たなタブを作成するコマンドの使用時にtab-bar-mode
モードが有効に成増。値が1
ならタブが1つだけのときはタブバーを隠して、さらにタブが作成されたら再び表示します。値nil
は常にタブバーを非表示にします。この場合でもM-x
tab-next、M-x
tab-switcher、およびタブ名の補完を提供するその他のコマンドを使用することによってタブバーなしで名前つきのウィンドウ設定を切り替えることができます。M-x
tab-new、M-x tab-close等のコマンドを使用することにより、タブバーの作成やクローズも可能です。
プレフィクスキーC-x tはC-x 5と似ています。C-x 5コマンドはバッファーを別フレームにポップアップしますが(フレームの作成を参照)、C-x tコマンドは選択されたフレームで異なるウィンドウ設定に別のタブを使用します。
以下のC-x tコマンドは選択するバッファーを検索したり作成する方法が異なります。以下のコマンドは新たなタブでのバッファーの選択に使用できます。:
タブを新たに追加します(tab-new
)。変数tab-bar-new-tab-choice
のカスタマイズによって新たなタブに表示するバッファーの選択を制御できます。
バッファーbufnameを他のタブで選択します。これはswitch-to-buffer-other-tab
を実行します。
ファイルfilenameをvisitして、そのバッファーを他のタブで選択します。これはfind-file-other-tab
を実行します。ファイルのvisit(訪問)を参照してください。
ディレクトリーdirectoryにたいするDiredバッファーを、他のタブで選択します。これはdired-other-tab
を実行します。Dired (ディレクトリーエディター)を参照してください。
デフォルトでは新たなタブを追加したコマンドの呼び出し前にカレントだったバッファーとともに新たなタブが開始されます。別のバッファーとともに新たなタブを開始するには、変数tab-bar-new-tab-choice
をカスタマイズしてください。
変数tab-bar-new-tab-to
は新たなタブを配置する場所を定義します。デフォルトでは新たなタブはカレントタブの右側に追加されます。
以下のコマンドはタブの削除に使用されます:
選択されたタブをクローズします(tab-close
)。変数tab-bar-close-last-tab-choice
がデフォルト値なら、1つのタブの場合には効果はありません。
選択されたフレームの、選択されたタブ以外のすべてのタブを削除します。
変数tab-bar-close-tab-select
はカレントタブをクローズ後に選択するタブを定義します。デフォルトではもっとも最近使用したタブを選択します。
コマンドtab-undo
は最後にクローズしたタブをリストアします。
以下のコマンドはタブ間を切り替えるために使用されます:
次のタブに切り替えます。このコマンドを繰り返すと選択されたフレームのすべてのタブを巡回します。正の数引数nでは次のn番目のタブ、負の引数-nでは前のn番目のタブに切り替えます。
前のタブに切り替えます。正に数引数nでは前のn番目のタブ、負の引数-nでは次のn番目のタブに切り替えます。
すべてのタブの名前の補完つきで名前でタブを切り替えます。デフォルト値はもっとも最近使用された順にソートされたタブ名なので、M-n
(next-history-element
)で最後にvisitしたタブ、その前のタブ、...を取得します。
タブ名でタブを切り替えます。modifierキーを指定するために変数tab-bar-select-tab-modifiers
をカスタマイズした後には、タブの序数と指定した修飾キーを組み合わせてタブを選択できます。別の変数tab-bar-tab-hints
をカスタマイズして、タブ名とともにタブ番号を表示できます。これは番号でタブを選択するためにどのキーを押下すれば判断する助けになるでしょう。
最近使用したタブに切り替えます。キーの組み合わせはtab-bar-select-tab-modifiers
で指定した修飾キーと0です。数引数nではn番目に最近使用したタブに切り替えます。
以下のコマンドはタブを操作するために使用されます:
カレントタブをtabnameにリネームします。変数tab-bar-tab-name-function
をカスタマイズして、デフォルトでタブに与えるプログラム的な名前を制御できます。
正の数引数nではカレントタブから右にn個目のタブ、負の引数-nではカレントタブから左にn個目のタブに移動します。
すべてのタブに使用されたウィンドウ設定の記録とリストアのためにtab-bar-history-mode
を有効にできます。
カレントタブで前に仕様されたウィンドウ設定をリストアします。これによりウィンドウ設定のヒストリーを戻ります。
前のウィンドウ設定のリストアを取り消します。これはウィンドウ設定のヒストリーを進めます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ダイアログボックスとは、yes-or-noの質問(はい/いいえで応える問いかけ)をしたり、他の何か特別な質問を問いかけるための、特別な種類のメニューです。コマンドを呼び出すためにマウスを使い、それがユーザーへの質問を要するような操作の場合、多くのEmacsコマンドはyes-or-noを問うために、ダイアログボックスを使います。
ダイアログボックスの使用を無効にするには、変数use-dialog-box
をnil
に変更します。この場合、Emacsはエコーエリアとキーボード入力を使ってyes-or-noプロンプトを処理します。この変数はファイル選択ウィンドウの使用も制御します(しかしこれらはすべてのプラットフォームでサポートされているわけではありません)。
ファイル選択ウィンドウはファイル名を問うための、特別な種類のダイアログボックスです。変数use-file-dialog
をカスタマイズすれば、他の種類のダイアログボックスを使用して、ファイル選択ウィンドウを使用しないようにできます。変数use-dialog-box
ですべてのダイアログボックスを使用しないようにしている場合、この変数は効果がありません。
EmacsがGTK+サポートつきでコンパイルされている場合、EmacsはGTK+のファイル選択ダイアログを使います。Emacsは非表示のファイル(名前がドットで始まるファイル)の表示の有効・無効を切り替えるボタンを、ダイアログボックスに追加します。この切り替えをデフォルトで有効にしたい場合、変数x-gtk-show-hidden-files
をt
に変更します。さらにEmacsは、GTK+ファイル選択ダイアログにヘルプテキストを追加します。このヘルプテキストを無効にするには、変数x-gtk-file-dialog-help-text
をnil
に変更してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ツールチップは、小さい特別なフレームに、マウスのカレント位置に関するテキスト情報を表示します。ツールチップはウィンドウの重要なテキストの上や、ツールバーのボタンやメニューアイテムのような、Emacsフレームの他の部分の上でマウスを停止させたときにアクティブになります。
ツールチップの使用は、コマンドM-x
tooltip-modeで切り替えることができます。Tooltipモードが無効な場合、ヘルプテキストは、かわりにエコーエリアに表示されます。ツールチップの使用を起動時に制御するには、変数tooltip-mode
をカスタマイズしてください。
以下の変数はツールチップ表示にたいするカスタマイズオプションを提供します:
tooltip-delay
この変数は、最初のツールチップを表示する前に、Emacsがwaitする長さを指定します。値は秒です。
tooltip-short-delay
この変数は、すでに最初のツールチップが表示されているとき、異なるアイテムにたいする後続のツールチップを表示する前に、Emacsがwaitする長さを指定します。値は秒です。
tooltip-hide-delay
マウスが静止しているとき、ツールチップを隠すまでの秒数です。
tooltip-x-offset
tooltip-y-offset
マウスポインター位置から、ツールチップの左上隅までのXオフセットとYオフセットを、ピクセルで指定します。tooltip-frame-parameters
が、left
およびtop
パラメーターをインクルードするためにカスタマイズされている場合、これらは無視されることに注意してください。オフセットには、ツールチップがマウスのクリックと干渉するような、マウスポインターのホットスポットを覆い隠さない値を指定するべきです。
tooltip-frame-parameters
ツールチップの表示のために、フレームパラメーターが使用されます。Frame Parameters in The Emacs Lisp Reference Manual、およびTooltips in The Emacs Lisp Reference Manualを参照してください。
ツールチップの表示にたいする追加のカスタマイズオプションについては、M-x customize-group RET tooltip RETを使用してください。
EmacsがGTK+サポートつきでビルドされている場合、ツールチップはGTK+を通じて、GTK+のツールチップのデフォルトの外見を使います。これを無効にするには、変数x-gtk-use-system-tooltips
をnil
に変更します。これを行うか、EmacsがGTK+サポートなしでビルドされた場合は、ツールチップテキストのほとんどの属性はtooltip
フェイスとXリソース(Xのオプションとリソースを参照してください)により指定されます。
GUDツールチップは、プログラムをGUDでデバッグしているときに変数の値を表示する、特別なツールチップです。デバッガーの操作を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
グラフィカルな端末では、マウスポインターがEmacsフレームのテキストを隠してしまうことがありえます。この問題を避けるために、Emacsは2つの方法を提供します。
1番目の方法は、ユーザーが自己挿入文字をタイプしたとき、Emacsがマウスポインターを非表示にして、マウスポインターを動かしたときに、ポインターがEmacsフレームの内側にあるときは、再びポインターを表示する方法です。この機能を無効にするには、変数make-pointer-invisible
をnil
にセットしてください。ディスプレーのカスタマイズを参照してください。
2番目の方法はMouse Avoidance(マウス回避)モードを使って、マウスポインターをポイントから遠ざける方法です。Mouse
Avoidanceモードを使うには、変数mouse-avoidance-mode
をカスタマイズします。この変数にさまざまな値をセットすることにより、マウスを遠ざけるいくつかの方法を選択できます。
banish
キーが押されたらポインターをフレームの隅に移動します。ポインターをどこに遠ざけるかは、変数mouse-avoidance-banish-position
でカスタマイズできます。
exile
カーソルがポインターに近づきすぎたときだけポインターを遠ざけて、カーソルが離れたらポインターを元に戻します。
jump
カーソルがポインターに近づきすぎたら、ランダムな方向と距離にポインターを移動します。
animate
jump
と同様ですが、移動モーションをアニメ化します。
cat-and-mouse
animate
と同じです。
proteus
animate
と同様ですが、マウスポインターの外見も変更します。
コマンドM-x mouse-avoidance-modeを使って、このモードを有効にすることもできます。Mouse Avoidanceモードがマウスを移動したときは、常にそのフレームを前に表示します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
テキスト端末では、Emacsは1度に1つのEmacsフレームしか表示できません。それでも複数のEmacsフレームを作成して、それらを切り替えることができます。これらの端末でフレームを切り替えるのは、異なるウィンドウの設定を切り替えるのによく似ています。
C-x 5 2を使うと新しいフレームを作成してそれに切り替えます。C-x 5 oを使うと既存のフレームを巡回します。C-x 5 0を使うと、カレントフレームを削除します。
各フレームには区別するための番号があります。端末が1度に1つのフレームしか表示できない場合、選択されたフレームの番号nが、モードラインの先頭に近い位置に、‘Fn’という形式で表示されます。
‘Fn’は、フレームの実際の初期名称です。フレームにもっと意味のある名前を与えて、その名前でフレームを選択できます。コマンドM-x set-frame-name RET name RETを使うと、選択されたフレームに新しい名前を指定し、M-x select-frame-by-name RET name RETを使うとその名前に一致するフレームを選択します。指定した名前は、そのフレームが選択されたときに、モードラインに表示されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
端末ウィンドウでのマウスクリックをサポートするテキスト端末がいくつかあります。
xterm
と互換性のある端末エミュレーターでは、M-x
xterm-mouse-modeを使って、Emacsに簡単なマウスの使用 — 基本的には修飾なしのシングルクリックだけがサポートされます —
を制御させることができます。より新しいバージョンのxterm
は、マウストラッキングもサポートします。そのようなクリックにたいする通常のxterm
のマウス機能は、マウスボタンを押すときにSHIFTキーを押すことにより、利用できます。Xterm
Mouseモードはグローバルマイナーモードです(マイナーモードを参照してください)。コマンドを繰り返すと、このモードを再びオフにします。
GNU/Linuxのコンソールでは、M-x gpm-mouse-modeを使ってマウスサポートを有効にできます。これが機能するためにはgpmサーバーがインストールされていて、システムで実行されていなければなりません。このモードが有効な場合、EmacsとGPMを使用する他のプログラムとの間で、マウスによるテキスト転送ができないことに注意してください。これはGPMとLinux kernelによる制限です。
MS-DOSでのマウスサポートに関する情報は、MS-DOSでびマウスの使用方法を参照してください 。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsは、広範囲な国際化文字セット(international character sets)をサポートします。それらには、ラテンアルファベットの変種であるEuropeanとVietnamese、同様にArabic scripts、(Bengali、Hindi、Thaiのような言語にたいする)Brahmic scripts 、Cyrillic、Ethiopic、Georgian、Greek、(ChineseとJapaneseにたいする)Han、(Koreanにたいする)Hangul、Hebrew、IPAが含まれます。Emacsは他の国際化されたソフトウェアー(ワープロやメーラー)などで使われる、それらの文字にたいするさまざまなエンコーディングもサポートします。
Emacsは関連するアクティビティーのすべてをサポートすることにより、国際化文字セットの編集を可能にします:
Xウィンドウシステムでは、Emacsがキーボード入力を正しく解釈するために、localeに適切な値をセットする必要があります。localesを参照してください。
このチャプターの残りの部分では、これらの問題について詳細を説明します。
22.1 国際化文字セットのイントロダクション | マルチバイト文字の基本的な概念。 | |
22.2 言語環境 | 使用する言語のためのセットアップ事項。 | |
22.3 インプットメソッド | キーボードにないテキスト文字の入力。 | |
22.4 インプットメソッドの選択 | インプットメソッド選択を指定する。 | |
22.5 コーディングシステム | ファイルを読み書きしたりするときの文字セット変換。 | |
22.6 コーディングシステムの認識 | どの変換を使用するかをEmacsが解決する方法。 | |
22.7 ファイルのコーディングシステムの指定 | ファイルのコーディングシステムの明示的な指定。 | |
22.8 出力のためのコーディングシステムの選択 | 出力のためのコーディングシステムの選択について。 | |
22.9 ファイルのテキストにたいするコーディングシステムの指定 | ファイルのテキストに使う変換の選択。 | |
22.10 プロセス間通信にたいするコーディングシステム | プロセス間通信のためのコーディングシステム。 | |
22.11 ファイル名にたいするコーディングシステム | ファイル名のコーディングシステム。 | |
22.12 端末入出力にたいするコーディングシステム | 端末の入出力の変換のためのコーディングシステムの指定。 | |
22.13 フォントセット | フォントセット、それは文字の全範囲をカバーするフォントのコレクション。 | |
22.14 フォントセットの定義 | 新しいフォントセットの定義。 | |
22.15 フォントセットの修正 | 既存のフォントセットの修正。 | |
22.16 表示できない文字 | 文字が表示されないとき。 | |
22.17 Unibyte編集モード | マルチバイト文字を使わずに1つの英文字セットを選択する。 | |
22.18 文字セット | Emacsが内部の文字コードをグループ化する方法。 | |
22.19 双方向の編集 | 右から左に記述する言語のサポート。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
国際化文字セットとスクリプトのユーザーは、ファイルを保存するために、多少の差はありますが、標準化された多くのコーディングシステムを確立しています。これらのコーディングシステムは通常はマルチバイト(multibyte)で、これは1つの非ASCII文字を表すのに、2つ以上のバイトシーケンスを対応させることを意味します。
Emacsは、内部的にはUnicode標準のスーパーセットである、マルチバイト文字エンコーディングを使用します。この内部的なエンコーディングは、ほとんどすべての既知のスクリプトを、1つのバッファーまたは文字列に混成することを可能にします。Emacsはファイルを読み書きしたり、サブプロセスとデータをやりとりするとき、このマルチバイト文字エンコーディングと、他のさまざまなコーディングシステムをコード変換します。
コマンドC-h h
(view-hello-file
)は、ファイルetc/HELLOを表示します。これは、多くの異なる言語で、“hello”をどのように記述するかを、さまざまな文字で例示するファイルです。もしもある文字が端末で表示できないときは、それらの文字は‘?’か、中抜きのボックスで表示されます。
これらの文字セットを使う国のキーボードでも、一般的にはすべての文字に対応するキーはもっていません。キーボードがサポートしない文字は、C-x 8
RET (insert-char
)を使って挿入することができます。テキストの挿入を参照してください。一般的な文字のいくつかは略記が利用できます。たとえばC-x 8 [とタイプ(Electric
Quoteモードでは、通常は単に`とタイプ)することにより、left single quotation mark
‘を挿入できます。Emacsはさまざまなインプットメソッド(IM: input
methods)をサポートします。これはあるスクリプトの文字をタイプするのを簡単にするもので、通常1つのスクリプトまたは言語に1つです。インプットメソッドを参照してください。
プレフィクスキーC-x RETは、マルチバイト文字、コーディングシステム、インプットメソッドに属するコマンドにたいして使用されます。
コマンドC-x =
(what-cursor-position
)は、ポイント位置にある文字の情報を表示します。文字の位置に加えて、カーソル位置の情報で説明したように、このコマンドはその文字がどのようにエンコードされているかを表示します。たとえば、このコマンドは文字‘c’に大して、以下のような行をエコーエリアに表示します:
Char: c (99, #o143, #x63) point=28062 of 36168 (78%) column=53
‘Char:’の後ろの4つの値は、ポイント位置の文字を説明するためのもので、1つ目はその文字自身、その後ろに文字コードを10進(decimal)、8進(octal)、16進(hex)で表示します。非ASCIIのマルチバイト文字の場合、バッファーのコーディングシステムでその文字を安全に1バイトでエンコードできる場合は、‘file’とそのバッファーのコーディングシステムで表した文字コードの16進表記が続きます。その文字のエンコーディングが1バイトより長い場合、Emacsは‘file ...’と表示します。
Emacsがrawバイト(raw
bytes)に遭遇する場合がまれにあります。rawバイトとは、既知の非ASCII文字エンコーディングとしてEmacsが解釈できない、値128(8進0200)から255(8進0377)の範囲の単一バイトのことです。そのようなrawバイトは、特別な文字セットeight-bit
に属すものとして扱われます。Emacsはそれらをエスケープされた8進コードで表示します(これはカスタマイズ可能。ディスプレーのカスタマイズを参照されたい)。この場合、C-x
=は‘file’のかわりに‘raw-byte’を示します。加えて、C-x
=はそれらがあたかもEmacsが範囲#x0080..#x00FF
のユニコード文字から区別するためにマップする範囲#x3FFF80..#x3FFFFF
にあるかのようにrawバイトの文字コードを表示します。
プレフィクス引数を指定した(C-u C-x =)では、その文字の詳細な情報をウィンドウに表示します:
ascii
文字セットに属すると識別されます。
以下は例です(マニュアルに収まるように折り返している行もあります):
position: 1 of 1 (0%), column: 0 character: ê (displayed as ê) (codepoint 234, #o352, #xea) preferred charset: unicode (Unicode (ISO10646)) code point in charset: 0xEA script: latin syntax: w which means: word category: .:Base, L:Left-to-right (strong), c:Chinese, j:Japanese, l:Latin, v:Viet to input: type "C-x 8 RET ea" or "C-x 8 RET LATIN SMALL LETTER E WITH CIRCUMFLEX" buffer code: #xC3 #xAA file code: #xC3 #xAA (encoded by coding system utf-8-unix) display: by this font (glyph code) xft:-PfEd-DejaVu Sans Mono-normal-normal- normal-*-15-*-*-*-m-0-iso10646-1 (#xAC) Character code properties: customize what to show name: LATIN SMALL LETTER E WITH CIRCUMFLEX old-name: LATIN SMALL LETTER E CIRCUMFLEX general-category: Ll (Letter, Lowercase) decomposition: (101 770) ('e' '^')
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
サポートされているすべての文字セットは、マルチバイト文字が利用可能なときは、Emacsバッファーの中でサポートされます。その文字を表示するために、特定の言語を選択する必要はありません。しかしさまざまなデフォルト値をセットするために、言語環境(language environment)を選択することは重要です。大まかに言うと、言語環境とは、言語の選択というよりも、好ましいスクリプト選択の提示です。
言語環境は、テキストを読み込むとき、それを認識するコーディングシステムを制御します(コーディングシステムの認識を参照してください)。これはファイル、到着メール、その他のEmacsで読む任意のテキストに適用されます。これは新しくファイルを作成するときに使う、デフォルトのコーディングシステムも指定します。それぞれの言語環境は、デフォルトのインプットメソッドも指定します。
言語環境を選択するには、current-language-environment
をカスタマイズするか、コマンドM-x
set-language-environmentを使います。このコマンドを使うとき、どのバッファーがカレントかで違いは生じません。なぜなら、その効果はEmacsセッションにグローバルで適用されるからです。サポートされている言語環境の一覧は、変数language-info-alist
を参照してください。コマンドC-h
L lang-env RET
(describe-language-environment
)を使うと、言語環境lang-envの、より詳細な情報が参照できます。サポートされる言語環境には、以下が含まれます:
ASCII、Arabic、 Belarusian、Bengali、 Brazilian Portuguese、Bulgarian、 Burmese、Cham、 Chinese-BIG5、Chinese-CNS、Chinese-EUC-TW、Chinese-GB、Chinese-GB18030、Chinese-GBK、 Croatian、Cyrillic-ALT、Cyrillic-ISO、Cyrillic-KOI8、 Czech、Devanagari、 Dutch、English、 Esperanto、Ethiopic、 French、Georgian、 German、Greek、Gujarati、 Hebrew、IPA、 Italian、 Japanese、Kannada、 Khmer、Korean、Lao、 Latin-1、Latin-2、Latin-3、Latin-4、Latin-5、Latin-6、Latin-7、Latin-8、Latin-9、 Latvian、Lithuanian、 Malayalam、Oriya、 Persian、Polish、 Punjabi、Romanian、 Russian、Sinhala、 Slovak、Slovenian、Spanish、 Swedish、TaiViet、 Tajik、Tamil、 Telugu、Thai、 Tibetan、Turkish、 UTF-8、Ukrainian、 Vietnamese、Welsh、 Windows-1255
グラフィカルなディスプレーでは、使用されている言語環境で使われているスクリプトを表示するために、適切なフォントをもっている必要があります。フォントのセットアップについては、フォントセットを参照してください。
環境変数LC_ALL
、LC_CTYPE
、LANG
をセットすることにより、使用する文字セットのlocaleを指定するオペレーティングシステムがいくつかあります(もしこれらの1つ以上がセットされている場合、特に1番目のものが空でない場合、それは正にこの目的のためにlocaleを指定しています)。起動の間、Emacsは文字セットのlocale名を、システムのlocaleエイリアステーブルから探して、その正規化された名前(canonical
name)を、変数locale-charset-language-names
およびlocale-language-names
(前者は後者をオーバーライドします)のエントリーにたいしてマッチし、マッチが見つかったら対応する言語環境を選択します。これはディスプレーテーブルと端末のコーディングシステム、localeコーディングシステム、localeに必要な好ましいコーディングシステム
— そして最後に重要なのは — Emacsがキーボードから送られた非ASCII文字をデコードする方法を調整します。
Emacs実行中に、(M-x
setenvを使って)環境変数LC_ALL
、LC_CTYPE
、LANG
を変更した場合、新しいlocaleにたいする言語環境を再調整するために、後でset-locale-environment
コマンドを呼び出したいと思うかもしれません。
set-locale-environment
関数は、通常はシステムメッセージをデコードするために、言語環境により確立された優先コーディングシステムを使用します。しかしlocaleが変数locale-preferred-coding-systems
のエントリーにマッチした場合には、Emacsはかわりに対応するコーディングシステムを使用します。たとえばlocaleの‘ja_JP.PCK’がlocale-preferred-coding-systems
のjapanese-shift-jis
にマッチすれば、通常ならutf-8
が使われるような場合でも、Emacsはエンコーディングにそのコーディングシステムを使用します。
initファイルで明示的にコマンドset-language-environment
を使うか、current-language-environment
をカスタマイズすることにより、起動時に選択された言語環境をオーバーライドできます。
特定の言語環境lang-envの効果に関する情報を表示するには、コマンドC-h L lang-env
RET
(describe-language-environment
)を使います。これはこの言語環境に有効な言語、文字セットのリスト、コーディングシステム、インプットメソッドを表示します。これはこの言語環境で使われるスクリプトを例示する、サンプルテキストも表示します。lang-envに空の入力を与えると、このコマンドは選択されている言語環境を説明します。
ノーマルフックset-language-environment-hook
により、任意の言語環境をカスタマイズできます。コマンドset-language-environment
は、新しい言語環境をセットアップした後に、このフックを実行します。フック関数は変数current-language-environment
をチェックすることにより、特定の言語環境をテストできます。このフックはキーボード入力にたいするコーディングシステムや端末出力、デフォルトのインプットメソッドなど、特定の言語環境にたいして非デフォルトのセッティングが必要な場所に設定します
新しい言語環境のセットアップを開始する前に、set-language-environment
はまずフックexit-language-environment-hook
を実行します。このフックはset-language-environment-hook
によるカスタマイズを取り消すのに便利です。たとえば、特定の言語環境にたいしてset-language-environment-hook
を使って特別なキーバインドをセットアップした場合は、exit-language-environment-hook
で通常のキーバインドに復元するべきです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
インプットメソッド(IM: input method)は、対話的入力のために具体的にデザインされた、一種の文字変換です。Emacsでは、各言語はそれ自身のインプットメソッドをもっています。同じ文字を使う複数の言語で、1つのインプットメソッドを共有できます。複数のインプットメソッドをサポートする言語もあります。
一番簡単な種類のインプットメソッドは、ASCII文字を他のアルファベットにマッピングすることにより機能します。これによりASCIIのかわりに他のアルファベットを使うことが可能になります。GreekとRussianのインプットメソッドはこの方式で機能します。
より強力なテクニックがコンポジション(composition: 複合)です。これは文字のシーケンスを1つの文字に変換します。Europeanのインプットメソッドの多くが、アクセント文字を後(または前)に続けた文字シーケンスから、1つの非ASCII文字を生成するためにコンポジションを使います。たとえば、インプットメソッドのいくつかは、o ^のシーケンスを1つのアクセントつき文字に変換します。これらのインプットメソッドは、それら自身では特別なコマンドをもちません。これらすべてが行うのは、文字シーケンスを複合して、プリント文字にすることです。
音節記号(syllabic scripts)のためのインプットメソッドは通常、マッピングと、それに続けてコンポジションを使います。ThaiとKoreanのためのインプットメソッドは、この方式で機能します。最初に複数の文字が、特定の音や口調のためのシンボルにマッピングされます。次にこれらシンボルのシーケンスから音節全体を作り、それを1つの音節記号にマッピングします。
ChineseとJapaneseには、さらに複雑な方式が必要です。Chineseのインプットメソッドでは、最初にChineseの単語の音声スペルを入力するか(特にインプットメソッドchinese-py
)、文字の一部をシーケンスとして入力します(インプットメソッドchinese-4corner
、chinese-sw
など)。通常1つの入力シーケンスは、多くのChinese文字に対応します。C-f、C-b、C-n、C-p(または矢印キー)、またはこの状況では特別な意味をもつ数字を指定することにより、意図するものを選択します。
文字の候補は、概念的には複数の行にアレンジされ、各行は10個の候補をもちます。通常Emacsは1度に1行をエコーエリアに表示します。行頭に(i/j)
が表示され、これはトータルj行中、i番目の行かを示します。C-nまたはC-pをタイプすると、次または前の行を表示します。
C-fまたはC-bをタイプすると、カレント行の候補の間を前方または後方に移動します。これを行うとき、Emacsはカレント候補を特別な色でハイライトします。C-SPCとタイプすると、カレント候補を選択して、それを入力に使用します。各行の候補には番号も付けられています。この番号は各候補の前に表示されます。番号をタイプすると、カレント行の番号に関連付けられた候補を選択し、それを入力に使用します。
これらChineseのインプットメソッドでは、TABはすべての文字候補をバッファーに表示します。候補の1つをmouse-2でクリックすることにより選択します。C-f、C-b、C-n、C-p、および数字キーは通常どおり機能しますが、それらはエコーエリアではなく、文字候補を表示したバッファーをハイライトします。
かわりにpīnyīn変換メソッドに応じた文字を入力するには、入力メソッドchinese-sisheng
を使用します。これは合成ベースのメソッドであり、pi1が‘pī’になります。
Japaneseのインプットメソッドでは、最初に音声スペルを使って単語全体を入力します。つぎに単語がバッファーに入った後で、より大きな辞書を使ってEmacsがそれを1つ以上の文字に変換します。1つの音声スペルは、いくつかのJapaneseの単語に対応します。これらの1つを選択するには、C-nまたはC-pを使って候補を巡回します。
インプットメソッドをオフにして、入力した文字シーケンスが複合されないようにするのが便利なときがあります。たとえばインプットメソッドlatin-1-postfix
では、シーケンスo
^は、アクセントつきの‘o’に複合されます。これらの文字を個別に入力したいときはどうすればよいでしょう?
1つは、アクセントを2度タイプする方法です。これは文字とアクセントを個別に入力するための特別な機能です。たとえばo ^
^により、2つの文字‘o^’が得られます。他の方法としてはoの後に別の文字 — 複合されない何か別の文字 —
を入力してすぐにそれを削除する方法です。たとえばo o DEL
^とタイプすることにより、‘o’と‘^’を個別に得ることができます。もう1つは、より一般的ですがタイプが容易とは言えない方法で、2つの文字が欠号されるのを防ぐために、文字の間でC-\\
C-\\を使用する方法です。これは、コマンドC-\\(toggle-input-method
)を2回使用しています。
インプットメソッドの選択を参照してください。
C-\ C-\は、インクリメンタル検索の中で使うのが特に便利です。なぜならこれは複合される文字が入力されるのを待つのを止めて、それまでに入力した文字で検索を開始するからです。
現在のインプットメソッドを使って、ポイント位置の後ろの文字を入力する方法を探すには、C-u C-x =をタイプします。カーソル位置の情報を参照してください。
変数input-method-highlight-flag
およびinput-method-verbose-flag
は、インプットメソッドで何が起きているかを告げる方法を制御します。input-method-highlight-flag
が非nil
の場合、部分的な入力シーケンスがバッファーでハイライトされます(この機能を無効にしているインプットメソッドもあります)。input-method-verbose-flag
が非nil
の場合、次にタイプできる文字の一覧をエコーエリア(ただしミニバッファーにいるときは除く)に表示します。
フック変数quail-activate-hook
に関数で変更を行うことにより、入力メソッドが機能する方法を変更できます。フックを参照してください。たとえば、関数quail-translation-keymap
によりリターンされるキーマップ内のキーバインディングを、define-key
を使用して、定義することによりその入力メソッドのいくつかのキーを再定義できます。initファイル内でのキーのリバインドを参照してください。
キーボードにない文字をタイプする他の方法は、C-x 8 RET
(insert-char
)を使って、Unicode名またはコードポイント(code-point)にもとづいて1つの文字を挿入する方法です。テキストの挿入を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
選択されたインプットメソッドを有効または無効にします(toggle-input-method
)。
カレントバッファーにたいして、新しいインプットメソッドを選択します(set-input-method
)。
インプットメソッドmethodの説明を表示します(describe-input-method
)。デフォルトでは、(もしあれば)カレントのインプットメソッドを説明します。これは特定のインプットメソッドの使い方に関する、すべての詳細説明を表示します。
サポートされている、すべてのインプットメソッドのリストを表示します。
カレントバッファーにたいするインプットメソッドを選択するには、C-x RET C-\
(set-input-method
)を使います。このコマンドはミニバッファーからインプットメソッドの名前を読み取ります。この名前は通常、それが使われることを意図した言語環境で開始されます。変数current-input-method
は選択されたインプットメソッドを記録します。
インプットメソッドは非ASCII文字を表すために、さまざまなASCII文字のシーケンスを使います。インプットメソッドを一時的にオフにできると便利なときもあります。そのようなときはC-\
(toggle-input-method
)をタイプします。インプットメソッドを再度有効にするには、もう1度C-\をタイプします。
C-\をタイプしたときに、まだインプットメソッドが選択されていない場合、インプットメソッドを指定するように求めます。これはインプットメソッドを指定するC-x RET C-\を使ったときと同じ効果です。
C-u
C-\のようにプレフィクス引数を指定した場合、toggle-input-method
は常にインプットメソッドを尋ねます。このときデフォルトとして提案されるのは、もっとも最近選択されたインプットメソッドです。
言語環境の選択により、さまざまなバッファーで使用するデフォルトのインプットメソッドが指定されます。デフォルトのインプットメソッドがある場合、C-\とタイプしてカレントバッファーでそれを選択できます。変数default-input-method
はデフォルトのインプットメソッドを指定します(nil
は、それが存在しないことを意味します)。
複数の異なるインプットメソッドをサポートする言語環境では、set-language-environment
で選択されるデフォルトとは違うインプットメソッドを使いたいときもあるでしょう。set-language-environment-hook
を使って、特定の言語環境にたいして異なるデフォルトのインプットメソッドを使うようEmacsに指示できます(set-language-environment-hookを参照してください)。たとえば:
(defun my-chinese-setup () "Set up my private Chinese environment." (if (equal current-language-environment "Chinese-GB") (setq default-input-method "chinese-tonepy"))) (add-hook 'set-language-environment-hook 'my-chinese-setup)
これは言語環境をChinese-GB
languageに選択したときは、常にデフォルトのインプットメソッドをchinese-tonepy
にセットします。
特定のインプットメソッドを自動的にアクティブにするようEmacsに指示できます。たとえば:
(add-hook 'text-mode-hook (lambda () (set-input-method "german-prefix")))
これはTextモードで自動的にインプットメソッドgerman-prefix
をアクティブにします。
英文字スクリプトのためのいくつかのインプットメソッドは、それらのスクリプトで一般的に使用されているさまざまなキーボードエミュレートするために、(実質的には)他のアルファベットに再マッピングすることにより機能します。この再マッピングがどのように正しく行われるかは、実際のキーボードレイアウトに依存します。キーボードがどのレイアウトなのかを指定するには、コマンドM-x quail-set-keyboard-layoutを使います。
コマンドM-x quail-show-keyを使って、ポイントの後ろにある文字を入力するために、選択されたキーボードレイアウトの、どのキー(またはキーシーケンス)をタイプすればよいのか表示できます。コマンドC-u C-x =もこの情報と、それに加えてその文字に関する他の情報を表示します。
M-x list-input-methodsは、サポートされているすべてのインプットメソッドを一覧します。この一覧は各インプットメソッドの情報と、モードラインに表示される文字列を表示します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
さまざまな言語のユーザーは、多少の差はあれ、それらを表示するための標準のコーディングシステムを確立しています。Emacsはこれらのコーディングシステムを、内部的に使用しません。データを読み込むときは、さまざまなコーディングシステムからEmacs独自のコーディングシステムに変換し、データを書き込むときには、内部コーディングシステムから他のコーディングシステムに変換します。ファイルの読み書き、端末とのやりとり、サブプロセスとのデータ交換において、変換が可能です。
Emacsは各コーディングシステムに名前を割り当てます。ほとんどのコーディングシステムは、1つの言語で使用され、コーディングシステムの名前は、言語の名前で始まります。複数の言語で使用されるコーディングシステムもあります。これらのコーディングシステムの名前は、通常‘iso’で始まります。no-conversion
、raw-text
、emacs-internal
のような特別なコーディングシステムもあります。
まとめてコードページ(codepages)として知られる、特別なクラスのコーディングシステムは、MS-WindowsおよびMS-DOSのソフトウェアーによりエンコードされたテキストをサポートするためにデザインされています。これらのコーディングシステムの名前はcpnnnn
という形式で、nnnnは3桁から4桁のコードページ番号です。これらのコーディングもほかのコーディングシステムと同様に使うことができます。たとえばコードページ850でエンコードされたファイルをvisitするには、C-x
RET c cp850 RET C-x C-f filename RETとタイプします。
非ASCII文字のさまざまな表現の変換に加えて、コーディングシステムは行末変換(end-of-line conversion)も行います。Emacsは、ファイル内の行の区切り方として、3つの異なる変換を扱います。つまり、改行(Unix)、復帰改行(DOS)、復帰(Mac)です。
コーディングシステムcodingの説明を表示します(describe-coding-system
)。
カレントで使用しているコーディングシステムcodingの説明を表示します(describe-coding-system
)。
サポートされているすべてのコーディングシステムのリストを表示します。
コマンドC-h C
(describe-coding-system
)は、特定のコーディングシステムについて、それらのコーディングシステムで規定されている、行末変換も含めた情報を表示します。引数にコーディングシステム名を指定できます。引数が空のときには、さまざまな目的のために選択されている、現在のコーディングシステムの、カレントバッファにたいするものとデフォルトの両方について表示するとともに、コーディングシステムを認識するための優先順位表を表示します(コーディングシステムの認識を参照してください)。
サポートされているすべてのコーディングシステムのリストを表示するには、M-x list-coding-systemsとタイプします。表示されるリストは、モードラインに表示される文字も含めて、各コーディングシステムの情報を提供します。
リストに表示される各コーディングシステム — ただし何の変換も行わないno-conversion
は除く —
は、プリントする文字をどのように変換するか、しないかを指定しますが、改行変換については、各ファイル内容にもどづいて決定するので選択をしません。たとえばファイルが行区切りに改行復帰文字を使っているように見えるときは、DOSの改行変換を使います。
リストされた各コーディングシステムは、改行変換を厳密に指定する3つの変種があります。
…-unix
何の改行変換も行いません。ファイルは行区切りに改行文字を使っていると仮定します(これは通常Unix、GNUシステム、macOSで使われている慣習です)。
…-dos
ファイルが行区切りに改行復帰文字を使っていると仮定し、適切な変換を行います(これは通常Microsoftシステムで使われている慣習です8)。
…-mac
ファイルが行区切りに復帰文字を使っていると仮定し、適切な変換を行います(これはクラシックなMac OSで使われていた慣習です)。
これらのコーディングシステムの変種は、それらが完全に予測可能なため、簡略化のためにlist-coding-systems
の表示からは省略されています。たとえばコーディングシステムiso-latin-1
はiso-latin-1-unix
、iso-latin-1-dos
、iso-latin-1-mac
という変種をもちます。
コーディングシステムunix
、dos
、mac
は、それぞれundecided-unix
、undecided-dos
、undecided-mac
の別名です。これらのコーディングシステムは改行変換だけを指定し、文字コード変換はテキスト字体から推論されるよう残します
コーディングシステムraw-text
は、主にASCIIテキストのファイルに適していますが、ファイルには、非ASCII文字の符号を意味しない127を越えるバイト値が含まれるかもしれません。raw-text
では、
Emacsはそれらのバイト値を変更せずにコピーし、カレントバッファーのenable-multibyte-characters
をnil
にセットして、それらは適切に解釈されるます。raw-text
は、出会ったデータに基づく通常の方法で行末変換を処理し、使用する行末変換を指定する変種も3つもちます。
対照的に、コーディングシステムno-conversion
は、いかなる文字コード変換 —
非ASCIIバイト値や行末にたいしても — を行いません。これは、バイナリーファイル、tarファイル、
そのまま処理する必要があるその他のファイルを読み書きするのに便利です。これもenable-multibyte-characters
をnil
にセットします。
いかなる種類の変換もしないでファイルを編集するもっとも簡単な方法は、M-x
find-file-literallyコマンドを使うことです。このコマンドは、no-conversion
を使い、ファイルを見る前にファイルの内容を変換するかもしれない、Emacsのその他の機能を抑制します。ファイルのvisit(訪問)を参照してください。
コーディングシステムemacs-internal
(またはutf-8-emacs
)は、Emacs内部エンコーディングのままで格納された、非ASCII文字を含むファイルであることを意味します。これは出会ったデータに基づいて行末変換を処理し、行末変換の種類を指定する通常の3つの変種を持ちます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsはテキストを読み込むとき、どのコーディングシステムが使われているか認識しようと試みます。これはファイルの読み込み、サブプロセスからの出力、X選択からのテキストなど、さまざまです。Emacsは大抵の場合 — 自分の好みを1度指定しておけば、自動的に正しいコーディングシステムを選択できます。
データにどのバイトシーケンスが出現するかにより、認識あるいは識別されるコーディングシステムもいくつかあります。しかし識別される可能性さえないコーディングシステムもあります。たとえばLatin-1とLatin-2を識別する方法はありません。これらは同じバイト値を異なる意味で使用します。
Emacsはこのようなシチュエーションを、コーディングシステムの優先リストにより処理します。Emacsがファイルを読み込むときは常に、それに使用するコーディングシステムを指定しなければ、Emacsはデータを各コーディングシステムに照らしてチェックし、それを優先順位の上から順に、データに適合するコーディングシステムが見つかるまで続けます。そして、そのコーディングシステムで、ファイル内容が表示できると仮定して変換を行います。
コーディングシステムの優先リストは、選択されている言語環境に依存します(言語環境を参照してください)。たとえばFrenchを使うのなら、おそらくEmacsにはLatin-2よりLatin-1を選んでほしいでしょう。Czechを使うなら、おそらくLatin-2のほうがよいでしょう。これが言語環境を指定する理由の1つです。
しかし、コマンドM-x prefer-coding-systemを使って、優先リストの詳細を変更できます。このコマンドはミニバッファーからコーディングシステムの名前を読み取り、それを優先リストの先頭に追加して、他のすべてのものより優先するようにします。このコマンドを数回使うと、使用するごとに優先リストの先頭に1つの要素が追加されます。
iso-8859-1-dos
のような、行末変換を指定したコーディングシステムを使うと、iso-8859-1
を優先して認識を試み、その際DOSの行末変換を使うことをEmacsに指示することになります。
ファイルにたいして使用するコーディングシステムをファイル名が示していることがあります。変数file-coding-system-alist
は、この対応関係を指定します。このリストに要素を追加する特別な関数は、modify-coding-system-alist
です。たとえば、すべての‘.txt’の読み書きに、コーディングシステムchinese-iso-8bit
を使用したいなら、つぎのLisp式を実行します:
(modify-coding-system-alist 'file "\\.txt\\'" 'chinese-iso-8bit)
1つ目の引数はfile
、2番目の引数はこれを適用するファイルを決定する正規表現、3番目の引数は、これらのファイルに対して使用するコーディングシステムです。
Emacsはファイルの内容にもとづいて、使用する行末変換の種類を認識します。復帰のみ、あるいは復帰改行のシーケンスだけであれば、対応する行末変換を選択します。変数inhibit-eol-conversion
を非nil
にセットすることにより、行末変換の自動的な使用を抑止できます。これを行うとDOSスタイルのファイルは、バッファー内に可視の‘^M’という文字を表示します。モードラインの左端に目立たないように表示される改行タイプ指示‘(DOS)’より、こちらのほうを好む人もいます。
デフォルトでは、コーディングシステムの自動検知はエスケープシーケンスを検出します。文字シーケンスがエスケープ文字で開始されていて、そのシーケンスが有効なISO-2022であれば、それはEmacsにファイルをデコードするエンコーディングに、ISO-2022を使うことを告げています。
しかし、ファイルの中のエスケープシーケンスを、そのまま読み取りたい場合もあるでしょう。そのような場合、変数inhibit-iso-escape-detection
を非nil
にセットします。これにより、コード検知はエスケープシーケンスを無視するようになり、ISO-2022エンコーディングは使用されません。この結果として、すべてのエスケープシーケンスがバッファー内で可視になります。
変数inhibit-iso-escape-detection
のデフォルト値はnil
です。わたしたちは特別な操作を除いて、これを変更しないことを推奨します。なぜなら、EmacsディストリビューションのEmacs
Lispソースファイルのいくつかは、コーディングシステムiso-2022-7bit
でエンコードされた非ASCII文字を含んでおり、エスケープシーケンス検知を抑止しているときにこれらのファイルをvisitすると、正しくデコードされないからです。
変数auto-coding-alist
およびauto-coding-regexp-alist
は、それぞれファイル名に含まれる特定パターン、およびファイルに含まれる特定パターンによりコーディングシステムを指定する一番強い方法です。これらの変数は、ファイル自身に含まれる‘-*-coding:-*-’タグさえオーバーライドします。たとえば、Emacsはtarおよびアーカイブファイルに、auto-coding-alist
を使います。これはアーカイブのメンバーファイルに‘-*-coding:-*-’が含まれている場合、Emacsが混乱してそれをファイル全体に適用するのを防ぎます。
コーディングシステムを指定する他の方法は、変数auto-coding-functions
を使う方法です。たとえばビルトインの1つauto-coding-functions
は、XMLファイルにたいするエンコーディングを検知します。前の2つと異なり、この変数は‘-*-coding:-*-’タグをオーバーライドしません.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsがファイルのエンコーディングを正しく認識しなかった場合、C-x RET r
(revert-buffer-with-coding-system
)で、正しいコーディングシステムでファイルを再読み込みできます。このコマンドは、使用するコーディングシステムの入力を求めます。ファイルのデコードに実際に使われているコーディングシステムを見るには、モードラインの左端の近くのコーディングシステムのニーモニック文字を見るか、C-h
C (describe-coding-system
)をタイプします。
特定のファイルのコーディングシステムを指定するのに、そのファイル自身の最初に‘-*-…-*-’構成を指定するか、ファイルの最後にローカル変数リスト(ファイル内のローカル変数を参照してください)を使用できます。これはcoding
という名前の“変数”に、値を定義することにより行われます。Emacsは実際には変数coding
をもっていません。かわりに変数をセットして、特定のファイルにたいしてコーディングシステムを指定するのにこれを使います。たとえば‘-*-mode: C; coding: latin-1; -*-’は、Latin-1コーディングシステム、同様にCモードを指定することを指示します。ファイルの中でコーディングを明示的に指定した場合、これはfile-coding-system-alist
をオーバーライドします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsがバッファーにたいして1度コーディングシステムを選択すると、そのコーディングシステムは、buffer-file-coding-system
に記録されます。これによりsave-buffer
やwrite-region
などの、バッファーからファイルに書き込む際のデフォルトに、それを使用するようになります。set-buffer-file-coding-system
を使って、バッファーのコーディングシステムとは異なるコーディングシステムで、ファイルに書き込むよう指定できます(ファイルのテキストにたいするコーディングシステムの指定を参照してください)。
Emacsがサポートする任意の文字を、任意のEmacsバッファーに挿入できますが、ほとんどのコーディングシステムは、それらの文字のサブセットしか処理することができません。したがって挿入した文字は、そのバッファーを保存するのに使われるコーディングシステムではエンコードできないかもしれません。たとえば、iso-8859-2
でエンコードされたPolishのファイルをvisitして、それにRussianの単語を追加することは可能です。このバッファーを保存するとき、Emacsはbuffer-file-coding-system
の現在の値を使用できません。なぜなら追加された文字が、そのコーディングシステムではエンコードできないからです。
これが発生した場合、Emacsは(M-x prefer-coding-systemまたはM-x
set-language-environmentによりセットされた)もっとも適したコーディングシステムを試します。そのコーディングシステムがバッファーのすべての文字をエンコードできたら、Emacsはそれを使って、その値をbuffer-file-coding-system
に格納します。そうでなければEmacsはバッファー内容をエンコードするのに適したコーディングシステムのリストを表示して、それらのコーディングシステムを1つ選ぶよう求めます。
メールメッセージに適さない文字を入力した場合、Emacsの振る舞いは若干異なります。この場合、追加でMIMEメッセージに推奨されたもっとも適したコーディングシステムかをチェックします。もしそうでなければ、この事実を知らせ、他のコーディングシステムの入力を求めます。これにより、メール受信者のメールソフトがデコードするのが困難なエンコードで、無意識にメッセージを送るようなことがなくなります(入力をもとめられたときに、適さないコーディングシステムを選ぶ、という選択肢もまだ残っています)。
メールメッセージを送信するとき、Emacsはメッセージテキストのエンコーディングに使うコーディングシステムを決定する、4つの異なる方法をもっています。最初にバッファー自身のbuffer-file-coding-system
が非nil
なら、それを使います。次にsendmail-coding-system
が非nil
なら、それを使います。3番目はdefault-sendmail-coding-system
の値を使います。上述した値のすべてがnil
の場合、Emacsは、新たなファイルに使用されるデフォルトコーディングシステム(選択された言語環境により制御される、buffer-file-coding-system
の値)を使用して送信メールをエンコードします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsがファイル内容にたいして、自動的に正しいコーディングシステムを選択しない場合、コーディングシステムを指定するために、以下のコマンドを使用できます。
カレントバッファーのファイルを、コーディングシステムcodingを使って保存または再visitします(set-buffer-file-coding-system
)。
直後に続くコマンドのコーディングシステムにcodingを指定します(universal-coding-system-argument
).
コーディングシステムcodingを使って、現在のファイルを再visitします(revert-buffer-with-coding-system
)。
コーディングシステムwrongを使ってデコードされたリージョンを、かわりにコーディングシステムrightを使ってデコードします。
コマンドC-x RET f
(set-buffer-file-coding-system
)は、カレントバッファーのファイルのコーディングシステムをセットします(たとえばファイルを保存またはリバートするときに使うコーディングシステム)。これはミニバッファーを使ってコーディングシステムを指定します。モードラインのコーディングシステムインディケーターをmouse-3でクリックしても、このコマンドを呼び出すことができます。
バッファーのすべての文字を処理できないコーディングシステムを指定した場合、Emacsは問題となる文字について警告します。そしてそのバッファーを保存するときのコーディングシステムの選択を求めます。
このコマンドを、カレントバッファーのエンコーディングの際の改行変換の指示に使うこともできます(end-of-line conversionを参照してください)。たとえばC-x RET f dos RETは、カレントバッファーを、DOSスタイル(行末が改行復帰文字)で保存します。
ファイルにたいしてコーディングシステムを指定する他の方法は、ファイルをvisitするときに指定する方法です。最初にコマンドC-x
RET c
(universal-coding-system-argument
)を使います。このコマンドはミニバッファーを使ってコーディングシステムを読み取ります。ミニバッファーを抜けた後、その直後に続くコマンドに、指定したコーディングシステムが使用されます。
たとえば直後に続くコマンドがC-x C-fの場合、そのコーディングシステムを使ってファイルを読み込みます(そして後で保存するときのために、そのコーディングシステムを記録します)。直後に続くコマンドがC-x C-wの場合、そのコーディングシステムを使ってファイルを書き込みます。C-x RET fのかわりに、この方法で保存するときのコーディングシステムを指定した場合、バッファーにそのコーディングシステムが処理できない文字が含まれていても警告はされません。
C-x iやC-x C-v、同様にC-x C-fの別ウィンドウ版C-x RET cなど、その他のファイルコマンドも指定されたコーディングシステムに影響されます。そしてM-x shell (Emacsからのシェルコマンドの実行を参照してください)を含む、サブプロセスを開始するコマンドも影響を受けます。直後に続くコマンドがコーディングシステムを使用しない場合、C-x RET cは何の影響も与えません。
変換をせずにファイルをvisitする簡単な方法は、M-x find-file-literallyコマンドです。ファイルのvisit(訪問)を参照してください。
変数buffer-file-coding-system
のデフォルト値は、新しいファイルを作成するときに選択されるコーディングシステムを指定します。これは新しいファイルを作成するときや、バッファーを作成してそれをファイルに保存するときに適用されます。言語環境の選択は、この変数を言語環境にたいして適した、デフォルトのコーディングシステムにセットします。
間違ったコーディングシステムでファイルをvisitしたときは、C-x RET r
(revert-buffer-with-coding-system
)でこれを正すことができます。これは指定したコーディングシステムを使って、現在のファイルを再visitします。
テキストの一部が、すでに間違ったコーディングシステムでバッファーに挿入されてしまった場合、M-x recode-regionを使ってデコードしなおすことができます。これは正しいコーディングシステムと、実際に使われた間違ったコーディングシステムの入力を求め、変換を行います。最初にリージョンを間違ったコーディングシステムでエンコードして、その後で正しいコーディングシステムでデコードします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このセクションでは、他のプロセスと通信するときに使うコーディングシステムを指定する方法を説明します。
選択したテキストを、他のグラフィカルなアプリケーションと送受信するために、コーディングシステムcodingを使用します(set-selection-coding-system
)。
次回に選択するテキストを、他のグラフィカルなアプリケーションと送受信するために、コーディングシステムcodingを使用します(set-next-selection-coding-system
)。
カレントバッファーでのサブプロセスの入出力に、コーディングシステムinput-codingとoutput-codingを使用します(set-buffer-process-coding-system
)。
コマンドC-x RET x
(set-selection-coding-system
)は、選択したテキストを他のウィンドウアプリケーションに送信するとき、および他のアプリケーションで選択されたテキストを受信するときのコーディングシステムを指定します。このコマンドは、このコマンドを再度使って設定をオーバーライドするまで、以降のすべての選択に適用されます。コマンドC-x
RET X
(set-next-selection-coding-system
)は、Emacsで次に選択されるテキスト、または次に読み取られるテキストのためのコーディングシステムを指定します。
変数x-select-request-type
は、Xウィンドウシステムからのリクエストにより、他のアプリケーションで選択されたテキストを受信する際のデータタイプを指定します。値がnil
(デフォルト)の場合、EmacsはUTF8_STRING
、COMPOUND_TEXT
の順に試み、さらにさまざまな経験則を用いて、2つの結果からより適したものを選択します。どちらも成功しなかったとき、EmacsはSTRING
にフォールバックします。x-select-request-type
の値が、COMPOUND_TEXT
、UTF8_STRING
、STRING
、TEXT
のうちのどれかであった場合、Emacsはリクエストされたタイプだけを使用します。値がこれらのシンボルのリストだった場合、Emacsはリストのリクエストタイプを順に試行し、どれかが成功するか、すべてを試みるまで続けます。
コマンドC-x RET p
(set-buffer-process-coding-system
)は、サブプロセスの入出力のコーディングシステムを指定します。このコマンドはカレントバッファーに適用されます。サブプロセスは通常、それぞれ自身のバッファーをもっています。したがってサブプロセスに対応するバッファーでこのコマンドを実行することにより、特定のサブプロセスとの送受信に使用するコーディングシステムを指定できます。
サブプロセスを開始するコマンドの直前にC-x RET c
(universal-coding-system-argument
)を使うことにより、そのプロセスとの通信で使用するコーディングシステムを指定することもできます。ファイルのテキストにたいするコーディングシステムの指定を参照してください。
デフォルトでは、プロセス通信の入出力は現在の言語環境に依存します。
変数locale-coding-system
は、システムのエラーメッセージや、format-time-string
のフォーマットやタイムスタンプなどの、システム文字列のエンコードおよびデコードで使用するコーディングシステムを指定します。このコーディングシステムは、Xウィンドウシステムでの非ASCIIキーボードによる入力のデコード、およびバッチモードのときに標準出力とエラーストリームに送るテキストのエンコードにも使用されます。通常は環境変数LC_ALL
、LC_CTYPE
、LANG
のうちの1つで指定される、背景にあるシステムのテキスト表現(text
representation)と互換性のあるコーディングシステムを選択するべきです(上記の順番で最初の環境変数の値が空でない場合、それはテキスト表現を決定します)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ファイル名のエンコードおよびデコードに、コーディングシステムcodingを使用します(set-file-name-coding-system
)。
コマンドC-x RET F
(set-file-name-coding-system
)は、ファイルの名前に使用するコーディングシステムを指定します。ファイルの内容の読み込みと書き込みには影響がありません。
実際にこのコマンドが行うのは、変数file-name-coding-system
に値をセットすることだけです。変数にコーディングシステムの名前(Lispシンボルか文字列)をセットすると、Emacsはすべてのファイル操作において、ファイル名のエンコードにそのコーディングシステムを使用します。これによりファイル名に非ASCII文字
— または少なくとも指定されたコーディングシステムではエンコードできる非ASCII文字 — を使うことが可能になります。
file-name-coding-system
がnil
の場合、Emacsは言語環境により選択され、変数default-file-name-coding-system
に格納される、デフォルトのコーディングシステムを使用します。デフォルトの言語環境では、ファイル名の非ASCII文字は特別にエンコードはされません。これらはEmacsの内部表現を使って、ファイルシステム上に表示されます。
Emacsが、MS-WindowsのNTファミリーの子孫(Windows
2000、XP、および以降すべてのバージョン)にあたるバージョンで実行されている場合、file-name-coding-system
の値は大部分が無視されます。これはEmacsがデフォルトでUnicodeファイル名を直接渡せるAPIを使用するからです。一方、Windows
9Xでは、ファイル名は変数file-name-coding-system
を使ってエンコードされており、この変数にはカレントのシステムロケールにたいして適切なコードページ(codepageを参照してください)がセットされている必要があります。変数w32-unicode-filenames
の値は、Emacsがファイル名を引数とするOS関数を呼び出すUnicode
APIを使うかどうかを制御します。この変数はスタートアップコードにより、Windows
9Xではnil
、新しいバージョンのMS-Windowsではt
にセットされます。
警告:
Emacsセッションの途中でfile-name-coding-system
(または言語環境)を変更した場合、すでにvisitしているファイルの名前が、古いコーディングシステムを使えばエンコードできるが、新しいコーディングシステムではエンコードされない(または違ってエンコードされる)という問題が発生します。このようなバッファーをvisitしたファイル名で保存を試みると、間違ったファイル名で保存するか、エラーが発生します。このような問題が発生したときはC-x
C-wを使って、そのバッファーにたいして新しいファイル名を指定してください。
ファイル名をエンコードするとき間違いが発生した場合、コマンドM-x recode-file-nameを使って、ファイル名のコーディングシステムを変更します。このコマンドは古いコーディングシステムでの既存のファイル名と、変換したいコーディングシステムの入力を求めます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
端末の出力に、コーディングシステムcodingを使用します(set-terminal-coding-system
)。
キーボード入力に、コーディングシステムcodingを使用します(set-keyboard-coding-system
)。
コマンドC-x RET t
(set-terminal-coding-system
)は、端末出力のためのコーディングシステムを指定します。端末出力の文字コードを指定した場合、端末へのすべての文字出力は、指定したコーディングシステムに変換されます。
この機能は、特定の言語または文字セットをサポートするようビルドされた、特定の文字端末で有用です — たとえばEuropean端末は、ISO Latin文字セットの1つをサポートします。マルチバイトテキストを使う場合は、端末のコーディングシステムを指定する必要があります。これにより、Emacsは端末が実際にどの文字を処理できるのか知ることができます。
デフォルトでは、Emacsが端末タイプまたはlocale指定により、正しいコーディングシステムを推論できない場合、端末への出力は変換されません。
コマンドC-x RET k
(set-keyboard-coding-system
)、または変数keyboard-coding-system
は、キーボード入力のためのコーディングシステムを指定します。キーボード入力の文字コード変換は、非ASCIIのグラフィック文字を送信するキーをもつ端末で有用です
— たとえば、いくつかの端末はISO Latin-1、またはそれのサブセットのためにデザインされています。
デフォルトでは、キーボード入力はシステムのlocale設定にもとづいて変換されます。端末がlocaleにより暗に指定されるエンコードを実際にはサポートしない場合(たとえば、M-iをタイプしたときに非ASCII文字が挿入されるのに気づいたとき)、エンコーディングをオフにするためにkeyboard-coding-system
をnil
にセットする必要があるでしょう。これは、
(set-keyboard-coding-system nil)
をinitファイルに記述することにより、行うことができます。
キーボード入力にたいするコーディングシステムを使用した変換と、インプットメソッドの使用は似通った点があります。これらは両方ともキーボード入力シーケンスを1つの文字に変換します。しかし、インプットメソッドは人間により対話的に使用されることが便利なようにデザインされており、通常はASCIIのプリント文字のシーケンスが、変換されたシーケンスになります。通常、コーディングシステムは非グラフィック文字のシーケンスを変換します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
フォントは通常、1つのアルファベットまたはスクリプトの形状を定義します。したがってEmacsがサポートするスクリプトの全範囲を表示するには、多くのフォントのコレクションが要求されます。Emacsではこのようなコレクションのことをフォントセット(fontset)と呼びます。フォントセットはフォント仕様のリストとして定義され、それぞれが文字コードのある範囲を処理し、指定されたフォントでカバーしない文字にたいしては他のフォントセットにフォールバックします。
それぞれのフォントセットは、フォントと同様に名前をもちます。しかしフォントはシステムに格納されていて、利用可能なフォント名はシステムで定義されていますが、フォントセットはEmacs自身で定義されます。1度フォントセットを定義したら、1つのフォントを使える場所ならどこでも、フォントセットを名前で指定して使用することができます。もちろんEmacsのフォントセットに使用できるのは、システムがサポートするフォントだけです。もしある文字がスクリーン上で空のボックスや16進コードで表示される場合、それは使用しているフォントセットがその文字にたいするフォントをもっていないことを意味します。このような場合や、文字は表示されるが、それが意図したものとは異なる場合、多分追加のフォントをインストールするか、システムにすでにインストールされた特定のフォントを使用するようにフォントセットを修正する必要があるでしょう(以下参照)。オペレーティングシステムにはインストールできるオプションのフォントがあるはずです。またはサポートされたスクリプトのほとんどのフォントを含むGNU Intlfontsパッケージをインストールすることもできます。9
Emacsは3つのフォントセットを自動的に作成します。それはスタンダードフォントセット(standard fontset)、スタートアップフォントセット(startup fontset)、デフォルトフォントセット(default fontset)の3つです。デフォルトフォントセットは、さまざまな非ASCII文字のフォントをもち、他の2つのフォントセットのデフォルトのフォールバック先です(デフォルトフォントをセットしたときは、デフォルトフォントセットではなくデフォルトフォント)。しかしこれはフォントのファミリー名を指定しないので、これを直接使うと、結果は少しランダムに思えるかもしれません。Emacsを‘-fn’オプションで実行することにより、特定のフォントセットを使用するように指示できます。たとえば、
emacs -fn fontset-standard
‘Font’でフォントセットを指定することもできます(Xのオプションとリソースを参照してください)。
使用するフォントセットが何も指定されていない場合、EmacsはASCIIフォントを使用し、そのフォントがカバーしない文字にたいするフォールバックに‘fontset-default’を使用します。名前とは裏腹にスタンダードフォントセットは、明示的に要求されたときだけ使用されます。
特定のフォントセットの情報を表示するためにはM-x describe-fontsetコマンドを使用します。このコマンドはフォントセットの名前(デフォルトはカレントフレームで使用されているフォントセット)を尋ねて文字のすべての部分範囲(subrange)と、フォントセット内でそれらに割り当てられたフォントを表示します。特定のフォントセットなしで開始されたセッション(通常発生し得る)でEmacsが使用するフォントを確認するには、プロンプトでfontset-default RETをタイプするか、あるいはカレントフレームで使用中のフォントを表示するために単にRETをタイプしてください。
フォントセットはすべての文字コードにたいしてフォントを指定する必要はありません。フォントセットが特定の文字にたいしてフォントを指定していない、または指定したフォントがシステムに存在しなければ、フォントセットは文字を正しく表示できません。この場合には、その文字にたいして16進コード、細いスペース、または空のボックスがかわりに表示されます(詳細はglyphless charactersを参照)。フォントセットが何らかの文字範囲を指定するかもしれないものの、その視覚的な外観が好みではないかもしれません。これが発生した場合にはフォントセットを修正したくなるかもしれません。これを行う方法についてはフォントセットの修正を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
XでEmacsを実行している場合、Emacsはstandard-fontset-spec
の値により、スタンダードフォントセットを作成します。このフォントセットの名前は、
-*-fixed-medium-r-normal-*-16-*-*-*-*-*-fontset-standard
または単に短く‘fontset-standard’です。
GNUstep、およびmacOSではスタンダードフォントセットは、ns-standard-fontset-spec
の値を使って作成され、MS
Windowsではw32-standard-fontset-spec
の値を使って作成されます。
スタンダードフォントセットのボールド、イタリック、ボールドイタリックなどの変種も自動的に作成されます。これらの変種の名前には‘medium’のかわりに‘bold’、または‘r’のかわりに‘i’、またはその両方が使われます。
Emacsは‘Font’リソース、または‘-fn’引数で指定した任意のデフォルトASCIIフォント、またはEmacsが起動時に見つけたデフォルトフォントにもとづいて、フォントセットを自動的に作成します。これがスタートアップフォントセット(startup
fontset)で、名前はfontset-startup
です。Emacsはcharset_registryフィールドを‘fontset’、charset_encodingフィールドを‘startup’で置き換えてフォントセットを生成して、その置き換えた文字列をフォントセットの指定に用います。
たとえば以下の形式でEmacsを起動した場合、
emacs -fn "*courier-medium-r-normal--14-140-*-iso8859-1"
Emacsは以下のフォントセットを生成して、それをXウィンドウの初期フレームに使用します:
-*-courier-medium-r-normal-*-14-140-*-*-*-*-fontset-startup
スタートアップフォントセットは、そのフォントでサポートされているすべての文字にたいして指定したフォントか、異なるregistryまたはencodingのフォントを使用し、それ以外の文字は‘fontset-default’にフォールバックして表示するでしょう。
Xリソースの‘Emacs.Font’では、フォントセット名を実際のフォント名のように指定できます。しかし‘Emacs*Font’のようなワイルドカードを使ったリソースにフォントセット名を指定しないように注意してください — ワイルドカードを使った指定は、メニューのようなフォントセットを処理できないものも含めて、 他のさまざまな目的にも適用されます。Xのオプションとリソースを参照してください。
‘Fontset-n’という名前のXリソースを使って、追加のフォントセットを指定できます。ここでnは0から始まる整数です。リソースの値はつぎのような形式です:
fontpattern, [charset:font]…
ここでfontpatternは、最後の2つのフィールドを除いて、標準のXフォント名の形式です(前のfontset-startupの例を参照)。最後の2つのフィールドは、‘fontset-alias’の形式をもつべきです。
すべてのフォントセットには2つの名前、長い名前と短い名前があります。長い名前はfontpatternです。短い名前は‘fontset-alias’で、これは長い名前の最後の2つのフィールドです(たとえば、スタートアップ時に自動的に作成されるフォントセットは‘fontset-startup’)。どちらの名前でもフォントセットを参照できます。
‘charset:font’という構成は、ある文字セットにたいして、(このフォントセットでは)どのフォントを使用するかを指定します。ここでcharsetは、文字セットの名前で、fontはその文字セットに使用するフォントです。1つのフォントセットの定義の中で、この構成を何度でも使用できます。
他の文字セットにたいしては、Emacsはfontpatternにもとづいて選択します。これは文字セットを記述する値で‘fontset-alias’を置き換えます。ASCII文字フォントにたいしては、‘fontset-alias’を‘ISO8859-1’で置き換えます。
これに加えて、複数の連続するフィールドがワイルドカードの場合、Emacsはそれらを1つのワイルドカードにまとめます。これは、オートスケールされたフォントの使用を避けるためです。大きいフォントをスケーリングしたフォントは編集に適しておらず、小さいフォントをスケーリングしたフォントも同様です。なぜならEmacsがそうするように、もともと小さなフォントを使うほうがよいからです。
したがって、fontpatternが以下の場合、
-*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24
ASCII文字にたいするフォント指定は、以下のようになるでしょう:
-*-fixed-medium-r-normal-*-24-*-ISO8859-1
そしてChinese GB2312文字にたいするフォント指定は、以下のようになるでしょう:
-*-fixed-medium-r-normal-*-24-*-gb2312*-*
上記のフォント指定に一致するChineseフォントがないかもしれません。ほとんどのXディストリビューションには、familyフィールドが‘song ti’か‘fangsong ti’のChineseフォントだけが含まれています。そのような場合、‘Fontset-n’をつぎのように指定します:
Emacs.Fontset-0: -*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24,\ chinese-gb2312:-*-*-medium-r-normal-*-24-*-gb2312*-*
そうするとChinese GB2312の文字を除くフォント指定では、familyフィールドが‘fixed’となり、Chinese GB2312の文字に対するフォント指定では、familyフィールドが‘*’となります。
フォントセットのリソース値を処理してフォントセットを作る関数は、create-fontset-from-fontset-spec
と呼ばれます。フォントセットを作るために、この関数を明示的に呼ぶこともできます。
フォントの命名についての詳細は、フォントを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
常にフォントセットをスクラッチから作成する必要はありません。軽微な変更だけが必要なときは、通常は既存のフォントセット‘fontset-default’を修正するのが簡単な方法でしょう。‘fontset-default’の修正は、それをフォールバックに使用する他のフォントセットにも影響するので、特定のスクリプトのためにEmacsが選択するフォントに関する問題を解決する効果的な方法になり得ます。
フォントセットは関数set-fontset-font
を使って、文字、文字セット、スクリプトフォントを修正する文字範囲、使用されるフォントの指定を修正することができます。以下は例です:
;; Prefer a big5 font for han characters. (set-fontset-font "fontset-default" 'han (font-spec :registry "big5") nil 'prepend) ;; Use MyPrivateFont for the Unicode private use area. (set-fontset-font "fontset-default" '(#xe000 . #xf8ff) "MyPrivateFont") ;; Use Liberation Mono for latin-3 charset. (set-fontset-font "fontset-default" 'iso-8859-3 "Liberation Mono") ;; Use DejaVu Sans Mono as a fallback in fontset-startup ;; before resorting to fontset-default. (set-fontset-font "fontset-startup" nil "DejaVu Sans Mono" nil 'append)
set-fontset-font
関数のより詳細な使用方法についてはFontsets in GNU Emacs
Lisp Reference Manualを参照してください。
文字のコードポイントや文字が属するスクリプトが不明ならEmacsに尋ねることができます。文字にポイントを移動してC-u C-x =
(what-cursor-position
)
とタイプすれば、Emacsはポップアップする*Help*により多くの情報とともにこの情報が表示されます。カーソル位置の情報を参照してください。たとえば‘kana’スクリプトに属する日本語文字が中国語文字とも混合された日本語テキストでは、以下のように日本語テキストに‘Kochi
Gothic’フォントを使用するようにEmacsをセットアップして、‘han’スクリプトを使用します:
(set-fontset-font "fontset-default" 'han "Kochi Gothic")
(Emacsの‘han’スクリプトは中国語だけではなく中国語、韓国語、日本語、いわゆるCJKのすべての文字をサポートするようにセットアップされています。)
既知のスクリプトのリストは変数script-representative-chars
を確認してください。
上記のようなフォントセットのセッティングはデフォルトフォントがサポートしない文字のみに影響するので、‘Kochi Gothic’がラテン文字をカバーしていても、Emacsが使用するデフォルトフォントは通常は基本的なラテン文字をカバーするので使用されることはありません。
システムにインストールされているフォントが壊れていたり、使用されている文字にたいして好ましくない結果を生成するフォントがあるかもしれません。そのような場合、文字を表示するのに必要となる適切なフォントの検索に、それらのフォントを完全に無視するように、Emacsに指示したいと思うかもしれません。face-ignored-fonts
の値(リスト変数です)に、不適切なフォントを追加することによりこれを行なうことができます。以下は、そのような設定を~/.emacsに記述する例です:
(add-to-list 'face-ignored-fonts "Some Bad Font")
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
あなたの端末では表示できない非ASCII文字が、いくつか存在するかもしれません。ほとんどのテキスト端末は、1つの文字セットだけをサポートします(Emacsに何を使うか指示するには、変数default-terminal-coding-system
を使用します。端末入出力にたいするコーディングシステムを参照してください)。そのコーディングシステムではエンコードできない文字は、デフォルトでは‘?’と表示されます。
グラフィカルなディスプレーでは、より広範囲の文字を表示できますが、それらすべてのフォントがインストールされていないかもしれません。フォントがない文字は、中空のボックスで表示されます。
Latin-1文字を使用するとき、端末がLatin-1を表示できない場合、かわりにニーモニックASCIIシーケンスを表示できます。たとえばo-umlautのかわりに‘"o’が表示されます。これを行うにはiso-asciiをロードします。
端末がLatin-1を表示できる場合、Latin-1と等しい文字とASCIIニーモニックを混交して、他のEuropean文字セットを表示できます。これは変数latin1-display
をカスタマイズすることにより有効になります。ニーモニックASCIIシーケンスは、ほとんどがインプットメソッドのプレフィクスに対応します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ISO 8859 Latin-n文字セットは、さまざまなEuropean言語で必要とされるアクセント文字と区切り文字を扱うために、8進の0240から0377(10進の160から250)の範囲の文字コードを定義しています。Emacsはこの範囲のバイトを、たとえunibyteバッファー(たとえばマルチバイト文字を無効にしている場合)でも、それらを文字としてではなく、rawバイトとみなします。しかし、それでもEmacsはこれらの文字コードを、あたかも1つも1バイト文字セットに属するかのように1度に扱うことができます。これらのコードのどれを使うかを指定するには、M-x set-language-environmentを呼び出して、‘Latin-n’のような適切な言語環境を指定します。Disabling Multibyte Characters in GNU Emacs Lisp Reference Manualを参照してください。
端末や使っているフォントがこれらの文字をサポートしている場合、Emacsは160から255の文字を読み取り可能な文字として表示できます。これは自動的に行われます。グラフィカルなディスプレーでは、Emacsはフォントセットを通じて1バイト文字として表示できます。これは現在の言語環境で、それらに対応するマルチバイト文字を表示することにより行われます。これを行うには、変数unibyte-display-via-language-environment
に非nil
値を設定します。このセッティングは、これらのバイトを表示する方法だけに影響しますが、Emacsがそれらを文字としてではなくrawバイトとして扱うという基礎事実は変わらないことに注意して下さい。
端末でLatin-1文字セットを表示できない場合、Emacsはこれらの文字をその文字が少なくとも何であるかを明確に理解できるような、ASCIIシーケンスとして表示できます。これを行うには、ライブラリーiso-ascii
をロードします。他のLatin-n文字セットに対しても似たようなライブラリを実装できますが、これは
まだ行われていません。
通常、非ISO
8859文字セット(10進文字の128から159のコードも含む)は、8進でエスケープ表示されます。ライブラリーdisp-table
の関数standard-display-8bit
を使うことにより、非標準の拡張バージョンのISO
8859文字セットに変更できます。
1バイトの非ASCII文字を入力する2つの方法があります:
グラフィカルなディスプレーでは、これらのキーを使うのに特別なことをする必要はありません。それらは単純に機能するでしょう。テキスト端末では、コマンドM-x
set-keyboard-coding-system
を使うか、変数keyboard-coding-systemをカスタマイズして、キーボードが使用するコーディングシステムを指定します(端末入出力にたいするコーディングシステムを参照してください)。この機能を有効にすることにより、おそらくMeta文字を入力するためにESCを使う必要が生じるでしょう。しかし、コンソール端末、またはxterm
のような端末エミュレータでは、MetaをESCにアレンジすることが可能です。また8ビット文字を直接キーボードから入力したり、ComposeキーやAltGrキーを使うこともできます。ユーザー入力の種類を参照してください。
ライブラリーiso-transl
をロードすることによりC-x
8は機能します。1度ライブラリーをロードすると、Alt修飾キーがある場合は、C-x
8と同じ目的で使用できます。後続の文字を修飾するには、アクセント文字と一緒にAltを使用します。さらにLatin-1の専用アクセント文字キー(dead
accent
characters)があると、1度iso-transl
をロードした後は、それらのキーも後続の文字を合成するように定義されます。
C-x 8 C-hを使用すると、利用可能なすべてのC-x 8翻訳をリストします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsでは“文字セット(character
set)”を縮めて、charsetと呼びます。Emacsは、ほとんどの有名なcharsets(ascii
、iso-8859-1
、cp1250
、big5
、unicode
など)に加えて、Emacs自身のcharsets(emacs
、unicode-bmp
、eight-bit
など)をサポートします。すべてのサポートされた文字は、1つ以上のcharsetsに属します。
Emacsは通常、charsetsにたいして正しいことを行う(does the right thing)ので、あなたはそれらを心配する必要はありません。しかし、charsetsの背景の詳細を知ることが助けになる場合もあります。
1つの例はフォント選択です(フォントを参照してください)。それぞれの言語環境(言語環境を参照してください)は、さまざまな文字にたいする優先リスト(priority
list)を定義します。フォントを検索するとき、Emacsは最初に一番優先度の高いcharsetsを表示できるものを探すことを試みます。たとえばJapanese言語環境では、charsets
japanese-jisx0208
は一番高い優先度をもっているので、Emacsはregistry
プロパティーが‘JISX0208.1983-0’のフォントの使用を試みます。
charsetsに関する情報を得るのに使うことができるコマンドが2つあります。コマンドM-x list-charset-charsはcharset名の入力を求め、その文字セットのすべての文字を表示します。コマンドM-x describe-character-setはcharset名の入力を求め、Emacsでの内部表現も含めたそのcharsetに関する情報を表示します。
M-x list-character-setsは、すべてのサポートされたcharsetsを表示します。このリストはcharsetsの名前と、各charsetを識別する追加の情報を与えます。詳細については、Information Processing Society of Japan/Information Technology Standards Commission of Japan (IPSJ/ITSCJ)により保守されている、ISO International Register of Coded Character Sets to be Used with Escape Sequences (ISO-IR)を参照してください。このリストでは、charsetsは2つのカテゴリーに分かれています。通常のcharsets(normal charsets)が最初にリストされ、その後に追加のcharsets(supplementary charsets)が続きます。追加のcharsetは他のcharsetを定義するのに(サブセットの親として)使用されるか、古いバージョンのEmacsとの互換性のために提供されます。
バッファーの文字がどのcharsetに属するか探すには、ポイントをその文字の前において、C-u C-x =をタイプします(国際化文字セットのイントロダクションを参照してください)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
EmacsはArabicやFarsi、Hebrewのような、テキストを水平方向の右から左に記述するスクリプトで書かれたテキストの編集をサポートします。しかし数字やそれらのスクリプトに埋め込まれたLatinテキストは、左から右に表示されます。Latin文書の中に少量のArabicやHebrewのテキスト部分が含まれている場合も、稀ではありません(例: プログラムソース内のコメントや文字列)。これらの理由により、これらのスクリプトを使うテキストは、実際には双方向(bidirectional)、つまりそれらはleft-to-right(左から右)の文字とright-to-left(右から左)文字の混交されたものになります。
このセクションでは、双方向テキストを編集するためにEmacsが提供する機能とオプションを説明します。
Emacsはright-to-leftおよび双方向テキストを、いわゆるlogical順(またはreading順)で格納します。バッファーまたは文字列の最初の文字の位置は、次に読む文字の前になります。双方向テキストをvisual順に再配置するには表示時間が発生します。結果として文字の位置は、それらが表示される位置にたいして単調に増加しなくなります。Emacsは表示のための双方向テキストの再配置を、Unicode Standard Annex #9で説明されているUBA(Unicode Bidirectional Algorithm)で実装しています。right-to-leftパラグラフ中に長い英文テキストが出現するような、基本となるパラグラフと継続行が逆方向のときに表示する方法だけが、UBAと異なります。
バッファーローカルな変数bidi-display-reordering
は、表示用にバッファーのテキストを再配置するかどうかを制御します。この変数の値が非nil
の場合、Emacsは右から左の方向に表示される文字を再配置します。デフォルト値はt
です。
双方向テキストの各パラグラフは、それ自身のbase
direction(基本方向)をもっており、それはright-to-leftまたはleft-to-rightです。left-to-rightのパラグラフはスクリーンの左端から開始し、右端に到達すると切り詰め、または継続されます。対照的にright-to-leftのパラグラフのテキストは右端から開始し、左端で継続、または切り詰められて表示されます。デフォルトでは、パラグラフの境界は空行(たとえば行全体が空白文字からなる行)です。これを変更するために、2つの変数bidi-paragraph-start-re
とbidi-paragraph-separate-re
をカスタマイズできます。これらの値には正規表現(文字列)を指定します。たとえば単一の改行を新たなパラグラフの開始とする場合は、両方の変数に\"^\"
をセットします。これら2つの変数はバッファーローカルです(ローカル変数を参照)。
Emacsは、パラグラフを開始するテキストにもとづいて、各パラグラフの基本方向を動的に決定します。しかし、バッファーのパラグラフにたいして特定の基本方向を強制する必要もあるでしょう。変数bidi-paragraph-direction
が非nil
の場合、これは基本方向の動的な決定を無効にして、バッファーのすべてのパラグラフの方向を、このバッファーローカルな値で指定された方向に強制します。値にはright-to-left
とleft-to-right
が指定できます。これ以外の値はnil
と解釈されます。
かわりにパラグラフの先頭に特別な文字を挿入することにより、パラグラフの基本方向を制御できます。特別な文字RIGHT-TO-LEFT
MARK
またはRLMは、以降に続くパラグラフをright-to-left方向に強制します。その効果はLEFT-TO-RIGHT
MARK
またはLRMによりleft-to-right方向に再強制されるまで続きます(C-x 8
RETを使ってこれらの文字を挿入できます)。GUIセッションではLRM文字およびRLM文字は、極端に細いスペースで表示されます。テキスト端末では、それらはスペースで表示されます。
文字は表示用に再配置されるので、logical順で処理を行うEmacsコマンドやバッファーの拡大は、普通とは異なる効果を生みます。たとえばコマンドC-fおよびC-bはポイントをlogical順で移動するので、再配置された双方向テキストではポイントがジャンプすることがあります。同様に隣接する文字位置の範囲をカバーするハイライトされたリージョンは、リージョンが再配置されたテキストにかかる場合には不連続に見える場合があります。これは双方向テキストをサポートする他のプログラムの振る舞いとしては普通であり、似通っています。
LEFTやC-RIGHTのように、矢印キーにバインドされたカーソル移動コマンドは、カレントパラグラフの基本方向にしたがいます。left-to-rightパラグラフでは、修飾キーの有無に関わらず、RIGHTにバインドされるコマンドは、バッファーテキスト内を前方(forward)に移動しますが、right-to-leftパラグラフではかわりに後方(backward)に移動することになります。これは、right-to-leftパラグラフのバッファー位置は、ディスプレイ上を左に移動することにより大部分は増加するという事実を反映しています。
パラグラフ外に移動した際、先行または後続するパラグラフの基本方向が、移動する前のパラグラフの方向と異なる場合は、矢印キーのもつ意味は変化するでしょう。これが発生したときは、新たな基本方向に合わせて矢印キーを押下する必要があります。
デフォルトでは、LEFTおよびRIGHTはlogical方向に移動しますが、visual-order-cursor-movement
が非nil
の場合、これらのコマンドはそれぞれスクリーン位置を左または右に、必要ならスクリーン行の次行または前行へと移動します。これは周辺の双方向コンテキストに依存して、多くのバッファー位置が移動される可能性を秘めることに注意してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsには多くの編集用モード(editing modes)が含まれており、これは基本的な振る舞いを、編集に便利な方法に変更します。これらの編集用モードはメジャーモード(major modes)とマイナーモード(minor modes)に分けられます。
メジャーモードは、Cソースファイル(プログラムの編集を参照してください)などの特定のファイルタイプや、shellバッファー(Emacsからのシェルコマンドの実行を参照してください)などの、特別なタイプの非ファイルバッファーにたいして作業するための特別な機能を提供します。メジャーモードは互いに排他であり、各バッファーは常に1つのメジャーモードをもちます。
マイナーモードはオンとオフを切り替えることができるオプションの機能で、ファイルやバッファーのタイプに特定する必要はありません。たとえばAuto Fillモードは、単語の間にタイプしたSPCで行を区切るマイナーモードです(Auto Fillモードを参照してください)。マイナーモードは互いに独立していて、選択されたメジャーモードからも独立しています。
23.1 メジャーモード | Textモード vs. Lispモード vs. Cモード... | |
23.2 マイナーモード | マイナーモードは他と独立して有効にできる機能です。 | |
23.3 ファイルのモードを選択する | ファイルをvisitしたときにモードが選択される方法。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
すべてのバッファーはメジャーモードをもっており、そのバッファーがカレントである間の編集の動作を決定します。モードラインには通常カレントのメジャーモード名がカッコ内に表示されます(モードラインを参照してください)。
もっとも特殊化されていないメジャーモードは、Fundamental(基本)モードと呼ばれます。このモードには、モード独自の再定義や変数設定がないので、各Emacsコマンドはもっとも一般的な振る舞いをし、各ユーザーオプションはデフォルトの状態になっています。
Lispや英文テキストのように、Emacsが認識できる特定のタイプのテキスト編集には、LispモードやTextモードのような、より特殊化されたメジャーモードを通常は使用します。ほとんどのメジャーモードは3つのグループに分けられます。最初のグループはプレインまたはマークアップされた通常テキストのためのモードを含みます。これにはTextモード、HTMLモード、SGMLモード、TeXモードやOutlineモードなどが含まれます。2番目のグループはプログラミング言語特有のモードです。これらは、Lispモード(いくつかの変種を有する)、Cモード、Fortranモードなどが含まれます。3番目のグループはファイルに直接関連付けられていないメジャーモードが含まれます。これらはEmacsが特別の目的のために作るバッファーで使用されるものです。例としては、Diredが作成するバッファーのためのDiredモード(Dired (ディレクトリーエディター)を参照)、C-x mで作成されるバッファーのためのMessageモード(メールの送信を参照)、下位のシェルプロセスとの通信用のバッファーのためのShellモード(対話的なサブシェルを参照)などが含まれます。
通常、メジャーモードは最初にファイルをvisitしたとき、またはバッファーを作成したときに、Emacsにより自動的にセットされます。M-xコマンドを使うことにより、新しいメジャーモードを明示的に選択することができます。モードの名前に-mode
を追加することにより、モードを選択するコマンド名を得ることができます(たとえば、Lispモードを選択する場合はM-x
lisp-mode)。すべてのバッファーは厳密に1つのメジャーモードをもつので、メジャーモードを“オフ”にする方法はなく、かわりに他のメジャーモードに切り替えなければなりません。
バッファーローカルな変数major-mode
の値は、メジャーモードコマンドと同じ名前のシンボル(たとえばlisp-mode
)です。この変数は自動的にセットされます。あなた自身が変更するべきではありません。
major-mode
のデフォルト値は、メジャーモードが指定されていないファイルを使うときや、C-x
bで作成した新しいバッファーのメジャーモードを決定します。通常、デフォルト値はFundamentalモードを指定する、シンボルfundamental-mode
です。Customizationインターフェースを通じて、このデフォルト値を変更できます(Easy Customizationインターフェースを参照してください)。initファイルに以下のような行を追加しても変更できます(Emacs初期化ファイルを参照してください):
(setq-default major-mode 'text-mode)
major-mode
のデフォルト値がnil
の場合、メジャーモードは前のカレントバッファーから引き継がれます。
特殊化されたメジャーモードは、特定のキーにたいして、そのモードにより適した何かを行うよう、意味づけが変更される場合があります。たとえばプログラミングに関連するモードでは、TABには、カレント行をその言語のルールにしたがってインデントする機能がバインドされます(インデントを参照してください)。一般的に変更されるキーはTAB、DEL、C-jです。多くのモードがモード自身の特別なコマンドを定義しており、それらは通常、プレフィクスキーがC-cであるようなキーシーケンスにバインドされます。メジャーモードはユーザーオプションと変数も変更できます。たとえばプログラミングに間するモードは通常、変数comment-start
にバッファーローカルな値をセットします。これはソースコードのコメントがどのように区切られるかを決定します(コメントの操作を参照してください)。
カレントメジャーモードのキーバインディング一覧も含めたドキュメントを閲覧するには、C-h m
(describe-mode
)とタイプします。その他のヘルプコマンドを参照してください。
Fundamentalモード以外のすべてのメジャーモードは、モードフック(mode
hook)を定義します。これはバッファーでそのモードが有効になるたびに実行される、カスタマイズ可能なLisp関数のリストです。フックに間する詳細は、フックを参照してください。各モードフックはメジャーモード名の後に名前がつけられます。たとえばFortranモードのモードフックは、fortran-mode-hook
です。さらに、すべてのテキストベースのメジャーモードは、text-mode-hook
を実行し、多くの、プログラミング言語のモード(Emacsとともに配布されるものを含む)
は、その言語モード自身のモードフックの前に、prog-mode-hook
を実行します10
。フック関数は変数major-mode
の値を調べて、どのモードに入ろうとしているか調べることができます。
モードフックは、一般的にマイナーモードを有効にするために使用されます(マイナーモードを参照してください)。たとえば以下の行をinitファイルに記述すると、すべてのテキストベースのメジャーモードでFlyspellマイナーモード(スペルのチェックと訂正を参照してください)を、Emacs LispモードでElDocマイナーモード(Emacs Lispドキュメントの照会を参照してください)を有効にすることができます:
(add-hook 'text-mode-hook 'flyspell-mode) (add-hook 'emacs-lisp-mode-hook 'eldoc-mode)
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
マイナーモードは明確な方法でEmacsの動作を変更する、オプションの編集用モードです。メジャーモードとは異なり、いつでも任意の数のマイナーモードを有効にできます。いくつかのマイナーモードはバッファーローカル(buffer-local)で、特定のバッファーにたいしてオン(有効)にして、他のバッファーではオフ(無効)に切り替えることができます。それ以外のマイナーモードはグローバル(global)で、それが有効な間はEmacsセッションのすべてのバッファーで行う、すべての操作に影響します。ほとんどのマイナーモードはデフォルトで無効ですが、デフォルトで有効なものもいくつかあります。
ほとんどのバッファーローカルなマイナーモードは、モードラインのメジャーモード標識のすぐ後ろに有効であることを示します。たとえばモードラインに‘Fill’と表示されているとき、それはAuto Fillモードが有効であることを意味します。モードラインを参照してください。
メジャーモードと同様に、各マイナーモードはモードコマンド(mode
command)に関連付けられていて、それはモード名の後ろに‘-mode’を付けた名前です。たとえばAuto
Fillモードのモードコマンドはauto-fill-mode
です。しかしメジャーモードのコマンドは、単純にそのモードを有効にするだけですが、マイナーモードのモードコマンドは、モードを有効または無効にすることができます。
nil
のとき、マイナーモードは無条件にオンになります。これはメジャーモードのモードフックからマイナーモードをオンに切り替えるのを簡単にします(メジャーモードを参照してください)。非nil
の引数は、上で説明したインタラクティブなプレフィクス引数と同様に処理されます。
ほとんどのマイナーモードは、モードコマンドと同じ名前のモード変数(mode
variable)をもっています。変数の値が非nil
のときはモードが有効で、nil
なら無効です。一般的に、Lispから直接モード変数を変更して、モードを有効または無効にするべきではありません。かわりにモードコマンドを使うべきです。しかしCustomizeインターフェース(Easy Customizationインターフェースを参照してください)を通じてのノード変数のセットは、Customizeが自動的にモードコマンドを実行するので、常に正しくモードを有効または無効にします。
以下にいくつかのバッファーローカルなマイナーモードのリストを示します:
display-line-numbers
の便利なラッパーであり、display-line-numbers-type
の値を使用してセッティングします。ディスプレーのカスタマイズを参照してください。
overwrite-mode
は、Insertキーにバインドされています。
以下に便利なグローバルマイナーモードをいくつか示します:
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ファイルをvisitしたとき、Emacsは自動的にメジャーモードを選択します。これは通常、ファイル名にもとづいて選択されます—たとえば名前が‘.c’で終わるファイルは通常、Cモードで編集されます — が、ファイル内の特別なテキストにもとづいてメジャーモードが選択されるときもあります。この特別なテキストは、バッファーローカルなマイナーモードを有効にするためにも使用されます。
以下は、これの正確な手順です:
最初にEmacsは、ファイルにファイルローカル(file-local)なモード変数が含まれているかチェックします。ファイル内のローカル変数を参照してください。メジャーモードを指定するファイルローカル変数が存在する場合、Emacsは他の条件をすべて無視してそのメジャーモードを使用します。ファイルローカル変数を使用してメジャーモードを指定する方法はいくつかあります。一番単純なのは、空行でない最初の行に、そのモードの名前と、モード名の前後に‘-*-’を記述する方法です。他のテキストがその行にあっても問題はありません。たとえば、
; -*-Lisp-*-
これはEmacsにLispモードを使用するよう指示します。Lispがこの行をコメントとして扱うように、セミコロンがどのように使われているか注意してください。以下のように書くこともできます
; -*- mode: Lisp;-*-
ファイルローカル変数を使用して、バッファーローカルなマイナーモードを指定することもできます。これはeval
指定を使用して行います。たとえば、空行でない最初の行に以下を記述すると、これはバッファーをLispモードにして、Auto-Fillモードを有効にします。
; -*- mode: Lisp; eval: (auto-fill-mode 1); -*-
しかし、ほとんどのマイナーモードはユーザー個人の好みが表れるものなので、この方法でマイナーモードを有効にするのは、通常は不適切です。特定のファイルタイプにたいしてマイナーモードを個人的に使用したい場合は、メジャーモードフックを通じてマイナーモードを有効にするのが、より良い方法です。
2番目に、メジャーモードを指定するファイル変数が存在しない場合、Emacsは最初の行が‘#!’で開始されていないかチェックします。もし該当したら、それはそのファイルがファイルの最初の行に記述された名前のインタープリターを実行する(ファイルの残りはインタープリターへの入力として使用されます)ことにより機能する、実行可能なシェルコマンドであることを示します。したがってEmacsはインタープリター名を使って、モードの選択を試みます。たとえば、‘#!/usr/bin/perl’で始まるファイルは、Perlモードで開かれます。変数interpreter-mode-alist
は、インタープリター名とメジャーモードの対応を指定します。
最初の行が‘#!’で開始されている場合、最初の行で‘-*-’の機能は通常は使用できません。なぜならインタープリターを実行するときにシステムが混乱するからです。そのため、Emacsはそのようなファイルにたいしては、1行目と同じように2行目の‘-*-’を探します。これはマジック文字列‘'\"’で開始されるman pageで、troffプリプロセッサーのリストを指定することと同じです。
3番目に、Emacsは変数magic-mode-alist
にもとづいて、バッファーの先頭のテキストを調べて、メジャーモードの決定を試みます。デフォルトではこの変数はnil
(空のリスト)なので、Emacsはこのステップをスキップしますが、initファイルでこれをカスタマイズできます(Emacs初期化ファイルを参照してください)。変数の値には、以下の形式のリスト要素を指定します
(regexp . mode-function)
ここでregexpは正規表現(正規表現の構文を参照してください)で、mode-functionはメジャーモード関数です。ファイルの先頭のテキストがregexpにマッチした場合、Emacsはmode-functionで指定したメジャーモードを選択します。
magic-mode-alist
の要素は、以下の形式でも指定できます
(match-function . mode-function)
ここでmatch-functionは、バッファーの先頭で呼び出されるLisp関数です。この関数が非nil
を返した場合、Emacsはメジャーモードをmode-functionにセットします。
4番目に —Emacsが適正なメジャーモードをまだ見つけていない場合 —
今度はファイル名を調べます。ファイル名とメジャーモードの対応付けは、変数auto-mode-alist
で制御されます。この変数の値は、各要素が以下の形式のリストです。
(regexp . mode-function)
または以下の形式です
(regexp mode-function flag)
たとえば、通常見られるようなリストの要素は、("\\.c\\'"
.
c-mode)
のような形式で、これは名前が.cで終わるファイルにたいして、Cモードを選択する役目を負っています(正規表現で‘.’がもつ特別な意味を打ち消すために、文字列に‘\’を含めなければなりません。これはLisp構文では‘\\’と記述する必要があります)。要素が(regexp
mode-function
flag)
の形式をもち、flagが非nil
の場合、Emacsはmode-functionを呼び出した後、Emacsはregexpとマッチした接尾辞を捨てて、ほかのマッチを検索します。
GNU/Linuxおよび、ファイル名の大文字小文字を区別する他のシステムでは、Emacsはauto-mode-alist
の検索で大文字小文字を区別します。この検索が失敗すると、2回目は大文字小文字を区別せずにalistを再検索します。2回目の検索を行わないようにするには、変数auto-mode-case-fold
をnil
に変更します。Microsoft
Windowsのような、ファイル名の大文字小文字を区別しないシステムでは、Emacsは大文字小文字を区別しないでauto-mode-alist
を検索します。
最後に、Emacsがまだ使用するメジャーモードを見つけられない場合、Emacsはバッファーの先頭のテキストと、変数magic-fallback-mode-alist
を比較します。この変数は上述したmagic-mode-alist
と同じように機能しますが、auto-mode-alist
の後に調べられるという点が異なります。デフォルトではmagic-fallback-mode-alist
にはイメージファイル、HTML/XML/SGMLファイル、PostScriptファイル、およびUnixスタイルのConfファイルをチェックする形式が含まれています。
バッファーのメジャーモードを変更したとき、M-x
normal-modeとタイプすると、Emacsが自動的に選択するメジャーモードに戻ることができます。この関数はfind-file
がメジャーモードを選択するために呼び出す関数と同じです。この関数は、(もしあれば)ファイルの‘-*-’
行およびローカル変数リストも処理します。ファイル内のローカル変数を参照してください。
コマンドC-x
C-wおよびset-visited-file-name
は、新しいファイル名が何らかのモードに関係がある場合は、新しいメジャーコードに変更します(そのバッファーがファイルをvisitしていない場合、C-x
C-sも同じことを行います)。しかしバッファーの内容がメジャーモードを指定していて、ある種の特別なメジャーモードはモードの変更を許しません。このモード変更機能をオフにするには、change-major-mode-with-file-name
をnil
にセットして下さい。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
インデント(Indentation)とは、空白文字(スペースやタブ文字)を行のテキストの先頭に挿入したり調整することを指します。このチャプターでは、インデントコマンドと、Textモードやそれに関連するモード、同様にプログラミング言語のモードでの一般的なオプションを記します。プログラミング用のモードでのインデントに関する追加のドキュメントは、プログラムのインデントを参照してください。
インデントを行うもっとも簡単な方法は、TABキーです。ほとんどのメジャーモードでは、これによりコマンドindent-for-tab-command
が実行されます(Cおよびそれに関連するモードでは、TABは同じように振る舞うコマンドc-indent-line-or-region
を実行する。Cのインデントのためのコマンドを参照されたい)。
空白文字を挿入、またはモードに適した方法でカレント行をインデントします(indent-for-tab-command
)。リージョンがアクティブのときは、リージョンのすべての行をインデントします。
TABの正確な動作は、メジャーモードに依存します。Textモードおよびそれに関連するモードでは、TABは通常、空白とタブ文字を組み合わせたものを挿入して、ポイントを次のタブストップに進めます。このために、先行する行の最初の空白以外の文字の位置は、追加のタブストップとして扱われるので、TABを使って先行する行にポイントを揃えることができます。リージョンがアクティブ(リージョンを操作するを参照してください)な場合、TABは特別な動作をします。これはリージョンの各行をインデントするので、各行の最初の空白以外の文字は、先行する行に揃えられます。
プログラミング関連のモードでは、TABはコードのカレント行にたいして、前の行のコードの意味を理解してインデントします。リージョンがアクティブな場合、リージョンのすべての行はこの方法でインデントされます。ポイントが最初にカレント行のインデント領域にあった場合、その行の最初の空白以外の文字に再配置されます。
単にタブ文字をバッファーに挿入したいときは、C-q TABとタイプします(テキストの挿入を参照してください)。
24.1 インデントコマンド | インデントを処理するほかのコマンド。 | |
24.2 タブストップ | Textモードのインデントのストップポイント。 | |
24.3 タブ vs. スペース | インデントにスペース文字だけを使用する。 | |
24.4 インデントの便利な機能 | インデントのオプション機能。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
TAB
(indent-for-tab-command
)コマンドとは別に、Emacsは他の方法でインデントを処理する、さまざまなコマンドを提供します。
カレント行をポイント位置で分割します(split-line
)。その行のポイントの後にあるテキストは新しい行となり、ポイントがあった位置と同じ列にインデントされます。このコマンドは、最初にポイントを複数のスペースまたはタブを飛び越えて移動させます。その後、ポイントは挿入された行の前に配されます。
カレント行の最初の空白以外の文字に移動(前方または後方)します(back-to-indentation
)。その行に空白文字しかない場合は、その行の行末に移動します。
ポイント位置の空白文字を次のタブストップまでインデントします(tab-to-tab-stop
)。タブストップを参照してください。
ポイントが前の行(実際には最後の空行以外の行)の、最初の空白以外の文字に揃うように、ポイント位置に空白文字を挿入します。ポイントがすでにその位置より右にある場合は、かわりにtab-to-tab-stop
を実行します
— ただし数引数を指定した場合は何もしません。
前の行とカレント行をマージします(delete-indentation
)。このコマンドはカレント行の前にある任意のインデントと、行の境界を1つのスペースで置き換えて、2つの行を明解に結合(join)します。
特別なケースとして、結合された文字が連続する開きカッコまたは閉じカッコの場合、または他の改行が続く場合、1つのスペースは省略されます(Lispコードにたいして有用)。
fillプレフィクスが存在して、それが改行の後ろにあった場合、M-^はfillプレフィクスを削除します。フィルプレフィクスを参照してください。
プレフィクス引数を与えると、カレント行を後続行に結合します。リージョンがアクティブでプレフィクス引数が与えられなければ、かわりにリージョン内の全行を結合します。
リージョンのすべての行にたいして、各行の先頭でTABをタイプしたかのようにインデントします(indent-region
)。
数引数が与えられた場合、その列番号までリージョンのすべての行をインデントします。
このコマンドは、リージョン内で開始されるすべての行のインデントを変更するのに使用されます。インデントの変更は、影響を受ける行を厳格な(rigid)単位として移動することにより行われます。
引数を指定しないで呼び出されたとき、このコマンドは影響を受ける行のインデントを対話的に調整するために、transientモードをアクティブにします。transientモードがアクティブの間は、LEFTまたはRIGHTにより、スペース1文字単位で左または右にインデントします。S-LEFTまたはS-RIGHTとタイプすることにより、タブストップ単位で左または右にインデントすることもできます。他のキーをタイプするとtransientモードは無効になり、通常の編集を再開します。
プレフィクス引数nを指定して呼び出すと、このコマンドは行をn個のスペースでインデントします(transientモードは有効になりません)。nに値を与えると後方にインデントするので、リージョン内の行のすべてのインデントを除去したいときは、以下のように充分に大きい負の引数を与えます。
C-u -999 C-x TAB
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsは、特定の列番号がタブストップになるよう定義しています。これらはTextモードおよびそれに関連するモードで、TABおよびM-iのようなコマンドにより、空白文字が挿入されるときのストップポイントとして使用されます。変数tab-stop-list
は、これらの位置を制御します。デフォルト値はnil
で、これはタブストップが8列ごとという意味です。値には、タブストップの列番号を、0基準の列番号のリスト(昇順)で指定することもできます。Emacsは最後の要素と、その1つ前の要素の差分を繰り返すことにより、リストを無限に拡張します。
変数tab-stop-list
を直接カスタマイズするかわりに、コマンドM-x
edit-tab-stopsを通じて、タブストップを視認しながらセットする便利な方法があります。このコマンドは、以下のようなタブストップの説明を含んだバッファーに切り替えます。
: : : : : : 0 1 2 3 4 0123456789012345678901234567890123456789012345678 To install changes, type C-c C-c
最初の行は各タブストップ位置にコロンを示します。その後の2行はコロンが示す位置を表示します。tab-stop-list
の値がnil
(デフォルト)の場合、最初はコロンが表示されません。
異なるタブストップを置きたい列に、コロンを配して指定するために、このバッファーを編集できます。このバッファーはOverwriteモードを使用します(マイナーモードを参照してください)。Emacsは、最後に明示した2つのストップの差分を繰り返すことにより、タブストップのリストを無限に拡張することを思い出してください。編集が終わったら、新しいタブストップを有効にするために、C-c
C-cとタイプします。通常、新しいタブストップのセッティングは、すべてのバッファーに適用されます。しかしM-x
edit-tab-stopsを呼び出したバッファーにたいして、ローカルな変数tab-stop-list
を作成していた場合(ローカル変数を参照してください)、新しいタブストップのセッティングは、そのバッファーだけに適用されます。将来のEmacsセッションのためにタブストップのセッティングを保存するには、Customizeインターフェースを使用してtab-stop-list
の値を保存します(Easy Customizationインターフェースを参照してください)。
このセクションで議論したタブストップは、バッファーでタブ文字が表示される方法には影響しないことに注意してください。タブ文字は常に次のタブストップ表示(display tab stop)まで拡張される、空のスペースとして表示されます。テキストが表示される方法を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
インデントコマンドは通常、最小になるような一連のタブ文字とスペースを挿入(または削除)することにより、望む列に行を揃えます。タブ文字は次のタブストップ表示(display
tab
stop)まで伸長された、空のスペースとして表示されます。デフォルトでは、tab-width
列ごと(デフォルトは8)に、1つのタブストップ表示があります。テキストが表示される方法を参照してください。
もし望むなら、すべてのインデントをスペースだけで行うこともできます。これを要求するには、バッファーローカルな変数indent-tabs-mode
をnil
にセットします。バッファーローカルな変数についての情報は、ローカル変数を参照してください。しかしC-q
TABは、indent-tabs-mode
の値とは無関係に、常にタブ文字を挿入することに注意してください。
indent-tabs-mode
をnil
にセットする1つの理由は、すべてのエディターがタブ文字を同じ方法で表示するわけではないという理由です。Emacsユーザーも同様で、彼らはカスタマイズされたtab-width
により、異なる値をもつかもしれません。スペースだけを使うことにより、ファイルが常に同じように見えることを保証できます。Emacsでどのように見えるかだけに関心がある場合、この問題に取り組む他の方法は、ファイルローカルな変数tab-width
をセットする方法です(ファイル内のローカル変数を参照してください)。
空白以外の文字の列を常に保ちながら、スペースをタブに、またはその逆の変換を行うコマンドも存在します。M-x tabifyは、リージョンの連続するスペースをスキャンして、インデントを変更せずに、少なくとも2文字の連続するスペースをタブに変換します。M-x untabifyは、リージョンのすべてのタブを適正な数のスペースに変更します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
変数tab-always-indent
は、TAB
(indent-for-tab-command
)コマンドの動作を微調整します。デフォルト値はt
で、これはインデントで説明した動作を与えます。値をシンボルcomplete
に変更すると、TABは最初にカレント行のインデントを試みます、すでにその行がインデントされている場合、このコマンドはポイント位置のテキストの補完を試みます(シンボル名の補完を参照してください)。値がnil
の場合、TABはポイントが行の左端かインデント位置にあるときだけインデントを行い、それ以外はタブ文字を挿入します。
Electric Indentモードはグローバルなマイナーモードで、これはRETをタイプしたあと自動的にインデントを行います。このモードはデフォルトで有効です。このマイナーモードを切り替えるには、M-x electric-indent-modeとタイプします。1つのバッファーにたいしてモードを切り替えるには、M-x electric-indent-local-modeを使用してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このチャプターではテキスト(text) — 人間の言語(対照的なものとしてコンピューターのプログラム言語があります)における、文字シーケンスという意味 — にたいして動作する、Emacsコマンドを説明します。これらコマンドは、人間の言語の構文および文体の規則に配慮した方法で動作します。単語、センテンス(文)、パラグラフ(段落)、大文字に関する規則があります。フィル(filling) — パラグラフの行をおおよそ同じ長さに再配置するという意味 — を行うコマンドもあります。これらのコマンドは主にテキストの編集を意図しており、プログラムの編集にも便利なときがあります。
Emacsには、人間言語のテキストを編集するためのメジャーモードがいくつかあります。ファイルが普通のテキストを含む場合は、Textモードを使います。これはEmacsを、テキストの構文規則にたいして少しカスタマイズしたものです。Outlineモードは。アウトライン構造でテキストを操作する特別なコマンドを提供します。Outlineモードを参照してください。
Orgモードは、Outlineモードを拡張してEmacsを本格的なオーガナイザーに変えます。これによりTODOリストを管理したり、ノートを保存して、それを多くのフォーマットで公開することができます。 Emacsと共に配布されるOrgのInfoマニュアルを参照してください。
EmacsにはTeXやLaTeX (TeXモードを参照してください)、HTMLやSGML (SGMLモードとHTMLモードを参照してください)、XML (Emacsと共に配布されるnXLMモードのマニュアルを参照してください)、 GroffやNroff (Nroffモードを参照してください)のような、コマンドが埋め込まれたテキストのための、他のメジャーモードがあります。
テキスト文字で作られたAA(ASCII art)のピクチャーを編集する必要がある場合は、そのような絵を編集するための特別なメジャーモードのPictureモードを使用します ピクチャーの編集を参照してください。
25.1 単語 | 単語単位の移動とkill。 | |
25.2 センテンス | センテンス単位の移動とkill。 | |
25.3 パラグラフ | パラグラフ単位の移動。 | |
25.4 ページ | ページ単位の移動。 | |
25.5 クォーテーションマーク | クォーテーションマークの挿入。 | |
25.6 テキストのフィル | テキストのフィルと調整。 | |
25.7 大文字小文字変換コマンド | テキストの大文字小文字の変更。 | |
25.8 Textモード | テキストファイルを編集するためのメジャーモード。 | |
25.9 Outlineモード | アウトラインの編集。 | |
25.10 Orgモード | Emacsオーガナイザー。 | |
25.11 TeXモード | TeXおよびLaTeXファイルの編集。 | |
25.12 SGMLモードとHTMLモード | HTMLおよびSGMLファイルの編集。 | |
25.13 Nroffモード | nroffフォーマッターへの入力の編集。 | |
25.14 Enrichedテキスト | フォント、カラーなどでenrichedテキストを編集する。 | |
25.15 テキストベーステーブルの編集 | テキストベースのテーブルを編集するためのコマンド。 | |
25.16 2列編集 | テキスト列を分割して別のウィンドウに表示する。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsは、単語単位で移動するコマンドをいくつか定義しています:
1単語前方に移動します(forward-word
)。
1単語後方に移動します(backward-word
)。
単語の最後までkillします(kill-word
)。
単語の先頭までkillします(backward-kill-word
)。
次の単語の最後にマークをセットします(mark-word
)。
2つの単語を入れ替える、または他の単語を飛び越えて単語をドラッグします(transpose-words
)。
これらのキーは文字単位のコマンドC-f、C-b、C-d、DEL、C-tに類似していることに注目してください。M-@はC-@(これはC-SPCの別名です)が由来です。
コマンドM-f (forward-word
)およびM-b
(backward-word
)は、単語単位で前方または後方に移動します。これらのMetaベースのキーシーケンスは、1文字単位で移動するキーシーケンスC-fおよびC-bに類似しています。類似点は数引数にも拡張されます。これらは繰り返し回数を指定します。M-fに負の引数を与えると後方に移動し、M-bに負の引数を与えると前方に移動します。前方への移動は単語の最後の文字の直後で停止し、後方への移動は、最初の文字の直前で停止します。
M-d
(kill-word
)は、ポイントの後ろの単語をkillします。正確に言うと、ポイントから、M-fで移動する位置までのすべてをkillします。したがってポイントが単語の途中にある場合、M-dはポイントの後だけをkillします。ポイントと次の単語の間に区切り文字がある場合、それは単語と一緒にkillされます(次の単語だけをkillして、その前にある区切り文字はkillしたくないときは、M-fで最後まで移動して、M-DELで単語を後方にkillします)。M-dはM-fと同様の引数を取ります。
M-DEL
(backward-kill-word
)は、ポイントの前の単語をkillします。これはポイントから、M-bで移動する位置までのすべてをkillします。たとえばポイントが‘FOO, BAR’のスペースの後ろにある場合、これは‘FOO, ’をkillします。‘FOO’だけをkillして、カンマとスペースは残したい場合は、M-DELのかわりにM-b
M-dを使用します。
M-t
(transpose-words
)は、ポイントの前またはポイントを含む単語を、次の単語と交換します。単語間の区切り文字は移動されません。たとえば‘FOO, BAR’は、‘BAR FOO,’ではなく、‘BAR, FOO’に入れ替えられます。入れ替えについては、テキストの入れ替えを参照してください。
リージョンにたいして操作を行う際、単語単位で操作したいときは、コマンドM-@
(mark-word
)を使用します。このコマンドはM-fで移動する位置にマークをセットします。このコマンドにつての詳しい詳細は、テキストオブジェクトをマークするコマンドを参照してください。
単語にたいするコマンドが理解する単語境界は、構文テーブル(syntax table)で制御されます。単語の区切り文字に、(たとえば)任意の文字を使うことができます。Syntax Tables in The Emacs Lisp Reference Manualを参照してください。
以上に加えて、リージョンまたはバッファーに含まれる単語数のカウントとリポートを行うM-=
(count-words-region
)およびM-x count-wordsコマンドについては、カーソル位置の情報を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
センテンス(文)とパラグラフ(段落)を操作するEmacsコマンドは、単語を処理するコマンドと同様、ほとんどがMetaキーに割り当てられています。
センテンスの先頭に、後方へ移動します(backward-sentence
)。
センテンスの最後に、前方へ移動します(forward-sentence
)。
センテンスの最後まで、前方にkillします(kill-sentence
)。
センテンスの最初まで、後方にkillします(backward-kill-sentence
)。
コマンドM-a (backward-sentence
)およびM-e
(forward-sentence
)は、センテンスの先頭または最後に移動します。これらのコマンドのバインディングは、行の先頭と最後に移動するC-aとC-eに似せて選ばれました。似ていない点は、M-aまたはM-eを繰り返すと、センテンス単位で連続して移動することです。
センテンスにたいして後方に移動すると、ポイントはセンテンスの最初の文字の直前に移動します。前方に移動したときは、センテンスを終了させる区切り文字の直後に移動します。どちらもセンテンスの境界にある空白文字にポイントを移動することはありません。
C-aとC-eがkillコマンドC-kをもつように、M-aとM-eにも対応するkillコマンドがあります。M-k
(kill-sentence
)は、ポイントからセンテンスの最後までをkillします。正の数引数nを指定すると、次のnセンテンスをkillします。負の数引数-nを指定すると、後方にn番目のセンテンスの先頭までをkillします。
C-x DEL (backward-kill-sentence
)は、センテンスの先頭までを後方にkillします。
センテンスのコマンドは、センテンスの最後に2つのスペースを置くというAmericanのタイピストの慣習に、ユーザーが従うと仮定します。つまりセンテンスの最後は‘.’、‘?’、‘!’の後ろに改行または2つのスペースがあると仮定し、その間に任意の個数の‘)’、‘]’、‘'’、‘"’が許されます。パラグラフの先頭および最後は、センテンスの先頭および最後でもあります。この慣習にしたがうことにより、Emacsのセンテンスにたいするコマンドがセンテンスの最後のピリオドと、省略形を示すピリオドを区別できるので便利になります。
センテンスの間を1つのスペースにしたい場合は、sentence-end-double-space
をnil
にセットすることにより、センテンスのコマンドが1つのスペースで止まるようになります。しかし、これにはセンテンスの終わりのピリオドと、省略形を示すピリオドを区別できなくなるという欠点があります。したがって便利で信頼できる編集のために、2つのスペースの慣習にしたがうことを推奨します。変数sentence-end-double-space
はフィルにも影響します(明示的なフィルコマンドを参照してください)。
変数sentence-end
は、センテンスの終了を認識する方法を制御します。非nil
の場合、その値は正規表現にすべきで、それはセンテンスの最後の数文字(センテンスの後ろのスペースも含む)とのマッチに使用されます。値がnil
(デフォルト)の場合、Emacsはsentence-end-double-space
の値のような、変数条件に照らしてセンテンスの最後を計算します。
Thaiのようないくつかの言語は、センテンスの最後を示すのにピリオドを使用しません。そのような場合は変数sentence-end-without-period
にt
をセットします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
パラグラフ(段落)を操作するEmacsコマンドもMetaキーに割り当てられています。
前のパラグラフの先頭に、後方へ移動します(backward-paragraph
)。
次のパラグラフの最後に、前方へ移動します(forward-paragraph
)。
そのパラグラフ、または次のパラグラフの周囲にポイントとマークを配します(mark-paragraph
)。
M-{
(backward-paragraph
)は、カレントのパラグラフ、または前のパラグラフの先頭に移動します(呼び出し時にポイントがある場所に依存する。パラグラフの定義は以下を参照)。同様に、M-}
(forward-paragraph
)は、カレントのパラグラフ、または次のパラグラフの最後に移動します。パラグラフの前に空行がある場合、M-{はその空行に移動します。
パラグラフにたいして操作をしたい場合、M-h
(mark-paragraph
)とタイプすることにより、パラグラフの周囲にリージョンがセットされます。たとえばM-h
C-wは、パラグラフの周囲またはポイントの後ろをkillします。M-hは、ポイント位置のパラグラフの先頭にポイントを、最後にマークを配します。ポイントがパラグラフの間(連続する空行の中、または境界)にある場合、M-hはポイントの後ろに続くパラグラフの周囲にリージョンをセットします。パラグラフの最初の行の前に空行がある場合、その空行はリージョンに含まれます。
リージョンがすでにアクティブの場合、このコマンドはポイントを変更せずにマークをセットします。連続するM-hは、マークをパラグラフ単位で先にセットします。
パラグラフの定義はメジャーモードに依存します。Fundamentalモード、同様にTextモードとそれに関連するモードでは、パラグラフと、その隣接するパラグラフを分けるのは1行以上の空行 — 空の行、スペースとタブだけからなる行、およびそれらに改ページ文字がついた行 — です。プログラミング言語に関するモードでは、通常パラグラフは同じような方法で定義されるので、パラグラフがないプログラムなどにたいしても、パラグラフのコマンドを使うことができます。
Textモードでは、インデントされた行自体では、パラグラフの区切りにはならないことに注意してください。インデントされた行をパラグラフの分割に使用したい場合は、かわりにParagraph-Indent Textモードを使用します。Textモードを参照してください。
フィルプレフィクスをセットしている場合、フィルプレフィクスで始まっていないすべての行は、パラグラフの区切りとなります。テキストのフィルを参照してください。
パラグラフ境界の正確な定義は、変数paragraph-separate
およびparagraph-start
により制御されます。paragraph-start
の値には、パラグラフを開始または分割する行にマッチする正規表現を指定します。paragraph-separate
の値には、パラグラフの一部とならないような、パラグラフを分割する行にマッチする正規表現を指定します。新しいパラグラフを開始するパラグラフに含まれる行は、paragraph-start
にはマッチしますが、paragraph-separate
にはマッチしません。たとえばFundamentalモードでは、paragraph-start
は"\f\\|[ \t]*$"
、paragraph-separate
は"[ \t\f]*$"
です。
paragraph-start
とparagraph-separate
はテキストの左マージンにマッチしますが、行頭である必要はないので、パラグラフ関数がマージンのセッティングに応じてテキストリージョン内で同じように確実に機能させるために、これらのregexpに‘^’を使用するべきでないことに注意してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
改ページ文字(formfeed character: ASCIIコード12で、‘control-L’とも表示されます)でページに分割されているものがあり、Emacsではそれらがエスケープシーケンス‘^L’で表示されます(テキストが表示される方法を参照してください)。伝統的には、そのようなテキストファイルのハードコピーを印刷する場合、各改ページ文字で改ページされます。ほとんどのEmacsコマンドは、この文字をほかの文字と同様に扱うので、C-q C-lで挿入して、DELで削除などができます。それに加えて、Emacsはページ単位の移動や操作を行うコマンドを提供します。
ポイント位置のページ番号と、ページ内での行番号を表示します。
前のページ境界にポイントを移動します(backward-page
)。
次のページ境界にポイントを移動します(forward-page
)。
現在のページ(または他のページ)の周囲に、ポイントとマークを配します(mark-page
)。
現在のページの行数を数えます(count-lines-page
)。
M-x what-pageは、ファイルの先頭から数えたページ数と、そのページの行数をエコーエリアに表示します。
C-x [
(backward-page
)コマンドは、前のページ区切りの直後にポイントを移動します。ポイントがすでにページ区切りの直後にある場合は、そのページ区切りをスキップして、その前のページ区切りに移動します。数引数は繰り返し回数を指定します。C-x
] (forward-page
)コマンドは、次のページ区切りに前方に移動します。
C-x C-p
(mark-page
)コマンドは、ポイントを現在のページの先頭(ページの先頭に隣接するページ区切りの後ろ)、マークをページの最後(ページの最後に隣接するページ区切りの後ろ)に配します。
C-x C-p C-wは、ページを他の場所に移動するためにkillする便利な方法です。C-x [またはC-x ]で他のページへ移動して、そこにkillされたページをyankすれば、すべてのページは再び適切に区切られます。C-x C-pのリージョンに後続のページ区切りだけが含まれるのは、これが期待したよう確実に機能させるためです。
C-x C-pに数引数を指定すると、現在のページから数えて何ページ目に移動するかを指定します。0は現在のページ、1は次のページ、-1は前のページを意味します。
C-x l
(count-lines-page
)コマンドは、ページをどこで2つに分割するかの良い指標になります。これは現在のページの全行数と、カレント行の前にある行数と、後ろにある行数を以下のように表示します。
Page has 96 (72+25) lines
合計が1少ないのに注意してください。これはポイントが行の先頭にない場合は正しくなります。
変数page-delimiter
は、ページがどこで始まるかを制御します。この値にはページを分割する行の先頭にマッチする正規表現を指定します(正規表現の構文を参照してください)。この変数の値は通常"^\f"
で、これは行の先頭の改ページ文字にマッチします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
テキストをクォートするための一般的な方法の1つは、typewriter convention(タイプライター方式)です。これは'like this'のようなstraight apostrophesによるクォートや、"like this"のようなダブルクォートを使用します。別の一般的な方法としてはcurved quote convention(曲クォート方式)があります。これは‘like this’や‘`like thi”のように、左右のシングルクォーテーションマークやダブルクォーテーションマークを使用します。11テキストファイルにおいては、typewriter quotesはシンプルで可搬性があり、curved quotesはあいまいさが少なく見栄えもよくなります。
Electric Quoteモードにより、curved
quotesをタイプするのが簡単になります。オプションでタイプした文字`を‘、'を’、``を“、''を”に変換します。このデフォルトのクォートリストは、変数electric-quote-chars
をカスタマイズして変更できます。値には左シングルクォート、右シングルクォート、左ダブルクォート、右ダブルクォートに対応する、4つの文字からなるリストを指定します。デフォルト値は'(?‘
?’ ?“ ?”)
です。
Electric
Quoteモードは、このモードをどこでアクティブにするかを制御する変数を通じて、カスタマイズできます。electric-quote-paragraph
が非nil
の場合、テキストパラグラフ内でアクティブになります。electric-quote-comment
が非nil
の場合、プログラミング言語のコメント内でアクティブになります。electric-quote-string
が非nil
の場合、プログラミング言語の文字列定数内でアクティブになります。デフォルトでは、electric-quote-string
がnil
で、それ以外の変数がt
です。
オプションelectric-quote-replace-double
を非nil
値にセットすることもできます。その場合には"とタイプすることにより、コンテキストに応じて適切なcurved
double
quoteが挿入されます。バッファー先頭や行ブレーク、空白、開カッコ、クォート文字の後には“、それ以外なら”が挿入されます。
Electric Quoteモードはデフォルトで無効になっています。これを単一のバッファーで切り替えるにはM-x
electric-quote-local-mode、グローバルに切り替えるにはM-x
electric-quote-modeとタイプします。1回だけこれを抑制したいときは、`や'のかわりに、C-q
`とC-q 'を使用します。Electric Quoteモードが無効または非アクティブのときにcurved
quoteを挿入する場合、『‘』はC-x 8 [、『’』はC-x 8 ]、『“』はC-x 8
{、『”』はC-x 8 }とタイプします。テキストの挿入を参照してください。electric-quote-chars
の値は、これらのキーバインドには影響を与えないことに注意してください。これらの値はelectric-quote-mode
のキーバインドではなく、global-map
のバインドのためのものです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
テキストをフィル(fill)するとは、指定した幅に収まるように行を分割することを意味します。Emacsはフィルを2つの方法で行います。Auto Fillモードでは、自己挿入文字によるテキストの挿入で、自動的にフィルされます。テキストを編集するときに使用できる、明示的なフィルコマンドもあります。
25.6.1 Auto Fillモード | Auto Fillモードは長い行を自動的に分割します。 | |
25.6.2 明示的なフィルコマンド | パラグラフの再フィルと行の中央揃えコマンド。 | |
25.6.3 フィルプレフィクス | インデントされていたり、コメントであるパラグラフのフィル。 | |
25.6.4 適応型フィル | Emacsがフィルプレフィクスを自動的に決定する方法。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Auto Fillモードは、行が長くなりすぎたとき、スペースの箇所で行を自動的に分割する、バッファーローカルなマイナーモード(マイナーモードを参照)です。
Auto Fillモードを有効または無効にします。
Auto Fillモード中は、適切なときに行を分割します。
モードコマンドM-x auto-fill-modeは、カレントバッファーのAuto
Fillモードを切り替えます。他のマイナーモードと同様、正の数引数はAuto
Fillモードを有効にし、負の引数は無効にします。特定のメジャーモードでAuto
Fillモードを自動的に有効にするには、モードフックにauto-fill-mode
を追加します(メジャーモードを参照してください)。Auto
Fillモードが有効なときは、モードラインにモード指標の‘Fill’が表示されます(モードラインを参照してください)。
Auto Fillモードは、行が望ましい幅より長くなったとき、空白の位置で自動的に行を分割します。行の分割は、SPCかRETをタイプしたときだけ発生します。行の分割をさせずにスペースまたは改行を挿入したいときは、C-q SPCまたはC-q C-jとタイプします。C-oも行の分割を発生させずに改行を挿入します。
Auto Fillモードが行を分割するときは、適応型フィルプレフィクス(adaptive fill prefix)にしたがうよう試みます。フィルプレフィクスがカレントパラグラフの最初の1行目、および/または2行目で推論できる場合、そのフィルプレフィクスは新しい行に挿入されます(適応型フィルを参照してください)。そうでない場合、新しい行はその行でTABをタイプしたかのようにインデントされます(インデントを参照してください)。プログラミング言語に関するモードでは、行がコメントの途中で改行された場合、新しいコメント区切りが適切に挿入されてコメントが分割されます。
Auto Fillモードはパラグラフ全体を再フィルしません。これは行の分割はしますが、行のマージはしません。したがって、パラグラフの途中を編集しているときは、適切にフィルされていないパラグラフがあり得ます。これをフィルするには、フィルコマンドを明示的に呼び出してください (明示的なフィルコマンドを参照してください)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
カレントパラグラフをフィルします(fill-paragraph
)。
フィルの列幅をセットします(set-fill-column
)。
リージョンの各パラグラフをフィルします(fill-region
)。
リージョンを1つのパラグラフとしてフィルします。
行を中央に揃えます。
コマンドM-q
(fill-paragraph
)は、カレントのパラグラフをフィルします。このコマンドは特定の最大列幅に適合するような方法で、パラグラフの改行を再配分して、パラグラフの余分なスペースやタブ文字を削除します。
M-qは通常、ポイントがあるパラグラフに作用しますが、ポイントがパラグラフの間にあるときは、ポイントの後ろのパラグラフに作用します。リージョンがアクティブの場合、かわりにリージョンのテキストに作用します。M-x fill-regionを呼び出して、リージョンのテキストを明確にフィルすることもできます。
M-qおよびfill-region
は、パラグラフの境界を探すために、通常のEmacsの条件式を使用します。より細かく制御するには、ポイントとマークの間にあるすべてを1つのパラグラフとして再フィルする、M-x
fill-region-as-paragraphを使用することができます。このコマンドはリージョンの空行を削除するので、分割されたテキストブロックは、1つのブロックに結合されます。
M-qに数引数を指定した場合、これはテキストのフィルと同時に割付(justify)も指示します。これは行の右端が正確にフィル列になるように、余分なスペースが挿入されることを意味します。余分なスペースを削除するには、引数を指定せずにM-qを使用します(fill-region
と同じ)。
フィルのための行の最大幅は、バッファーローカルな変数fill-column
により指定されます。デフォルト値は70です(ローカル変数を参照してください)。カレントバッファーのfill-column
をセットする一番簡単な方法は、コマンドC-x
f
(set-fill-column
)を使用する方法です。数引数を指定すると、それを新しいフィル列として使用します。C-uだけを指定すると、このコマンドは現在のポイントの水平位置をfill-column
にセットします。
コマンドM-o M-s
(center-line
)は、現在のフィル列でカレント行を中央に揃えます。数引数nを指定すると、nを中央に揃えた後、ポイントを先に移動します。このバインディングはTextモードのためのもので、利用可能なのはTextモードとそれに関連するモードだけです(Textモードを参照してください)。
デフォルトでは、Emacsは2つのスペースまたは改行が後にあるピリオドを、センテンスの終わりと判断します。後に1つのスペースしかないピリオドは、センテンスの終わりではなく、省略形を示します。それに合わせて、フィルコマンドも後に1つのスペースしかないピリオドでは、行を分割しません。変数sentence-end-double-space
をnil
にセットした場合、フィルコマンドは後に1つのスペースしかないピリオドでも行を分割するようになり、各ピリオドの後に1つのスペースを配すようになります。他の効果とこの方法の欠点については、センテンスを参照してください。
変数colon-double-space
が非nil
の場合、フィルコマンドはコロンの後に2つのスペースを配します。
行分割を許さない場所の条件を追加で指定するには、アブノーマルフック変数fill-nobreak-predicate
をカスタマイズします(フックを参照してください)。このフックの各関数はEmacsが行を分割すべきと判断する位置で引数なしで呼び出されます。関数が非nil
値を返した場合には、Emacsはその位置で行を分割しません。このフックに指定できる関数にはfill-single-word-nobreak-p
(センテンスの最初の単語の後ろ、および最後の単語の前では分割しません)、fill-single-char-nobreak-p
(空白文字が前置された1文字の単語の後ろでは分割しません)、fill-french-nobreak-p
(‘(’の後ろ、および‘)’、‘:’、‘?’の前では分割しません)、fill-polish-nobreak-p
(非空白文字が前置された1文字の単語の後ろでも分割しません)が含まれます。
EmacsはDisplay fill column indicatorモード(display-fill-column-indicatorを参照)を使用することによってfill-column
の位置にインジケーターを表示できます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
フィルプレフィクス(fill prefix)機能により、フィルされるパラグラフの各行が、特別な文字列(インデントされたパラグラフの行頭につける複数のスペースなど)で開始されるようになります。フィルプレフィクスを明示的に指定することができます。明示的に指定しない場合、Emacsは自動的にそれを推測することを試みます(適応型フィルを参照してください)。
フィルプレフィクスをセットします(set-fill-prefix
)。
現在のフィルプレフィクスで、パラグラフをフィルします(fill-paragraph
)。
リージョンをフィルします。インデントの変化は、新しいパラグラフの開始と判断されます。
リージョンをフィルします。パラグラフを分割する行だけを、新しいパラグラフの開始と判断します。
カレントバッファーのフィルプレフィクスを指定するには、使用したいフィルプレフィクスで開始される行に移動して、プレフィクスの最後にポイントを配し、C-x .
(set-fill-prefix
)とタイプします(C-xの後にピリオドです)。フィルプレフィクスをオフに切り替えるには、ポイントを行の先頭に移動してC-x .とタイプして、空のフィルプレフィクスを指定します。
フィルプレフィクスの効果がある間、フィルコマンドはフィルを行う前にパラグラフの各行のフィルプレフィクスを削除して、フィルを行った後で各行にフィルプレフィクスを挿入します(パラグラフの最初の行は変更されずに残ります。これは他の行と異なるように意図されていることがよくあるからです)。Auto Fillモードは、新しい行を作成するときにフィルプレフィクスの自動的な挿入も行います(Auto Fillモードを参照してください)。C-oコマンドは、行の先頭で使用したときは、新しい行を作成してフィルプレフィクスを挿入します。コマンドM-^は逆に、削除する改行の後ろにフィルプレフィクスがあれば、プレフィクスを削除します。
たとえばfill-column
が50で、フィルプレフィクスが‘;;
’の場合、以下のテキストにたいしてM-qを行うと、
;; This is an ;; example of a paragraph ;; inside a Lisp-style comment.
結果は以下のようになります:
;; This is an example of a paragraph ;; inside a Lisp-style comment.
M-qおよびパラグラフのコマンドは、フィルプレフィクスで開始されない行を、パラグラフの開始と判断します。これは、最初の行を除く各行がインデントされている形式のパラグラフにたいして、良い結果を与えます。空行、またはプレフィクスが削除されたインデントされた行も、パラグラフを分割または開始します。これは各行にコメント区切りがある、複数パラグラフにわたるコメントを記述するときに望ましいものです。
M-x fill-individual-paragraphsを使用して、各パラグラフに自動的にフィルプレフィクスをセットできます。このコマンドはリージョンをパラグラフに分割して、インデントの変化を新しいパラグラフの開始として扱い、それらのパラグラフをフィルします。したがって1つのパラグラフのすべての行は、同じ量のインデントをもちます。このインデントは、そのパラグラフにたいするフィルプレフィクスの役目を果たします。
M-x
fill-nonuniform-paragraphsも同様なコマンドですが、別の方法でリージョンをパラグラフに分割します。このコマンドは、(paragraph-separate
で定義される)パラグラフ開始行だけを、新しいパラグラフの開始と判断します。これは1つのパラグラフの各行は異なる量のインデントをもつことを想定しており、パラグラフの中で最小のインデント量をフィルプレフィクスに使用します。このコマンドは最初の行のインデントが、パラグラフの他の行より少なくても多くても、良い結果をもたらします。
フィルプレフィクスは、変数fill-prefix
に保存されます。変数の値は文字列で、フィルプレフィクスがないときはnil
です。これはバッファーごとの変数です。変数の変更はカレントバッファーだけに影響しますが、変更できるデフォルト値も存在します。ローカル変数を参照してください。
テキストプロパティーindentation
は、パラグラフのインデント量を制御する別の方法を提供します。Enrichedテキストのインデントを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
フィルコマンドは、特定なケースでは自動的に適切なフィルプレフィクスを推測できます。空白文字または特定の区切り文字が行の先頭にあり、それがパラグラフの全行に適用されている場合です。
パラグラフに2行以上の行がある場合は、2行目からフィルプレフィクスが取得されますが、それは1行目にもそれが存在する場合だけです。
パラグラフに1行しかない場合、フィルコマンドは、その行からフィルプレフィクスを取得するかもしれません。この決定は複雑です。なぜならそのような場合に妥当な、3つの選択肢があるからです。
これら3つの書式スタイルは一般的に使用されているものです。そのためフィルコマンドは、そのメジャーモードに出現するプレフィクスにもとづいて、望ましいスタイルを決定しようと試みます。判断基準は以下のとおりです。
最初の行で見つかったプレフィクスがadaptive-fill-first-line-regexp
にマッチするか、それがコメント開始シーケンス(メジャーモードに依存します)の場合、見つかったプレフィクスをパラグラフのフィルに使用しますが、それは後続の行でそれらがパラグラフの開始として振る舞わない場合に限られます。
上記以外の場合、見つかったプレフィクスは同じ量のスペースに変換され、それらのスペースは残りの行のフィルプレフィクスとして使用されますが、それは後続の行でそれらがパラグラフの開始として振る舞わない場合に限られます。
Textモード、および空行またはページ区切りだけがパラグラフを分割するモードでは、適応型フィルにより選択されるプレフィクスは、パラグラフの開始として振る舞わないので、常にフィルに使用できます。
変数adaptive-fill-regexp
は、どのような行開始がフィルプレフィクスの役目を果たすかを決定します。行がこの正規表現にマッチする文字で開始されるとき、プレフィクスとして使用されます。変数adaptive-fill-mode
をnil
にセットした場合、フィルプレフィクスは自動的に選択されません。
変数adaptive-fill-function
に関数をセットすることにより、より複雑な方法で自動的にフィルプレフィクスを選択する方法を指定できます。この関数は行の左端の直後のポイントで呼び出され、その行にもとづいた適切なフィルプレフィクスを返すべきです。この関数がnil
を返した場合、adaptive-fill-regexp
がフィルプレフィクスを見つける機会を与えられます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsには、1つの単語または任意の範囲のテキストを、大文字または小文字に変換するコマンドがあります。
後続の単語を小文字に変換します(downcase-word
)。
後続の単語を大文字に変換します(upcase-word
)。
後続の単語の先頭の文字を大文字に変換します(capitalize-word
)。
リージョンを小文字に変換します(downcase-region
)。
リージョンを大文字に変換します(upcase-region
)。
M-l
(downcase-word
)は、ポイントの後ろの単語を小文字に変換して、その先にポイントを移動します。したがって、M-lを繰り返すと、単語を連続して変換します。M-c
(capitalize-word
)は、単語の最初の文字を大文字にして残りを小文字にしますが、M-u
(upcase-word
)はすべての文字を大文字に変換します。これらのコマンドはすべて、引数を与えると複数の単語を変換します。これらのコマンドはすべてが大文字の大きなテキストを、これらが混成されたものに変換するとき、特に有用です、なぜなら適切にM-l、M-u、M-cを使い分けて単語を変換しながら移動できるからです(変換が不要なときはM-fを使ってその単語をスキップします)。
負の引数を与えると。ポイントの前の指定した数の単語にたいして、大文字小文字の変換を適用しますが、ポイントは移動しません。これは大文字小文字を間違えてタイプしたとき有用です。大文字小文字の変換コマンドを実行した後、そのまま編集を続けられるからです。
単語の途中で単語の大文字小文字を変換するコマンドが与えられた場合、ポイントの後ろに続く単語の一部だけに変換が適用されます(これはM-d
(kill-word
)と互換性があります)。負の引数の場合は、ポイントの前にある単語の一部が変換されます。
他の大文字小文字の変換コマンドはC-x C-u (upcase-region
)とC-x C-l
(downcase-region
)で、これらはポイントとマークの間にあるすべてのテキストを大文字または小文字に変換します。ポイントとマークは移動しません。
リージョンにたいする大文字小文字の変換コマンドupcase-region
およびdowncase-region
は、通常では無効になっています。これは、これらを使おうと試みたとき、確認を求められることを意味します。確認にたいして同意するとコマンドが有効になり、それ以降は確認を求められなくなることを意味します。コマンドの無効化を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Textモードは、人間の言語のテキストファイルを編集するためのメジャーモードです。.txtという拡張子で終わる名前のファイルは、通常はTextモードで開かれます。明示的にTextモードに切り替えるには、M-x text-modeとタイプしてください。
Textモードでは、改行とページ区切りだけがパラグラフを分割します。結果として、パラグラフはインデントすることができ、適応型フィルはパラグラフをフィルするときに、どのインデントが使用されているか決定します。適応型フィルを参照してください。
TextモードではTAB
(indent-for-tab-command
)コマンドは通常、カレント行をインデントするかわりに、次のタブストップまで空白文字を挿入します。詳細については、インデントを参照してください。
Textモードは、明示的にそれらを呼び出した場合をのぞき、コメントに間する機能をオフに切り替えます。これは構文テーブル(syntax table)を変更するので、アポストロフィーは単語の一部と判断されます(たとえば‘don't’は1つの単語と判断されます))。しかし単語がアポストロフィーで開始される場合、それは先頭の文字を大文字にするためのプレフィクスとして扱われます(たとえばM-cにより、‘'hello'’は‘'Hello'’に変換されます)。
パラグラフの最初の行をインデントしている場合は、TextモードではなくParagraph-Indent Textモード(M-x paragraph-indent-text-mode)を使用するべきでしょう。このモーででは、パラグラフの間に空行を入れる必要はありません。最初の行のインデントだけでパラグラフの開始を判断するのに充分だからです。しかしパラグラフのすべての行がインデントされている場合は、サポートされません。メジャーモードを変更したくないとき(たとえばメール作成時など)は、M-x paragraph-indent-minor-modeを使って、等価なマイナーモードを有効にしてください。
Textモードでは、M-TABがispell-complete-word
にバインドされます。このコマンドはバッファーのポイントの前にある単語を、スペル辞書を使用して補完します。スペルのチェックと訂正を参照してください。ウィンドウマネージャーがM-TABをウィンドウの切り替えに定義している場合は、かわりにESC
TABまたはC-M-iとタイプすることができます。
Textモードに入ると、モードフックtext-mode-hook
が実行されます(メジャーモードを参照してください)。
以下のセクションでは、Textモードから派生したいくつかのメジャーモードを説明します。派生したモードは、上記で説明したTextモードのほとんどの機能を継承します。とくに、Textモードから派生したモードは、それら自身のモードフックの前に、text-mode-hook
を実行します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
OutlineモードはTextモードから派生したメジャーモードで、アウトライン(outline:
概略、概要、要綱)を編集するために特化したモードです。このモードはアウトライン構造のエントリー間を操作したり、バッファーの一部を一時的に非表示にするコマンドを提供するので、アウトライン構造をより簡単に閲覧することができるでしょう。M-x
outline-modeとタイプすることにより、Outlineモードに切り替わります。Outlineモードに入ることにより、フックtext-mode-hook
、およびそれに続けてフックoutline-mode-hook
が実行されます(フックを参照してください)。
Outlineモードで行を非表示にするコマンド(アウトライン表示コマンドを参照してください)を使用した場合、それらの行は画面に表示されなくなります。非表示行の前にある表示された行の後ろには省略記号(3つのピリオド)が表示され、そこに隠れたテキストがあることを示します。連続する複数の行を非表示にした場合も、省略記号は1つだけです。
C-nやC-pのような、複数の行にたいして操作を行う編集コマンドは、非表示の行のテキストを、その前にある表示された行の一部として扱います。表示された行の最後にある省略記号をkillすると、省略記号に対応する後続のすべての非表示テキストを実際にkillします。
Outline minorモードは、メジャーモードであるOutlineモードと同じコマンドを提供する、バッファーローカルなマイナーモードで、他のメジャーモードと合わせて使うことができます。M-x outline-minor-modeとタイプして、カレントバッファーにたいしてOutline minorモードを切り替えることができます。ファイルローカル変数のセッティングを使用して、特定のファイルにたいして有効にすることもできます(ファイル内のローカル変数を参照してください)。
メジャーモードのOutlineモードは、C-cプレフィクスで特別なキーバインディングを提供します。Outline
minorモードは、C-c
@プレフィクスで同様なバインディングを提供します。これは他のメジャーモードの特別なコマンドとの競合を減らすためです(変数outline-minor-mode-prefix
は、使用するプレフィクスを制御します)。
25.9.1 アウトラインのフォーマット | アウトラインのテキストがどのように見えるか。 | |
25.9.2 アウトライン移動コマンド | アウトラインを移動するための特別なコマンド。 | |
25.9.3 アウトライン表示コマンド | なにを表示するか制御するコマンド。 | |
25.9.4 複数ビューによるアウトラインの閲覧 | アウトラインと複数ビュー。 | |
25.9.5 折り畳み編集 | アウトラインをズームする折り畳み。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Outlineモードは、バッファーの行には2つのタイプがあると仮定します。それはヘッダー行(heading lines)とボディー行(body lines)です。ヘッダー行はアウトラインのトピックを表します。ヘッダー行は1つ以上のアスタリスク文字(‘*’)で開始されます。アスタリスクの数はアウトライン構造でのヘッダーの深さを決定します。したがって1つの‘*’がついたトピックは、メジャーなトピックになります。このヘッダーと、次の‘*’が1つのヘッダーの間にある、‘*’が2つのヘッダー行は、そのヘッダーのサブトピックです。ヘッダー行ではないすべての行はボディー行です。ボディー行は、それの前にあるヘッダー行に属します。以下は例です:
* Food This is the body, which says something about the topic of food. ** Delicious Food This is the body of the second-level header. ** Distasteful Food This could have a body too, with several lines. *** Dormitory Food * Shelter Another first-level topic with its header line.
ヘッダー行とそれに属するすべてのボディー行を合わせて、エントリー(entry)と呼びます。ヘッダー行と、その配下にあるすべてのヘッダー行、それらすべてのボディー行を、サブツリー(subtree)と呼びます。
ヘッダー行と判別する条件は、変数outline-regexp
をセットすることによりカスタマイズできます(これを行う推奨された方法は、メジャーモードの関数を使うか、ファイルローカル変数を使う方法です)。行の開始がこのregexpにマッチする行は、ヘッダー行と判断されます。(行の左端ではなく)行の途中でのマッチは勘定に入りません。
テキストにたいするマッチの長さは、ヘッダーのレベルを決定します。長いマッチは、より深くネストされたレベルとなります。‘@chapter’、‘@section’、‘@subsection’というコマンドが、ドキュメントをチャプター、セクション、サブセクションに分割するようなテキストフォーマッターがある場合(訳注:
texinfo形式のこと)、outline-regexp
に‘"@chap\\|@\\(sub\\)*section"’をセットすることにより、それらの行をヘッダー行と判断させることができます。ここでトリックに注意してください。2つの単語‘chapter’と‘section’は同じ長さです。しかしregexp‘chap’だけにマッチするように定義することによって、チャプターのヘッダーにマッチするテキストの長さを短くすることができるので、Outlineモードはセクションがチャプターの配下であることを知ることができます。これは‘@chap’で始まるコマンドが他にない場合に限り機能します。
変数outline-level
をセットすることにより、ヘッダー行のレベルを計算するためのルールを明示できに指定できます。outline-level
の値には、引数をとらないカレントヘッダーのレベルを返す関数を指定します。この変数をセットする推奨された方法は、メジャーモードのコマンドを使うか、ファイルローカル変数を使用する方法です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Outlineモードはヘッダー行を後方または前方に移動する、特別な移動コマンドを提供します。
ポイントを次の可視なヘッダー行に移動します(outline-next-visible-heading
)。
ポイントを前の可視なヘッダー行に移動します(outline-previous-visible-heading
)。
ポイントを同じレベルの、次の可視なヘッダー行に移動します(outline-forward-same-level
)。
ポイントを同じレベルの、前の可視なヘッダー行に移動します(outline-backward-same-level
)。
ポイントを、より低い(より包括的な)レベルの可視のヘッダー行に移動します(outline-up-heading
)。
上記のコマンドはすべて、繰り返し回数として数引数を受け取ります。たとえば、C-c C-fに引数を与えると、その数だけ前方の可視なヘッダー行と同じレベルに移動し、C-c C-uに引数を与えると、ネストされたレベルをその数のレベル抜け出して移動します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Outlineモードには、アウトライン構造にもとづいてバッファーの一部を一時的に非表示にしたり可視にするコマンドが、いくつかあります。これらのコマンドはアンドゥ可能ではありません。コマンドの効果は単純にアンドゥメカニズムに記録される訳ではありませんが、それらを実行した直後に限りアンドゥできます(Undo(取り消し)を参照してください)。
これらのコマンドは、カレントのヘッダー行に作用します。ポイントがヘッダー行にある場合、それがカレントのヘッダー行です。ポイントがボディー行にある場合、カレントヘッダー行は一番近くの前にあるヘッダー行です。
カレントヘッダー行のボディーを非表示にします(outline-hide-entry
)。
カレントヘッダー行のボディーを可視にします(outline-show-entry
)。
カレントヘッダー行の配下のすべて(ヘッダー行自身は含まれません)を非表示にします(outline-hide-subtree
)。
カレントヘッダー行の配下のすべて(ボディー、サブヘッダーおよびそのボディーを含む)を可視にします(outline-show-subtree
)。
カレントヘッダー行のボディーと、すべてのサブヘッダーを非表示にします(outline-hide-leaves
)。
カレントヘッダー行のサブヘッダーをすべてのレベルで可視にします(outline-show-branches
)。
カレントヘッダー行の一番近いサブヘッダー(1レベル下)を可視にします(outline-show-children
)。
バッファーのすべてのボディー行を非表示にします(outline-hide-body
)。
バッファーのすべての行を可視にします(outline-show-all
)。
上位nレベルのヘッダー行を除き、すべてを非表示にします(outline-hide-sublevels
)。
ポイントのあるヘッダー行またはボディー行と、そこから最上位までのレベルにあるヘッダーを除き、すべてを非表示にします(outline-hide-other
)。
これらのコマンドのうち、カレントヘッダー行に直接続くボディー行を非表示にするC-c C-c
(outline-hide-entry
)と、それらを可視にするC-c C-e
(outline-show-entry
)が一番簡単なコマンドです。サブヘッダーとそれらのボディーは影響を受けません。
コマンドC-c C-d (outline-hide-subtree
)およびC-c C-s
(outline-show-subtree
)は、より強力です。これらはカレントヘッダー行のサブツリー —
つまりカレントヘッダー行のボディーと、すべての直接または間接のサブヘッダーとそのボディー — に適用されます。
コマンドC-c C-l
(outline-hide-leaves
)は、カレントヘッダー行のボディーと、サブツリーのボディーをすべて非表示にします(サブヘッダー自身は表示されます)。コマンドC-c
C-k (outline-show-branches
)は、(たとえばC-c
C-d)などで)前に非表示にされたサブヘッダーを可視にします。コマンドC-c C-i
(outline-show-children
)はこれの穏やかなバージョンで、直接的なサブヘッダー(たとえば1レベル下のサブヘッダー)を可視にします。
コマンドC-c C-o
(outline-hide-other
)は、ポイントのあるエントリーと、その祖先(アウトライン構造上でそこから最上位レベルに至るまでのヘッダー)、およびトップレベルのヘッダーを除き、すべてを非表示にします。このコマンドは、そのバッファーの最初のヘッダーの前のボディー行も表示します。
残りのコマンドは、バッファー全体に作用するコマンドです。C-c C-t
(outline-hide-body
)はすべてのボディー行を非表示にするので、アウトライン構造だけを見ることができます(特別な例外として、ファイルの最初にあるヘッダー行より前の行は、技術的に言うとボディー行ですが、これらは非表示になりません)。C-c
C-a (outline-show-all
)はすべての行を可視にします。C-c C-q
(outline-hide-sublevels
)は、カレントのヘッダー行(ポイントがヘッダー行にないときのデフォルトは1行目)の位置、またはその上にある最上位のヘッダーを除き、すべてを非表示にします。数引数nを指定すると、上位nレベルのヘッダー行を除き、すべてを非表示にします。この場合、上位nレベルと、最初のヘッダーの前のボディー行が表示されることに注意してください。
インクリメンタル検索が、Outlineモードにより非表示にされたテキストを検索したとき、検索された部分のバッファーは可視になります。その位置で検索を抜けると、テキストは可視のまま残ります。アクティブなインクリメンタル検索が、非表示のテキストにマッチするかを切り替えるには、M-s
iとタイプします。将来の検索にたいしてデフォルトを変更するには、オプションsearch-invisible
をカスタマイズします(このオプションはquery-replace
、および関連する機能が非表示のテキストを扱う方法に影響を与えます。問い合わせつき置換を参照してください)。バッファーローカルなマイナーモードRevealモード(M-x
reveal-mode)を使用して、操作にしたがって自動的にテキストを可視にもできます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
1つのアウトラインを同時に2つのビューで、別のウィンドウで表示することができます。これを行うには、M-x make-indirect-bufferを使ってインダイレクトバッファーを作らなければなりません。このコマンドの最初の引数は既存のアウトラインバッファーの名前で、2番目の引数は新しくインダイレクトバッファーとして使用する名前です。インダイレクトバッファーを参照してください。
1度インダイレクトバッファーが作成されると、C-x 4 bや他のEmacsコマンドで、通常のやり方でウィンドウにそれを表示できます。テキストの一部を可視にしたり非表示にするOutlineモードのコマンドは、それぞれのバッファーで独立したエントリーを操作し、それぞれのバッファーは独自のビューをもつことができます。同じアウトラインにたいして2つ以上のビューが欲しいときは、追加でインダイレクトバッファーを作成します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Foldoutパッケージは、OutlineモードおよびOutline minorモードを、フォールディング(folding: 折り畳み)コマンドで拡張します。フォールディングのアイデアは、アウトラインのネストされた部分にたいして、それに関連する部分と、より高いレベルが非表示のときに、それにズームインするというものです。
すべてのテキストと、レベル1より下のレベルが非表示になっているOutlineモードのバッファーを考えてください。それらのヘッダーの下に何が隠れているか見るには、C-c C-e (M-x outline-show-entry)でボディーを可視にするか、C-c C-iでその子ヘッダー(レベル2)を可視にすることができます。
Foldoutでは、C-c C-z (M-x foldout-zoom-subtree)を使います。これはそのヘッダーのボディーと、その子サブヘッダーを可視にして、バッファーをナローイングするので、レベル1にヘッダーとボディー、それにレベル2のヘッダーだけが可視になります。そのうちの1つのレベル2ヘッダーの下を見るには、カーソル位置をそのヘッダーに移動して、もう一度C-c C-zを使用します。これにより、そのレベル2ヘッダーのボディーと、レベル3の子サブヘッダーが可視になり、バッファーが再びナローイングされます。連続して好きなだけサブヘッダーをズームインすることができます。モードラインの文字列には、今どの深さにいるのかが表示されます。
ヘッダーにズームインしているときに、それらの子サブヘッダーを見るにはC-u C-c C-zのように数引数を指定します。何レベル下の子かを指定することもできます(M-x outline-show-childrenに相当します)。たとえばM-2 C-c C-zは2レベルの子サブヘッダーを可視にします。ボディーを指定するにはM-- C-c C-zのように負の引数を指定します。C-c C-s (M-x outline-show-subtree)のようにサブツリー全体を展開するには、M-0 C-c C-zのように引数に0を指定します。
ズームインしている時でも、Outlineモードの表示および非表示の関数は、Foldoutに干渉せずに使用できます。バッファーがナローイングされているので、グローバルな編集操作は、ズームインされたヘッダーのテキストだけに影響します、これは特定のチャプターやセクションに変更を限定するのに便利です。
フォールドのズームを取り消す(抜ける)には、C-c C-x (M-x foldout-exit-fold)を使用します。これは最上位レベルのヘッダーの配下のすべてのテキストと、サブヘッダーを非表示にして、バッファーの以前のビューに戻ります。数引数はフォールドを何レベル抜けるかを指定します。0を指定するとすべてのフォールドを抜けます。
テキストとサブヘッダーを非表示にせずに、フォールドのナローイングを取り消すには、負の引数を指定します。たとえば、M--2 C-c C-xは2つのフォールドを抜け出し、テキストとサブヘッダーは表示されたままにします。
Foldoutモードはフォールドへの出入りと、非表示のテキストを表示するためのマウスコマンドも提供します:
foldout-mouse-modifiers
をセットすることにより、(Ctrl-Meta-のかわりに)他の修飾キーを指定できます。すでにfoldout.elライブラリーがロードされている場合、これが効果をもつために再ロードしなければなりません。
Foldoutパッケージを使用するには、M-x load-library RET foldout RETとタイプするか、initファイルに以下の行を記述して自動的にこれを行うことができます。
(with-eval-after-load "outline" (require 'foldout))
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Orgモードは、Emacsをオーガナイザーおよび/またはオーサリングツールとして使用するための、Outlineモードの変種です。名前が拡張子.orgで終わるファイルは、Orgモードで開かれます(ファイルのモードを選択するを参照してください)。明示的にOrgモードに切り替えるには、M-x org-modeとタイプしてください。
Orgモードでは、Outlineモードのように、各エントリーは1つ以上の‘*’文字で始まるヘッダー行をもちます。アウトラインのフォーマットを参照してください。それに加えて、‘#’文字で始まる行は、コメントとして扱われます。
Orgモードは、簡単にアウトライン構造を眺めたり操作するためのコマンドを提供します。それらのコマンドのうち、一番簡単なのはTAB
(org-cycle
)です。ヘッダー行でこのコマンドを呼び出すと、サブツリーを — (i)ヘッダー行だけを表示
(ii)ヘッダー行と、(あれば)直接の子ヘッダー行だけを表示 (iii)サブツリー全体を表示 —
の3つの異なる視点で巡回します。ボディー行にたいして呼び出された場合、TABにグローバルにバインドされたコマンドが実行されます。
Orgモードのバッファーの任意の場所で、S-TAB
(org-shifttab
)とタイプすることにより、アウトライン構造全体を — (i) 最上位ㇾベルのヘッダー行だけを表示
(ii)ボディー行を除いたすべてのヘッダー行を表示 (iii) すべてを表示 — の3つの異なる視点で巡回します。
ヘッダー行でM-<UP> (org-metaup
)またはM-<DOWN>
(org-metadown
)とタイプすることにより、ボディー行と(あれば)サブツリーを含むバッファー内のエントリー全体を、上または下に移動できます。同様にM-<LEFT>
(org-metaleft
)およびM-<RIGHT>
(org-metaright
)で、ヘッダー行を昇格または降格できます。ボディー行で呼び出された場合は、それらのキーにグローバルにバインドされたコマンドが実行されます。
以下のサブセクションでは、オーガナイザーやオーサリングシステムとしてOrgモードを使用するための基本的な操作方法を解説します。詳細については、Introduction in The Org Manualを参照してください。
25.10.1 オーガナイザーとしてのOrg | TODOリストとアジェンダの管理。 | |
25.10.2 オーサリングシステムとしてのOrg | Orgバッファーをさまざまなフォーマットでエクスポートする。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
エントリー内のどこかでC-c C-t
(org-todo
)とタイプすることにより、そのOrgエントリーをTODOアイテムとして、タグ付けすることができます。これはヘッダー行にキーワード‘TODO’を追加します。もう一度C-c
C-tをタイプするとキーワードは‘DONE’に切り替わり、さらにC-c
C-tとタイプするとキーワード全体を除去します。C-c
C-tで使用されるキーワードは、変数org-todo-keywords
を通じてカスタマイズすることができます。
エントリーをTODOとして作成する他に、エントリー内でC-c C-s
(org-schedule
)とタイプすることにより、日付を割り当てることができます。これはEmacs
Calender(カレンダーとダイアリーを参照してください)をポップアップして日付の入力を求め、選択された日付と一緒に、ヘッダー行の下にタグ‘SCHEDULED’を追加します。コマンドC-c
C-d (org-deadline
)も、タグDEADLINE
を使う以外は同じ効果をもちます。
1度Orgファイルに計画されたTODOアイテムをもつと、C-c [
(org-agenda-file-to-front
)とタイプすることにより、アジェンダファイル(agenda
files)のリストにそのファイルを追加できます。Orgモードは、たとえばあなたの生活のさまざまな側面をオーガナイズするために、複数のアジェンダファイルを簡単に保守できるようにデザインされています。アジェンダファイルのリストは、変数org-agenda-files
に格納されています。
アジェンダファイルのアイテムを閲覧するには、M-x org-agendaとタイプします。このコマンドは何を見たいのか、入力を求めます(今週に行なうすべての事項のリストか、特定のキーワードにマッチするTODOアイテムのリストか、など)。 詳細は、Agenda Views in The Org Manualを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Orgノートを見映えよくフォーマットしたり、エクスポートして公表したいと思うかもしれません。カレントバッファーをエクスポートするには、OrgバッファーのどこかでC-c
C-e
(org-export
)とタイプします。このコマンドはエクスポートするフォーマットの入力を求めます。現在サポートされているフォーマットは、HTML、LaTeX、Texinfo、OpenDocument(.odt)、iCalendar、Markdown、man-page、PDFです。PDFのようないくつかのフォーマットは、システムに特定のツールがインストールされている必要があります。
1度に複数のファイルを特定のディレクトリー(ローカルまたはネットワーク越し)にエクスポートするには、変数org-publish-project-alist
にプロジェクトのリストを定義しなければなりません。詳細はOrgのドキュメントを参照してください。
Orgはエクスポートされたドキュメントのテキストのフォーマットに適用する、シンプルなマークアップの仕組みをサポートします:
- This text is /emphasized/ - This text is *in bold* - This text is _underlined_ - This text uses =a teletype font= #+begin_quote ``This is a quote.'' #+end_quote #+begin_example This is an example. #+end_example
詳細は、Exporting in The Org Manual、およびPublishing in The Org Manualを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
TeXはDonald Knuthにより記述された強力なテキストフォーマッターで、GNU Emacsと同様、フリーなソフトウェアーです。TeXフォーマットにはいくつかの変種があります。LaTeXはTeXのための簡略化された入力フォーマットです。DocTeXはLaTeXソースが記述された特別なファイルフォーマットであり、ソースとドキュメントが合成されています。SliTeXは、時代遅れの特別なLaTeX形式です。12
Emacsは、それらの変種用にTeXのメジャーモードを提供します。それはPlain
TeXモード、LaTeXモード、DocTeXモード、SliTeXモードです。Emacsはバッファーの内容を調べて、適切なモードを選択します(通常これはTeX様式のファイルをvisitしたときに自動的に呼び出されるtex-mode
コマンドにより行われる。ファイルのモードを選択するを参照されたい)。ファイル内容がこれを決定するのに不十分な場合、Emacsはtex-default-mode
に指定されたモードを選択します。デフォルト値はlatex-mode
です。Emacsが間違った選択をしたときは、コマンドM-x
plain-tex-mode、M-x latex-mode、M-x
slitex-mode、doctex-modeを使用して、正しいTeXモードの変種を選択できます。
以下のセクションでは、TeXモードとその変種の機能について記述しています。TeXに関連したモードは他にもいくつかありますが、このマニュアルには記述されていません。
bibtex-mode
のドキュメント文字列を参照してください。
25.11.1 TeX編集コマンド | TeXモードで編集するための特別なコマンド。 | |
25.11.2 LaTeX編集コマンド | LaTeX入力ファイルのための追加のコマンド。 | |
25.11.3 TeX印刷コマンド | ファイルの一部をTeXで印刷するコマンド。 | |
25.11.4 TeXモード、その | TeXモードのカスタマイズと関連する機能。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
コンテキストに応じて‘``’、‘"’、‘''’のどれかを挿入します(tex-insert-quote
)。
パラグラフの区切り(2つの改行)を挿入して、前のパラグラフのバランスの取れていない大カッコ(braces)やドル記号をチェックします(tex-terminate-paragraph
)。
リージョン内のパラグラフの、バランスのとれていない大カッコやドル記号をチェックします。
‘{}’を挿入して、ポイントをその間に配します(tex-insert-braces
)。
対応が取れていない、次の閉じ大カッコの後ろに、前方に移動します(up-list
)。
TeXでは文字‘"’は通常使用されません。かわりに‘``’で始まり‘''’で終わる引用が使用されます。したがってTeXモードは"キーをtex-insert-quote
コマンドにバインドしています。これは空白文字または開き大カッコの後ろに‘``’、バックスラッシュの後に‘"’、それ以外の文字の場合は‘''’を挿入します。
特別な例外として、ポイントの前のテキストが‘``’か‘''’のときに"をタイプすると、Emacsは前のテキストを1つの"で置き換えます。したがって、必要がある時は""とタイプして‘"’を挿入できます(C-q "を使用してこの文字を挿入することもできます)。
TeXモードでは、‘$’は特別な構文コードを持っていて、それはTeXの数式モードの区切りを理解しようと試みます。数式モードを抜けるために‘$’を入力した場合、数式モードに入るための対応する‘$’の位置が1秒間表示されます。これは閉じ大カッコが挿入されたとき、それに対応する開き大カッコが表示されるのと同じき機能です。しかし‘$’が数式モードに入るためなのか、それとも抜けるためなのかを指示する方法はありません。したがって、もし対応するものがある場合、実際にはそれが関係なくても、前の‘$’の位置が表示されます。
TeXは大カッコを、対応が取れていなければならない区切りとして使用します。これを1つずつ挿入するより、つねに大カッコの対応が取られている方を好むユーザーもいます。C-c
{
(tex-insert-braces
)を使うと、対になった大カッコを挿入します。これはポイントを2つの大カッコの間に配すので、中のテキストを挿入することができます。その後でコマンドC-c
} (up-list
)を使用すると、前方の閉じ大カッコの先に移動します。あるテキストをマークした後にC-c
{を呼び出すこともでき、その場合このコマンドはマークされたテキストを大カッコで括ります。
対応の取れていない大カッコをチェックするコマンドが2つあります。C-j
(tex-terminate-paragraph
)は、ポイントの前のパラグラフをチェックして、新しいパラグラフを開始するための2つの改行を挿入します。対応が取れていないものが見つかった場合、エコーエリアにメッセージを出力します。M-x
tex-validate-regionはリージョンを、パラグラフごとにチェックします。エラーは*Occur*バッファーにリストされます。そのバッファーでは、特定のミスマッチをvisitするC-c
C-cなどの、通常のOccurモードのコマンドを使用できます(その他の検索およびループコマンドを参照してください)。
TeXのEmacsコマンドは大カッコだけではなく、角カッコ(square brackets)やカッコ(parentheses)などもカウントすることに注意してください。これはTeX構文をチェックする目的としては、厳密に正しいとは言えません。しかしカッコと角カッコはテキストの中で、同じような対応の取れた区切りとして使用され、さまざまな移動コマンドや、対応する区切りの表示が、それらにたいして機能するのは便利なのです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
LaTeXモードは、plain TeXには適用できない特別な機能をいくつか提供します:
LaTeXブロックのための‘\begin’と‘\end’を挿入して、ポイントをそれらの間の行に配します(tex-latex-block
)。
まだ閉じていない一番内側のLaTeXブロックを閉じます(tex-close-latex-block
)。
LaTeX入力では、テキストをブロック化するのに‘\begin’と‘\end’のタグが使用されます。ブロックを挿入するにはC-c
C-o
(tex-latex-block
)とタイプします。これはブロックタイプの入力を求め、適切な対応する‘\begin’と‘\end’を挿入し、その2行の間に空行を残してポイントをそこに移動します。
C-c
C-oにたいしてブロックタイプを入力するとき、通常の補完コマンドを使用できます(補完を参照してください)。デフォルトの補完リストには、標準的なLaTeXのブロックタイプが含まれています。補完にブロックタイプを追加したい場合は、リスト変数latex-block-names
をカスタマイズしてください。
LaTeX入力では、‘\begin’と‘\end’のタグは対応が取れていなければなりません。C-c C-e
(tex-close-latex-block
)により、対応が取れていない最後の‘\begin’に対応する‘\end’を挿入することができます。これは対応する‘\begin’に調和するように‘\end’をインデントし、ポイントが行の先頭にあるときは‘\end’タグの後ろに改行を挿入します。マイナーモードlatex-electric-env-pair-mode
は、‘\end’か‘\begin’の一方をタイプしたとき、自動的に対応する‘\end’または‘\begin’を挿入します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
バッファーの全内容、または一部(たとえば大きなドキュメントの1つのチャプター)にたいして、TeXをEmacsのサブプロセスとして呼び出すことができます。
カレントバッファー全体にたいしてTeXを呼び出します(tex-buffer
)。
バッファーのヘッダーとともに、カレントリージョンにたいしてTeXを呼び出します(tex-region
)。
カレントファイルにたいしてTeXを呼び出します(tex-file
)。
最後のC-c C-b、C-c C-r、C-c
C-fコマンドの出力をプレビューします(tex-view
)。
最後のC-c C-b、C-c C-r、C-c C-fコマンドの出力を印刷します(tex-print
)。
カレントファイルにたいしてBibTeXを呼び出します(tex-bibtex-file
)。
TeX出力を表示するウィンドウを再センタリングして、最後の行が見えるようにします(tex-recenter-output-buffer
)。
TeXサブプロセスをkillします(tex-kill-job
)。
カレントバッファー全体にたいして、他のコンパイルコマンドを呼び出します(tex-compile
)。
カレントバッファーをTeXに渡すには、C-c C-b
(tex-buffer
)とタイプします。フォーマットされた出力は、通常.dviという一時ファイルに出力されます。その後でC-c
C-v
(tex-view
)とタイプして、xdvi
のような外部プログラムを起動して、出力ファイルを閲覧することができます。C-c
C-p (tex-print
)とタイプして出力ファイルのハードコピーを印刷することもできます。
デフォルトではC-c
C-bは、カレントディレクトリーでTeXを実行します。TeXの出力もこのディレクトリーに作成されます。TeXを違うディレクトリーで実行するには、変数tex-directory
を望むディレクトリー名に変更します。環境変数TEXINPUTS
に相対名が含まれていたり、ファイルに含まれる‘\input’コマンドが相対ファイル名の場合、tex-directory
を"."
にしないと、望ましくない結果となるでしょう。そうでない場合は、"/tmp"
などの他のディレクトリーを指定しても安全です。
そのバッファーにたいするTeXの変種は、C-c C-bで実際に実行されるシェルコマンドを決定します。Plain
TeXモードでは、これは変数tex-run-command
で指定され、デフォルトは"tex"
です。LaTeXモードでは、これはlatex-run-command
で指定され、デフォルトは"latex"
です。.dviを閲覧するためにC-c
C-vで実行されるシェルコマンドは、TeXの種類に関係なく、変数tex-dvi-view-command
で決定されます。出力を印刷するためにC-c
C-pで実行されるシェルコマンドは、変数tex-dvi-print-command
で決定されます。TeXでコンパイルされたファイルを閲覧および印刷するために要求されるファイル拡張子は、変数tex-print-file-extension
でセットできます。たとえば、この変数に.pdfをセットして、それに合わせてtex-dvi-view-command
とtex-dvi-print-command
、同様にlatex-run-command
やtex-run-command
を更新できます。
Emacsは出力ファイル名に通常、前のパラグラフで説明したシェルコマンド文字列を自動的に追加します。たとえばtex-dvi-view-command
が"xdvi"
のとき、C-c
C-vはxdvi
output-file-name
を実行します。しかし、ファイル名がコマンドに埋め込まれている必要があるケース、たとえばあるコマンドの引数にファイル名を与えて、そのコマンドの出力をパイプで他のコマンドに渡さなければいけない場合があります。コマンド文字列の‘*’で、ファイル名をどこに置くか指定することができます。以下は例です
(setq tex-dvi-print-command "dvips -f * | lpr")
エラーメッセージを含むTeXからの端末出力は、*tex-shell*という名前のバッファーに表示されます。TeXでエラーが発生した場合、このバッファーに切り替えて、適切な入力を与えることができます(これはShellモードで機能します。対話的なサブシェルを参照してください)。このバッファーに切り替えなくても、これをスクロールできるので、C-c C-lとタイプして最後の行を表示することができます。
これ以上の出力が有用でないと判断した時は、C-c C-k
(tex-kill-job
)とタイプしてTeXプロセスをkillします。C-c C-bおよびC-c
C-rの使用するときも、TeXがまだ実行中の時はkillします。
C-c C-r
(tex-region
)とタイプして、任意のリージョンをTeXに渡すことができます。しかし、これはトリッキーです。なぜならほとんどのTeX入力ファイルは、先頭にパラメーターをセットしたりマクロを定義するコマンドを含んでいるからです。この問題を解決するために、C-c
C-rでは、必須のマクロを含むファイル部分を指定することができます。指定したリージョンの前にそれを含めて、TeXの入力の一部とします。ファイルの必須と指定された部分をヘッダーと呼びます。
Plain TeXモードでヘッダーの境界を示すには、ファイルに2つの特別な文字列を挿入します。これはヘッダーの前に‘%**start of header’、ヘッダーの後ろに‘%**end of header’を記述します。これらの文字列は1行に全体を記述しなければなりませんが、文字列の前または後ろに他のテキストがあっても構いません。この2つの文字列を含む行はヘッダーの中に含まれます。‘%**start of header’がバッファーの先頭100行にない場合、C-c C-rはヘッダーがないとみなします。
LaTeXモードでは、ヘッダーは‘\documentclass’または‘\documentstyle’で始まり、‘\begin{document}’で終わります。いかなる場合でもLaTeXがこれらを要求するので、ヘッダーを識別するのに特別なことをする必要はありません。
コマンド(tex-buffer
)および(tex-region
)は、すべてを一時ディレクトリーで処理します。そしてTeXでクロスリファレンスのために必要となる補助的なファイルは利用不可です。一般的にこれらのコマンドは、すべてのクロスリファレンスが正しい必要がある最終コピーのために実行するのには適していません。
クロスリファレンスのための補助的なファイルを使いたいときは、C-c C-f
(tex-file
)を使用します。これはカレントバッファーのファイルにたいして、そのファイルのディレクトリーでTeXを実行します。TeXを実行する前に、変更されたバッファーを保存するか確認が求められます。一般的には、クロスリファレンスを正しく取得するために、2回(tex-file
)を使用する必要があります。
変数tex-start-options
の値は、TeXを実行するためのオプションを指定します。
変数tex-start-commands
の値は、TeXを開始するTeXコマンドを指定します。デフォルト値はTeXをノンストップモードで実行します。対話的にTeXを実行するときは、変数に""
をセットします。
大きなサイズのTeXドキュメントは複数のファイル — 1つはメインファイルで、他はサブファイル —
に分割されているときがあります。サブファイルにたいしてTeXを実行しても通常は動作しません。メインファイルにたいして実行する必要があるのです。サブファイルを編集するのにtex-file
を使えるようにするには、変数tex-main-file
にメインファイルの名前をセットします。その後はtex-file
はそのファイルにたいしてTeXを実行します。
tex-main-file
を使用する一番簡単な方法は、各サブファイルのローカル変数リストにそれを指定する方法です。ファイル内のローカル変数を参照してください。
LaTeXファイルにたいしては、BibTeXを使用してカレントバッファーのファイルのための補助的なファイルを処理できます。BibTeXはデータベースの図書目録の引用(bibliographic
citations)を探して、図書目録のセクション(bibliography section)のための引用文献(cited
references)を準備します。コマンドC-c TAB
(tex-bibtex-file
)は、カレントバッファーのファイルにたいする‘.bbl’ファイルを生成するためにシェルコマンド(tex-bibtex-command
)を実行します。一般的に、‘.aux’ファイルを生成するために一度C-c
C-f (tex-file
)を行う必要があります。その後C-c TAB
(tex-bibtex-file
)を行ってから、さらなるクロスリファレンスを正しく取得するためにC-c C-f
(tex-file
)を2回行います。
カレントのTeXバッファーで、他のコンパイルプログラムを呼び出すには、C-c C-c
(tex-compile
)をタイプします。このコマンドはpdflatex、yap、xdvi、dvipsを含む、多くの一般的なプログラムに渡す引数を知っています。標準の補完キーを使用して望ましいコンパイルプログラムを選択できます(補完を参照してください)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
TeXモードの変種に入ると、フックtext-mode-hook
およびtex-mode-hook
を実行します。その後、plain-tex-mode-hook
、doctex-mode-hook
、latex-mode-hook
、slitex-mode-hook
のうち、適切なものを実行します。TeXシェルを開始すると、フックtex-shell-hook
を実行します。フックを参照してください。
コマンドM-x iso-iso2tex、M-x iso-tex2iso、M-x iso-iso2gtex、M-x iso-gtex2isoはLatin-1でエンコードされたファイルと、TeXでエンコードされた等価なファイルの変換に使用できます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
SGMLおよびHTMLのためのメジャーモードは、インデントのサポートとタグを操作するコマンドを提供します。
HTMLは2つのモードから構成されます —
1つ目はhtml-mode
と呼ばれる基本的なモードで、これは若干カスタマイズされたSGMLモードの変種です。もう1つはデフォルトでHTMLファイルに使用されるものでmhtml-mode
モードと呼ばれ、<script>
要素で囲まれたJavascript、および<style>
要素内に埋め込まれたCSSを正しく処理することを意図しています。
対話的に特殊文字を指定して、その文字に対応するSGMLの‘&’コマンドを挿入します(sgml-name-char
)。
対話的にタグとタグの属性を指定します(sgml-tag
)。このコマンドはタグ名と属性値を尋ね、開始タグと終了タグの両方を挿入し、ポイントをその間に置きます。
プレフィクス引数nを指定すると、このコマンドはバッファーのポイントの後ろにあるn個の単語の周囲にタグを配します。リージョンがアクティブなときは、タグをリージョンの周辺に配します(Transient Markモードがオフのときは、引数に-1を与えることにより、これを行います)。
対話的にカレントタグの属性値を挿入します(sgml-attributes
)。
対応の取れたタグのグループ(開始タグと対応する終了タグまでの範囲)をスキップします(sgml-skip-tag-forward
)。数引数は繰り返し回数として振る舞います。
対応の取れたタグのグループ(開始タグと対応する終了タグまでの範囲)を後方にスキップします(sgml-skip-tag-backward
)。数引数は繰り返し回数として振る舞います。
ポイント位置またはポイントの後ろのタグを削除し、それに対応するタグも削除します(sgml-delete-tag
)。ポイントの後のタグが開始タグの場合は、終了タグも削除します。終了タグの場合は、開始タグも削除します。
タグtagの意味の説明を表示します(sgml-tag-help
)。引数tagが空のときは、ポイント位置のタグを説明します。
一番内側の終了されていないタグの終了タグを挿入します(sgml-close-tag
)。タグまたはコメントの中で呼び出されたときは、終了タグを挿入するかわりにそれを終了させます。
挿入したLatin-1文字を、その文字自身ではなく、その文字を表すSGMLコマンドを挿入するマイナーモードを切り替えます(sgml-name-8bit-mode
)。
カレントバッファーをSGMLとして評価するシェルコマンド(要指定)を実行します(sgml-validate
)。(HTMLモードでは、このキーシーケンスは違うコマンドを実行する。)
バッファーの既存のタグの可視・不可視を切り替えます。これは簡単なプレビューとして使用できます(sgml-tags-invisible
)。
XMLドキュメントを編集するためのメジャーモードはnXMLモードと呼ばれます。このモードは多くの既存のXMLスキーマを認識することができ、M-TABを通じてXMLエレメントの補完、同様にエラーをハイライトするオンザフライ(on-the-fly)なXMLの妥当性検証を提供します。既存のバッファーでnXMLモードを有効にするには、M-x
nxml-modeとタイプするか、M-x
xml-modeとタイプしても同じです。Emacsは.xmlという拡張子をもつファイルにたいしてnXMLモードを使用します。.xhtmlという拡張子をもつXHTMLファイルにたいしては、デフォルトでEmacsはHTMLモードを使用します。変数auto-mode-alist
をカスタマイズすることによりnXMLモードを使用させることができます(ファイルのモードを選択するを参照してください)。
nXMLモードについては、Emacsとともに配布されているInfoマニュアルで説明されています。
XMLはSGMLの厳格なサブセットなので、XMLを編集するのに、それほど強力ではないSGMLモードの使用を選択することもできます。既存のバッファーでSGMLモードを有効にするには、M-x
sgml-modeとタイプします。SGMLを有効にするとき、EmacsはバッファーがXMLかどうかを検証します。もしXMLの場合、変数sgml-xml-mode
に非nil
値をセットします。これにより上述したSGMLモードのタグ挿入コマンドは、常に明示的に終了タグを挿入するようになります。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
NroffモードはTextモードから派生した、nroffファイル(たとえばUnixのman)の編集に特化したメジャーモードです。M-x
nroff-modeとタイプすることによりこのモードにはいります。Nroffモードに入ることにより、フックtext-mode-hook
、その後でnroff-mode-hook
が実行されます(フックを参照してください)。
Nroffモードでは、nroffコマンド行はパラグラフの区切りとして扱われ、ページは‘.bp’で区切られ、コメントはバックスラッシュとダブルクォートで始まります。これは以下のコマンドも定義します:
nroffコマンドではない次の行の先頭に移動します(nroff-forward-text-line
)。引数は繰り返し回数です。
M-nと同様ですが上に移動します(nroff-backward-text-line
)。
エコーエリアにリージョンの、(nroffコマンドではない)テキストの行数を表示します(nroff-count-text-lines
)。
Electric Nroffモードはバッファーローカルなマイナーモードで、Nroffモードとともに使うことができます。このマイナーモードを切り替えるには、M-x nroff-electric-modeとタイプします(マイナーモードを参照してください)。このモードがオンのとき、グループ化を行う種類のnroffコマンドを含む行をRETをタイプして終端すると、グループ化を閉じるnroffコマンドが自動的に後続の行に挿入されます。
NroffモードとともにOutline minorモード(Outlineモードを参照してください)を使用する場合、ヘッダー行は‘.H’の後に数字(ヘッダーレベル)が続く形式の行です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Enriched(多くの刺激を含む、豊かにした)は、フォーマットされたテキストファイルをWYSIWYG(What You See Is What You Get)な方法で編集するためのマイナーモードです。Enrichedモードが有効な場合、フォントやカラーなどのさまざまなフォーマットプロパティーを、バッファーのテキストに適用できます。バッファーを保存するときは、それらのプロパティーはテキストとともに、MIME形式‘text/enriched’のファイルフォーマットを使用して保存されます。
Enrichedモードは通常、Textモードとともに使用されます(Textモードを参照してください)。これは多くのメジャーモード(構文のハイライトのためにFont Lockモードを使用するほとんどのプログラミング言語関連のモードを含む)で使用される、Font Lockモードとの互換性はありません。Enrichedモードとは異なり、Font Lockモードはカレントバッファーの内容にもとづいて、テキストのプロパティーを自動的に割り当てます。これらのプロパティーはディスクには保存されません。
Emacsのdata-directory
のファイルenriched.txtは、Enrichedモードの機能例として役に立ちます。
25.14.1 Enrichedモード | Enrichedモードの開始と終了。 | |
25.14.2 ハード改行とソフト改行 | 改行には2つの種類があります。 | |
25.14.3 フォーマット情報の編集 | テキストプロパティーの編集方法。 | |
25.14.4 Enrichedテキストのフェイス | 太字、斜体、下線、など。 | |
25.14.5 Enrichedテキストのインデント | 左余白と右余白の変更。 | |
25.14.6 Enrichedテキストの位置調整 | テキストの中央揃え、左揃え、右揃え、など。 | |
25.14.7 その他のテキストプロパティーのセッティング | 特別な“テキストプロパティー”のサブメニュー。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Enrichedモードは、バッファーローカルなマイナーモードです(マイナーモードを参照してください)。‘text/enriched’フォーマットで保存されたファイルをvisitすると、Emacsは自動的にEnrichedモードを有効にし、ファイル内のフォーマット情報をバッファーのテキストに適用します。Enrichedモードが有効なときにバッファーを保存すると、ファイルはフォーマット情報を含む‘text/enriched’フォーマットで保存されます。
フォーマットされたテキストで新しいファイルを作成するには、存在しないファイルをvisitしてM-x enriched-modeとタイプします。このコマンドは実際にEnrichedモードを切り替えます。プレフィクス引数を指定した場合、引数が正のときはEnrichedモードを有効にし、それ以外はEnrichedモードを無効にします。Enrichedモードを無効にすると、Emacsは‘text/enriched’フォーマットでバッファーを保存しなくなります。バッファーに追加されたフォーマットプロパティーはバッファーに残りますが、ディスクには保存されません。
Enrichedモードは、すべてのEmacsのテキストプロパティーを保存しません。変数enriched-translations
に指定されたものだけを保存します。これにはフォント、カラー、インデント、行端揃えのプロパティーが含まれます。
ファイルをvisitしたとき、ファイルが‘text/enriched’フォーマットだとEmacsが認識できなかった場合は、M-x format-decode-bufferとタイプします。このコマンドはファイルフォーマットの入力を求め、そのフォーマットでファイルを再読み込みします。‘text/enriched’フォーマットを指定することにより、自動的にEnrichedモードが有効になります。
‘text/enriched’ファイルをraw形式(フォーマットされたテキストではなく、マークアップタグを伴う通常テキスト)として閲覧するには、M-x find-file-literallyを使用します(ファイルのvisit(訪問)を参照してください)。
Emacsが‘text/enriched’のようなファイルフォーマットを認識・変換する方法については、Format Conversion in the Emacs Lisp Reference Manualを参照してください。テキストプロパティーについての詳細は、Text Properties in the Emacs Lisp Reference Manualを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Enrichedモードでは、Emacsは2つの異なる改行、ハード改行とソフト改行を区別します。M-x use-hard-newlinesとタイプすることにより、他のバッファーにたいしてこの機能を有効または無効にできます。
ハード改行は、パラグラフを分割したりテキストがフィルされる方法に関らず行区切りが必要な場所で使用され、ソフト改行はフィルで使用されます。RET
(newline
)およびC-o (open-line
)コマンドはハード改行を挿入します。Auto
Fill(Auto Fillモードを参照してください)を含むフィルコマンドは、ソフト改行だけを挿入し、削除もソフト改行だけでハード改行は削除せずに残します。
したがってEnrichedモードで編集するときは、フィルされたパラグラフの途中で行を分けるのにRETやC-oを使うべきではありません。かわりにAuto
Fillモード、または明示的なフィルコマンド(明示的なフィルコマンドを参照してください)を使用します。テーブルやリストのように、行区切りを常に残したい場所でRETやC-oを使用します。そのような行では、行端揃えスタイル(justification
style)もunfilled
にしたいと思うかもしれません(Enrichedテキストの位置調整を参照してください)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
プロパティーを変更する一番簡単な方法は、‘Text Properties’メニューです。このメニューは、メニューバー(メニューバーを参照してください)の‘Edit’メニュー、またはC-mouse-2(メニューにたいするマウスクリックを参照してください)で取得することができます。‘Text Properties’メニューのコマンドのいくつかを、以下にリストします(M-x)で呼び出すこともできます):
Remove Face Properties
リージョンからフェイスプロパティーを削除します(facemenu-remove-face-props
)。
Remove Text Properties
リージョンからフェイスプロパティーを含む、すべてのテキストプロパティーを削除します(facemenu-remove-all
)。
Describe Properties
ポイントの後ろにある文字の、すべてのテキストプロパティーと他の情報をリストします(describe-text-properties
)。
Display Faces
定義されたフェイスのリストを表示します(list-faces-display
)。テキストのフェイスを参照してください。
Display Colors
定義されたカラーのリストを表示します(list-colors-display
)。フェイスのカラーを参照してください。
他のメニューエントリーについては、以下のセクションで説明します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下のコマンドは、フェイスを追加または削除するのに使用することができます(テキストのフェイスを参照してください)。マークがアクティブのときは、リージョンのテキストに適用され、マークが非アクティブのときは、次の自己挿入文字に適用されます。プレフィクス引数を指定すると、これらのコマンドはリージョンがアクティブな場合でも、次の自己挿入文字に適用されます。
すべてのface
プロパティーを削除します(facemenu-set-default
)。
bold
(太字)フェイスを適用します(facemenu-set-bold
)。
italic
(斜体)フェイスを適用します(facemenu-set-italic
)。
bold-italic
(太字斜体)フェイスを適用します(facemenu-set-bold-italic
)。
underline
(下線)フェイスを適用します(facemenu-set-underline
)。
フェイスfaceを適用します(facemenu-set-face
)。
カラーの入力を求め(フェイスのカラーを参照)、それをフォアグラウドカラーに適用します。
カラーの入力を求め、それをバックグラウンドカラーに適用します。
これらのコマンドは、Text Propertiesメニューからも利用可能です。
自己挿入文字は通常、フェイスプロパティー(および他のほとんどのテキストプロパティー)を、そのバッファーの前の文字から継承します。次の自己挿入文字にたいして上記のコマンドを指定した場合、その文字は前の文字からフェイスプロパティーは継承しませんが、他のテキストプロパティーは継承します。
Enrichedモードは、他の追加のフェイスexcerpt
およびfixed
を定義します。これらはtext/enrichedファイルフォーマットで使われるコードに対応します。excerpt
フェイスは引用のために使用されることを意図されており、デフォルトではitalic
と同じように表示されます。fixed
フェイスは固定幅テキストを指定し、デフォルトではbold
と同じように表示されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Enrichedモードでは、パラグラフまたはパラグラフの一部の、右余白または左余白に異なる量のインデントを指定できます。これらの余白はM-q (テキストのフィルを参照してください)のようなフィルコマンドにも影響します。
IndentationサブメニューのTextプロパティーは、インデントを指定するコマンドを提供します:
Indent More
リージョンを4列ずつインデントします(increase-left-margin
)。Enrichedモードでは、このコマンドはC-x
TABでも利用可能です。数引数を指定した場合、何列を余白に追加するかを指定します(負の引数は余白を何列縮めるかを指定します)。
Indent Less
リージョンから4列のインデントを削除します。
Indent Right More
右端から4列インデントすることにより、テキストを狭くします。
Indent Right Less
右端からのインデントを4列削除します。
変数standard-indent
は、これらのコマンドがインデントを追加または減少させる列数を指定します。デフォルトは4です。Enrichedにたいするデフォルトの右余白は、通常のようにfill-column
により制御されます。
C-c [ (set-left-margin
)またはC-c ]
(set-right-margin
)とタイプしても、左余白または右余白をセットできます。数引数で余白の幅を指定できます。指定しない場合、これらのコマンドはミニバッファーを通じて値の入力を求めます。
それに加えてフィルプレフィクスがある場合は、指定されたパラグラフのインデントに使用されます。C-x .は、フィルプレフィクスにたいして指定された、新しい値の中の空白文字は含めません。フィルコマンドは各行のインデントの後ろにフィルプレフィクスを探します。フィルプレフィクスを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Enrichedモードでは、以下のコマンドを使って、フィルのためにさまざまな行端揃えスタイル(justification styles)を指定できます。これらのコマンドは。ポイントを含むパラグラフ、またはリージョンがアクティブの場合は、リージョンと重なるすべてのパラグラフに適用されます。
行を左余白に揃えます(set-justification-left
)。
行を右余白に揃えます(set-justification-right
)。
行の途中にスペースを挿入することにより、行を両端の余白に揃えます(set-justification-full
)。
両端の余白の間で行を中央に揃えます(set-justification-center
)。
フィルを完全にオフに切り替えます(set-justification-none
)。このセッティングにより、フィルコマンドはテキストに何も行わなくなります。それでも左余白はインデントすることができます。
Text
PropertiesメニューのJustificationサブメニューを使用して、行端揃えスタイルを指定することもできます。デフォルトの行端揃えスタイルはバッファーごとの変数default-justification
により指定されます。この変数の値はシンボルleft
、right
、full
、center
、またはnone
のうちの1つです。シンボルの意味は上述したコマンドに対応します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Text PropertiesメニューのSpecial Propertiesサブメニューには、4つのテキストプロパティー —
read-only
(テキストの変更を不可にします)、invisible
(テキストを非表示にします)、intangible
(テキスト内でのポイントの移動を不可にします)、charset
(これは文字の表示に正しいフォントを選択するために重要です) — を追加または削除するエントリーがあります。‘Remove
Special’メニューアイテムは、リージョン内のテキストにたいする、これらの特別なプロパティーを削除します。
プロパティーinvisible
およびintangible
は保存されません。
Enrichedモードはdisplay
プロパティ(Display Property in the Emacs
Lisp Reference
Manualを参照)の保存とリストアもサポートします。このプロパティはスクリーン上でテキストがどのように表示されるかに影響を与え、バッファーのテキスト以外のソース由来のイメージや文字列も表示することができます。display
プロパティはディスプレイにたいするプロパティ処理の一部として、任意のLispフォームの実行もサポートします。したがって、表示時しか知ることができないコンディションにディスプレイを動的に合わせる能力を提供します。任意のLisp実行は、そのenrichedテキストのソースがEmacs、あるいはシステム外からのもの(たとえば受信した電子メールの添付ファイル)である場合は、Emacsに攻撃の可能性を開くので、Enrichedモードではそのような実行はデフォルトで無効になっています。変数enriched-allow-eval-in-display-props
を非nil
値にカスタマイズすることにより、これを有効にすることができます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
table
パッケージは、テキストベースのテーブルを簡単に編集するコマンドを提供します。以下は、そのようなテーブルがどのように見えるかの例です:
+-----------------+--------------------------------+-----------------+ | Command | Description | Key Binding | +-----------------+--------------------------------+-----------------+ | forward-char |Move point right N characters | C-f | | |(left if N is negative). | | | | | | +-----------------+--------------------------------+-----------------+ | backward-char |Move point left N characters | C-b | | |(right if N is negative). | | | | | | +-----------------+--------------------------------+-----------------+
このようなテキストがテーブルだとEmacsが認識した場合(テーブルの認識を参照してください)、テーブルのセル内容を編集すると、内容が大きくなってセルに収まらなくなったときは、テーブルのセルを自動的にサイズ変更します。以下のセクションで説明されている、テーブルのレイアウトを操作したり編集するコマンドを使用することができます。
M-x table-fixed-width-modeとタイプすることにより、自動的なテーブルのサイズ変更を切り替えることができます。
25.15.1 テキストベーステーブルとは? | テキストベースのテーブルとは何か。 | |
25.15.2 テーブルの作成 | テーブルを作成する方法。 | |
25.15.3 テーブルの認識 | テーブルをアクティブまたは非アクティブにする方法。 | |
25.15.4 テーブルセルにたいするコマンド | テーブルのセル指向のコマンド。 | |
25.15.5 セルの位置調整 | セル内容の位置調整。 | |
25.15.6 テーブルの行と列 | 行と列の追加と削除。 | |
25.15.7 プレーンテキストとテーブルの変換 | ||
25.15.8 テーブル、その他 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
テーブル(table)は矩形のテキスト領域からなり、それらはセル(cells)に分割されます。セルは少なくとも1文字分の幅と高さをもち、それにボーダーラインは含まれません。セルは複数のセルに分割できますが、それらは重なることはできません。
セルのボーダーラインは、以下の変数で指定された3つの特別な文字で描画されます:
table-cell-vertical-char
垂直ラインに使用される文字です。デフォルトは‘|’です。
table-cell-horizontal-chars
水平ラインに使用される文字です。デフォルトは‘"-="’です。
table-cell-intersection-char
水平ラインと垂直ラインの交点に使用される文字です。デフォルトは‘+’です。
以下は無効なテーブルの例です:
+-----+ +--+ +-++--+ | | | | | || | | | | | | || | +--+ | +--+--+ +-++--+ | | | | | | +-++--+ | | | | | | | || | +--+--+ +--+--+ +-++--+ a b c
左から順に説明します:
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
テキストベースのテーブルをスクラッチから作成するには、M-x table-insertとタイプします。このコマンドはテーブルの列数、テーブルの行数、セルの幅と高さの入力を求めます。セルの幅とセルの高さに、セルのボーダーは含まれません。これらは1つの整数で指定するか(これは各セルの幅と高さが同じになることを意味します)、スペースまたはカンマで区切られた整数のシーケンス(これはテーブルの左から右の列、上から下の行の個別のセルにたいして幅と高さを指定します)です。その後、指定されたテーブルはポイント位置に挿入されます。
M-x table-insertで挿入されたテーブルは、Emacsにそれをテキストベースのテーブルとして特別に扱うように指示する、特別なテキストプロパティーを含みます。そのバッファーをファイルに保存して、後で再びvisitすると、それらのプロパティーは失われ、Emacsにとってテーブルは普通のテキストとして判断されます。これをテーブルに変換する方法については、次のセクションを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
バッファーに既存のテーブルがあり、そのテーブルからM-x table-insertで適用された特別なテキストプロパティーが失われているとき、それはテーブルとして特別に扱われなくなります。これにテキストプロパティーを適用するには、M-x table-recognizeとタイプします。このコマンドはカレントバッファーをスキャンして、有効なテーブルセルを認識して、適切なテキストプロパティーを適用します。反対に、M-x table-unrecognizeとタイプすることにより、特別なテキストプロパティーを削除して、テーブルをプレーンテキストに変換して、カレントバッファーのすべてのテーブルを認識しなくなります。
以下のコマンドを使って、選択的にテーブルを認識したり認識させなくすることもできます:
カレントリージョンのテーブルを認識します。
カレントリージョンのテーブルを認識しなくします。
ポイント位置のテーブルを認識してアクティブにします。
ポイント位置のテーブルを非アクティブにします。
ポイント位置のセルを認識してアクティブにします。
ポイント位置のセルを非アクティブにします。
テーブルを認識する他の方法については、プレーンテキストとテーブルの変換を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
コマンドM-x table-forward-cellおよびM-x table-backward-cellは、ポイントをカレントセルから隣接するセルに移動します。その順番は巡回的です。ポイントがテーブルの最後のセルにあるとき、M-x table-forward-cellはポイントを最初のセルに移動します。同様に、ポイントが最初のセルにあるとき、M-x table-backward-cellはポイントを最後のセルに移動します。
M-x table-span-cellは方向 — 右、左、上、下 — の入力を求め、カレントセルをその方向の隣接するセルにマージします。マージした結果が不正なセルのレイアウトになる場合、このコマンドはエラーをシグナルします。
M-x table-split-cellは、ミニバッファーを使って分割する方向の入力を求め、カレントセルを垂直(vertically)または水平(horizontally)に分割します。特定の方向に分割するには、M-x table-split-cell-verticallyとM-x table-split-cell-horizontallyを使います。垂直に分割する場合、古いセルの内容は自動的に2つの新しいセルに分割されます。水平に分割する場合、セルが空でない場合は、セル内容をどのように分割するか入力を求めます。オプションは‘split’(内容をポイント位置で分割)、‘left’(すべての内容を左のセルへ)、‘right’(すべての内容を右のセルへ)です。
以下のコマンドは、セルを拡大または縮小します。デフォルトでは、1行または1列ずつサイズ変更します。数引数が与えられた場合、それはサイズ変更を何行または何列単位で行うかを指定します。
カレントセルを垂直方向に拡大します。
カレントセルを垂直方向に縮小します。
カレントセルを水平方向に拡大します。
カレントセルを水平方向に縮小します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
コマンドM-x table-justifyは、テキストベーステーブルの1つ以上のセルにたいして、位置調整(justification)を行います。位置調整は、セルのテキストがセルの外枠にたいして、どのように位置合わせされるかを決定します。テーブルの各セルは個別に位置調整できます。
M-x
table-justifyは、最初に何の位置調整をするかの入力を求めます。オプションは‘cell’(カレントセルのみ)、‘column’(テーブルのカレント列のすべてのセル)、‘row’
(テーブルのカレント行のすべてのセル)です。その後、コマンドは位置調整のスタイルの入力を求めます。オプションはleft
、center
、right
、top
、middle
、bottom
、またはnone
(垂直方向の位置調整を行わないことを意味します)です。
水平および垂直方向の位置調整スタイルは独立して指定され、2つのタイプは同時に適用できます。たとえばM-x
table-justifyを2回呼び出して、1回目は位置調整にright
を指定して、2回目は位置調整にbottom
を指定することにより、セルの内容を右下に位置調整することができます。
位置調整スタイルは、テキストプロパティーとしてバッファーに格納され、バッファーをkillするかEmacsを終了すると失われます。M-x
table-recognize(テーブルの認識を参照してください)のようなテーブルの認識コマンドは、セルの内容を確認して各セルの位置調整スタイルの決定と再適用を試みます。この機能を無効にするには、変数table-detect-cell-alignment
をnil
に変更してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
M-x table-insert-rowは、テーブルのカレント行の前にセル行を挿入します。カレント行とポイントは、新しい行の下になります。テーブル最下にある最後の行の後ろに行を挿入するには、ポイントをテーブルの最下線の直下にポイントを移動して、このコマンドを呼び出します。数引数を指定することにより2つ以上の行を挿入できます。
同様に、M-x table-insert-columnは、テーブルのカレント列の左にセル列を挿入します。右端の最右列の右に列を挿入するには、ポイントを最右線の右(テーブルの外)に移動して、このコマンドを呼び出します。数引数は挿入する列の数を指定します。
M-x table-delete-columnは、ポイントがあるセルの列を削除します。同様に、M-x table-delete-rowは、ポイントがあるセルの行を削除します。どちらのコマンドも数引数により削除する列または行の数を指定します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
コマンドM-x table-captureは、プレーンテキストをリージョンにキャプチャーして、それをテーブルに変換します。M-x table-recognize(テーブルの認識を参照してください)とは異なり、元のテキストはテーブルの体裁をとる必要はありません。テーブル的な論理構造もつことだけが必要です。
たとえば以下の数字があったとして、これらは3つの行と、カンマで水平方向に分割されます:
1, 2, 3, 4 5, 6, 7, 8 , 9, 10
このテキストにたいしてM-x table-captureを呼び出すと、以下のテーブルが生成されます:
+-----+-----+-----+-----+ |1 |2 |3 |4 | +-----+-----+-----+-----+ |5 |6 |7 |8 | +-----+-----+-----+-----+ | |9 |10 | | +-----+-----+-----+-----+
M-x table-releaseは逆のことを行います。これはテーブルを元のプレーンテキストに戻し、セルのボーダーを削除します。
この2つのコマンドの1つの用途としては、テキストをレイアウトで編集することです。以下の3つのパラグラフを見てください:
table-capture is a powerful command. Here are some things it can do: Parse Cell Items Using row and column delimiter regexps, it parses the specified text area and extracts cell items into a table.
上記のテキストを含むリージョンにtable-capture
を適用して、列と行を区切るregexpsに空文字列を指定すると、以下のような1つのセルからなるテーブルが作成されます。
+----------------------------------------------------------+ |table-capture is a powerful command. | |Here are some things it can do: | | | |Parse Cell Items Using row and column delimiter regexps,| | it parses the specified text area and | | extracts cell items into a table. | +----------------------------------------------------------+
その後でセル分割コマンド(テーブルセルにたいするコマンドを参照してください)を使って、各パラグラフが1つのセルを占めるようにテーブルを分割できます。
+----------------------------------------------------------+ |table-capture is a powerful command. | |Here are some things it can do: | +-----------------+----------------------------------------+ |Parse Cell Items | Using row and column delimiter regexps,| | | it parses the specified text area and | | | extracts cell items into a table. | +-----------------+----------------------------------------+
これで各セルは他のセルのレイアウトに影響を与えることなく、独立して編集することができるようになりました。終了したらM-x table-releaseを呼び出して、テーブルをプレーンテキストに戻します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
コマンドtable-query-dimension
は、テーブルのレイアウトとポイント位置のテーブルセルをレポートします。以下は出力の例です:
Cell: (21w, 6h), Table: (67w, 16h), Dim: (2c, 3r), Total Cells: 5
これはカレントセルの幅が21文字、高さが6行で、テーブルの幅が67文字、高さが16行で、2列3行で5つのセルがあることを示します。
M-x table-insert-sequenceは、テキスト文字列のシーケンスを、テーブルのセルを横断して、適切に各セルに挿入します。これは、そのシーケンスの基本文字列(base string)を尋ねて、その基本文字列を数値的(基本文字列が数字で終わる場合)、またはASCII順で“増加”させてシーケンスを生成します。基本文字列に加え、このコマンドはシーケンス内の要素数、増分、セル間隔、各セル内のテキストの行端揃えの入力を求めます。
M-x
table-generate-sourceは特定のマークアップ言語にフォーマットされたテーブルを生成します。このコマンドは言語(これはhtml
、latex
、cals
、wiki
、mediawiki
のいずれかでなければなりません)と、結果を出力するバッファー、テーブルの表題を尋ね、生成されたテーブルを指定したバッファーに出力します。デフォルトの出力バッファーはtable.lang
で、langは指定された言語です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
2C-two-column(2列)モードは、横に並んだテキストの列を、簡単に編集できるようにします。これは横に並んだ2つのウィンドウを使って、それぞれのウィンドウは自身のバッファーを表示します。2Cモードに入るには3つの方法があります。
カレントバッファーを左に、カレントバッファーの名前にもとづいた名前のバッファーを右にして、2Cモードに入ります。右側のバッファーがまだ存在しない場合、そのバッファーは空で開始されます。カレントバッファーの内容は変更されません。
このコマンドは、カレントバッファーが空か1列だけしか含まなくて、それに別の列を追加したいときに適しています。
2列のテキストを含むカレントバッファーを2つのバッファーに分割して、それを横に並べて表示します(2C-split
)。カレントバッファーは左側のバッファーになりますが、右側の列のテキストは、右側のバッファーに移動します。カレント列は分割ポイントを指定します。分割はカレント行からバッファーの最後まで続きます。
このコマンドはすでに2列になったテキストを含むバッファーがあり、一時的にそれを列に分割したいときに適しています。
カレントバッファーを左側のバッファー、バッファーbufferを右側のバッファーにして2Cモードに入ります(2C-associate-buffer
)。
F2 sまたはC-x 6 sは、列の区切りを探します。区切りは各行に出現する2列の間にある文字列です。区切りの幅は、F2 sへの数引数で指定することができます。これはポイントの前の指定した文字数文を区切り文字とします。デフォルトでは幅が1なので、ポイントの前の文字が列区切りになります。
行が適切な位置で分割された場合、F2 sは区切りの後ろのテキストを右側のバッファーに移動して、区切りを削除します。適切な位置に列区切りをもたない行は、分割されずに残ります。分割されない行は左側のバッファーに残り、右側のバッファーの対応する行は空になります(これは2Cモードで2列にまたがる行を書くときの方法で、そのような行は左側のバッファーに記述して、右側のバッファーは空の行にします)。
コマンドF2 RETまたはC-x 6 RET
(2C-newline
)は、2つのバッファーの対応する位置にそれぞれ改行を挿入します。これは2列のテキストを分割されたバッファーで編集するときに、新しい行を追加する一番簡単な方法です。
望みどおりに両方のバッファーを編集し終えたら、F2 1またはC-x 6 1
(2C-merge
)で、それらをマージします。これは右側のバッファーからテキストを、もう一方のバッファーの2列目にコピーします。2列編集に戻るには、F2
sを使用します。
F2 dまたはC-x 6 dは、バッファーをそのままにして、2つのバッファーを分割します。F2 dとタイプしたとき、カレントではないバッファーが空の場合、F2 dによりそのバッファーはkillされます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このチャプターでは、プログラムの編集を容易にするEmacsの機能を説明します。これらの機能で行えるいくつかは、以下のようなものです:
26.1 プログラミング言語のためのメジャーモード | プログラムを編集するためのメジャーモード。 | |
26.2 トップレベルの定義、またはdefun | プログラムの主要なトップレベル要素を操作するためのコマンド。 | |
26.3 プログラムのインデント | ネスティングを示すためのインデントの調整。 | |
26.4 カッコに付随する編集のためのコマンド | カッコを操作するコマンド。 | |
26.5 コメントの操作 | コメントの挿入、kill、位置揃え。 | |
26.6 ドキュメントの照会 | 関数ドキュメントの取得。 | |
26.7 Hideshowマイナーモード | ブロックの選択的な表示。 | |
26.8 シンボル名の補完 | プログラムまたは言語でのシンボルの補完。 | |
26.9 大文字小文字の混ざった単語 | identifiersLikeThisのような識別子の処理。 | |
26.10 Semanticとは | ソースコードのパースにもとづいた編集ツール。 | |
26.11 プログラムを編集するための他の便利な機能 | その他、プログラムを編集するための便利なEmacs機能。 | |
26.12 Cおよび関連するモード | C、C++、Objective-C、Java、IDL、Pike、AWKモードの特別なコマンド。 | |
26.13 Asmモード | Asmモードと特別な機能。 | |
26.14 Fortranモード | Fortranモードと特別な機能。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsには、プログラミング言語のために特化した、多くのメジャーモード(メジャーモードを参照してください)があります。プログラミング言語に関連したモードは通常、式の構文、インデントの慣習的ルール、言語の構文をハイライトする方法、関数定義の開始と終了を検索する方法を指定します。プログラムをコンパイルしたり、デバッグするための機能をもつ場合もあります。各言語にたいするメジャーモード名は、言語名により名づけられます。たとえばCプログラミング言語にたいするメジャーモードは、c-mode
です。
EmacsにはLisp、Scheme、SchemeベースのDSSSL expression言語、Ada、ASM、AWK、C、C++、Fortran、Icon、IDL(CORBA)、IDLWAVE、Java、Javascript、M4、Makefile、Metafont(フォント作成のためのTeXの仲間)、Modula2、Object Pascal、Objective-C、Octave、Pascal、Perl、Pike、PostScript、Prolog、Python、Ruby、Simula、SQL、Tcl、Verilog、VHDLなどのプログラミング言語のためのモードがあります。Perlのための代替モードはCPerlモードと呼ばれます。一般的なGNUおよびUnixシェルのスクリプティング言語、MS-DOS/MS-Windowsの‘BAT’ファイル、makefiles、DNS masterファイル、一連のさまざまな設定ファイルのためのモードも利用可能です。
理想的には、Emacsは編集したいと望むすべてのプログラミング言語のためのメジャーモードをもつべきです。しかし、もしあなたのお気に入りの言語のためのモードがない場合、それはEmacsとともに配布されないパッケージで実装されているかもしれません(Emacs Lispパッケージを参照してください)。または、あたたが貢献することもできます。
ほとんどのプログラミング言語では、インデントはプログラム構造を示すために行ごとに異なります。したがって、ほとんどのプログラミング言語のモードでは、TABとタイプすることにより、カレント行のインデントが更新されます(プログラムのインデントを参照してください)。さらにDELは通常、タブをあたかも等価な数のスペースであるかのように扱って、後方に削除するbackward-delete-char-untabify
にバインドされているので、空白文字がスペースなのかタブなのか気にせずに、インデントを1列ずつ削除できます。
プログラミング言語のモードに入ることにより、フック変数prog-mode-hook
に指定されたカスタムLisp関数と、その後でモード自身のモードフックが実行されます(メジャーモードを参照してください)。たとえばCモードに入ることにより、prog-mode-hook
とc-mode-hook
が実行されます。フックについての情報は、フックを参照してください。
Adaモード(Ada Mode in Ada Modeを参照してください)、C/C++/Objective C/Java/Corba IDL/Pike/AWKモード(CC Mode in CC Modeを参照してください)、Octaveモード、VHDLモード、IDLWAVEモード(IDLWAVE in IDLWAVE User Manualを参照してください)のマニュアルが利用可能です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsでは関数などの、バッファーのトップレベルの主要な定義は、defunと呼ばれます。この名前はLispが由来ですが、Emacsではすべての言語に使用します。
26.2.1 左端の慣習 | 開きカッコまたは同様の開始を意味する区切りは、それが左端にある場合はdefunの開始です。 | |
26.2.2 defunの移動 | 主要な定義を移動したりマークするコマンド。 | |
26.2.3 Imenuとは | バッファーのインデックスをメニューにする。 | |
26.2.4 Which Functionモード | Which Functionモードはどの関数にいるか表示します。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
プログラミング言語のモードの多くは、伝統的に左マージンにある開カッコや開大カッコ(opening parenthesis or brace)をトップレベルの定義やdefunの開始とみなします。そのためにdefun開始を探すコマンドは、デフォルトではそのような区切りをdefun開始位置として受け取ります。
この慣習をオーバーライドしたければ、ユーザーオプションopen-paren-in-column-0-is-defun-start
をnil
にセットすることによって行うことができます。このオプションがt
(デフォルト)にセットされている場合には、このdefun開始の探すコマンドは、コメントや文字列中以外の列0の開カッコか開大カッコ(braces)で停止します。nil
ならdefunは最外レベルのカッコまたは大カッコを検索することにより発見されます。Emacsの低レベルルーチンはもはやこの慣習に依存しないので、通常はopen-paren-in-column-0-is-defun-start
をデフォルトから変更する必要はないでしょう。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
これらのコマンドはトップレベルの主要な定義、またはdefunsにもとづいてポイントを移動したり、リージョンをセットアップします。
カレントまたは直前のdefunの先頭に移動します(beginning-of-defun
)。
カレントまたは直後のdefunの最後に移動します(end-of-defun
)。
カレントまたは後続のdefun全体の周囲にリージョンを設定します(mark-defun
)。
カレントのdefunの先頭または最後に移動するコマンドは、C-M-a
(beginning-of-defun
)とC-M-e
(end-of-defun
)です。これらのコマンドの1つを繰り返すか、正の数引数を使用すると、繰り返しごとに動作方向の次のdefunに移動します。
C-M-aで負の引数-nを指定すると、次のdefunの開始へとn回移動します。これはC-M-eに引数nを与えたときに移動する位置と、正確に同じではありません。defunの終わりは通常、後続のdefunの開始と同じ位置ではないからです(空白文字、コメント、もしかしたら宣言がこれらのdefunを分割するからです)。同様にC-M-eに負の引数を与えると、defunの最後に後方に移動しますが、これはC-M-aに正の引数を与えた場合とは完全に異なる位置になります。
カレントのdefunを操作するには、C-M-h
(mark-defun
)を使用します。これはカレントのdefunの最後にマークをセットし、先頭にポイントを配します。テキストオブジェクトをマークするコマンドを参照してください。これは、そのdefunをkillしてファイルの他の場所に移動するための、一番簡単な準備方法です。defunの直前(間に空行を挟まない)にコメントがある場合は、そのコメントもマークされます。ポイントがdefunの間にある場合は、後続のdefunを使用します。マークがすでにアクティブのときにこのコマンドを使用すると、リージョンの最後が、複数のdefunを含むように拡張されます。プレフィクス引数を指定した場合は、その数のdefunをマークするか、適切な数のdefunになるようリージョンを拡張します。負のプレフィクス引数の場合は、反対方向のdefunをマークするとともに、以降のmark-defun
使用での選択方向も変更します。
Cモードでは、mark-defun
とほとんど同じなc-mark-function
を実行します。違いは、それが引数定義、関数名、リターンデータ型を含むことで、これによりC関数全体にリージョンが設定されます。これは標準のキーバインディングをメジャーモードが調整する方法の例です。これにより特定の言語によりふさわしい方法で標準的な作業を行うのです。この目的のために、他のメジャーモードは、これらのキーバインディングすべてを置き換えているかもしれません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Imenu機能は、ファイル内の主要な定義を、名前で検索する方法を提供します。これはチャプター、セクションなどを扱う、テキストフォーマッターのためのメジャーモードでも有用です(複数ファイルを扱う、より強力な機能については、識別子のリファレンスを探すを参照してください)。
M-x imenuとタイプすると、これはミニバッファーを使用して定義の名前を読み取り、ポイントをその定義に移動します。名前の指定に補完を使用できます。このコマンドは常に有効な名前の全体のリストを表示します。
かわりに、コマンドimenu
をマウスクリックにバインドできます。そうすると定義名を選択するために、マウスメニューが表示されます。imenu-add-menubar-index
を呼び出して、バッファーのインデックスをメニューバーに追加することもできます。特定のメジャーモードのすべてのバッファーにたいして、このメニューバーアイテムを有効にしたい場合、モードフックにimenu-add-menubar-index
を追加して、これを行うことができます。しかし、それを行うことにより、そのモードでファイルをvisitするたびに、Emacsがそのバッファーのすべての定義を検索する間、待つ必要があります。
バッファーの内容を変更する際、定義の追加や削除をした場合は、メニューの‘*Rescan*’アイテムを呼び出すことにより、新しい内容にもとづいてバッファーのインデックスを更新することができます。imenu-auto-rescan
を非nil
値にセットした場合、再スキャンは自動的に発生します。テキストを少量変更しただけの場合、再スキャンは必要ありません。
imenu-auto-rescan
は、バイト数がimenu-auto-rescan-maxout
より大きいバッファーでは無効にされるでしょう。
変数imenu-sort-function
をセットして、メニューがソートされる方法をカスタマイズすることができます。デフォルトでは、名前はバッファーで出現する順にソートされています。アルファベット順にソートしたいときは、値にシンボルimenu--sort-by-name
を使用します。Lispコードを記述することにより、独自の比較関数を定義することもできます。
ImenuはWhich Functionモードに情報を提供します (Which Functionモードを参照してください)。 Speedbarもこれを使用します(スピードバーフレームを参照してください)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Which Function(どの関数)モードは、グローバルなマイナーモード(マイナーモードを参照してください)で、これはカレントの関数名をモードラインに表示して、バッファーの移動にしたがってそれを更新します。
Which Functionモードを有効または無効にするには、コマンドM-x which-function-modeを使用します。Which
Functionモードは、グローバルなマイナーモードです。デフォルトでは、それをサポートする方法を知っている、すべてのメジャーモード(たとえばImenuをサポートするすべてのメジャーモード)に影響を与えます。変数which-func-modes
の値をt
(これは利用可能なすべてのメジャーモードをサポートすることを意味します)から、特定のメジャーモードのリストに変更することにより、これを制限することができます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
プログラムを正しくインデントされた状態に保つには、何か変更したらEmacsを使って再インデントするのが一番よい方法です。Emacsには1行、指定した数の行、1つのカッコでグループ化されたすべての行をインデントするコマンドがあります。
インデントに間する全般的な情報は、インデントを参照してください。このセクションでは、プログラミング言語のモードに特有のインデント機能について説明します。
26.3.1 プログラムの基本的なインデントコマンド | 1行のインデント。 | |
26.3.2 複数行のインデント | 複数行を1度に再インデントするコマンド。 | |
26.3.3 Lispのインデントのカスタマイズ | Lisp関数がどのようにインデントされるべきか指定する。 | |
26.3.4 Cのインデントのためのコマンド | Cおよび関連するモードのインデントのための追加機能。 | |
26.3.5 Cのインデントのカスタマイズ | Cおよび関連するモードのインデントスタイルの制御。 |
Emacsはpp
パッケージで、Lispのプリティープリンター(pretty-printer)も提供します。これはLispオブジェクトを、見栄えのよいインデントで再フォーマットします。pp in The Emacs Lisp Reference Manualを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
カレント行のインデントを調整します(indent-for-tab-command
)。
改行を挿入して、次の行のインデントを調整します(newline
)。
基本的なインデントコマンドはTAB
(indent-for-tab-command
)で、これはインデントで説明されています。プログラミング言語のモードでは、TABは前の行のインデントと構文的な内容にもとづき、カレント行をインデントします。リージョンがアクティブのとき、TABはカレント行だけでなく、リージョン内の各行をインデントします。
テキストの挿入で説明されているコマンドRET
(newline
)は、C-jの後にTABを続けるのと同じです。これは改行を挿入してから、その行のインデントを調整します。
カッコによるグループ化により開始される行でインデントする場合、通常Emacsはグループ内の前の行の開始、または、カッコの後ろのテキストの下に、行の開始を合わせます。(たとえば美的観点により)これらの行に手動で非標準的なインデントを与えた場合は、その下の行もそれにしたがいます。
プログラミング言語のモードのほとんどは、左端の開きカッコ、開き大カッコ(open-brace)、その他の開始区切りを関数の開始とみなします。編集しているコードがこの前提に違反する場合は
— それらの区切りが文字列やコメントの中にある場合でも —
インデントが正しく機能するために、open-paren-in-column-0-is-defun-start
にnil
をセットしなければなりません。左端の慣習を参照してください
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
複数行のコードを、1度に再インデントしたいときがあるかもしれません。これを行う1つの方法は、マークを使う方法です。マークがアクティブでリージョンが空でないとき、TABはリージョン内の各行をインデントします。一方、コマンドC-M-\
(indent-region
)は、マークがアクティブか否かにかかわらず、リージョン内の各行をインデントします(インデントコマンドを参照してください)。
それらに加えて、Emacsはコードの大きな断片をインデントするために、以下のコマンドを提供します:
カッコでグループ化された、すべての行を再インデントします。
カッコでグループ化されたすべてを横にシフトして、最初の行が正しくインデントされるようにします。
リージョン内のすべての行を横にシフトしますが、コメントや文字列内で開始される行は変更しません。
1つのカッコでグループ化されたものを再インデントするには、ポイントをグループ化の前に配して、C-M-qとタイプします。これはグループ化されたものの全体的なインデント(たとえばグループ化が開始される行のインデント)は変更せずに、相対的なインデントを変更します。C-M-qで実行される関数は、Lispモードではindent-pp-sexp
、Cモードではc-indent-exp
、のようにメジャーモードに依存します。全体的なインデントも同様に訂正したい場合は、最初にTABをタイプします。
グループ内の相対的なインデントは好ましいが、それの最初の行のインデントが好ましくない場合は、その最初の行にポイントを移動してC-u TABとタイプします。Lisp、C、他のいくつかのメジャーモードでは、数引数を指定したTABは通常どおりカレント行をインデントしてから、カレント行で始まる、カッコでグループ化されたすべての行を同じ量で再インデントします。このコマンドは巧妙なので、文字列内で開始される行は変更しません。CモードのときはCプリプロセッサー行は変更しませんが、それらにアタッチされた継続行は再インデントします。
コマンドM-x
indent-code-rigidlyは、indent-rigidly
が行うように(インデントコマンドを参照してください)、リージョン内のすべての行を厳格(rigidly)にシフトします。このコマンドはリージョンが文字列内で開始される場合を除き、文字列内で開始される行のインデントは変更しません。プレフィクス引数は、インデントする列数です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Lisp式のインデントパターンは、式により呼ばれる関数によって決定することができます。それぞれのLisp関数のために、事前定義された複数のインデントパターンの中から選択するか、Lispプログラムで独自のものを定義できます。
標準的なインデントのパターンは以下のとおりです。最初の引数が式の開始行にある場合、式の2行目は最初の引数の下にインデントされます。そうでない場合、2行目は関数名の下にインデントされ、後続の行はネストの深さが同じなら前の行の下にインデントされます。
変数lisp-indent-offset
が非nil
の場合、これは式の2行目の通常のインデントパターンをオーバーライドするので、常にこれを含むリストよりlisp-indent-offset
列余計にインデントされます。
特定の関数は、標準のパターンをオーバーライドします。名前がdef
で始まる関数は、式の開始の開きカッコよりlisp-body-indent
列多く2行目をインデントすることにより、2行目をbodyの開始として扱います。
関数名のlisp-indent-function
プロパティーにより、個々の関数の標準パターンを、さまざまな方法でオーバーライドできます。これは通常declare
構成を使用することにより、マクロ定義のために行われます。Defining
Macros in The Emacs Lisp Reference Manualを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Cおよび関連するモードのインデントのために、特別な機能があります。
カレントのトップレベル関数を再インデント、または型定義を統合します(c-indent-defun
)。
ポイントの後ろの、対応が取れた式の中の各行を再インデントします(c-indent-exp
)。プレフィクス引数は、無効な構文についての警告メッセージを抑制します。
カレント行の再インデントおよび/またはタブ文字を挿入する場合もあります(c-indent-command
)。
c-tab-always-indent
がt
の場合、このコマンドは常にカレント行をインデントし、他には何もしません。これがデフォルトです。
この変数がnil
の場合、このコマンドはポイントが左端か、その行のインデント位置にある場合だけ、カレント行を再インデントします。そうでない場合、このコマンドはタブ(indent-tabs-mode
がnil
の場合は等価な数のスペース)を挿入します。
(nil
でもt
でもない)他の値の場合、常にその行をインデントし、コメントか文字列の中の場合は、タブも挿入します。
カレントバッファー全体を再インデントするには、C-x h C-M-\とタイプします。これは最初にバッファー全体をリージョンとして選択し、それからリージョンを再インデントします。
カレントブロックを再インデントするには、C-M-u C-M-qを使用します。これはブロックの前に移動してから、ブロックのすべてを再インデントします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Cモードおよび関連するモードは、インデントをカスタマイズするために柔軟なメカニズムを使用します。Cモードはソース行を2ステップでインデントします。最初のステップは、行の内容とコンテキストに応じて行の構文を分類します。次のステップで、構文コンストラクトで選択されたスタイルにより、関連付けられたインデントのオフセットを決定して、これをアンカーとなる命令文(anchor statement)のインデントに加えます。
事前に定義されたスタイルstyleを選択します(c-set-style
)。
スタイルとは、Cモードおよび関連するモードで使用できるカスタマイズ用の名前つきコレクションです。完全な説明は、Styles in The CC Mode
Manualを参照してください。Emacsには、gnu
、k&r
、bsd
、stroustrup
、linux
、python
、java
、whitesmith
、ellemtel
、awk
を含む、事前に定義されたスタイルがいくつか付属します。これらのスタイルのうちいくつかは、主に1つの言語を意図したものですが、他のスタイルはこれらのモードをサポートする任意の言語で使用できます。スタイルがどのように見えるかは、何らかのコードにたいしてスタイルを選択して、(たとえば関数定義の最初でC-M-qとタイプして)再インデントしてみることです。
カレントバッファーのスタイルを選択するには、コマンドC-c .を使用します。引数として、スタイル名を指定します(大文字小文字に意味はありません)。このコマンドはカレントバッファーだけに影響し、将来のインデントコマンドの呼び出しだけに影響します。そのバッファーにすでにあるコードの再インデントはしません。バッファー全体を新しいスタイルで再インデントするには、C-x h C-M-\とタイプしてください。
変数c-default-style
をセットして、さまざまなメジャーモードにたいしてデフォルトのスタイルを指定できます。この値は、スタイル名(文字列)、または各要素が1つのメジャーモードと、それに使用するインデントスタイルを指定するalistです。たとえば、
(setq c-default-style '((java-mode . "java") (awk-mode . "awk") (other . "gnu")))
これはJavaモード、AWKモードにたいして明示的に選択して、その他のC-likeなモードにたいしては、デフォルトの‘gnu’スタイルを指定します。この変数はC-likeなメジャーモードを選択したときに効果を表します。したがってJavaモードにたいして新しいデフォルトスタイルを指定するには、既存のJavaモードのバッファーで、M-x java-modeとタイプすることにより効果が表れます。
gnu
スタイルは、CにたいするGNUプロジェクトで推奨されるフォーマットを指定します。これがデフォルトで、私たちが使用を推奨するスタイルです。
既存のスタイルのオーバーライドや、独自のスタイルを定義する方法など、Cおよび関連するモードにたいするインデントのカスタマイズに間する情報は、Indentation Engine Basics in the CC Mode Manual、およびCustomizing Indentation in the CC Mode Manualを参照してください。
スタイルを指定するかわりに、サンプルコードのバッファーでM-x c-guessとタイプすることにより、Emacsにスタイルを推測させることができます。その後、M-x c-guess-installとして、推測されたスタイルを他のバッファーに適用できます。詳細については、Guessing the Style in the CC Mode Manualを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このセクションでは、プログラム内のカッコ構造を活用したり、それらを対応が取れた状態に保つためのコマンドと機能について説明します。
これらの機能を語るとき、用語“カッコ(parenthesis)”には、大カッコ(braces)、角カッコ(brackets)、またはマッチするペアとして定義される区切りも含まれます。メジャーモードはどの区切りに意味があるかを、構文テーブル(syntax table)を通じて制御します(Syntax Tables in The Emacs Lisp Reference Manualを参照してください)。Lispでは丸カッコ(parentheses)だけが考慮され、Cではこれらのコマンドは大カッコや角カッコにも適用されます。
M-x check-parensを使用して、バッファー内の対応の取れていないカッコと、対応が取れていない文字列のクォートを検索することができます。
26.4.1 対応が取れたカッコの式 | ||
26.4.2 カッコ構造の移動 | カッコ構造を上、下、横断して移動するコマンド。 | |
26.4.3 マッチするカッコ | 終了区切りの挿入による、マッチする開始区切りのフラッシュ表示。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
プログラミング言語のモードはそれぞれ、対応が取れた式(balanced expression)にたいする、独自の定義をもちます。対応が取れた式は通常、個別のシンボル、数字、文字列定数、同様にマッチする区切りで囲まれたコードの断片を含みます。以下のコマンドは対応が取れた式にたいするものです(Emacsでは、内部的にそのような式はsexpとして参照されます13)。
対応が取れた式を、前方に飛び越して移動します(forward-sexp
)。
対応が取れた式を、後方に飛び越して移動します(backward-sexp
)。
対応が取れた式を、前方にkillします(kill-sexp
)。
式を入れ替えます(transpose-sexps
)。
後続の式の後ろに、マークを配します(mark-sexp
)。
対応が取れた式を前方に飛び越して移動するには、C-M-f
(forward-sexp
)を使用します。ポイントの後ろの最初の文字が開始区切り(たとえばCでは‘(’、‘[’、‘{’)の場合、このコマンドはそれにマッチする終了区切りまで移動します。文字がシンボル、文字列、数字で始まる場合、このコマンドはそれらを飛び越して移動します。
コマンドC-M-b (backward-sexp
)は対応が取れた式を後方 — C-M-fと同様ですが逆向き
—
に飛び越して移動します。式の前にプレフィクス文字がある場合(Lispではシングルクォート、バッククォート、カンマ)、このコマンドはそれらも同様に飛び越して後方に移動します。
C-M-fおよびC-M-bに数引数を与えると、指定した回数繰り返し操作をします。負の引数を与えると、反対の方向に移動します。ほとんどのモードでは、これらの2つのコマンドはコメントをあたかも空白文字のように通過します。これらC-M-fおよびC-M-bのキーは、文字単位で移動するC-fおよびC-b(ポイント位置の変更を参照してください)、単語単位に移動するM-fおよびM-b(単語を参照してください)に類似していることに注意してください。
対応が取れた式全体をkillするには、C-M-k
(kill-sexp
)とタイプします。これはC-M-fが飛び越すテキストをkillします。
C-M-t
(transpose-sexps
)は、前にある対応の取れた式と、次の対応の取れた式の位置をスイッチします。このコマンドは、文字を入れ替えるC-tコマンド(テキストの入れ替えを参照してください)と類似しています。C-M-tへの引数は繰り返し回数を意味し、前の式を、何個か先の式に移動します。負の引数は前にある対応が取れた式を後方に、それらの式の前に移動します。引数0は何もしないのではなく、ポイントの位置で終わる対応が取れた式、またはポイントの後ろの式と、マークの後ろの式を入れ替えます。
リージョンにたいして動作するコマンドで対応が取れた式を操作するには、C-M-SPC
(mark-sexp
)とタイプします。これはC-M-fが移動する位置にマークをセットします。マークがアクティブの間、このコマンドを連続で呼び出すとマークが1つの式ごとにシフトしてリージョンが拡張します。正または負の引数はマークを前方または後方に指定した数の式分のマークを移動します。エイリアスC-M-@は、C-M-SPCと等価です。これに関連したコマンドは、テキストオブジェクトをマークするコマンドを参照してください。
Cのように挿入オペレーター(infix operators)を使用する言語では、与えられた位置で複数の可能な解釈があるので、すべての対応が取れた式を認識するのは不可能です。たとえば‘foo + bar’は1つのCの式ですが、Cモードはこれを1つの式とは扱いません。かわりに‘foo’を1つの式、‘bar’をもう1つの式、そしてそれらの間にある‘+’を句読点として認識します。しかしカッコがあればCモードは‘(foo + bar)’を1つの式として認識します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下のコマンドはカッコ(または、あなたが使用している言語で、そのような区切りとして使用される文字)で区切られてグループ化されたものを移動するコマンドです。これらのコマンドは、カッコを含んでいたとしても文字列とコメントを無視し、エスケープ文字でクォートされたカッコも無視します。これらのコマンドは主にプログラムの編集を意図していますが、カッコを含む任意のテキストの編集にも有用です。これらは内部的には“リストコマンド”として参照されます。なぜならLispではこれらのグループはリストだからです。
これらのコマンドは、開始ポイントが文字列やコメントの中でないと仮定します。これらのコマンドを文字列やコメントの中から呼び出したとき、結果は信頼できません。
カッコでグループ化されたグループを飛び越えて、前方に移動します(forward-list
)。
カッコでグループ化されたグループを飛び越えて、後方に移動します(backward-list
)。
カッコによる構造を上に移動します(backward-up-list
)。
カッコによる構造を下に移動します(down-list
)。
リスト(list)コマンドのC-M-n (forward-list
)と、C-M-p
(backward-list
)は、グループ化されたカッコを前方または後方に、1つ(またはn個)飛び越えて移動します。
C-M-nとC-M-pは、カッコによる構造において同じレベルに留まろうと試みます。1レベル(またはnレベル)上に移動するには、C-M-u
(backward-up-list
)を使用します。C-M-uは対応が取れていない、前にある開始区切りへ、後方に移動します。正の引数は繰り返し回数を意味します。負の引数は移動の方向を逆転するので、このコマンドは1レベル以上を上に、前方に移動します。
カッコによる構造を下に移動するには、C-M-d
(down-list
)を使用します。Lispモードでは‘(’は開始区切りなので、これは‘(’を検索するのとほとんど同じです。引数は何レベルしたに移動するかを指定します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsにはカッコのマッチング(parenthesis matching)機能がいくつかあります。これにより、どのカッコ(または他の区切り)がどのようにマッチするか簡単に見ることができます。
終了文字となる自己挿入文字をタイプすると、Emacsはそれがスクリーン上にあれば、マッチする開始区切りの位置を簡単に示します。スクリーン上にない場合、Emacsは開始区切りの近くにあるテキストをエコーエリアに表示します。どちらの方法でも、どのグループを終了したのか見分けることができます。開始区切りと終了区切りがマッチしない — ‘[x)’のような場合、エコーエリアに警告メッセージが表示されます。
3つの変数が、マッチするカッコの表示を制御します:
blink-matching-paren
は、この機能をオンまたはオフに切り替えます。nil
は無効にしますが、デフォルトのt
は有効にします。jump
にセットすると、マッチする開始区切りに数瞬カーソルを移動して指示します。jump-offscreen
にセットすると、開始区切りが画面上にない場合でもカーソルをジャンプさせます。
blink-matching-delay
は、マッチする開始区切りを何秒表示するかを指定します。これには整数または浮動小数点数を指定します。デフォルトは1です。
blink-matching-paren-distance
には、マッチする開始区切りを後方に何文字検索するかを指定します。この文字数内にマッチが見つからない場合、Emacsは検索を中止して、何も表示しません。デフォルトは102400です。
グローバルなマイナーモードのShow Parenモードは、より強力な自動的なマッチングの類を提供します。これは開始区切りの前、または終了区切りの後ろにポイントを移動すると、開始区切りと終了区切り、間にあるテキスト(オプション)をハイライトします。Show Parenモードに切り替えるには、M-x show-paren-modeとタイプします。これをカスタマイズするには、M-x customize-group RET paren-showingとタイプします。このモードの処理を制御するカスタマイズ可能なオプションには、以下が含まれます:
show-paren-highlight-openparen
は、ポイントが開きカッコの直前にあるとき(つまり、その位置にカーソルがにあるとき)、そのカッコをハイライトするかどうかを制御します。デフォルトは非nil
(ハイライトする)です。
show-paren-style
は、2つのカッコだけをハイライトするか、それともカッコの間のスペースもハイライトされるかを制御します。有効なオプションは、parenthesis
(マッチするカッコをハイライト)、expression
(カッコで括られた式全体をハイライト)、mixed
(カッコが表示されているときはマッチするカッコ、カッコが表示されていないときは式をハイライト)です。
show-paren-when-point-inside-paren
が非nil
の場合は、ポイントがカッコの内側にあるときもハイライトされます。
show-paren-when-point-in-periphery
が非nil
の場合は、行の先頭が空白文字で開始されていて、ポイントがその空白文字範囲の中にあり、その行の非空白文字の最初または最後がカッコの場合は、そのカッコもハイライトします。同様に、行の末尾が空白文字で終端されていて、ポイントがその空白文字範囲の中にあり、その行の非空白文字の最後がカッコの場合は、そのカッコもハイライトします。
グローバルなマイナーモードのElectric Pairモードは、マッチするカッコ(parentheses)、大カッコ(braces)、角カッコ(brackets)、...などの 区切りを簡単に挿入する方法を提供します。開始区切りを挿入すると、マッチする終了区切りが自動的に挿入され、2つの区切りの間にポイントが置かれます。反対に終了区切りを既存の区切りの先に挿入した場合、何の挿入もされず、その位置は単にスキップされます。リージョンがアクティブ(マークとリージョンを参照)の場合、区切りの挿入はそのリージョンを操作します。リージョン内の文字はマッチする区切りのペアー内に括られ、ポイントはタイプした区切りの後に置かれます。
以下の変数は、Electric Pairモードの追加機能を制御するのに使用できます:
electric-pair-preserve-balance
—
非nil
の場合、デフォルトのペアリングロジックは、開始区切りと終了区切りの数のバランスになります。
electric-pair-delete-adjacent-pairs
—
非nil
の場合、隣接する区切りの間でのバックスペースにより、終了区切りも自動的に削除します。
electric-pair-open-newline-between-pairs
—
非nil
の場合、2つの隣接するペアの間での改行の挿入は、ポイントの後ろに自動的に追加の改行をオープンします。
electric-pair-skip-whitespace
—
非nil
の場合、終了区切りのスキップを決定する前に、マイナーモードが空白文字を前方にスキップするようにします。
Electric Pairモードに切り替えるには、M-x electric-pair-modeとタイプします。1つのバッファーにたいしてこのモードを切り替えるには、M-x electric-pair-local-modeを使用してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
コメントは、プログラミングにおいて重要なパートなので、Emacsはコメントの編集や挿入を行う特別なコマンドを提供します。Flyspell Progモードによる、コメントのスペルチェックも行うことができます(スペルのチェックと訂正を参照してください)。
異なる種類のコメントのインデントにたいして、特別なルールをもつメジャーモードがいくつかあります。たとえばLispコードでは、2つのセミコロンで始まるコメントは、それらの行がコードであるかのようにインデントされ、3つのセミコロンで始まるコメントは左端に揃えてインデントされ、しばしば区分けの目的で使用されます。Emacsはこれらの慣習を理解します。たとえば、コメント行でTABをタイプすると、そのコメントを適切な位置にインデントします。
;; This function is just an example. ;;; Here either two or three semicolons are appropriate. (defun foo (x) ;;; And now, the first part of the function: ;; The following line adds one. (1+ x)) ; This line adds one.
26.5.1 コメントコマンド | コメントの挿入、kill、位置揃え。 | |
26.5.2 複数行のコメント | 複数行のコメントを追加・編集するコマンド。 | |
26.5.3 コメントを制御するオプション | コメント機能のカスタマイズ。 | |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下のコマンドは、コメントにたいして処理を行います:
カレント行にコメントを挿入、または位置揃えします。リージョンがアクティブのときは、かわりにリージョンをコメント化、または非コメント化します(comment-dwim
)。
カレント行をコメント、または非コメントにします(comment-line
)。リージョンがアクティブの場合は、かわりにリージョンをコメント、または非コメントにします。
カレント行のコメントをkillします(comment-kill
)。
コメント列をセットします(comment-set-column
)。
RETの後にコメントを挿入して位置揃えします(comment-indent-new-line
)。複数行のコメントを参照してください。
リージョンのすべての行にたいして、コメント区切りを追加します。
コメントを挿入または位置揃えするコマンドは、M-; (comment-dwim
)です。単語“dwim”は、“Do
What I
Mean(私が言ったとおりにしてください)”の頭文字をとったものです。このコマンドは、コメントに関係する多くの異なる作業に使用できます。それは、このコマンドをどこで使うかという、状況に依存することを示します。
リージョンがアクティブ(マークとリージョンを参照してください)の場合、M-;はリージョンのコメント区切りの追加と削除のどちらかを行います。リージョンの各行がすでにコメントの場合、それらのコメント区切りを削除することにより、それらの行を非コメント化します。そうでない場合は、リージョンのテキストにコメント区切りを追加します。
リージョンがアクティブのときにM-;に数引数を与えると、それは追加または削除するコメント区切りの数を指定します。正の引数nはn個の区切りを追加し、負の引数-nはn個の区切りを削除します。
リージョンが非アクティブで、カレント行にコメントがない場合、M-;はカレント行に新しいコメントを追加します。ブランク行(たとえば空または空白文字しか含まない)の場合、TABをタイプしたときにインデントされるのと同じ位置に、コメントがインデントされます(プログラムの基本的なインデントコマンドを参照)。非ブランク行の場合、コメントはその行の最後の非空白文字の後ろに配されます。Emacsは、可能なら変数comment-column
とcomment-fill-column
(コメントを制御するオプションを参照)で指定された列の間にコメントを配そうと試みます。それ以外では、Emacsは別の適切な位置、通常、非コメントのテキストと少なくとも1つのスペースを空けてコメントを配します。どちらの場合も、Emacsはコメントの開始区切りの後にポイントを配すので、すぐにコメントのタイプを開始できます。
既存のコメントの位置揃えにもM-;を使用できます。行がすでにコメント開始文字列を含む場合、M-;は慣習的な位置にそれを位置揃えして、ポイントをコメント開始区切りの後ろに移動します。例外として、列0で始まるコメントは移動されません。既存のコメントがすでに正しく位置揃えされているときでも、M-;はコメントテキストの開始に直接移動するので有用です。
C-x C-;
(comment-line
)は、行そのものをコメント化または非コメント化します。リージョンがアクティブ(マークとリージョンを参照してください)の場合は、リージョン内の行をコメント化または非コメント化します。リージョンが非アクティブの場合、このコマンドはポイントがある行をコメント化または非コメント化します。正のプレフィクス引数nを与えた場合、カレント行から数えてn行を処理します。負の引数-nの場合は、先行するn行に作用します。負の引数を与えてこのコマンドを呼び出した後は、それに続けて正の引数を指定して連続して呼び出した場合、あたかも負の引数が与えられたかのように、先行する行を処理します。
C-u M-;
(comment-dwim
にプレフィクス引数を指定)は、カレント行の任意のコメントを、それの前の空白文字と一緒にkillします。コメントはkillリングに保存されるので、他の行の行末に移動してC-yで挿入して、M-;でコメントの位置揃えをすることができます。M-x
comment-killとタイプしてもC-u
M-;と同じ効果を得ることができます(comment-dwim
はプレフィクス引数を与えられたとき、実際にサブルーチンとしてcomment-kill
を呼び出します)。
コマンドM-x comment-regionは、アクティブなリージョンにたいしてM-;を呼び出すのと等価ですが、このコマンドはマークが非アクティブのときでも、常にリージョンにたいして動作します。Cモードおよび関連するモードでは、このコマンドはC-c C-cにバインドされています。コマンドM-x uncomment-regionは、リージョンの各行を非コメント化します。数引数は、削除するコメント区切りの数を指定します(負の引数は、追加するコメント区切りの数を指定します)。
C-likeなモードにたいしては、変数c-indent-comment-alist
およびc-indent-comments-syntactically-p
をセットすることにより、M-;の正確な効果を設定できます。たとえば閉じ大カッコで終わる行では、M-;はcomment-column
ではなく、大カッコの後ろにスペースを1つ空けてコメントを配します。完全な詳細は、Comment
Commands in The CC Mode Manualを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
コメントをタイプするとき、それを次の行に継続したくなったときは、M-jまたはC-M-j
(comment-indent-new-line
)とタイプします。これはカレント行を行ブレークして、コメントを継続するために必要なコメント区切りとインデントを挿入します。
コメントの終了区切りをもつ言語(たとえばCの‘*/’)では、M-jの正確な振る舞いは、変数comment-multi-line
の値に依存します。変数の値がnil
の場合、このコマンドは古い行のコメントを終了させて、新しい行で新しいコメントを開始します。そうでない場合、カレントのコメント区切りの中で新しい行を開きます。
Auto Fillモードがオンの場合、コメントをタイプしているときにフィル列に達すると、明示的にM-jを呼び出したときと同じ方法で、コメントが継続されます。
既存の行をコメントにするには、リージョンがアクティブのときはM-;、またはM-x comment-regionを使用します。 as described in the preceding section.
複数行ブロックのコメントの行の開始で‘/’をタイプすると、コメントを終了するようにCモードを設定できます。これを行なうには、クリーンアップ(clean-up)で、comment-close-slash
を有効にします。Clean-ups in The CC Mode Manualを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
コメントコマンドで示したように、M-jコマンドが行にコメントを追加するとき、バッファーローカルな変数comment-column
とcomment-fill-column
(nil
の場合はfill-column
の値。明示的なフィルコマンドを参照されたい)の間にコメントを配そうと試みます。このバッファーローカルな変数のデフォルト値、またはローカルな値は、通常の方法でセットできます(ローカル変数を参照)。かわりにC-x
;
(comment-set-column
)とタイプすることにより、カレントバッファーのcomment-column
の値を、現在コメントがある列にセットすることができます。C-u
C-x
;は、コメント列をそのバッファーのポイントの前にある最後のコメントにセットします。その後でM-;を行うことにより、カレント行のコメントを前のコメントに揃えることができます。
コメントコマンドは、変数comment-start-skip
の値である正規表現にもとづいて、コメントを認識します。この正規表現がヌル文字列にマッチしないように気をつけてください。単語という言葉の厳格な意味から考えると、これはコメント開始区切りより長い文字列にマッチするかもしれません。たとえばCモードでの変数の値は"\\(//+\\|/\\*+\\)\\s *"
で、これは‘/*’自身と、その後ろの余分なアスタリスクやスペースにマッチし、C++スタイルのコメントも許容します(文字列に‘\’を含む場合、Lisp構文では‘\\’と記述する必要があることに注意してください。これは最初のアスタリスクにたいして、正規表現においてアスタリスクがもつ特別な意味を打ち消すために必要です)。
コメントコマンドが新しいコメントを作るとき、これはcomment-start
の値をコメント開始区切りとして挿入します。これはポイントの後ろに、コメント終了区切りとしてcomment-end
の値も挿入します。たとえばLispモードではcomment-start
が‘";"’で、comment-end
が""
(空文字列)です。Cモードではcomment-start
が"/*
"
で、comment-end
が" */"
です。
変数comment-padding
は、コメントコマンドが、コメント区切りとコメントテキストの間を区切る文字列を指定します。デフォルトでは‘"
"’、つまり1つのスペースが指定されます。かわりに数字を指定すると、これは指定した数のスペースになり、nil
の場合、スペースは挿入されません。
変数comment-multi-line
は、M-jとAuto
Fillモードがコメントをどのように複数行に継続するかを制御します。複数行のコメントを参照してください。
変数comment-indent-function
は、新しく挿入されたコメント、または既存のコメントの位置揃え位置を計算するために呼び出される関数を指定します。これはメジャーモードごとに異なります。関数は引数なしで呼び出されますが、新しいコメントが挿入されるときはコメント開始位置のポイント、または行末のポイントで呼び出されます。この関数はコメントが開始されるべき列を返す必要があります。たとえばLispモードでは、デフォルト関数の決定は、既存のコメントがいくつのコメント文字で始まるかにもとづきます。
さらにEmacsは、コメントを付近の行と揃えるようとも試みます。これをオーバーライドするには、インデントの許容できる範囲を示す、(もしかしたら等しい)2つの整数から成るコンスを関数がしても構いません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsは、関数やプログラムで使おうと計画している変数およびコマンドを、ドキュメントから探すのに使用できる機能をいくつか提供します。
26.6.1 Infoドキュメントの照会 | Infoファイルからライブラリー関数やコマンドを探す。 | |
26.6.2 man-pageの照会 | manからライブラリー関数やコマンドを探す。 | |
26.6.3 Emacs Lispドキュメントの照会 | Emacs関数を探す、その他。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Infoドキュメントをもつ言語に適用されるメジャーモードでは、プログラムで使用されるシンボルにたいしてC-h S
(info-lookup-symbol
)を使用することにより、Infoドキュメントを閲覧できます。シンボルはミニバッファーで指定します。デフォルトはバッファーのポイント位置にあるシンボルです。たとえばCモードでは、シンボルをC
Library Manualから探します。このコマンドは適切なInfoファイルのマニュアルがインストールされているときだけ機能します。
Emacsは、どのドキュメントのどこからシンボルを探すか — つまり、どのInfoファイルを探すのか、そしてどのインデックスを検索するか — をメジャーモードにもとづき決定します。M-x info-lookup-fileを使用して、ドキュメントのファイル名を指定することもできます。
C-h Sをサポートしないメジャーモードでこれを使用すると、これはsymbol help
modeを指定するよう求めます。ここではc-mode
コマンドのように、C-h Sをサポートするメジャーモードを選択します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Unixでは、オンラインドキュメントのメインフォームはmanual pageまたはman pageです。GNUオペレーティングシステムではmanを、Infoでブラウズできる、より組織化されたマニュアルで置き換えることを目指しています。このプロセスは終了していないので、manを読むことはまだ有用です。
オペレーティングシステムのコマンド、ライブラリー関数、システムコールにたいするman pageを、M-x
manコマンドで読むことができます。このコマンドは補完つき(補完を参照してください)でトピック(topic)の入力を求め、対応するman
pageをフォーマットするために、man
コマンドを実行します。そのシステムが許すなら、このコマンドはman
を非同期で実行するので、ページがフォーマットされる間、編集を続けることができます。フォーマットされた結果は*Man
topic*という名前のバッファーに表示されます。このバッファーは、Manモードという特別なメジャーモードを使用します。これはスクロールや他のman
pageにジャンプする機能をもちます。詳細についてはManモードのバッファーで、C-h mをタイプしてください。
それぞれのman
pageは、1つ以上のセクション(sections)に属します。セクションの名前は数字または数字と文字です。同じ名前のman
pageが、複数のセクションに存在することもあります。特定のセクションのman pageを読むには、M-x
manがトピックの入力を求める際、‘topic(section)’または‘section
topic’とタイプします。たとえばCのライブラリー関数chmod
はセクション2ですが、同じ名前のシェルコマンドのman
pageはセクション1です。前者を閲覧するには、M-x man RET chmod(2) RETとタイプしてください。
セクションを指定しないと、M-x manは通常、最初に見つかったman
pageだけを表示します。man
に、コマンドラインオプション‘-a’を指定できるシステムもいくつかあります。これは指定したトピックにたいするすべてのman
pageを表示するよう指定します。これを使用するには、変数Man-switches
の値を‘"-a"’に変更します。そうするとManモードのバッファーで、M-nとM-pで異なるセクションのman
pagfeを切り替えることができます。モードラインには、利用可能なman pageの数が表示されます。
man pageを読む他の方法として、M-x womanコマンドがあります。M-x manとは異なり、これはman
pageをフォーマットするために外部のプログラムを実行しないので、MS-Windowsのような、man
プログラムが利用できないかもしれないシステムでも機能します。このコマンドは、表示するman
pageの入力を求め、それを*WoMan section topicという名前のバッファーに表示します。
M-x womanは、コマンドを最初に呼び出したとき、man pageの補完リストを計算します。数引数を指定すると、このリストを再計算します。これはman pageを追加・削除したとき有用です。
man pageの名前を入力して、M-x womanが複数のセクションで同じ名前のman pageを見つけた場合、これはウィンドウをポップアップして利用可能な候補を示し、それらから1つを選択するよう求めます。
M-x womanはモダンなman-pagesの最新機能をまだサポートしていないので、システムで利用可能ならM-x manの使用をわたしたちが推奨していることに注意してください。
M-x womanのセットアップと使用についての情報は、 Emacsとともに配布されているWoMan Infoマニュアルを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacs Lispコードを編集するとき、コマンドC-h f (describe-function
)およびC-h
v (describe-variable
)で、使用したい関数または変数のビルトインドキュメントを閲覧できます。コマンドと変数名のヘルプを参照してください。
ElDocモードは、Lispドキュメントを検索するのに助けとなる、バッファーローカルなマイナーモードです。これが有効な場合、ポイントがLisp関数または変数にあるときは、有用な情報がエコーエリアに表示されます。関数の場合は引数リスト、変数の場合は変数のドキュメントストリングの最初の行が表示されます。ElDocモードに切り替えるには、M-x eldoc-modeとタイプします。Global ElDocモードもあり、これはデフォルトでオンであり、バッファーにたいするメジャーモードがEmacs LispモードやLisp Interactionモードである、‘*scratch*’のようなバッファーに影響します(M-x global-eldoc-modeでグローバルでオフに切り替えられます)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Hideshowモードは、バッファーローカルなマイナーモードで、ブロックと呼ばれるプログラムの一部を、選択的に表示させることができます。このマイナーモードに切り替えるには、M-x hs-minor-modeとタイプします(マイナーモードを参照してください)。
ブロックを非表示にするためにHideshowモードを使用したとき、そのブロックはスクリーンに表示されなくなり、かわりに省略記号(3つのピリオド)に置き換えられます。何をブロックと定めるかは、メジャーモードに依存します。Cモード、および関連するモードでは、ブロックは大カッコ(braces)で区切られ、Lispモードでは丸カッコ(parentheses)で区切られます。複数行のコメントもブロックとみなされます。
Hideshowモードは以下のコマンドを提供します:
カレントブロックを隠します(hs-hide-block
)。
カレントブロックを表示します(hs-show-block
)。
カレントブロックを表示、または非表示にします(hs-toggle-hiding
)。
クリックしたブロックの表示・非表示を切り替えます(hs-mouse-toggle-hiding
)。
トップレベルのすべてのブロックを隠します(hs-hide-all
)。
バッファーのすべてのブロックを表示します(hs-show-all
)。
現在のブロックの、nレベル下のすべてのブロックを隠します(hs-hide-level
)。
以下の変数はHideshowモードをカスタマイズするのに使用されます:
hs-hide-comments-when-hiding-all
非nil
の場合、C-c @ C-M-h (hs-hide-all
)はコメントも隠します。
hs-isearch-open
この変数は、インクリメンタル検索でマッチするテキストが隠されたブロックにあるとき、それを表示すべき条件を指定します。変数の値は、code
(コードブロックだけを表示)、comment
(コメントだけを表示)、t
(コードブロックとコメントの両方を表示)、nil
(どちらも表示しない)のいずれかです。デフォルト値はcode
です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
補完は通常ミニバッファーで行われますが(補完を参照してください)、シンボル名の補完を、普通のEmacsバッファーで行うこともできます。
プログラミング言語のモードでは、C-M-iまたはM-TABとタイプすることにより、ポイントの前のシンボル名の一部にたいして補完を行うことができます。グラフィカルなディスプレーでは、M-TABキーは通常、グラフィカルなウィンドウの切り替え用にウィンドウマネージャーに予約されているので、かわりにC-M-iまたはESC TABとタイプする必要があります。
ほとんどのプログラミング言語のモードでは、C-M-i
(またはM-TAB)は、コマンドcompletion-at-point
を呼び出します。これは柔軟な方法で補完リストを生成します。Semanticモードが有効な場合は、補完にSemanticパーサーのデータを使用することを試みます(Semanticとはを参照してください)。Semanticモードが無効、または補完の処理に失敗した場合、選択されたtagsテーブル(tagsテーブルを参照してください)を使用して補完を試みます。Emacs
Lispモードの場合、カレントのEmacsセッションで定義された関数、変数、プロパティー名を使用して補完を行います。
他の点では、バッファーでのシンボル補完はミニバッファーでの補完と同様に振る舞います。たとえば、Emacsが一意なシンボルを補完できない場合、他のウィンドウに補完候補のリストを表示します。補完を参照してください。
Textモード、および関連するモードでは、M-TABはスペルチェッカーの辞書にもとづいて単語を補完します。スペルのチェックと訂正を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
いくつかのプログラミングスタイルでは、‘unReadableSymbol’のような大文字小文字が混ざった(“CamelCase”の)シンボルを使います(GNUプロジェクトでは、識別子の単語の区切りに、大文字小文字の違いではなく、アンダースコアを使用することを推奨しています)。Emacsには、そのようなシンボルに簡単に対処するための、さまざまな機能があります。
バッファーローカルなマイナーモードのGlassesモードは、そのようなシンボルが表示される方法を変更することにより、それらを読みやすくします。デフォルトでは、小文字とそれに続く大文字の間に余分なアンダースコアを表示します。これはバッファーのテキストを変更するわけではなく、表示の仕方だけを変更します。
Glassesモードに切り替えるには、M-x glasses-modeとタイプします(マイナーモードを参照してください)。Glassesモードが有効な場合、モードラインのマイナーモードインジケーターには‘o^o’が表示されます。Glassesモードに間する情報を得るには、C-h P glasses RETとタイプしてください。
Subwordモードは、バッファーローカルなマイナーモードです。Subwordモードでは、Emacsの単語コマンドは、‘StudlyCapsIdentifiers’のような、単語の中の大文字を単語境界と認識します。Subwordモードが有効なときは、モードラインのマイナーモードインジケーターに‘,’が表示されます。同様なモードsuperword-mode
も参照してください(プログラムを編集するための他の便利な機能を参照してください)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Semanticは、ソースコードパーサー(source code
parsers)
にもとづく、言語認識(language-aware)による編集のためのコマンドを提供します。このセクションは、Semanticについての簡単な説明を提供します。完全な詳細については、
Semantic in Semanticを参照してください。
Font Lockモード(Font Lockモードを参照してください)のような、Emacsの言語認識機能(language aware features)のほとんどは、rules of thumb14にもとづいています。これは大抵の場合においてよい結果を得られますが、完全に正しい結果は決して得られない、ということを意味します。対照的に、Semanticで使用されるパーサーは、プログラミング言語の構文を正確に理解します。これによりSemanticは、より強力で正確な検索、操作、補完コマンドが提供できるのです。
Semanticの使用を開始するには、M-x semantic-modeをタイプするか、‘Tools’メニューの、‘Source Code Parsers (Semantic)’という名前のメニューをクリックします。これはグローバルなマイナーモードのSemanticモードを有効にします。
Semanticモードが有効な場合、Emacsはファイルをvisitするたびに自動的にパースを試みます。現在のところ、SemanticはC、C++、HTML、Scheme、Java、Javascript、Make、Python、Scheme、SRecord、Texinfoを理解します。パースされたバッファーでは以下のコマンドが利用可能です:
カレントファイルで定義された関数名の入力を求め、ポイントをそこに移動します(semantic-complete-jump-local
)。
Emacsがパースした任意のファイルで定義された関数名の入力を求め、ポイントをそこに移動します(semantic-complete-jump
)。
ポイント位置のシンボルにたいして可能な補完候補のリストを表示します(semantic-complete-analyze-inline
)。これは補完候補を選択するための特別なキーバインドのセットをアクティブにします。RETはカレントの補完候補を選択し、M-nとM-pは可能な補完候補を巡回、TABは可能なところまで補完を行ってから巡回、そして、C-gまたは他のキーは補完を中止します。
ポイント位置のシンボルにたいして可能な補完候補のリストを、他のウィンドウに表示します(semantic-analyze-possible-completions
)。
上記のコマンドに加えて、Semanticパッケージは、パーサー情報を使用する他のさまざまな方法を提供します。たとえば、Emacsがアイドルのとき、補完候補のリストを表示するために、それを使用することができます。 詳細は、Semantic in Semanticを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
プログラムを編集するためにデザインされているわけではありませんが、有用なEmacsコマンドもいくつかあります
単語、センテンス、パラグラフを操作するEmacsコマンドは、コードを編集するのに有用です。ほとんどのシンボル名は単語(単語を参照してください)を含んでおり、文字列やコメントの中でセンテンス(センテンスを参照してください)を見つけることができます。パラグラフについては、ほとんどのプログラミング言語のモードは空行をパラグラフの開始および終了に定義しています。したがって空行を注意深く使用してプログラムをクリアーにすることにより、パラグラフコマンドが機能できる、有意なテキストの集合を提供することができます。プログラミング言語のモードでAuto Fillモードが有効な場合、新しい行の作成でインデントされるようになります。
Superwordはバッファーローカルなマイナーモードで、編集および移動コマンドがシンボル(たとえば‘this_is_a_symbol’)を単語として扱うようになります。Superwordモードが有効な場合、モードラインのマイナーモードインジケーターに、
‘²’
が表示されます。同様なモードsubword-mode
も参照してください(大文字小文字の混ざった単語を参照してください)。
Electric Layoutモード(M-x electric-layout-mode)はグローバルなマイナーモードで、特定の文字をタイプしたときに自動的に改行を挿入します。たとえばJavascriptモードでは‘{’、‘}’、‘;’などです。
Hideshowモード(Hideshowマイナーモードを参照してください)は別として、プログラムの一部を選択的に表示するには、選択的な表示機能(選択的な表示を参照してください)を使う方法があります。プログラミングのモードには、Foldoutパッケージ(折り畳み編集を参照してください)とともに使用できる、Outline minorマイナーモード(Outlineモードを参照してください)をサポートするものもあります。
Prettify Symbolsモードはバッファーローカルなマイナーモードで、特定の文字の表示をよりアトラクティブ(attractive:
見栄えのする)なバージョンに置き換えます。たとえばEmacs
Lispモードでは、文字列‘lambda’を、ギリシャ文字のラムダ‘λ’に置き換えます。TeXバッファーでは‘\alpha’
... ‘\omega’、および他の数学マクロ(math
macros)を、対応するUnicode文字に置き換えます。このモードを、プログラミングとは関係のないモードで使いたいと思うかもしれません。prettify-symbols-alist
にエントリーを追加することにより、このモードをカスタマイズできます。デフォルト値であるprettify-symbols-default-compose-p
の値が適切でない場合、prettify-symbols-compose-predicate
をカスタマイズすることで、より入念なカスタマイズが可能です。グローバルなバージョンglobal-prettify-symbols-mode
は、サポートするすべてのモードでこれを有効にします。
ポイント位置のシンボルを、元の形式で表示することもできます。これは変数prettify-symbols-unprettify-at-point
により制御されます。非nil
の、ポイントがシンボル位置にある限り、そのシンボルの元の形式が復元されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このセクションではC、C++、Objective-C、Java、CORBA IDL、Pike、AWKのためのモード(これらは“Cモードおよび関連するモード”と呼ばれます)で利用できる、特別な機能を簡単に説明します。 詳細は、Emacsとともに配布されるCC modeのInfoマニュアルを参照してください。
26.12.1 Cモードの移動コマンド | Cステートメント単位での移動、その他。 | |
26.12.2 エレクトリックC文字 | コロンおよび他の文字による、自動的な再インデント。 | |
26.12.3 Cの欲張りな削除機能 | より強力なDELコマンド。 | |
26.12.4 Cモードのその他のコマンド | コメントのフィル、マクロ展開の閲覧、その他のクールな機能。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このセクションでは、Cモードおよび関連するモードで、ポイントを移動するコマンドを説明します。
C-M-a
C-M-e
カレント関数またはトップレベルの定義の、先頭または最後にポイントを移動します。スコープによる囲い(C++のclassなど)をもつ言語では、カレント関数(current function)はスコープ内の隣接する関数です。そうでない場合、それは大カッコ(braces)で囲まれることにより定義されます。defunの移動を参照してください。
C-c C-u
マークを置いたまま、ポイントを含むプリプロセッサー条件を後方に移動します。プレフィクス引数は、繰り返し回数として振る舞います。負の引数を指定すると、ポイントを含むプリプロセッサー条件の最後に、前方へポイントを移動します。
‘#elif’は、‘#else’の後に‘#if’を続けたのと同じなので、この関数は後方に移動するときは‘#elif’で止まりますが、前方に移動するときは止まりません。
C-c C-p
マークを置いたまま、プリプロセッサー条件を越えてポイントを後方に移動します。プレフィクス引数は、繰り返し回数として振る舞います。負の引数の場合は前方に移動します。
C-c C-n
マークを置いたまま、プリプロセッサー条件を越えて、ポイントを前方に移動します。プレフィクス引数は、繰り返し回数として振る舞います。負の引数の場合は後方に移動します。
M-a
一番内側のCステートメントの先頭に、ポイントを移動します(c-beginning-of-statement
)。すでにポイントがステートメントの先頭にある場合は、その前のステートメントの先頭に移動します。プレフィクス引数nを指定した場合、n
- 1個前のステートメントに、後方へ移動します。
2行以上のコメントまたは文字列の場合、このコマンドはステートメントではなくセンテンス単位で移動します。
M-e
Cステートメントまたはセンテンスの最後に、ポイントを移動します。M-aと同様ですが、これは逆の方向に移動します(c-end-of-statement
)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Cモードおよび関連するモードでは、特定の文字はエレクトリック(electric) — つまり自分自身を挿入するのに加えて、カレント行を再インデントしたり、オプションで改行を挿入します。エレクトリックな文字は、{、}、:、#、;、,、<、>、/、*、(、)です。
混乱したインデントのコードを編集している場合には、エレクトリックなインデントを不便だと感じるかもしれません。CCモードになれていない場合、それはあなたを当惑させるかもしれません。エレクトリックな動作は、コマンドC-c C-lで切り替えることができます。有効な場合には、モードラインのモード名の後ろに‘/cl’が表示されます(cが表示される場合、それはコメントスタイルがブロックスタイルかラインスタイルかに応じて‘*’か‘/’が表示される)。
エレクトリックな動作を切り替えます(c-toggle-electric-state
)。正のプレフィクス引数を指定した場合、、このコマンドはエレクトリックな動作を有効にし、負の引数の場合は無効にします。
エレクトリックな文字は、エレクトリックな状態に加えて、自動改行(auto-newline)の機能が有効な場合(モードラインのモード名の後ろに‘/cla’が表示されている状態のとき)だけ、改行を挿入します。この機能はC-c C-aで、オンまたはオフに切り替えることができます。
自動改行機能を切り替えます(c-toggle-auto-newline
)。このコマンドにプレフィクス引数を指定した場合、引数が正のときは自動改行機能をオン、負のときはオフに切り替えます。
CCモードのスタイルは通常、Emacsが自動改行する正確な状況を設定します。これを直接設定することもできます。Custom Auto-newlines in The CC Mode Manualを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ポイント位置の空白文字のブロック全体を削除したい場合は、hungry deletion(欲張りな削除)を使うことができます。これはポイントの前後の、一連の空白文字を1回の操作で削除します。空白文字(whitespace)にはタブと改行が含まれますが、コメントとプリプロセッサーコマンドは含まれません。
ポイントの前の空白文字のブロック全体を削除します(c-hungry-delete-backwards
)。
ポイントの後の空白文字のブロック全体を削除します(c-hungry-delete-forward
)。
上記のコマンドのかわりに、hungry deleteモードを有効にすることができます。この機能が有効な場合(モードラインのモード名の後に‘/’と‘h’が示されます)、1回のDELで1つのスペースではなくポイントの前に続くすべての空白文字を削除し、C-d(Deleteではありません)でポイントの後に続くすべての空白文字を削除します。
hungry-delete機能を切り替えます(c-toggle-hungry-state
)。このコマンドにプレフィクス引数を指定した場合、正の場合はhungry-delete機能をオン、負の場合はオフにします。
変数c-hungry-delete-key
は、hungry-delete機能を有効にするかを制御します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このコマンドは、コンテキストに応じたマナーで、行ブレークの挿入と新しい行のインデントを行います。通常のコードの中では、RET
(newline
)の働きをしますが、Cプリプロセッサー行の中では、行ブレークに追加で‘\’を挿入し、コメントの中ではM-j
(c-indent-new-comment-line
)のように動作します。
デフォルトでは、c-context-line-break
はキーにバインドされていませんが、便利に使うためには、キーにバインドする必要があります。以下のコードは、このコマンドをRETにバインドします。この例ではキーマップを変更する前に、それがロードされていることを確実にするためにc-initialization-hook
を使用しています。
(defun my-bind-clb () (define-key c-mode-base-map "\C-m" 'c-context-line-break)) (add-hook 'c-initialization-hook 'my-bind-clb)
マークを関数定義の最後に配し、ポイントを先頭に配します(c-mark-function
)。
CおよびC++のコメントに対応した、パラグラフのフィルを行います(c-fill-paragraph
)。カレント行がコメントを含む、またはカレント行がコメントの場合、このコマンドはコメントのインデントとコメント区切りを保ちながら、コメントまたはポイントがあるパラグラフをフィルします。
リージョンのテキストにたいして、Cプリプロセッサーを実行して、すべてのマクロ呼び出しの展開を含めて、結果を表示します。リージョンの前にあるバッファーのテキストも、マクロ定義がそこにあるためにプリプロセスされますが、この部分は出力には表示されません。
マクロを使用するCコードをデバッグするとき、マクロがどのように展開されるか正確に解明するのが難しいときがあります。このコマンドにより、展開結果を見ることができるので、わざわざ解明する必要がなくなります。
リージョン内の各行末に、‘\’文字を挿入、または位置揃えします(c-backslash-region
)。これはCマクロ定義を、記述または編集した後に便利です。
行がすでに(c-backslash-region
)で終了されている場合、このコマンドはそれの前の空白文字の数を調整します。そうでない場合は、新規に‘\’を挿入します。しかしリージョンの最後の行は特別に扱われます。この行には‘\’は挿入されず、もし‘\’がある場合は削除します。
プリプロセッサー条件に対応するテキスト部分を、ハイライトします。このコマンドは*CPP Edit*という名前の別のバッファーを表示します。これは特定の条件とその内容をどのように表示するかを選択するための、グラフィックメニューを供します。さまざまなセッティングを変更した後に、‘[A]pply these settings’をクリック(またはそのバッファーでaをタイプ)すると、それに応じてCモードのバッファーが再ハイライトされます。
カレントソース行の構文的な情報を表示します(c-show-syntactic-information
)。この情報は、その行がどのようにインデントされるべきか決定するために使用されます。
CWarnマイナーモードは、ある種の疑わしいCおよびC++の構文をハイライトします。
このモードを1つのバッファーにたいして有効にするにはコマンドM-x
cwarn-mode、すべての適合するバッファーにたいして有効にするにはコマンドM-x
global-cwarn-mode、または変数global-cwarn-mode
をカスタマイズします。これが機能するためには、Font
Lockモードも有効にしなければなりません。
Hide-ifdefマイナーモードは、プリプロセッサーブロック‘#if’および‘#ifdef’の中の選択されたコードを隠します。変数hide-ifdef-shadow
をt
に変更した場合、Hide-ifdefマイナーモードははプリプロセッサーブロックを隠すかわりに、より目立たないフェイスでそれらのブロックをshadowします。詳細は、hide-ifdef-mode
のドキュメント文字列を参照してください。
カレントバッファーでvisitされたファイルに関連するファイルを、特別な方法で検索します。通常これはC/C++ソースファイルにたいするヘッダーファイル、またはその逆です。変数ff-related-file-alist
は、関連するファイル名をどのように計算するかを指定します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Asmモードは、アセンブラーコードのファイルを編集するためのメジャーモードです。このモードは、以下の3つのコマンドを定義します:
tab-to-tab-stop
.
改行を挿入してから、tab-to-tab-stop
を使ってインデントします。
コロンを挿入してから、コロンの前のラベルからインデントを削除します。その後、tab-to-tab-stop
を実行します。
コメントの挿入または位置揃えをします。
変数asm-comment-char
はアセンブラー構文でコメントを開始する文字を指定します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Fortranモードは、固定形式(fixed form)(またはタブ形式(tab
format))のソースコードを編集するためのモードです(通常はFortran 77)。よりモダンな自由形式(free
form)のソースコードを編集するためには、F90モード(f90-mode
)を使用します。Emacsは通常、拡張子が‘.f’、‘.F’、‘.for’のファイルにたいしてはFortranモードを使用し、拡張子が‘.f90’、‘.f95’、‘.f03’、‘.f08’のファイルにたいしてはF90モードを使用します。auto-mode-alist
をカスタマイズして、拡張子を追加することができます。GNU
Fortranは、これら自由形式と固定形式の両方をサポートします。このマニュアルでは主にFortranモードを記述しますが、対応するF90モードの機能については、その都度言及します。
Fortranモードは、Fortran命令文およびサブプログラムにたいする特別な移動コマンドと、Fortranのネスト規則、行番号、行継続された命令文を理解する、インデントコマンドを提供します。Fortranモードは、長い行を適正なFortranの継続行にブレークする、Auto Fillモードをサポートします。FortranモードはHideshowマイナーモード (Hideshowマイナーモードを参照してください)、 、およびImenu (Imenuとはを参照してください)もサポートします。
Fortranのコメントは他の言語とは異なるので、コメントのための特別なコマンドも提供されています。ビルトインのabbrev(省略形)は、Fortranキーワードをタイプする手間を削減します。
M-x
fortran-modeを使用して、このメジャーモードに切り替えます。このコマンドはフックfortran-mode-hook
を実行します。
フックを参照してください。
26.14.1 移動コマンド | 命令文またはサブプログラムごとにポイントを移動する。 | |
26.14.2 Fortranのインデント | Fortranのためのインデントコマンド。 | |
26.14.3 Fortranのコメント | コメントの挿入と位置揃え。 | |
26.14.4 FortranモードでのAuto Fill | FortranをサポートするAuto Fill。 | |
26.14.5 Fortranでの列のチェック | 有効なFortranのための列の計算。 | |
26.14.6 FortranキーワードのAbbrev | Fortranキーワードのためのビルトインのabbrev。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
defun(Fortranのサブプログラム —
関数、サブルーチン、同様にF90モードのモジュールには、コマンドfortran-end-of-subprogram
およびfortran-beginning-of-subprogram
を使用します)を単位に移動、操作する通常コマンドに加えて、Fortranモードは命令文や他のプログラム単位に移動する、特別なコマンドを提供します。
次の命令文の先頭に移動します(fortran-next-statement
/f90-next-statement
)。
前の命令文の先頭に移動します(fortran-previous-statement
/f90-previous-statement
)。前の命令文が存在しない場合(たとえばバッファーの最初の命令文で呼び出された場合)、バッファーの先頭に移動します。
次のコードブロックの先頭、またはカレントのコードブロックの最後に移動します(f90-next-block
)。コードブロックとは、サブルーチン、if
–endif
命令文などです。これはF90モードだけのコマンドで、Fortranモードにはありません。数引数を指定すると、複数ブロックを前方に移動します。
前のブロックに、後方にポイントを移動します(f90-previous-block
)。これはf90-next-block
と似ていますが、後方に移動します。
カレントのコードブロックの最後にポイントを移動します(fortran-end-of-block
/f90-end-of-block
)。数引数を指定した場合、指定した数のブロックを前方に移動します。ポイントを移動する前にマークがセットされます。このコマンドのF90モードのバージョンでは、ブロックタイプと、(もしあれば)ラベルの整合性をチェックしますが、最外のブロックは不完全かもしれないのでチェックしません。
カレントコードブロックの先頭にポイントを移動します(fortran-beginning-of-block
/f90-beginning-of-block
)。これはfortran-end-of-block
と似ていますが、後方に移動します。
コマンドfortran-beginning-of-subprogram
およびfortran-end-of-subprogram
は、カレントサブプログラムの先頭または後方に移動します。コマンドfortran-mark-do
およびfortran-mark-if
は、カレントのdo
ブロック、またはif
ブロックの最後にマークをセットして、ポイントをブロックの先頭に移動します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
固定形式(またはタブ形式)のFortranコードにたいしては、さまざまな構文エントリー(行番号、行インジケーター、継続行フラグ)が、要求される列に表示されるようにするために、特別なコマンドと機能が必要です。
26.14.2.1 Fortranのインデントおよびフィルコマンド | Fortranをインデントおよびフィルするコマンド。 | |
26.14.2.2 継続行 | 継続行がインデントされる方法。 | |
26.14.2.3 行番号 | 行番号が自動インデントされる方法。 | |
26.14.2.4 構文的な慣習 | トラブル防止のために、したがわなければならない慣習。 | |
26.14.2.5 Fortranのインデントのための変数 | Fortranのインデントスタイルを制御する変数。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ポイント位置でカレント行をブレークして、継続行をセットアップします(fortran-split-line
)。
その行を前の行と結合します(fortran-join-line
)。
ポイントのあるサブプログラムの、すべての行をインデントします(fortran-indent-subprogram
)。
コメントブロックまたは命令文をフィルします(fortran-fill-paragraph
またはfortran-fill-statement
を使用します)。
キーC-M-qは、fortran-indent-subprogram
を実行します、これはポイントを含むFortranサブプログラム(関数またはサブルーチン)の、すべての行を再インデントします。
キーC-M-jは、fortran-split-line
を実行します、これはFortranの流儀にあった方法で行を分割します。非コメント行では、後半は継続行になり、それにしたがったインデントになります。コメント行の場合、両方とも別のコメント行になります。
M-^またはC-c
C-dは、コマンドfortran-join-line
を実行します。これは継続行を前の行に結合します。大雑把にいうと、fortran-split-line
の逆です。このコマンドを呼び出すとき、ポイントは継続行になければなりません。
FortranモードでのM-qは、ポイントのあるコメントブロックまたは命令文ブロックをフィルします。これは余分な命令文の継続を削除します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ほとんどのFortran77コンパイラーは、2つの方法で継続行を記述します。ある行の最初の非スペース文字が列5の場合、その行は前の行の継続行です。これを固定形式(fixed
form)と呼びます。(GNU
Emacsでは常に列は0から数えますが、Fortran標準では列1から数えることに注意。列をFortran様式で表示するよう、変数column-number-indicator-zero-based
をカスタマイズできる。
モードラインのオプションを参照されたい)
変数fortran-continuation-string
は、列5に配す文字を指定します。タブ文字で開始され、その後‘0’以外の任意の数字後に続くTAB文字も継続行です。この継続スタイルをタブ形式(tab
format)と呼びます(Fortran 90では、自由形式(free form)という継続行スタイルが導入された)。
Fortranモードは、どちらの継続行スタイルも使用できます。Fortranモードに入ったとき、バッファー内容から、自動的に適切な継続行スタイルを推論しようと試みます。これはバッファーの開始から、fortran-analyze-depth
行(デフォルトは100)をスキャンすることにより行われます。最初の行の開始がタブ文字か、6個のスペースかで選択が決定されます。スキャンが失敗した場合(たとえば、新しいバッファーで中身が空の場合)、fortran-tab-mode-default
の値(nil
の場合は固定形式で、非nil
の場合はタブ形式)が使用されます。モードラインに‘/t’
(fortran-tab-mode-string
)が表示されている場合、タブ形式が選択されていることを示します。それに応じてFortranモードはindent-tabs-mode
の値をセットします。
行のテキストがFortranの継続マーカー‘$’で始まるか、列5の非空白文字で始まる場合、Fortranモードはそれを継続行として扱います。継続行をTABでインデントした場合、その行をカレントの継続スタイルに変換します。Fortran命令文をC-M-jで分割した場合、継続スタイルに応じた継続マーカーがある新しい行が作成されます。
継続スタイルのセッティングは、Fortranモードでの編集の他の側面に影響します。固定形式の場合、命令文の最小列は6になります。Fortranブロック内でそれより大きい列にインデントされる行には、空白文字としてスペース文字だけを使用しなければなりません。タブ形式では、命令文の最小列は8で、列8より前の空白文字は1つのタブ文字でなければなりません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
その行の最初の非空白文字が数字の場合、Fortranのインデントはそれを行番号と判断して、列0から列4に移動します(Emacsでは列を常に0から数えるが、column-number-indicator-zero-based
をnil
にセットすることによりこれを変更できる。
モードラインのオプションを参照されたい)
4桁以下の行番号は、通常1つのスペースでインデントされます。変数fortran-line-number-indent
はこれを制御します。これは行番号がもてる最大のインデントを指定します。この変数のデフォルト値は1です。Fortranモードは、必要なら指定した最大列以下にインデントを減らして、行番号が列4を超えるのを防ごうと試みます。fortran-line-number-indent
が5の場合、行番号は列4で終わるように右端に揃えられます。
これらのルールに応じたインデントをするには、単純に行番号を挿入するだけで充分です。各桁が挿入されるたびに、インデントは再計算されます。この機能をオフに切り替えるには、変数fortran-electric-line-number
をnil
にセットしてください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Fortranモードは正しくインデントを行うために、あなたが、Fortranプログラム解読を単純化する特定の慣習にしたがうと仮定します:
Fortranコンパイラーは一般的に文字列定数の外の空白文字を無視しますが、Fortranモードはこれらのキーワードが隣接していない場合、それらを認識しません。‘else if’や‘end do’のような構成は許されますが、2つ目の単語は継続行ではなく、1つ目の単語と同じ行にあるべきです。
これらの慣習にしたがわない場合、インデントコマンドは醜いインデントをするかもしれません。しかし正しいFortranプログラムなら、慣習にしたがわずにインデントされたものでも、その意味は変わりません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Fortranのインデントがどのように機能するかを制御する、追加の変数がいくつかあります:
fortran-do-indent
‘do’命令の各レベルにたいする、追加のインデントです(デフォルトは3)。
fortran-if-indent
‘if’、‘select case’、‘where’命令の各レベルにたいする、追加のインデントです(デフォルトは3)。
fortran-structure-indent
‘structure’、‘union’、‘map’、‘interface’命令の各レベルにたいする、追加のインデントです(デフォルトは3)。
fortran-continuation-indent
継続行の本文にたいする、追加のインデントです(デフォルトは3)。
fortran-check-all-num-for-matching-do
Fortran
77では、番号つきの‘do’命令は、それにマッチする行番号をもつ任意の命令で終了します。この目的のためには‘continue’命令を使うのが一般的です(が、強制ではありません)。この変数が非nil
値の場合、番号が付与された命令をインデントするとき、そこで終了する‘do’をチェックしなければなりません。‘do’命令を常に‘continue’(またはよりモダンな‘enddo’)で終了する場合は、この変数をnil
(デフォルト)にセットすることにより、インデントの速度を上げることができます。
fortran-blink-matching-if
この変数がt
の場合、‘endif’(または‘enddo’)命令のインデントにより、マッチする‘if’(または‘do’)命令にカーソルが数瞬移動します。デフォルトはnil
です。
fortran-minimum-statement-indent-fixed
固定形式の継続行スタイルを使用する場合の、Fortran命令にたいする最小のインデントです。命令本体はこれより小さい値でインデントされることはありません。デフォルトは6です。
fortran-minimum-statement-indent-tab
タブ形式の継続行スタイルを使用する場合の、Fortran命令にたいする最小のインデントです。命令本体はこれより小さい値でインデントされることはありません。デフォルトは8です。
以下のセクションでは、コメントのインデントを制御する変数を説明します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
通常のEmacsのコメントコマンドは、コード行の後にコメントを記述できると仮定します。Fortran 77では、標準のコメント構文はコメント行に行全体を要求します。したがってFortranモードは、標準のEmacsコメントコマンドを置き換え、新しい変数も定義します。
Fortranモードは、‘!’で始まり、他のテキストの後に記述することができる、Fortran
90のコメント構文も処理できます。この構文を許すFortran
77コンパイラーは限られているので、Fortranモードは、あらかじめそれを行うように指示しない限り、そのようなコメントを挿入しません。これを行うには、変数fortran-comment-line-start
に‘"!"’をセットします。通常とは異なる値を使う場合、fortran-comment-line-start-skip
も変更する必要があるでしょう。
コメントの位置揃え、または新しいコメントを挿入します(comment-dwim
)。
非標準の‘!’だけを適用します(comment-set-column
)。
リージョンのすべての行をコメントにします。または(引数を指定した場合は)コメントを実際のコードに戻します(fortran-comment-region
)。
Fortranモードで実行すると、これは標準のcomment-dwim
を実行します。これは任意の種類の既存のコメントを認識して、それらのテキストの位置揃えをします。既存のコメントがない場合は、コメントの挿入・位置揃えをします。Fortranモードでのコメントの挿入および位置揃えは、他のモードとは異なります。
新しいコメントが挿入されなければならない場合、カレント行が空のときは、行全体をコメントとして挿入します。その行が空でない場合、もしそれを使うことを指示していれば、非標準の‘!’コメントが挿入されます。そうでない場合はカレント行の前に新しい行を挿入して、その行全体をコメントにします。
非標準の‘!’コメントは、他の言語のコメントと同じように位置揃えされますが、行全体のコメントは異なります。標準の行全体のコメントは、コメント区切り自体は常に列0に出現しなければなりません。位置揃えできるのは、コメントの中のテキストです。変数fortran-comment-indent-style
に、以下の3つの値のうち1つをセットすることにより、3つのスタイルの位置揃えを選択できます。
fixed
テキストを固定列に位置揃えします。これはfortran-comment-line-extra-indent
と命令文の最小のインデントとの和です。これがデフォルトです。
最小のインデントは、タブ形式の継続行スタイルの場合はfortran-minimum-statement-indent-tab
で、固定形式スタイルの場合はfortran-minimum-statement-indent-fixed
です。
relative
そのテキストがコード行であるかのように位置揃えしますが、fortran-comment-line-extra-indent
に指定した列のインデントが追加されます。
nil
行全体のコメントを自動的に移動しません。
これらに加えて、変数fortran-comment-indent-char
に、使用したい1文字をセットすることにより、行全体のコメントのインデントに使用する文字を指定することができます
コンパイラーにたいする命令行や、プリプロセッサー行は、コメント行と同じ外観をもっています。しかし、fortran-comment-indent-style
の値に関わらず、そのような行が決してインデントされないことが重要です。変数fortran-directive-re
は、どのような行がそのような命令なのかを指定する正規表現です。これにマッチする行はインデントされず、特別な外観のフォントが適用されます。
Emacsの通常のコメントコマンドC-x ;
(comment-set-column
)は再定義されません。‘!’コメントを使用している場合、このコマンドをそれらに使用できます。そうでない場合、これはFortranモードでは役に立ちません。
コマンドC-c ;
(fortran-comment-region
)は、リージョンのすべての行の行頭に文字列‘c$$$’を挿入することにより、これらをコメントにします。数引数を指定した場合、各行の行頭から‘c$$$’を削除することにより、リージョンをコードに戻します。これらのコメントに使用する文字列は、変数fortran-comment-region
をセットすることにより制御できます。これはコマンドと変数が同じ名前をもつ例であることに注意してください。同じ名前を2つの用途で使用することによる衝突はありません。なぜならLispおよびEmacsではそれが意味するものは、コンテキストにより明らかだからです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Fortranモードは、Auto
Fillモードにたいする特別なサポートをもっています。これは命令文を挿入するとき、それが長くなりすぎた場合は自動的に分割するマイナーモードです。命令文の分割は、fortran-continuation-string
を使用した継続行により行われます(継続行を参照してください)。この分割はSPC、RET、TAB、およびFortranのインデントコマンドにより発生します。FortranモードでのAuto
Fillの有効化は、通常の方法で行うことができます。
Auto Fillモードを参照してください。
Auto
Fillは、その行が望ましい幅(fill-column
の値)より長くなった場合は、スペースおよび区切り文字で行をブレークします。Auto
Fillが行をブレークする(空白文字以外の)区切り文字は‘+’、‘-’、‘/’、‘*’、‘=’、‘<’、‘>’、‘,’です。fortran-break-before-delimiters
がnil
の場合、区切り文字の後ろで行ブレークします。そうでない場合(デフォルト)、区切り文字の前で行ブレークします。
すべてのFortranバッファーでAuto
Fillを有効にするには、fortran-mode-hook
にauto-fill-mode
を追加します。
フックを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
標準のFortran
77では、72列目以降は無視されます。ほとんどのコンパイラーはこれを変更するオプションを提供します(たとえばgfortranの‘-ffixed-line-length-N’)。変数fortran-line-length
をカスタマイズすることにより、Fortranモードでの行の長さを変更できます。このポイント以降はコメントにfont-lockされます(ただし文字列内の場合は除きます。fortran-line-length
を超える文字列は、font-lockを混乱させるでしょう)。
カレント行の上に、列目盛(column ruler)を一時的に表示します。
fortran-line-length
列の幅になるように、カレントウィンドウを水平に分割します(fortran-window-create-momentarily
)。これは、Fortranコンパイラーにより課せられた制限を超えないようにする助けになるでしょう。
(fortran-window-create
)列の幅になるように、カレントウィンドウを水平に分割します。その後は編集を続行できます。
列fortran-line-length
以上のすべてのテキストを削除します。
コマンドC-c C-r
(fortran-column-ruler
)は、カレント行の上に列目盛を一時的に表示します。列目盛は2行のテキストで、Fortranプログラムにおいて特別な意味をもつ列の位置を表示します。角カッコ(square
brackets)は行番号の範囲を示し、中カッコ(curly brackets)は命令文本体の範囲を示します。列番号がその上に表示されます。
GNU
Emacsで常にそうであるように、列番号は0からカウントされることに注意してください(ただしFcolumn-number-indicator-zero-based
oをカスタマイズして、rtranにマッチするよう列表示を変更することができる)。
モードラインのオプションを参照されたい)
結果として、この番号はあなたが親しんでいる番号より1小さくなるかもしれません。しかしこの行で示される位置は、Fortranの標準です。
列目盛を表示するのに使用されるテキストは、変数indent-tabs-mode
の値に依存します。indent-tabs-mode
がnil
の場合、変数fortran-column-ruler-fixed
の値が列目盛として使用されます。それ以外は、変数fortran-column-ruler-tab
の値が表示されます。これらの値を変更することにより、表示される列目盛を変更できます。
C-c C-w
(fortran-window-create-momentarily
)で、一時的にカレントウィンドウを水平方向に分割して、ウィンドウの幅をfortran-line-length
列にすることにより、長くなりすぎた行を見つけることができます。スペースをタイプすると元の幅に戻ります。
適切な位置でウィンドウを水平方向に分割して、編集を継続することもできます。これを行うには、C-u C-c C-w (M-x
fortran-window-create
)を使用します。このウィンドウで編集することより、Fortranでの正しい長さを超える行をすぐに見つけることができます。
コマンドM-x
fortran-strip-sequence-nosは、カレントバッファーのすべての行にたいして、列fortran-line-length
以上のテキストすべてを削除します。これは古いシーケンス番号を削除する一番簡単な方法です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Fortranモードは、一般的なキーワードや定義にたいするabbrev(abbreviation: 省略形)を提供します。あなたが定義できるabbrevと同様なものがあります。これらを使用するには、Abbrevモードをオンに切り替えなければなりません。 abbrev(略語)を参照してください。
ビルトインのabbrevは、1つの点で特異です。これらはすべてセミコロンから始まります。たとえばFortranのビルトインのabbrevである‘;c’は、‘continue’にたいする省略形です。‘;c’を挿入してから、スペースや改行のような区切りとなる文字を挿入すると、Abbrevモードが有効な場合、‘;c’は自動的に‘continue’に展開されます。
‘;?’または‘;C-h’とタイプすると、すべてのビルトインのFortranのabbrevのリストと、それが何を意味するかが表示されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
前のチャプターでは、プログラムを変更するのに便利なEmacsコマンドについて議論しました。このチャプターでは、プログラムのコンパイルとテストに役立つコマンドを扱います。
27.1 Emacs下でのコンパイルの実行 | Lisp以外の言語(C、Pascal、など)のプログラムのコンパイル。 | |
27.2 Compilationモード | コンパイラーのエラーをvisitするモード。 | |
27.3 コンパイルのためのサブシェル | compilationバッファーで使えるように、シェルを適切にカスタマイズする。 | |
27.4 Emacs下でのGrepによる検索 | grepによる検索。 | |
27.5 オンザフライで構文エラーを見つける | オンザフライでの構文エラーの検索。 | |
27.6 Emacs下でのデバッガーの実行 | 非Lispプログラムのための、シンボルデバッガーの実行。 | |
27.7 Lisp式の実行 | Lispプログラムを編集するためのさまざまなモードと、Lispプログラムを実行する異なる機能。 | |
27.8 EmacsのためのLispコードによるライブラリー | LispプログラムがEmacsにロードされる方法。 | |
27.9 Emacs Lisp式の評価 | Emacsで1つのLisp式を実行する。 | |
27.10 Lisp Interactionバッファー | EmacsバッファーでLispを実行する。 | |
27.11 外部Lispの実行 | Emacsを通じて別のLispと通信する。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsは、CやFortranのような言語のためのコンパイラーを実行でき、コンパイルログをEmacsのバッファーに取り込むことができます。エラーメッセージを解析して、エラーが発生した場所を示すこともできます。
Emacs下で非同期にコンパイラーを実行し、エラーメッセージは*compilation*バッファーに送られます。
最後に呼び出したM-x compileと同じコマンドで、コンパイラーを呼び出します。
サブプロセスで実行されているコンパイルをkillします。
make
、または他のコンパイルコマンドを実行するには、M-x
compileとタイプします。これはミニバッファーを使用してシェルのコマンドラインを読み取り、シェルをEmacsのサブプロセス(または下位プロセス(inferior
process))として、そのコマンドを実行します。出力は*compilation*という名前のバッファーに挿入されます。カレントバッファーのデフォルトディレクトリーが、コマンドを実行する作業ディレクトリーとして使用されます。したがって、通常はそのディレクトリーでコンパイルが行われます。
デフォルトのコンパイルコマンドは‘make
-k’で、これはmake
ユーティリティーを使ってコンパイルするプログラムにたいして通常正しいコマンドです(‘-k’フラグはmake
に、エラー後も可能な限りコンパイルを継続するよう指示します)。Make in GNU Make Manualを参照してください。前にM-x
compileを実行している場合、それに指定したコマンドは自動的に変数compile-command
に格納されます。これは、次にM-x
compileとタイプしたときのデフォルトとなります。ファイルのファイルローカルな値でcompile-command
を指定することもできます(ファイル内のローカル変数を参照してください)。
コンパイルを開始すると、他のウィンドウで*compilation*バッファーが表示されますが、そのウィンドウは選択されません。コンパイルが実行中は、*compilation*バッファーのメジャーモードインジケーターに‘run’という単語が表示され、単語‘Compiling’がすべてのモードラインに表示されます。コンパイル実行中、常に*compilation*バッファーを表示している必要はありません。表示されていなくてもコンパイルは継続します。何らかの理由によりコンパイルが終了したときは、*compilation*バッファーのモードラインが‘exit’(その後に終了コード。‘[0]’の場合は通常終了)、または‘signal’(何らかのシグナルがプロセスを終了させた場合)に変化します。
コンパイルの経過を見たいときは、バッファー*compilation*に切り替えて、ポイントをバッファーの最後に移動します。ポイントが最後にある場合、コンパイル出力はポイント位置に挿入されるので、ポイントは最後に留まります。そうでない場合は、バッファーの最後にコンパイル出力が追加される間も、ポイント位置は固定されたままです。
コンパイル処理中、モードラインにはその時点までのエラー、警告の数と、コンパイラーからの情報が表示されます。
変数compilation-scroll-output
を非nil
値に変更した場合、*compilation*バッファーは出力に追随して自動的にスクロールします。値がfirst-error
の場合は、最初のエラーが出現した箇所でスクロールがストップし、ポイントはエラー箇所に留まります。その他の任意の非nil
値の場合は、出力がなくなるまでスクロールが継続されます。
最後にコンパイルしたのと同じコマンドで再実行するには、M-x recompileとタイプします。これは最後に呼び出したM-x compileからコンパイルコマンドを再利用します。これは*compilation*バッファーも再利用し、コンパイルもそのバッファーのデフォルトディレクトリー、つまり前にコンパイルが開始されたのと同じディレクトリーで行われます。*compilation*バッファーでは、このコマンドはgにバインドされています。
新しいコンパイルの開始は、すでに*compilation*で実行中のコンパイルをkillします。これは、そのバッファーが1度に1つのコンパイルしか処理できないからです。しかし実行中のコマンドを実際にkillする前に、M-x
compile、およびM-x
recompileは確認を求めます。常に確認なしで自動的にコンパイルをkillするには、変数compilation-always-kill
をt
に変更します。コマンドM-x
kill-compilationで、コンパイルプロセスをkillすることもできます。
1度に2つのコンパイルを実行するには、最初に1つを開始してから(多分rename-uniquely
を使用して。その他のバッファー操作を参照してください)*compilation*、バッファーをリネームして、それからバッファーを切り替えて他のコンパイルを開始します。これにより新しい*compilation*バッファーが作成されます。
コンパイルコマンドに渡される環境は、変数compilation-environment
で制御できます。この変数の値は環境変数のセッティングのリストで、各要素は文字列"envvarname=value"
の形式です。これらの環境変数のセッティングは、通常の値をオーバーライドします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
*compilation*バッファーは、Compilationモードと呼ばれるメジャーモードを使用します。Compilationモードは、バッファーのエラーメッセージをハイパーリンクに変換します。ポイントをそこに移動してRETをタイプするか、マウスでクリック(マウスで参照をフォローするを参照してください)すると、別のウィンドウでエラーメッセージのlocusをvisitします。locusとは、エラーが発生したファイルの特定の位置を意味します。
エラーメッセージや警告メッセージにたいするcompilation-error
とcompilation-warning
のように、*compilation*バッファーの外観は、*compilation*バッファーのハイライト箇所に使用されるフェイスをカスタマイズすることにより制御されます。これらのフェイスはerror
フェイスとwarning
フェイスから継承されるので、親フェイスを直接カスタマイズすることも可能なことに注意してください。
カスタマイズに関する変数とフェイスの完全なリストを確認するには、M-x customize-group RET compilationを使用してください。
変数compilation-auto-jump-to-first-error
を非nil
値に変更した場合、Emacsは、*compilation*バッファーに表れる最初のエラーメッセージのlocusを自動的にvisitします。
Compilationモードは、以下の追加のコマンドを提供します。これらのコマンドは*grep*バッファーでも使用できます。このバッファーではエラーメッセージのかわりに、検索にたいするマッチにハイパーリンクが設定されます(Emacs下でのGrepによる検索を参照してください)。
次のエラーメッセージ(またはマッチ)のlocusをvisitします(next-error
)。
前のエラーメッセージ(またはマッチ)のlocusをvisitします(previous-error
)。
locusをvisitせずに、ポイントを次のエラーメッセージ(またはマッチ)に移動します(compilation-next-error
)。
locusをvisitせずに、ポイントを前のエラーメッセージ(またはマッチ)に移動します(compilation-previous-error
)。
他のファイルで発生した次のエラーメッセージ(またはマッチ)にポイントを移動します(compilation-next-file
)。
他のファイルで発生した前のエラーメッセージ(またはマッチ)にポイントを移動します(compilation-previous-file
)。
Next Error Followマイナーモードに切り替えます。これはcompilationバッファーでのカーソル移動にしたがって、ソースを自動的に表示するモードです。
出力が*compilation*バッファー内に表示されている、最後のコマンドを再実行します。
next-error
とprevious-error
の次回の呼び出しで使用されるバッファーを選択します。
順番にエラーをvisitするには、C-x ` (next-error
)とタイプするか、これと等価なM-g
M-nまたはM-g
nとタイプします。このコマンドはCompilationモードのバッファーだけでなく、任意のバッファーから呼び出すことができます。コンパイル後に最初に呼び出すときは、最初のエラーメッセージのlocusをvisitします。連続したM-g M-nは、同じ方法で次のエラーをvisitします。*compilation*バッファーからRETまたはマウスクリックで特定のエラーをvisitした場合、M-g M-nはそのエラーの次のエラーからvisitしていきます。これ以上visitするエラーメッセージがない場合、M-g M-nはエラーをシグナルします。C-u M-g M-nはcompilationバッファーの先頭から再開して、最初のlocusをvisitします。
M-g M-pまたはM-g p (previous-error
)は、反対方向にエラーを巡回します。
コマンドnext-error
およびprevious-error
は、バッファー*compilation*または*grep*にリストされたエラー(またはマッチ)だけに作用されるわけではありません。これらのコマンドはM-x
occur (その他の検索およびループコマンドを参照のようなコマンドで生成されたエラー(またはマッチ)を巡回する方法も知っています。カレントバッファーがエラーメッセージ、またはマッチを含む場合には、これらのコマンドはそれらを巡回するでしょう。そうでなければEmacsは(変数next-error-find-buffer-function
の値をnext-error-buffer-on-selected-frame
にカスタマイズしていれば)選択されたフレームのウィンドウの中からエラーメッセージ(またはマッチ)を含むバッファー、次にnext-error
またはprevious-error
が最後に使用したバッファー、最後にその他のすべてのバッファーを探します。これらのコマンドが巡回するために選択されたバッファーがカレントでウィンドウに表示されていなければ、そのバッファーが表示されるでしょう。その後のnext-error
呼び出しで使用される別バッファーへの切り替えには、コマンドnext-error-select-buffer
を使用できます。
デフォルトでは、コマンドnext-error
およびprevious-error
は、重要でないメッセージはスキップします。変数compilation-skip-threshold
が、これを制御します。デフォルト値は1で、これは警告(warning)より重要でないメッセージをスキップします。2の場合、エラー(error)より重要でないものをスキップし、0はメッセージをスキップしません。
Emacsがエラーメッセージのlocusをvisitしているとき、関連するソース行が一時的にハイライトされます。選択されたバッファーのlocusのハイライトの持続時間は変数next-error-highlight
、それ以外のバッファーではnext-error-highlight-no-select
により決定されます。
*compilation*バッファーが左フリンジ(ウィンドウのフリンジを参照してください)のあるウィンドウで表示されている場合、locusをvisitするコマンドはカレントエラーメッセージを指す矢印をフリンジに配します。テキスト端末のように、左フリンジがないウィンドウの場合、これらのコマンドは、カレントメッセージがウィンドウの一番上にくるようにウィンドウをスクロールします。変数compilation-context-lines
をt
に変更すると、かわりに列0の前に可視の矢印を挿入します。整数値nに変更した場合には、これらのコマンドはフリンジの有無に関わらずメッセージがウィンドウの上からn行目にくるようにウィンドウをスクロールします。デフォルト値のnil
では上述のように振る舞います。
コンパイラーからのメッセージを解析するために、Compilationモードは変数compilation-error-regexp-alist
を使用します。これはさまざまなエラーメッセージのフォーマットをリストし、それらからlocusを抽出する方法をEmacsに指示します。同じような変数grep-regexp-alist
は、grep
コマンド(Emacs下でのGrepによる検索を参照してください)の出力を解析する方法を指示します。
Compilationモードは、スクリーン単位でスクロールを行うために、キーSPCおよびDELも定義します。M-n
(compilation-next-error
)およびM-p
(compilation-previous-error
)は、次または前のエラーメッセージに移動します。M-{
(compilation-next-file
)およびM-}
(compilation-previous-file
)は、違うソースファイルの、次または前のエラーメッセージに移動します。
C-c C-fとタイプして、Next Error Followモードに切り替えることができます。このマイナーモードでは、compilationバッファーでの通常のカーソル移動により、自動的にソースを表示するバッファーが更新されます。たとえばカーソルをエラーメッセージに移動すると、そのエラーにたいするlocusが表示されます。
Compilationモードの機能は、Compilation Minorモード呼ばれるマイナーモードでも利用可能です。これは通常のコンパイル出力のバッファーだけでなく、任意のバッファーのエラーメッセージを解析します。M-x compilation-minor-modeとタイプすることにより、このマイナーモードが有効になります。たとえばRloginバッファー(リモートホストのシェルを参照してください)では、Compilation minorモードはリモートのソースファイルに、FTPを通じて自動的にアクセスします(ファイルの名前を参照してください)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このセクションには、compilationバッファー内で、シェルやその機能を使用するための、さまざまなテクニックとアドバイスが含まれています。ローカルでのコンパイルに特有なトピックを扱うので、デフォルトディレクトリーがリモートホスト上であるようなcompilationバッファーでは、おそらくほとんどは機能しない(または無関係)でしょう。
M-x compileコマンドは、コンパイルコマンドを実行するためにシェルを使いますが、オプションで非対話的なシェルを指定します。これは、シェルがプロンプトなしで開始されることを意味します。*compilation*バッファーで、通常のシェルプロンプトの見映えがよくない場合、それはシェルの初期化ファイルで、無条件にプロンプトをセットするという間違いを犯していることを意味します(この初期化ファイルは使用しているシェルに応じて.bashrc、.profile、.cshrc、.shrcなどの名前がついています)。シェルの初期化ファイルでは、プロンプトがすでにあるときだけプロンプトをセットするべきです。これをbashで行うには、以下のようにします:
if [ "${PS1+set}" = set ] then PS1=… fi
cshで行うには以下のようにします:
if ($?prompt) set prompt = …
compilationのサブシェルに渡す環境変数TERM
の値をカスタマイズしたい場合は、変数comint-terminfo-terminal
の値をカスタマイズしてください(Shellモードのオプションを参照)。
Emacsは、コンパイラープロセスが非同期なサブプロセスで実行されることを要求しません。もしこれを行う場合、メインのコンパイラープロセスが終了した後で、サブプロセスがまだ実行中のときは、Emacsはこれらをkillするか、それらの出力はEmacsには到達しません。この問題を避けるには、メインのコンパイルプロセスが、それのサブプロセスの終了までwaitするようにします。シェルスクリプトでは、以下のように‘$!’と‘wait’を使用して、これを行うことができます:
(sleep 10; echo 2nd)& pid=$! # サブプロセスのpidを記録 echo first message wait $pid # サブプロセスのwait
バックグラウンドのプロセスがcompilationバッファーに何も出力せず、メインのコンパイルプロセスが終了したときに、これらがkillされるのを防ぐことだけが必要な場合は、以下で充分です:
nohup command; sleep 1
MS-DOSオペレーティングシステムでは、非同期なサブプロセスはサポートされていないので、M-x compileはコンパイルコマンドを同期実行します(たとえばEmacsで他のことを行うには、コマンドが終了するまで待たなければなりません)。EmacsとMS-DOSを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsからコンパイラーを実行して、コンパイルエラーの行をvisitできるように、grep
を実行して見つかったマッチの行をvisitすることもできます。これはgrep
が報告するマッチを、エラーのように扱うことで機能します。出力バッファーはGrepモードを使用します。これはCompilationモードの変種です(Compilationモードを参照してください)。
Emacs下でgrep
を非同期で実行し、*grep*という名前のバッファーにマッチした行をリストします。
find
を通じてgrep
を実行し、出力を*grep*バッファーに収集します。
zgrep
を実行して、出力を*grep*バッファーに収集します。
実行中のgrep
サブプロセスをkillします。
grep
を実行するには、M-x
grepとタイプしてから、どのようにgrep
を実行するかを指定するコマンドラインを入力します。これは通常、grep
を実行するとき与える引数と同じです。grep
スタイルのregexp(通常、シェルのスペシャル文字をクォートするためシングルクォートで囲む)の後に、ファイル名(ワイルドカードも使用できる)を続けます。M-x
grepにプレフィクス引数を指定した場合、バッファーのポイント位置周辺の識別子(識別子のリファレンスを探すを参照してください)を探して、それをgrep
コマンドのデフォルトにします。
指定するコマンドは、単純にgrep
を実行するものである必要はありません。同じフォーマットで出力を生成するシェルコマンドを使用することができます。たとえば、以下のように、grep
コマンドを連結することができます:
grep -nH -e foo *.el | grep bar | grep toto
grep
コマンドの出力は、*grep*バッファーに送られます。オリジナルのファイルの対応する行は、コンパイルエラーと同様、M-g M-n、RETなどで見つけることができます。コマンドのより詳細な説明と、*grep*バッファー内で利用可能なキーバインディングについては、Compilationモードを参照してください。
マッチをハイライトするために、その周囲に特別なマーカーを出力する‘--color’オプションを指定できるgrepプログラムもあります。この機能を使うには、grep-highlight-matches
をt
にセットします。これによりソースバッファーのマッチを表示するとき、ソース行全体ではなく、正確なマッチだけがハイライトされます。
コンパイルコマンド(Emacs下でのコンパイルの実行を参照)のときと同様、grepコマンド実行中には、モードラインにはそれまでに見つかったマッチ数が表示されて、ハイライトされます。
grep
コマンドは、実行前にバッファーの保存を提案するでしょう。これは、変数grep-save-buffers
により制御されます。利用できる値はnil
(保存しない)、ask
(保存前に尋ねる)、または述語として使用される関数(ファイル名をパラメーターとして呼び出され、バッファーを保存する場合は非nil
をリターンすべきである)のいずれかである。その他の非nil
値は、すべてのバッファーが確認なしで保存されるべきであることを意味します。デフォルト値はask
です。
コマンドM-x grep-find(M-x find-grepでも利用可能)は、M-x
grepと似ていますが、コマンドにたいして提供される初期のデフォルトが異なります —
このデフォルトはfind
とgrep
の両方を実行するもので、これによりディレクトリーツリーの各ファイルを検索できます。Diredとfind
のfind-grep-dired
コマンドも参照してください。
コマンドM-x lgrep (local grep)およびM-x rgrep (recursive
grep)は、grep
およびgrep-find
のユーザーフレンドリーなバージョンで、これらはマッチにたいする正規表現、検索するファイル、検索の基準となるディレクトリーを個別に尋ねます。検索での大文字小文字の区別は、case-fold-search
の値で制御されます。コマンドM-x
zrgrepはM-x
rgrepと似ていますが、これはgrep
のかわりにzgrep
を呼び出し、gzipされたファイルの内容を検索します。
これらのコマンドは、変数grep-template
(lgrep
用)、およびgrep-find-template
(rgrep
用)にもとづいてシェルコマンドを構築します。検索するファイルには、変数grep-files-aliases
で定義されたエイリアスを使用できます。
変数grep-find-ignored-directories
にリストされたディレクトリーは、M-x
rgrepの検索で自動的にスキップされます。デフォルト値には、さまざまなバージョンコントロールシステムで使用されるデータディレクトリーが含まれます。
デフォルトではlgrep
、rgrep
、zgrep
にたいして構築されるシェルコマンドは、ファイルとディレクトリーの長いリストを含む部分を隠蔽することにより省略して表示されます。隠蔽された部分を表す省略記号のボタンをクリックすれば隠蔽部分を表示できます。M-x
grep-find-toggle-abbreviationとタイプしてインタラクティブに隠蔽部分の表示を切り替えることもできます。このシェルコマンドの隠蔽を無効にするにはオプションgrep-find-abbreviate
をnil
値にカスタマイズしてください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
FlymakeモードはC、C++、Perl、HTML、TeX/LaTeXを含む、多くのプログラミング言語およびマークアップ言語の構文チェックを、オンザフライ(on-the-fly)で処理するマイナーモードです。これは通常の人間の言語にたいしてスペルチェックを処理する、Flyspellモード(スペルのチェックと訂正を参照してください)と、その方法において類似しています。Flymakeモードはファイルの編集にしたがい、そのバッファーの一時的なコピーを使用して、適切な構文チェックツールをバックグラウンドで実行します。それからエラーメッセージと警告メッセージを解析して、そのバッファーの間違った行をハイライトします。使用される構文チェックツールは、言語に依存します。たとえば通常、C/C++ファイルの場合は、Cコンパイラーです。Flymakeは、複雑なプロジェクトにたいしてのチェックでは、make
のようなビルドツールを使うこともできます。
Flymakeモードを有効にするには、M-x flymake-modeとタイプします。M-x flymake-goto-next-errorおよびM-x flymake-goto-prev-errorを使用して、これが見つけたエラーにジャンプすることができます。カレント行に関連するエラーメッセージを表示するには、M-x flymake-display-err-menu-for-current-lineとタイプしてください。
Flymakeの使用についての詳細は、 Flymake in The Flymake Manualを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
GUD(Grand Unified Debugger)ライブラリーは、広範なシンボリックデバッガーにたいするEmacsのインターフェースを提供します。これはGNUデバッガー(GDB)、同様にDBX、SDB、XDB、GuileのREPLのデバッグコマンド、Paerlのデバッグモード、PythonデバッガーのPDB、JavaデバッガーのJDBを実行することができます。
EmacsはGDBにたいする特別なインターフェースを提供します。これはデバッグされているプログラムの状態を表示する追加のEmacsウィンドウを使用します。GDBのグラフィカルインターフェースを参照してください。
Emacsは、Emacs Lispプログラムにたいするビルトインのデバッガーももっています。The Lisp Debugger in the Emacs Lisp Reference Manualを参照してください。
27.6.1 GUDの開始 | デバッガーサブプロセスを開始する方法。 | |
27.6.2 デバッガーの操作 | デバッガーとソースバッファーの関係。 | |
27.6.3 GUDのコマンド | 一般的なコマンドのキーバインディング。 | |
27.6.4 GUDのカスタマイズ | GUDにたいして独自のコマンドを定義する。 | |
27.6.5 GDBのグラフィカルインターフェース | GDB機能を使用して、グラフィカルなデバッグ環境を実装する拡張モード。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
デバッガーサブプロセスを開始する複数のコマンドがあり、それらは特定のデバッガープログラムに対応しています。
GDBをサブプロセスとして実行し、IDE-likeなEmacsインターフェースを通じてやりとりをします。このコマンドに間する詳細は、GDBのグラフィカルインターフェースを参照してください。
GDBサブプロセスとの入出力に、GUD interactionバッファーを使用してGDBを実行します((デバッガーの操作を参照してください))。そのようなバッファーがすでに存在している場合はそのバッファーに切り替え、存在しない場合はバッファーを作成して切り替えます。
ここにリストされている他のコマンドは、他のデバッガープログラムにたいして同じことを行います。
Perlインタープリターをデバッグモードで実行します。
Javaデバッガーを実行します。
Pythonデバッガーを実行します。
Guile Schemeプログラムをデバッグするために、Guile REPLを実行します。
DBXデバッガーを実行します。
XDBデバッガーを実行します。
SDBデバッガーを実行します。
これらの各コマンドは、ミニバッファーを使ってデバッガーを呼び出すコマンドラインを読み取ります。ミニバッファーの初期内容は、デバッガーの標準的な実行ファイル名とオプションで、デバッグしたいと推測される実行ファイル名の場合もあります。シェルのワイルドカードと変数は、このコマンドラインでは使用できません。Emacsは‘-’で始まらない最初のコマンド引数を、実行ファイル名とみなします。
Trampは、同じリモートホスト上のデバッガーとプログラムによる、リモートデバッグ機能を提供します。詳細については、Running a debugger on a remote host in The Tramp Manualを参照してください。これはGDBのリモートデバッグ機能とは別の物です、なぜなら、プログラムとデバッガーは違うマシンで実行されるからです(Debugging Remote Programs in The GNU debuggerを参照してください)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
GUD interactionバッファーは、デバッガーサブプロセスにテキストコマンドを送ったり、それの出力を記録するのに使用されるEmacsバッファーです。これはM-x gud-gdbや、 GUDの開始にリストされた他のコマンドで使用される、デバッガーとやりとりするための基本的なインターフェースです。 M-x gdbコマンドは、ブレークポイント、スタックフレーム、その他のデバッガーの状態の様相を制御する、追加の特別なバッファーにより、この機能を拡張します(GDBのグラフィカルインターフェースを参照してください)。
GUD interactionはShellモードの変種を使用するので、Shellモードで定義されたEmacsコマンドが利用可能です(Shellモードを参照してください)。ほとんどのデバッガーコマンドにたいして補完(補完を参照してください)が利用可能で、それらを繰り返すのに、通常のShellモードのヒストリーコマンドを使うことができます。 GUD interactionバッファーで使用できる特別なコマンドについては、GUDのコマンド を参照してください。
プログラムをデバッグすると、Emacsは関連するソースファイルをEmacsバッファーにvisitして、カレント実行行には左フリンジに矢印が表示されます(テキスト端末では最初の2列に‘=>’の矢印が表示されます)。そのようなバッファーでのポイントの移動は、矢印を移動しません。これらのソースファイルの編集はできますが、行の挿入や削除により矢印の位置は失われることに注意してください。なぜならEmacsには編集されたソース行が、デバッガーサブプロセスから報告されるどの行に対応するか、知る手立てがないからです。この情報を更新するには通常、プログラムのリコンパイルと再実行が必要です。
GUD Tooltipモードは、GUDにツールチップサポートを追加するグローバルなマイナーモードです。このモードに切り替えるには、M-x
gud-tooltip-modeとタイプします。このモードはデフォルトで無効になっています。有効にした場合、変数、関数、マクロ(識別子として総称される)にマウスポインターを移動すると、それらの値がツールチップで表示されます(ツールチップを参照)。値を表示したい式の上にマウスポインターを置くだけでは値が表示されない場合は、マウスでその式をドラッグしてマークし、マウスポインターをそのマークされた領域内に置いたままにすることにより、より明示的にEmacsに指示することができます。かわりにマウスをドラッグして識別子または式をマークしてから、マウスをマークした領域から離すと、式の値がツールチップに表示されます。GUD
Tooltipモードは、GUD
interactionバッファー、およびgud-tooltip-modes
にリストされたメジャーモードの、すべてのソースバッファーで効果があります。変数gud-tooltip-echo-area
が非nil
の場合、またはツールチップモードがオフの場合は、ツールチップではなくエコーエリアに値が表示されます。
M-x gud-gdbでGUD
Tooltipモードを使用する場合、GDBにより表示される式の値は、マクロを展開する場合があり、これはデバッグされているプログラムに副作用をもたらすかもしれません。この理由により、gud-gdb
ではツールチップの使用は無効になっています。M-x
gdbインターフェースを使用する場合、この問題は発生しません。なぜなら副作用を避ける特別なコードがあるからです。さらにプログラムが実行されていないときに、識別子に関連付けられたマクロの定義を表示することもできます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
GUDはブレークポイントのセットとクリアー、スタックフレームの選択、プログラムのステップ実行のためのコマンドを提供します。
ポイントのあるソース行にブレークポイントをセットします。
ソースバッファーからC-x C-a C-b
(gud-break
)が呼び出された場合、カレントソース行にデバッガーのブレークポイントをセットします。このコマンドはGUDを開始した後だけ利用可能です。デバッガーサブプロセスに関連付けられていないバッファーで呼び出すと、エラーをシグナルします。
以下のコマンドは、GUD interactionバッファーとグローバルの両方で利用可能ですが、キーバインドが異なります。キーがC-cで始まるものはGUD interactionバッファーだけで利用可能で、C-x C-aで始まるものはグローバルに利用可能です。コマンドのいくつかはツールバーを通じても利用可能です。また、特定のデバッガーではサポートされないものもあります。
GUD interactionバッファーで参照される最後のソース行を、別のウィンドウに表示します(gud-refresh
)。
次の1行を実行します(gud-step
)。その行が関数呼び出しを含む場合、関数呼び出しに入った後に実行をストップします。
次の1行を実行します(gud-next
)。その行が関数呼び出しを含む場合、関数の中でストップせずに関数をステップオーバーします。
機械語の1命令を実行します(gud-stepi
)。
ポイント位置の式を評価します(gud-print
)。表示したい正確な式をEmacsが表示しない場合、最初に式をリージョンとしてマークします。
停止位置を指定せずに実行を継続します。プログラムは、ブレークポイントに達する、プログラム終了、またはデバッガーがチェックしているシグナルを受けとるまで実行を続けます。
カレントソース行にブレークポイントがある場合、ブレークポイントを削除します。GUD interactionバッファーでこのコマンドを使用する場合、プログラムが最後に停止した位置に適用されます。
カレントソース行に、一時的なブレークポイントをセットします(gud-tbreak
)。GUD
interactionバッファーでこのコマンドを使用した場合、プログラムが最後に停止した位置に適用されます。
次の外側のスタックフレームを選択します(gud-up
)。これはGDBコマンドの‘up’と等価です。
次の内側のスタックフレームを選択します(gud-down
)。これはGDBコマンドの‘down’と等価です。
カレント行まで実行を継続します(gud-until
)。プログラムは、ブレークポイントに達する、プログラム終了、またはデバッガーがチェックしているシグナルを受けとる、またはカーソルがある行に到達するまで実行を続けます。
選択されたフレームがリターンするか、他の理由により停止するまでプログラムを実行します(gud-finish
)。
GDBを使用している場合、追加のキーバインディングが利用可能です:
ソースバッファーだけで有用です。gud-jump
はプログラムの実行箇所をカレント行に転送します。別の言い方をすると、プログラムが次に実行するのは、このコマンドを与えた位置になります。新しく実行される行が前の関数とは異なる場合、多分奇妙な結果になるので、GDBは確認を求めます。詳細は、GDBマニュアルのエントリーjump
を参照してください。
GDBの場合、シンボル名を補完します(gud-gdb-complete-command
)。このキーはGUD
interactionバッファーだけで利用可能です。
これらのコマンドは、それが意味がある場合には、数引数を繰り返し回数と解釈します。
TABは補完コマンドに割り当てられているので、GDBでデバッグしているプログラムへのタブの入力には使えません。タブの入力にはC-q TABとタイプしてください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
起動時にGUDは以下のフックの1つを実行します:
GDBを使用している場合はgdb-mode-hook
、
DBXを使用している場合はdbx-mode-hook
、
SDBを使用している場合はsdb-mode-hook
、
XDBを使用している場合はxdb-mode-hook
、Guile
REPLのデバッグにはguiler-mode-hook
、
Perlのデバッグモードを使用している場合はperldb-mode-hook
、
PDBを使用している場合はpdb-mode-hook
、
JDBを使用している場合はjdb-mode-hook
を実行します。
フックを参照してください。
Lispマクロgud-def
(Defining Macros in the Emacs Lisp
Reference Manualを参照してください)は、デバッガーに特定のコマンド文字列を送るEmacsコマンドを定義して、GUD
interactionバッファーで、それにたいするキーバインドをセットアップする便利な方法を提供します:
(gud-def function cmdstring binding docstring)
これはデバッガープロセスにcmdstringを送る、ドキュメント文字列がdocstringの、functionという名前のコマンドを定義します。コマンドfunctionを、任意のバッファーで使用できます。bindingが非nil
の場合、gud-def
はそのコマンドを、GUDバッファーのモードではC-c
binding、グローバルにはC-x C-a bindingにバインドします。
コマンド文字列cmdstringには、functionが呼び出されたときに書き込まれるデータのための、特定の‘%’シーケンスを含めることができます:
カレントソースファイルの名前です。カレントバッファーがGUDバッファーの場合、カレントソースファイルはプログラムがストップしているファイルです。
カレントソース行の番号です。カレントバッファーがGUDバッファーの場合、カレントソース行はプログラムがストップしている行です。
transient-mark-modeでは、リージョンがアクティブの場合はリージョンのテキストです。そうでない場合、ポイント位置またはそれに隣接する位置にあるCのlvalue(左辺値)、または関数呼び出し式です。
ポイント位置またはそれに隣接する位置にある、16進アドレスのテキストです。
呼び出された関数の数引数の10進数です。コマンドに数引数が指定されなかった場合、‘%p’は空文字列になります。
コマンド文字列に‘%p’を使用しない場合、定義したコマンドは数引数を無視します。
カレントソースファイルのディレクトリー名です。
ポイントを取り囲む式から派生された、完全に記述されたされたclass名(fully qualified class name)です(jdbのみ)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
コマンドM-x gdbはブレークポイント、スタックフレーム、その他のデバッグ状態の様相を制御するために特化したバッファーで、IDE-likeなインターフェースでGDBを開始します。これは、たとえばマウスソースバッファーのフリンジをクリックすることにより、そこにブレークポイントをセットするなどの、マウスによりデバッグセッションを制御する追加の方法も提供します。
これらの追加機能を使わずにGUD interactionバッファーのインターフェースだけを使ってGDBを実行するには、M-x gud-gdb (GUDの開始を参照してください)を使用します。これは、(現在のところM-x gdbではサポートされていない)1つのEmacsセッションで複数のプログラムをデバッグしたいときだけ使用しなければなりません。
内部的には、M-x gdbはGDBにたいしてスクリーンサイズに制限がないと告げます。正しい操作のために、デバッグセッションの間はGDBのスクリーンの高さと幅の値を変更してはいけません。
27.6.5.1 GDBのユーザーインターフェースのレイアウト | 複数表示されたバッファーの制御。 | |
27.6.5.2 Sourceバッファー | プログラムを制御するためにフリンジ・余白でマウスを使う。 | |
27.6.5.3 Breakpointsバッファー | ブレークポイントのコントロールパネル。 | |
27.6.5.4 Threadsバッファー | スレッドの表示。 | |
27.6.5.5 Stackバッファー | callスタックからのフレームの選択。 | |
27.6.5.6 その他のGDBバッファー | GDBの状態を制御するその他のバッファー。 | |
27.6.5.7 ウォッチ式 | speedbarで変数の値をモニターする。 | |
27.6.5.8 マルチスレッドのデバッグ | 複数スレッドのプログラムのデバッグ。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
変数gdb-many-windows
がnil
(デフォルト)の場合、M-x gdbは通常GUD
interactionバッファーだけを表示します。しかしgdb-show-main
が非nil
の場合、2つのウィンドウで開始します。その場合、1つはGUD
interactionバッファーを表示して、もう一方はデバッグするプログラムのmain
関数のソースを表示します。
gdb-many-windows
が非nil
の場合、M-x gdbは以下のフレームレイアウトを表示します。
+--------------------------------+--------------------------------+ | GUD interaction buffer | Locals/Registers buffer | |--------------------------------+--------------------------------+ | Primary Source buffer | I/O buffer for debugged pgm | |--------------------------------+--------------------------------+ | Stack buffer | Breakpoints/Threads buffer | +--------------------------------+--------------------------------+
ウィンドウのレイアウトを変更した場合、M-x gdb-restore-windowsとタイプして、複数ウィンドウのレイアウトをリストアできます。複数ウィンドウレイアウトと、GUD interactionバッファーとソースファイルだけの単純なレイアウトを切り替えるには、M-x gdb-many-windowsとタイプしてください。
ウィンドウを複雑にセットアップをしていて、gdb-many-windows
がそれを混乱させるのを望まない場合は、別のフレーム内でM-x
gdbを呼び出すほうがよいでしょう。その場合は、元のフレームのウィンドウのアレンジに影響はありません。テキスト端末で作業する場合は、GDBセッションに別のフレームを使用すれば、各ウィンドウにたいするスクリーン資源が最活用される可能性があるので、特に便利になり得ます。
同じフレームまたは異なるフレームに、GDBに関連した追加のバッファーを表示するように指定できます。M-x gdb-display-buffertype-bufferまたはM-x gdb-frame-buffertype-bufferとタイプして、望むバッファーを選択します。ここでbuffertypeは‘breakpoints’のような、該当するバッファータイプです。‘GUD’メニューの、サブメニュー‘GDB-Windows’または‘GDB-Frames’により、メニューバーから同じことができます。
デバッグを終えたらC-x kでGUD interactionバッファーをkillすれば、このセッションでの関連するすべてのバッファーをkillできます。しかしEmacsでソースコードの編集とリコンパイル終えて、さらにデバッグを続けたいときは、これを行う必要はありません。実行を再開すると、GDBは自動的に新しい実行ファイルを見つけます。GUD interactionバッファーを残しておけば、シェルヒストリー、同様にGDBブレークポイントを残すことができる利点があります。最近編集したソースファイルのブレークポイントが、正しい場所にあるかチェックする必要があります。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
その行のカレントブレークポイントをセット、またはクリアーします(gdb-mouse-set-clear-breakpoint
)。
その行のブレークポイントを有効または無効にします(gdb-mouse-toggle-breakpoint-margin
)。
その行まで実行を継続します(gdb-mouse-until
)。
その行にジャンプします(gdb-mouse-jump
)。
グラフィカルなディスプレーでは、sourceバッファーのフリンジをmouse-1でクリックして、その行にブレークポイントをセットできます(ウィンドウのフリンジを参照してください)。クリックした場所に赤いドットが表示されます。すでにそこにブレークポイントが存在する場合、クリックでそれを削除します。既存のブレークポイントをC-mouse-1でクリックすることにより、有効または無効にします。クリアーされておらず無効になったブレークポイントは、グレイのドットで示されます。
テキスト端末またはフリンジが無効な場合、有効なブレークポイントはウィンドウの左端に、‘B’という文字で示されます。無効なブレークポイントは‘b’で示されます(余白はブレークポイントがあるときだけ表示されます)。
sourceバッファーの左フリンジの塗りつぶされた矢印は、デバッグされているプログラムがストップした最内フレームの行を示します。中抜きの矢印はより高いレベルのフレームの現在実行されている行を示します。フリンジの矢印をmouse-1でドラッグすると、ボタンを離した行まで実行が進みます。かわりにフリンジをmouse-3でクリックすることにより、その行まで実行を進めることができます。フリンジをC-mouse-3でクリックすることにより、間にある行を実行せずに、その行にジャンプできます。このコマンドは後方へもジャンプできるので、すでに実行中のコードの実行の詳細を調べるのに便利です。
ソースファイル名が8進エスケープで表示される場合には、変数gdb-mi-decode-strings
に適切なコーディングシステム(おそらく大抵はutf-8
)をセットしてください(GDBはデコードが望まれない状況で8進エスケープを出力するかもしれず、またデバッグされるプログラムが使用するであろうエンコーディングは、あなたのシステム上の非ASCIIエンコードとは異なるかもしれないので、これのデフォルトはnil
になっている)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
GDB Breakpointsバッファーは、デバッガーセッションのブレークポイント(breakpoint)、ウォッチポイント(watchpoint)、キャッチポイント(catchpoint)を表示します。Breakpoints in The GNU debuggerを参照してください。これは以下のコマンドを提供します。これらのコマンドのほとんどはカレントブレークポイント(ポイントのあるブレークポイント)に適用されます。
カレントブレークポイントを有効または無効にします(gdb-toggle-breakpoint
)。グラフィカルなディスプレーでは、これはsourceバッファーのフリンジのドットのカラーを変更します。ドットのカラーは、ブレークポイントが有効なときは赤、無効なときはグレーです。
カレントブレークポイントを削除します(gdb-delete-breakpoint
)。
カレントブレークポイントのソース行をvisitします(gdb-goto-breakpoint
)。
クリックしたブレークポイントのソース行をvisitします(gdb-goto-breakpoint
)。
gdb-many-windows
が非nil
の場合、GDB Breakpointsバッファーは、GDB
Threadsバッファーとウィンドウを共有します。一方から他方へ切り替えるには、ヘッダー行の関連するボタンをmouse-1でクリックします。gdb-show-threads-by-default
が非nil
の場合、GDB
Threadsバッファーがデフォルトとして表示されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
GDB Threadsバッファーは、デバッグされているプログラムのスレッドのサマリーを表示します。Debugging programs with multiple threads in The GNU
debuggerを参照してください。スレッドを選択するには、ポイントをそこに移動してRET
(gdb-select-thread
)を押すか、それをmouse-2でクリックします。これにより、それに関連するsourceバッファーが表示され、他のGDBバッファーの内容も更新されます。
GDB Threadsバッファー内に含まれる項目を選択するために、gdb-buffers
グループ配下の変数をカスタマイズできます。
gdb-thread-buffer-verbose-names
‘Thread 0x4e2ab70 (LWP 1983)’のような長いスレッド名を表示します。
gdb-thread-buffer-arguments
スレッドのトップフレームの引数を表示します。
gdb-thread-buffer-locations
ファイル情報またはライブラリー名を表示します。
gdb-thread-buffer-addresses
threadバッファーのスレッドフレームのアドレスを表示します。
複数のスレッドの情報を同時に閲覧するには、GDB Threadsバッファーの以下のコマンドを使用します。
カレント行のスレッドのdisassemblyバッファーを表示します(gdb-display-disassembly-for-thread
)。
カレント行のスレッドのGDB Stackバッファーを表示します(gdb-display-stack-for-thread
)。
カレント行のスレッドのGDB Localsバッファーを表示します(gdb-display-locals-for-thread
)。
カレント行のスレッドのGDB
Registersバッファーを表示します(gdb-display-registers-for-thread
)。
これらのコマンドの大文字D、F、L、Rは、対応するバッファーを新しいフレームに表示します。
特定のスレッドについての情報を表示するバッファーを作成した場合、それはそのスレッドにバインドされて、プログラムをデバッグする間、情報を表示し続けます。各GDBバッファーのモードインジケーターには、バッファーに情報が表示されているスレッドの番号が表示されます。スレッドの番号はバインドされたバッファーのバッファー名にも含まれます。
GDB Threadsバッファーでは、さらに他のコマンドも利用可能で、それはプログラムの実行を制御するのに使われるGDBのモードに依存します。マルチスレッドのデバッグを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
GDB Stackバッファーは、コールスタック(call stack)を表示します。これは、1行がデバッガーセッションでのネストされたサブルーチン呼び出し(stack frames: スタックフレーム)にそれぞれ対応します。Backtraces in The GNU debuggerを参照してください。
グラフィカルなディスプレーでは、選択されたスタックフレームは、フリンジの矢印で示されます。テキスト端末、またはフリンジが無効な場合、選択されたスタックフレームは反転して表示されます。スタックフレームを選択するには、ポイントをその行に移動してRET
(gdb-frames-select
)とタイプするか、それをmouse-2でクリックします。これを行うことにより、Localsバッファーも更新されます
(その他のGDBバッファーを参照してください)。
各スタックフレームのフレームアドレスを表示したい場合は、変数gdb-stack-buffer-addresses
を非nil
値にカスタマイズしてください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このバッファーは、カレントフレームのローカル変数の値を、簡単なデータ型で表示します(Information on a frame in The GNU debuggerを参照してください)。値を編集したいときは、そこでRETを押すか、mouse-2でクリックしてください。
配列と構造体については、その型だけが表示されます。GDB 6.4以降では、ポイント位置でRETをタイプ、またはmouse-2でクリックすることにより、ローカル変数の値を調べることができます。それより前のバージョンのGDBでは、型の説明(‘[struct/union]’または‘[array]’)にたいして、RETまたはmouse-2を使用します。ウォッチ式を参照してください。
このバッファーは、レジスターに保持されている値を表示します(Registers in The GNU
debuggerを参照してください)。値を編集したいときは、そのレジスターでRETを押すか、mouse-2をクリックします。GDB6.4以降では、最近変化したレジスター値は、font-lock-warning-face
で表示されます。
assemblerバッファーは、カレントフレームをマシン語コードで表示します。矢印はカレント命令を指し、sourceバッファーのようにブレークポイントのセットと削除ができます。ブレークポイントのアイコンも、フリンジまたは余白に表示されます。
memoryバッファーは、プログラムのメモリーセクションを調べるためのバッファーです(Examining memory in The GNU debuggerを参照してください)。ヘッダー行の適切な箇所をmouse-1でクリックすることにより、そのバッファーが表示するメモリーの開始アドレス、またはデータアイテムの数が変化します(またはSおよびNを使用)。ヘッダー行をmouse-3でクリックすることにより、データアイテムのフォーマット、またはユニットサイズのどちらを表示するか選択します。
gdb-many-windows
が非nil
の場合、breakpointsバッファーとthreadsバッファーがウィンドウを共有するように、localsバッファーとregistersバッファーもウィンドウを共有します。一方から他方へ切り替えるには、ヘッダー行の関連するボタンをmouse-1でクリックしてください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
プログラムを停止するたびに、変数がどのように変化するか見たいときは、ポイントを変数名に移動して、ツールバーのウォッチアイコンをクリック(gud-watch
)するか、C-x
C-a C-wとタイプします。プレフィクス引数を指定した場合、変数名をミニバッファーで入力することができます。
各ウォッチ式は、speedbarに表示されます(スピードバーフレームを参照してください)。配列や、構造体、共有体のような複雑なデータ型はツリー形式で表示されます。ツリーの子ノード、および単純なデータ型では、式の名前とその値が表示され、speedbarフレームが選択されたときは型がツールチップで表示されます。それより高いレベルでは名前、型、ポインターのアドレス値、そうでない場合は名前と型だけが表示されます。ルート式では、それらがどこで定義されているかを識別するために、ツールチップでフレームアドレスも表示されます
複雑なデータ型を展開または折り畳むには、式の左のタグをmouse-2をクリックするかSPCを押します。式の子にあたるデータの数が、変数gdb-max-children
の値を超える場合、Emacsは式を展開する前に確認を求めます。
複雑なウォッチ式を削除するには、speedbarのルート式にポイントを移動して、D
(gdb-var-delete
)とタイプしてください。
単純なデータ型の変数、または複雑なデータ型の単純な要素を編集するには、speedbarのその箇所にポイントを移動して、RET
(gdb-edit-value
)とタイプするか、値をmouse-2でクリックして、それを編集します。どちらの方法も、ミニバッファーを使って新しい値を読み取ります。
変数gdb-show-changed-values
を非nil
値(デフォルト)にセットした場合、Emacsは最近変化した値をfont-lock-warning-face
でハイライトし、スコープから外れた変数は目立たないshadow
フェイスで表示します。変数がスコープから外れた場合、値を変更することはできません。
変数gdb-delete-out-of-scope
が非nil
(デフォルト)の場合、Emacsはスコープから外れたときウォッチ式を自動的に削除します。この変数をnil
にしておけば、プログラムが同じ関数に複数回再入したとき、新たにウォッチ式を作成しなくてよいので便利かもしれません。
変数gdb-use-colon-colon-notation
が非nil
の場合、Emacsは‘function::variable’というフォーマットを使います。これにより同じ変数名を共有するウォッチ式を表示することができます。デフォルト値はnil
です。
ウォッチ式の表示が更新されるたびに、自動的にspeedbarを前に表示するには、gdb-speedbar-auto-raise
を非nil
にセットします。これはEmacsフレームを全画面表示にしてデバッグしているとき便利です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
GDBのall-stop modeでは、プログラムが停止すると、すべてのスレッドの実行が停止します。同様に、プログラムを再開すると、すべてのスレッドが実行を開始します。All-Stop Mode in The GNU debuggerを参照してください。マルチスレッド化されたいくつかのターゲットにたいして、GDBはこれを超える操作のためのモードをサポートします。これはnon-stop modeと呼ばれ、他のスレッドが自由に実行を継続している間に、デバッガーで停止したプログラムのスレッドを調べることができます。Non-Stop Mode in The GNU debuggerを参照してください。GDBのバージョン7.0以前では、non-stop modeはサポートされておらず、すべてのターゲットにたいしては機能しません。
変数gdb-non-stop-setting
は、EmacsがGDBをall-stop modeとnon-stop
modeのどちらで実行するかを決定します。デフォルトはt
で、これは利用可能な場合はnon-stop
modeを使うことを意味します。値をnil
に変更した場合、またはnon-stop
modeが利用不可の場合、EmacsはGDBをall-stop
modeで実行します。この変数はEmacsがデバッグセッションを開始したときに効果をもちます。値を変更した場合、アクティブなデバッグセッションを再起動する必要があります。
non-stop
modeモードでスレッドが停止すると、通常Emacsはそのスレッドに切り替えます。すでに選択したスレッドから停止した他のスレッドへの切り替えを行わないようにするには、変数gdb-switch-when-another-stopped
をnil
に変更してください。
Emacsが停止したスレッドに切り替えるかどうかの決定は、そのスレッドが停止した理由に依存します。変数gdb-switch-reasons
をカスタマイズすることにより、スレッドの切り替えを行う停止理由を選択できます。
変数gdb-stopped-functions
には、あるスレッドが停止したときに実行する関数を指定できます。
non-stop modeでは、GUDの実行制御コマンドのための異なるモードを切り替えることができます。
gdb-gud-control-all-threads
がt
(デフォルト)の場合、中断および継続のためのコマンドはすべてのスレッドに適用されるので、gud-stop-subjob
またはgud-cont
の1コマンドで、すべてのスレッドを停止または継続できます。少なくとも1つのスレッドが停止している場合、ツールバーに‘Go’ボタンが表示されます。また、少なくとも1つのスレッドが実行中の場合、‘Stop’ボタンが表示されます。
gdb-gud-control-all-threads
がnil
の場合、カレントスレッドだけを停止または継続します。GUDツールバーの‘Go’および‘Stop’のボタンの表示は、カレントスレッドの状態に依存します。
gdb-gud-control-all-threads
のカレント値は、ツールバーまたは‘GUD->GDB-MI’メニューで変更できます。
ステップコマンドは常にカレントスレッドに適用されます。
non-stop modeでは、スレッドを選択せずにスレッドを中断または継続できます。threadsバッファーで、ポイント位置のスレッドにたいしてiをタイプすると中断、cで継続、sでステップ実行します。今後さらにそのようなコマンドが追加されるかもしれません。
スレッドを中断した場合、停止理由は‘signal
received’になることに注意してください。この理由がgdb-switch-reasons
に含まれている場合(デフォルトでは含まれています)、Emacsはそのスレッドに切り替えます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsには、Lispのいくつかの変種のためのメジャーモードがあります。これらは他のプログラミング言語のモードと同じ編集コマンドを使用します(プログラムの編集を参照してください)。それに加えて、Lisp式を実行するための特別なコマンドを提供します。
Emacs Lispのソースファイルを編集するためのモードです。このモードはカレントのトップレベルのLisp式を評価するC-M-xを定義します。Emacs Lisp式の評価を参照してください。
Emacs Lispとの対話的なセッションのためのモードです。このモードはポイントの前の式を評価して、その値をバッファーに挿入するC-jを定義します。Lisp Interactionバッファーを参照してください。
Emacs Lispではない、他のLispを実行するプログラムのソースファイルを編集するためのモードです。このモードは、カレントのトップレベルの式を外部のLispで評価するC-M-xを定義します。外部Lispの実行を参照してください。
Emacsのサブプロセス(またはinferior process: 下位プロセス)として実行される外部Lispと、対話的にセッションするためのモードです。 外部Lispの実行を参照してください。
Lispモードと同様ですが、Schemeプログラムのためのモードです。
Inferior Lispモードと同様ですが、Schemeのためのモードです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacs Lispのコードは、慣習として.elで終わる名前のファイルに保存されます。このようなファイルは、自動的にEmacs Lispモードでvisitされます。
Emacs Lispのコードは、loadが速く省スペースで、実行も速いバイトコードにコンパイルできます。慣習により、コンパイルされたEmacs Lispのコードは‘.elc’で終わる名前の別のファイルに保存されます。たとえば、foo.elをコンパイルしたコードはfoo.elcになります。Byte Compilation in the Emacs Lisp Reference Manualを参照してください。
Emacs Lispファイルをロード(load)するには、M-x load-fileとタイプします。このコマンドはミニバッファーを使ってファイル名を読み取り、そのファイル内容をEmacs Lispコードとして実行します。最初にファイルをvisitしておく必要はありません。このコマンドは、既存のEmacsバッファーからではなく、ディスクからファイルを直接読み込みます。
Emacs Lispファイルが、Emacs Lispのロードパス(load path:
以下で定義)にインストールされている場合、M-x load-fileではなくM-x
load-libraryとタイプしてロードできます。M-x
load-libraryコマンドは、ファイル名ではなくライブラリー名(library name)の入力を求めます。これはEmacs
Lispのロードパスの各ディレクトリーを検索して、そのライブラリー名にマッチするファイルを見つけようと試みます。ライブラリー名が‘foo’の場合、ファイル名foo.elc、foo.el、fooを見つけようと試みます。デフォルトの動作では、最初に見つかったファイルをロードします。このコマンドは.elより.elcを優先します。それはコンパイルされたファイルの方が、ロードと実行が速いからです。lib.elがlib.elcより新しい場合、警告を発します。この場合、誰かが.elを変更したもののリコンパイルを忘れたようだが、ともかく.elcをロードする、という警告です(この振る舞いにより、編集が終わっておらず、まだリコンパイルする準備ができていないEmacs
Lispのソースファイルを保存することができます)。しかしオプションload-prefer-newer
を非nil
値にセットした場合、上記の手順ではなく、Emacsは新しいファイルのバージョンをロードします。
Emacs Lispプログラムは通常、load
関数を使用してEmacs
Lispファイルをロードします。これはload-library
と似ていますが、より低レベルで追加の引数を指定できます。How
Programs Do Loading in the Emacs Lisp Reference Manualを参照してください。
Emacs
Lispのロードパスは、変数load-path
により指定されます。この変数の値は、ディレクトリー(文字列)のリストです。これらのディレクトリーは、M-x
load-libraryコマンド、低レベルのload
関数、その他のEmacs
Lispライブラリーを探すEmacs関数により、指定された順に検索されます。load-path
のリストの要素には、特別な値nil
も指定できます。これはカレントのデフォルトディレクトリーを意味しますが、その意味するところはEmacsがload-path
を使用する際のカレントディレクトリーに依存するはずなので、これを使うのは大抵間違っています(リストにnil
を含めたいと思うとき、大抵の場合は、本当に望んでいるのはM-x
load-fileを使用することです)。
load-path
のデフォルト値は、Emacs自身がLispコードを格納するディレクトリーのリストです。他のディレクトリーに独自のライブラリーがある場合、ロードパスにそのディレクトリーを追加できます。このマニュアルで説明されている他の大半の変数とは異なり、load-path
はCustomizeインターフェース(Easy Customizationインターフェースを参照してください)を通じての変更はできません。しかしinitファイルに以下のような行を記述して、ディレクトリーを追加できます(Emacs初期化ファイルを参照してください):
(add-to-list 'load-path "/path/to/my/lisp/library")
通例ではローカルにインストールしたライブラリーは、すでにload-path
のデフォルト値であるsite-lispディレクトリーか、site-lispのサブディレクトリーに配置します。この方法ならload-path
のデフォルト値を変更する必要はありません。
いくつかのコマンドは、自動ロード(autoload)されます。これらを実行するとき、Emacsは最初に関連するライブラリーを自動的にロードします。たとえばM-x
compileコマンド(Emacs下でのコンパイルの実行を参照してください)は、自動ロードされます。これを呼び出した場合、Emacsは最初に、自動的にcompile
ライブラリーをロードします。対照的にコマンドM-x
recompileは、自動ロードされません。そのため、このコマンドはcompile
ライブラリーをロードするまで利用できません。
自動的なロードは、自動ロードされたコマンドのドキュメントを探すとき(コマンドと変数名のヘルプを参照してください)にも発生します。それは、ドキュメントがライブラリーの他の関数や変数を参照する場合です(ライブラリーのロードにより*Help*バッファーのハイパーリンクが適切にセットアップされます)。この機能を無効にするには、変数help-enable-autoload
をnil
に変更してください。
describe-variable
とdescribe-function
での名前補完時にも、接頭辞が補完されたかにもとづいて、自動ロードが発生します。この機能を無効にするには、変数help-enable-completion-autoload
をnil
に変更してください。
デフォルトではEmacsは、XEmacs —Emacsの変更されたバージョン —
でコンパイルされたコンパイル済みのLispファイルのロードを拒絶します。なぜならそれはEmacsのクラッシュをさせるからです。これらのロードを試みる場合は、変数load-dangerous-libraries
にt
をセットしてください。
Emacsが検索、ロード可能なディレクトリーにライブラリーを一度配置したら、スタートアップ時に利用可能にしたいと思うかもしれません。これはライブラリーがオンデマンドで自動的に利用可能になる必要がある機能を定義していて、手動でのライブラリーが不便な際に有用です。この場合にはinitファイルに適切なフォーム(スタートアップ時にライブライーのロードが常に必要ならload
かrequire
、あるコマンドや関数の呼び出し時にEmacsがライブラリーのロードを要するならautoload
)を追加して確実にライブラリーがロードされるようにしてください。たとえば:
;; 無条件でmy-shining-package.elcをロード (require 'my-shining-package)
;; my-func
呼び出し時にmy-shining-package.elcをロード
(autoload 'my-func "my-shining-package")
package-install
(パッケージのインストールを参照)を使用したパッケージのインストールでは、Emcasが探すディレクトリーにパッケージのLispファイルを配置するように配慮するとともに、上述した手動によるカスタマイズが不要となるように必要な初期化コードをinitファイルに書き込むことに注意してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacs LispモードはEmacs Lispを編集するためのメジャーモードです。これのモードコマンドはM-x emacs-lisp-modeです。
Emacsは、Emacs Lisp式を評価するためのコマンドをいくつか提供します。記述しているEmacs Lispコードをテストするために、これらのコマンドをEmacs Lispモードで使用できます。たとえば、関数を書き換えた後、以降の関数呼び出しでそれを有効にするために、関数定義を評価します。これらのコマンドはグローバルに利用可能で、Emacs Lispモード以外でも使用できます。
1つのEmacs Lisp式をミニバッファーで読み取り、それを評価して、値をエコーエリアに出力します(eval-expression
)。
ポイントの前のEmacs Lisp式を評価して、値をエコーエリアに出力します(eval-last-sexp
)。
ポイントの後またはポイントを含むdefunを評価して、値をエコーエリアに出力します(eval-defun
)。
リージョンのすべてのEmacs Lisp式を評価します。
バッファーのすべてのEmacs Lisp式を評価します。
M-:
(eval-expression
)は、ミニバッファーを使って式を読み取り、それを評価します(式を評価する前に、カレントバッファーは、式をタイプするためのミニバッファーではなく、M-:をタイプしたときカレントだったバッファーに切り替わります)。
コマンドC-x C-e (eval-last-sexp
)は、そのバッファーのポイントの前にあるEmacs
Lisp式を評価して、その値をエコーエリアに表示します。評価した結果が整数のときは、他のフォーマット(8進、16進、eval-expression-print-maximum-character
の制限を超えなければ文字)とともに値を表示します。
M-:およびC-x
C-eにプレフィクス引数を与えた場合、値をエコーエリアに表示するのではなく、カレントバッファーのポイント位置に値を挿入します。プレフィクス引数が0の場合、整数出力は他のフォーマット(8進、16進、文字)と一緒に挿入されます。プレフィクス引数は、eval-expression-print-level
およびeval-expression-print-length
にしたがった出力の省略も防ぎます(以下参照)。同様にプレフィックス引数-1
は、eval-expression-print-length
の効果をオーバーライドします。
eval-defun
コマンドは、Emacs
LispモードではC-M-xにバインドされています。これはポイントを含む、またはポイントの後ろのトップレベルのLisp式を評価して、値をエコーエリアに出力します。このコンテキストでは、トップレベルの式は“defun”として参照されますが、実際のdefun
(関数定義)である必要はありません。このコマンドはdefvar
式を特別に扱います。通常、defvar
式を評価しても、それが定義する変数がすでに値をもっている場合は、何も起こりません。しかし、このコマンドは無条件にdefvar
で指定された初期値に変数をリセットします。これはEmacs
Lispプログラムをデバッグするとき便利です。式defcustom
およびdefface
も同様に扱われます。このセクションで説明している他のコマンドは、この特別な機能をもっていません。
プレフィクス引数を指定すると、C-M-xはEmacs LispデバッガーのEdebugのために関数定義をインストルメント(instrument: 処置)します。Instrumenting for Edebug in the Emacs Lisp Reference Manualを参照してください。
コマンドM-x eval-regionは、リージョンのテキストを1つ以上のLisp式として解析して、それらを1つずつ評価します。M-x eval-bufferも同様ですが、これはバッファー全体を評価します。
オプションeval-expression-print-level
およびeval-expression-print-length
は、評価コマンドが結果を出力する前に省略する、リストの最大の深さと長さを制御します。eval-expression
またはeval-last-sexp
にプレフィクス引数0を指定すると、リストはすべて出力されます。eval-expression-debug-on-error
は、これらのコマンドが使用されるとき、評価エラーによりデバッガーを呼び出すかを制御します、デフォルトはt
です。eval-expression-print-maximum-character
は、文字として表示される最大の整数を超える値を抑制します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsを開始したとき、*scratch*という名前のバッファーが含まれます、これはEmacs Lisp式の対話的な評価を提供します。このバッファーのメジャーモードは、Lisp Interactionモードです。M-x lisp-interaction-modeとタイプしても、Lisp Interactionモードを有効にできます。
*scratch*バッファー、およびその他のLisp Interactionモードのバッファーでは、C-j
(eval-print-last-sexp
)はポイントの前のLisp式を評価して、値をポイント位置に挿入します。したがってバッファーに式をタイプするたび、その後ろでC-jをタイプすることにより、そのバッファーは式の評価とその値を記録した写しになります。その他すべてのLisp
Interactionモードのコマンドは、Emacs Lispモードと同じです。
起動時には、*scratch*バッファーは、それが何かを説明するLispコメント形式の短いメッセージを含んでいます。このメッセージは変数initial-scratch-message
により制御され、値にはドキュメント文字列またはnil
(メッセージを抑止するという意味)を指定します。
Emacs Lisp式を対話的に評価する別の方法は、Inferior Emacs Lispモードを使う方法です。これはEmacs Lisp式の評価にShellモード(Shellモードを参照してください)に似たインターフェースを提供します。M-x ielmとタイプすることにより、このモードを使用する*ielm*というバッファーが作成されます。詳細は、コマンドのドキュメントを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Lispモードは、Common Lispのような一般用途のためのLisp方言で記述されたプログラムを記述するためのメジャーモードです。これのモードコマンドはM-x lisp-modeです。Emacsは名前が.l、.lsp、.lispで終わるファイルにたいして、自動的にLispモードを使用します。
外部LispセッションをEmacsのサブプロセス、または下位プロセス(inferior
process)として実行して、式を評価するために渡すことができます。外部Lispセッションを開始するには、M-x
run-lispとタイプします。これはlisp
という名前のプログラムを実行して、*inferior-lisp*という名前のEmacsバッファーを通じて入出力を行うようにセットアップします。M-x
run-lispで実行されるLispプログラムの名前を変更するには、変数inferior-lisp-program
を変更してください。
*lisp*バッファーのためのメジャーモードはInferior Lispモードで、これはLispモードの性質とShellモード(Shellモードを参照してください)の性質をあわせ持っています。Lispセッションに入力を送るには、*lisp*バッファーの最後に移動して、入力をタイプしてからRETをタイプします。Lispセッションからの端末出力は、自動的にそのバッファーに挿入されます。
LispプログラムをLispモードで編集する場合、C-M-x
(lisp-eval-defun
)とタイプして、Lispモードのバッファーから、M-x
run-lispで開始したLispセッションに式を送ることができます。送信される式はポイント位置、またはポイントの後ろのトップレベルのLisp式です。結果となる値は通常どおり、*inferior-lisp*バッファーに送られます。LispモードでのC-M-xの効果は、それが評価されるEmacsに送られるのではなく、異なるLisp環境に送られる点を除けば、Emacs
Lispモード(Emacs Lisp式の評価を参照してください)での効果とよく似ていることに注意してください。
Schemeコードを編集して、式をSchemeサブプロセスに送る機能は、よく似ています。Schemeソースファイルは、Schemeモードで編集されます。このモードはM-x scheme-modeで明示的に有効にできます。M-x run-schemeとタイプすることにより、Schemeセッションを開始し、C-M-xとタイプして式の送ることができます(Schemeと対話するためのバッファーは、*scheme*という名前です)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このチャプターでは、中規模から大規模のプログラムやパッケージを保守するためのEmacsの機能を説明します。これらの機能には、以下が含まれます:
Lispの大きなプログラムをメンテナンスしている場合は、ここで説明している機能に加え、ERT(Emacs Lisp Regression Testing)ライブラリーも便利だと思うかもしれません(ERT in Emacs Lisp Regression Testingを参照してください)。
28.1 バージョンコントロール | バージョンコントロールシステムの使用。 | |
28.2 プロジェクトで作業する | プロジェクト内のソースファイルを扱うコマンド。 | |
28.3 変更ログ | プログラムの変更履歴をメンテナンスする。 | |
28.4 識別子のリファレンスを探す | プログラム内の関数、メソッド、構造体、マクロ、...にたいする定義の検索と参照。 | |
28.5 Emacs開発環境 | Emacsのための統合開発環境。 | |
28.6 Emergeでのファイルのマージ | 2つのバージョンのプログラムをマージする便利な方法。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
バージョンコントロールシステム(version control system)は、ソースファイルの複数のバージョンを記録したり、それらのバージョンの作成日時などや、誰が作成したか、何が変更されたかの説明などを記録できるプログラムのことです。
Emacsのバージョンコントロールのためのインターフェースは、VCと呼ばれます。VCコマンドは、複数の異なるバージョンコントロールシステムで機能します。現在のところ、Bazaar、CVS、Git、Mercurial、Monotone、RCS、SRC、SCCS/CSSC、Subversionがサポートされます。これらの中で、GNUプロジェクトのディストリビューションはCVS、RCS、Bazaarです。
バージョン管理システムで生成されたファイルをvisitすると、自動的にVCが有効になります。VCを無効にするには、カスタマイズ可能な変数vc-handled-backends
をnil
をセットします
(VCのカスタマイズを参照してください)。
カレントバッファーでvisitされているファイルにたいするVC状態の情報を更新するには、コマンドvc-refresh-state
を使用します。Emacsの外(たとえばシェルプロンプト)でバージョンコントロールコマンドを実行したときや、そのバッファーのファイルを別のバージョンコントロールシステム下に置いたとき、バージョンコントロールからそのファイルを完全に削除したときに、このコマンドは有用です。
28.1.1 バージョンコントロールの紹介 | バージョンコントロールが機能する一般的な方法。 | |
28.1.2 バージョンコントロールとモードライン | モードラインがバージョンコントロールの状態を表示する方法。 | |
28.1.3 バージョンコントロール下での基本的な編集 | バージョンコントロール下のファイルの編集方法。 | |
28.1.4 Log Entryバッファーの機能 | logエントリーバッファーで利用可能な機能。 | |
28.1.5 バージョンコントロールへのファイルの登録 | バージョンコントロール下にファイルを置く。 | |
28.1.6 古いリビジョンの調査と比較 | 古いバージョンの調査と比較。 | |
28.1.7 VC Change Log | VC Change Logの閲覧。 | |
28.1.8 バージョンコントロール操作のアンドゥ | コミット前後の変更の取り消し。 | |
28.1.9 バージョンコントロールファイルを無視する | バージョンコントロール下のファイルの無視。 | |
28.1.10 VC Directoryモード | バージョンコントロールで管理されたファイルの一覧。 | |
28.1.11 バージョンコントロールのブランチ | 開発における複数行。 | |
28.1.12 VCのその他のコマンドと機能 | その他のVCのさまざまなコマンドと機能。 | |
28.1.13 VCのカスタマイズ | VCの動作を変更する変数。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
VCは、Emacsからのバージョンコントロールシステムの使用、およびバージョンコントロールの操作と編集をスムーズに統合します。VCは、多くのバージョンコントロールシステムでの一般的な操作にたいする、統一されたインターフェースを提供します。
リポジトリー設定の変更など、非一般的または複雑なバージョンコントロールの操作は、VCではサポートされません。そのようなタスクは、VCの外(たとえばコマンドライン)で処理する必要があります。
このセクションは、バージョンコントロールの一般的な概観を提供し、VCがサポートするバージョンコントロールを説明します。すでに使いたいバージョンコントロールシステムをよく知っている場合、このセクションはスキップできます。
28.1.1.1 問題の背景を理解する | 問題が示すところを理解するには。 | |
28.1.1.2 サポートされるバージョンコントロールシステム | バックエンドシステムとしてサポートされるバージョンコントロール。 | |
28.1.1.3 バージョンコントロールの概念 | バージョンコントロールに関連する単語と概念。 | |
28.1.1.4 バージョンコントロールにおけるマージベースとロックベース | ファイルの衝突を処理する方法。 | |
28.1.1.5 バージョンコントロールに置ける変更セットベースとファイルベース | 変更がグループ化される方法。 | |
28.1.1.6 リポジトリーにおける分散型と集中型 | バージョンコントロールのリポジトリーが格納される場所。 | |
28.1.1.7 ログファイルのタイプ | VCS logとChangeLogの違い。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
バージョンコントロールシステムは、3つの重要な能力を提供します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
VCは現在のところ、多くの異なるバージョンコントロールで機能し、それらをバックエンド(back ends)として参照します:
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ファイルがバージョンコントロールの配下にある時、それがバージョンコントロールシステムに登録されている(registered)と言います。バージョンコントロールシステムは、リポジトリー(repository)をもちます。これはファイルの現在の状態、および古いバージョンから現在のバージョンを再構成するのに充分な変更履歴の、両方を保存します。リポジトリーには、各ファイルに行われた変更の説明であるログエントリー(log entries)など、その他の情報も含まれます。
実際に編集する、バージョンコントロールされたファイルのコピーのことを、作業ファイル(work file)と呼びます。作業ファイルは、通常のファイルを同じように変更できます。一連の変更を終えた後、その変更をコミット(commit)またはチェックイン(check in)します。これにより、その変更はログエントリーの記述とともに、リポジトリーに記録されます。
作業ファイルのディレクトリツリーを、作業ツリー(working tree)と呼びます。
commitするたびに、リポジトリーに新しいリビジョン(revision)が作成されます。バージョンコントロールシステムは、過去のすべてのリビジョンと、各リビジョンで行われた変更を記録します。各リビジョンには、リビジョンID(revision ID)により名前がつけられます。リビジョンIDのフォーマットは、バージョンコントロールシステムに依存します。もっとも簡単なケースでは、リビジョンIDは単なる整数です。
これらの基本的な概念を超えるにつれ、各バージョンコントロールシステムの違いの、3つの様相を理解する必要がでてくるでしょう。以降の3つのセクションで説明するように、各バージョンコントロールシステムには、ロックベース(lock-based)とマージベース(merge-based)、ファイルベース(file-based)と変更セットベース(changeset-based)、集中型(centralized)と分散型(decentralized)の違いがあります。VCはこれらすべてのモードの操作を処理しますが、それらの違いを隠蔽することはできません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
バージョンコントロールシステムは通常、同じファイルを変更したい複数ユーザーを調整するために、何らかのメカニズムをもちます。これを行うには2つの方法 — マージとロック — があります。
マージを使うバージョンコントロールシステムでは、各ユーザーはいつでも作業ファイルを変更します。バージョンコントロールシステムは、コミットされていない変更を含むユーザーの作業ファイルを、他のユーザーによりコミットされた最新の変更とマージします。
古いバージョンコントロールシステムは、かわりにロック(locking)を使います。この場合、作業ファイルは通常は読み取り専用です。ファイルを編集するには、それをロックすることにより書き込み可能にできるか、バージョンコントロールシステムに尋ねます。ある時点で、そのファイルをロックできるユーザーは1人だけです。この手順は、通常のファイルの同時編集をEmacsが検知する方法と類似しているようですが、異なります(同時編集からの保護を参照してください)。変更をコミットすると、ファイルはアンロック(unlocks)され、作業ファイルは再び読み取り専用になります。他のユーザーは、変更するためにそのファイルをロックすることができます。
ロックおよびマージの両方のシステムは、複数ユーザーが同じときに同じファイルの変更を試みたときに問題が発生し得ます。ロックを使うシステムには、ロックの衝突(lock conflicts)があります。あるユーザーはファイルのチェックアウトを試みますが、それがすでにロックされている場合はロックできません。マージを使うシステムには、マージの衝突(merge conflicts)があります。これはファイルに行った変更をコミットするとき、それが後からチェックアウトした他の誰かによる変更のコミットと衝突するときに発生します。どちらの衝突も、人間の判断と意思疎通により解決する必要があります。経験から、開発者に取っての利便性と、実際に発生する衝突の重大性と数を最小にするという両方の点で、マージはロックに優ります。
SCCSは常にロックを使います。RCSはデフォルトではロックベースですが、マージスタイルで処理するように指示できます。CVSとSubversionはデフォルトではマージベースですが、ロックモードで処理するように指示できます。Git、Mercurialのような分散型のバージョンコントロールシステムは、マージベースだけです。
VCはロックとマージの両方のバージョンコントロールをサポートします。“commit(コミット)”と“update(更新)”という用語は、新しいバージョンコントロールシステムで使用されます。古いロックベースのシステムでは、“check in(チェックイン)”と“check out(チェックアウト)”という用語が使用されます。VCはこれらの違いをできる限り隠蔽します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
SCCS、RCS、CVS、およびその他の初期のバージョンコントロールシステム(SRCも含む)では、バージョンコントロールの操作はファイルベース(file-based)です。各ファイルは、他のすべてのファイルとは別に、ファイル自身のコメントとリビジョン履歴をもちます。Subversionで始まる新しいシステムは、変更セットベース(changeset-based)です。コミットは複数ファイルにたいする変更を含むときがあり、一連の変更全体を1つの単位として扱います。変更にたいするコメントは1つのファイルではなく、変更セットに属します。
変更セットベースのバージョンコントロールは、ファイルベースのバージョンコントロールより、柔軟で強力です。通常、複数ファイルの変更を元に戻す必要がある時、それを簡単に識別してすべてを削除できます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
初期のバージョンコントロールシステムは、集中型(centralized)モデルでデザインされていて、各プロジェクトはすべての開発者が使用するただ1つのリポジトリーをもちます。SCCS、RCS、CVS、Subversion、SRCはこの種のモデルを共有します。このモデルの欠点の1つは、リポジトリーが信頼性と効率の要衝となることです。
GNU Archは、分配型(distributed)または分散型(decentralized)のバージョンコントロールの先駆で、後にGit、Mercurial、Bazaarで実装されました。プロジェクトは複数の異なるリポジトリーをもつことができ、これらのシステムはリポジトリー間で変更履歴を調停する、ある種のスーパーマージをサポートします。開発者ごとに1つのリポジトリーがあり、リポジトリーのマージがコミット操作を代行します。
VCは個人の作業ファイルと、リポジトリーとの間で行われる通信を管理する手助けをします。VCは、リポジトリーが唯一のマスターなのか、それともネットワークのピアーのリポジトリーの1つなのかは関知しません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
バージョンコントロールシステムを使うプロジェクトは、変更にたいする2つのタイプのログをもつことができます。1つはバージョンコントロールシステムで保守されるログです。変更をコミットするたびに、変更にたいするログエントリー(log entry)を入力します(Log Entryバッファーの機能を参照してください)。これはバージョンコントロールログ(version control log)と呼ばれます。
もう1つの種類のログは、ChangeLogです(変更ログを参照してください)。これはプログラムの大きな部分(通常は1つのディレクトリーと、そのサブディレクトリー)にたいする変更の記録を、年代順に記録します。小さなプログラムは、1つのChangeLogを使用するでしょう。大きなプログラムは、主要なディレクトリーごとにChangeLogをもつかもしれません。変更ログを参照してください。プログラマーは、バージョンコントロールシステムのずっと前からChangeLogを使ってきました。
変更セットベースのバージョンシステムは、通常システム全体にたいして変更セットベースの修正ログを保守します。これはChangeLogを冗長なものにします。ChangeLogを残す利点の1つは、他のディレクトリーとは別に、1つのディレクトリーの履歴トランザクションが見れるのは便利なときがあるからです。他の利点として、多くのバージョンコントロールシステムはコミットログを特定できないからです。
バージョンコントロールで管理されるプロジェクトは、バージョンコントロールログだけを使用するか、両方の種類のログを使用します。あるファイルにたいしては1つのログを使い、他のファイルにたいしては別の方法を使うこともできます。プロジェクトごとに、したがうべきポリシーがあります。
両方を使うというポリシーの場合は通常、変更にたいして1度だけエントリーを書いて、それを両方のログに書き込みたいと思うでしょう。ChangeLogにエントリーを記述して、変更をコミットするときにC-c C-aでログバッファーにコピーできます。または変更をコミットするときログバッファーにエントリーを記述して、(C-c C-wの助けを借りて)後でC-x v aコマンドでそれをChangeLogにコピーできます (変更ログとVCを参照してください)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
バージョンコントロール配下のファイルをvisitしたとき、Emacsはモードラインにそれを示します。たとえば‘Bzr-1223’と表示された場合、そのファイルにBazaarが使用され、カレントのリビジョンIDが1223であることを示します。
バックエンド名とリビジョンIDの間の文字は、作業ファイルのバージョンコントロール状態(version control status)を示します。マージベースのバージョンコントロールシステムでは、文字‘-’は作業ファイルが変更されていないことを示し、文字‘:’は作業ファイルが変更されていることを示します。文字‘!’は最新のマージ処理の結果により、そのファイルに衝突が含まれていることを示すか(ブランチのマージを参照してください)、そのファイルがバージョンコントロールから削除されたことを示します。最後に、文字‘?’は、そのファイルがバージョンコントロールの配下にあるが、作業ツリーにないことを示します。
ロックベースのシステムでは、‘-’はファイルがロックされていないことを示し、‘:’はファイルが他のユーザー(たとえば‘jim’)にロックされていることを示し、‘RCS:jim:1.3’のように表示されます。‘@’は、そのファイルがローカルに追加されたが、まだマスターリポジトリーにコミットされていないことを示します。
グラフィカルなディスプレーでは、モードラインのインジケーターの上にマウスを移動すると、ツールチップが表示され、それにはバージョンコントロール状態の、より多くの説明が表示されます。インジケーターをmouse-1でクリックすると、メニューバーの‘Tools / Version Control’と同じVCコマンドがのメニューがポップアップします。
Auto
Revertモード(バッファーのリバートを参照してください)がバージョンコントロール配下のバッファーをリバートするとき、これはモードラインのバージョンコントロール情報を更新します。しかし、Auto
Revertモードは、作業ファイルの変更をともなわない、カレントのEmacsセッションの外でのバージョンコントロール状態の変化の情報は、正しく更新しないかもしれません。auto-revert-check-vc-info
をt
にセットすると、Auto
Revertモードは、作業ファイル自身を変更していなくても、auto-revert-interval
秒ごとにバージョンコントロール状態の情報を更新します。CPU使用率はバージョンコントロールシステムに依存しますが、通常はそれほど高価な処理ではありません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ほとんどのVCコマンドは、VCファイルセット(VC filesets)にたいして処理を行います。VCファイルセットは、VC操作が機能する1つ以上のファイルのコレクションです。バージョンコントロールされたファイルをvisitしているバッファーでVCコマンドをタイプすると、VCファイルセットは単にそのファイル1つだけになります。VC Directoryバッファーで、いくつかのファイルをマークしているときにVCコマンドをタイプしたときは、VCファイルセットはマークされたファイルです(VC Directoryモードを参照してください)。
現代的な変更セットベースのバージョンコントロールシステム(バージョンコントロールに置ける変更セットベースとファイルベースを参照してください)では、VCコマンドは複数ファイルからなるVCファイルセットを1つのグループとして扱います。たとえば複数ファイルからなるVCファイルセットをコミットすると、それらすべてのファイルにたいする変更を含む、1つのリビジョンが生成されます。CVSのような古いファイルベースのバージョンコントロールシステムでは、複数ファイルからなるVCファイルセットの各ファイルは個別に処理されます。たとえば、コミットにより、変更されたファイル後とに1つのリビジョンが生成されます。
カレントVCファイルセットにたいして、次の適切なバージョンコントロール操作を処理します。
重要なVCコマンドC-x v v
(vc-next-action
)は多目的なもので、カレントのVCファイルセットにたいして、もっとも適切な操作を処理します。このコマンドは、それをバージョンコントロールシステムに登録するか、コミットするか、ロックを外すか、変更をマージします。正確な動作の詳細は、以下のサブセクションで説明します。C-x
v vは、ファイルをvisitしているバッファーと、VC Directoryバッファーの両方で使うことができます。
VCファイルセットは、ファイルを閲覧したりvisitするためのグループ機能として使用される、名前つきファイルセット(named filesets)とは別の物だということに注意してください(ファイルセットを参照してください)。名前つきファイルセットとは異なり、VCファイルセットは名前をもたず、セッションをまたいで持続しません。
28.1.3.1 マージでの基本的なバージョンコントロール | ロックしない: CVSのデフォルトモード。 | |
28.1.3.2 ロックでの基本的なバージョンコントロール | RCSのデフォルトモード、SCCS、オプションでCVS。 | |
28.1.3.3 C-x v vの高度な制御 | プレフィクス引数で利用可能な上級機能。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
マージベースのバージョンコントロールシステム(たとえばもっとも現代的な方法の1つ。バージョンコントロールにおけるマージベースとロックベースを参照してください)では、C-x v vは以下のことを行います:
共有リポジトリーにコミットする場合、最後に更新したときからリポジトリーが変更されているときは、コミットが失敗するでしょう。このような場合、再試行する前に更新をしなければなりません。分散型のバージョンコントロールシステムでは、C-x v +(ブランチへ/からの変更のpull/pushを参照してください)、またはC-x v mを使用します(ブランチのマージを参照してください)。集中型のバージョンコントロールシステムでは、リポジトリーに変更をマージするために、再度C-x v vとタイプしてください。
これらのルールは、変更はリポジトリーから自動的にマージされない点をのぞき、RCSを非ロックモードで使用している場合も適用されます。あなたがファイルの編集を始めた後に、他のユーザーが同じファイルをコミットした場合、何の情報も与えられません。あなたのリビジョンをコミットしたとき、他のユーザーの変更は失われます(しかし、それはリポジトリーには残るので、決定的に失われるわけではありません)。したがって、変更をコミットする前に、カレントリビジョンが変更されていないことを調べなければなりません。それに加えて、このモードでもRCSでロックすることが可能です。変更されていないファイルでのC-x v vは、RCSの通常のロックモードのようにそのファイルをロックします。(ロックでの基本的なバージョンコントロールを参照してください)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ロックベースのバージョンコントロールシステム(SCCSやRCSのデフォルトモードなど)では、C-x v vは以下のことを行います:
このルールは、CVSがロックの横取りをサポートしない点をのぞき、CVSをロックモードで使用している場合も適用されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
vc-next-action
にプレフィクス引数を与えた場合(C-u C-x v
v)、論理的に次のバージョンコントロール操作を処理する点に変わりはありませんが、どのように操作を行うかを正確に指定するために、追加の引数を指定できるようになります。
ファイルセットが変更(またはロック)されている場合、Emacsは指定したリビジョンIDでそれをコミットします。適切なリビジョンIDを与えることにより、新しいブランチを作成できます(バージョンコントロールのブランチを参照してください)。
ファイルセットが変更(またはロック)されていない場合、これは指定したリビジョンを作業ツリーにチェックインします。リビジョンIDまたはブランチIDを与えることにより、他のブランチのリビジョンを指定できます(ブランチ間の切り替えを参照してください)。空の引数(例: C-u C-x v v RET)は、カレントブランチの最新のリビジョン(head)をチェックアウトします。
これは、分散型のバージョンコントロールシステムでは単に無視されます。これらのシステムでは、独自のリビジョンIDは指定できず、個別のファイルを“チェックアウト”するという概念も使いません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
VCに変更のコミットを指示したとき、*vc-log*という名前のバッファーがポップアップします。このバッファーには、行った変更を説明するログエントリー(log
entry)を書き込みます。書き込んだらC-c C-c (log-edit-done
)とタイプして,
そのバッファーを抜けて、ログエントリーとともに変更をコミットします。
*vc-log*バッファーのためのメジャーモードはLog Editモードで、これはTextモードの変種です(Textモードを参照してください)。Log
Editモードに入ると、Emacsはフックtext-mode-hook
およびvc-log-mode-hook
を実行します(フックを参照してください)。
*vc-log*バッファーでは、1行以上のヘッダー行(header lines)を記入できます。これにはバージョンコントロールシステムにより提供される、追加の情報を指定します。各ヘッダー行は、そのバッファーの最初の1行を占めなければなりません。ヘッダー行でない最初の行は、ログエントリーの開始として扱われます。たとえば以下のヘッダー行は、その変更が他の開発者によるものだということを示します:
Author: J. R. Hacker <jrh@example.com>
‘Author’ヘッダーとは別に、Emacsは‘Summary’ヘッダー(changesetの1行要約)、‘Date’ヘッダー(手入力で指定されたコミット日時)、‘Fixes’ヘッダー(変更によるバグフィクスへの参照)を認識します。すべてのバージョンコントロールシステムが、すべてのヘッダーを認識するわけではありません。そのシステムでサポートされていないヘッダーを指定した場合、それはログエントリーの一部として扱われます。
*vc-log*バッファーにいる間は、カレントVCファイルセット(current VC fileset)とは、C-c C-cとタイプすることによりコミットされるファイルセットだと考えられます。そのVCファイルセットのファイル一覧を閲覧するには、C-c C-f
(log-edit-show-files
)とタイプします。そのVCファイルセットと、編集を開始したバージョンとのdiffを閲覧するには、C-c
C-d (log-edit-show-diff
)とタイプしてください。
VCファイルセットのdiffにもとづいて変更されたすべてのファイルと関数をリストする雛形ChangeLogエントリーを生成してChangeLogエントリー生成の助けとするには、C-c
C-w
(log-edit-generate-changelog-from-diff
)とタイプします。空のままの連続したエントリーはC-q
(fill-paragraph
)によって結合されます。
VCファイルセットが1つ以上のChangeLog(変更ログを参照してください)ファイルを含む場合、C-c
C-a
(log-edit-insert-changelog
)とタイプすると、関連するエントリーを、*vc-log*バッファーに引用します。各ChangeLogファイルの一番上のアイテムが、今日の日付でユーザー名があなたの場合、このコマンドはコミットされるファイルにマッチするエントリーのアイテムを検索して、それを挿入します。
CVSまたはRCSを使用している場合は、反対のこと — Log EditバッファーからChangeLogエントリーを生成 —
を行います。変更ログとVCを参照してください。
コミットを中止するには、そのバッファーで単にC-c C-cをタイプしないで、バッファーを切り替えて他の編集を行うことができます。他のコミットを試みなければ、編集していたエントリーは*vc-log*に残っているので、後でそのバッファーに戻ってコミットを完了できます。
コミットコメントをコピーするために、以前のログエントリーの履歴を閲覧することもできます。これは、似たようなコメントで複数のコミットを行いたいとき便利です。これを行うコマンドM-n、M-p、M-s、M-rは、これらがミニバッファーの外で使用される点を除けば、ミニバッファーのヒストリーコマンド(ミニバッファーヒストリーを参照してください)と同様です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
visitしているファイルを、バージョンコントロールに登録します。
コマンドC-x v i
(vc-register
)は、カレントVCファイルセットの各ファイルを、バージョンコントロールの配下に置きます。これは登録されていないVCファイルセットにたいして、C-x
v vが行う動作と基本的に同じですが、VCファイルセットがすでに登録されているとき(バージョンコントロール下での基本的な編集を参照してください)、C-x v vは他の操作を処理しますが、C-x v
iはエラーをシグナルする、という点が異なります。
ファイルを登録するために、Emacsはバージョンコントロールシステムを選択しなければなりません。複数ファイルのVCファイルセットにたいしては、VC
Directoryバッファーが使用するシステムを指定します(VC Directoryモードを参照してください)。VCファイルセットのファイルが1つで、そのファイルのディレクトリーがすでにバージョンコントロールシステムに登録されたファイルを含むか、そのディレクトリーがバージョンコントロールシステムにより制御される作業ツリーの一部の場合、Emacsはそのシステムを選択します。複数のバージョンコントロールシステムが当てはまる場合、Emacsは変数
vc-handled-backends
に最初に表れるシステムを使用します(VCのカスタマイズを参照)。
Emacsがファイルを登録するバージョンコントロールシステムを見つけられなかった場合、リポジトリータイプの入力を求め、新しいリポジトリーを作成して、そのリポジトリーにファイルを登録します。
ほとんどのバージョンコントロールシステムでは、C-x v iまたはC-x v vでファイルを登録することにより、それを作業ツリー(working tree)に追加しますが、リポジトリーには追加しません。そのようなファイルは、VC Directoryバッファーでは‘added’とラベル付けされ、モードラインのリビジョンIDには‘@@’が表示されます。リポジトリーにたいして登録を有効にするには、コミットを行わなければなりません(バージョンコントロール下での基本的な編集を参照してください)。1つのコミットに、ファイルの追加と、既存ファイルの編集の両方を含むことができるのに注意してください。
ロックベースのバージョンコントロールシステム(バージョンコントロールにおけるマージベースとロックベースを参照してください)では、ファイルの登録により、ファイルはロックされていない読み取り専用の状態に留まります。編集を開始するには、C-x v vとタイプします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
カレントVCファイルセットの作業ファイルと、編集を開始したバージョンを比較します(vc-diff
)。プレフィクス引数を指定した場合、カレントVCファイルセットの2つのリビジョンの入力を求め、それらを比較します。このコマンドをDiredバッファーから呼び出すこともできます(Dired (ディレクトリーエディター)を参照してください)。
C-x v =と同様ですが、Ediffを使用します。Ediff in The Ediff Manualを参照してください。
編集を開始したリビジョンの、作業ツリー全体を比較します(vc-root-diff
)。プレフィクス引数を指定した場合、2つのリビジョンの入力を求め、それらのツリーを比較します。
カレントファイルのリビジョンの入力を求め、それを別のバッファーでvisitします(vc-revision-other-window
)。
カレントファイルの、注釈付きのバージョンを表示します。各行には、その行が変更された最新のリビジョンが表示されます(vc-annotate
)。
C-x v =
(vc-diff
)は、diffを表示します。これはカレントVCファイルセットの各作業ファイルを、編集を開始したときのバージョンと比較します。diffは別のウィンドウに、*vc-diff*という名前のDiff
modeモードのバッファー(Diffモードを参照してください)で表示されます。このバッファーでは、通常のDiffモードコマンドが利用可能です。特にg
(revert-buffer
)コマンドは、ファイル比較を再び行い、新しいdiffを生成します。
カレントVCファイルセットの、任意の2つのリビジョンを比較するには、C-u C-x v
=のようにプレフィクス引数を指定して、vc-diff
を呼び出します。これは2つのリビジョンID(バージョンコントロールの概念を参照してください)の入力を求め、ファイルセットのそれらのバージョンの間のdiffを表示します。このコマンドは、バージョンコントロールシステムが変更セットベースではなくファイルベースの場合(たとえばCVS)に、複数ファイルのVCファイルセットにたいして確実に動作しません。なぜなら同じリビジョンIDをもつ異なるファイル同士を、意味のある方法で関連させることができないからです。
リビジョンIDではなく、他のフォーマットでリビジョンを指定するバージョンコントロールシステムもいくつかあります。たとえばBazaarでは、C-u C-x v =(および関連するコマンド)に‘date:yesterday’と入力でき、これは昨日以降コミットされた最初のリビジョンを指定します。詳細については、バージョンコントロールシステムのドキュメントを参照してください。
Diredバッファー(Dired (ディレクトリーエディター)を参照してください)でC-x v =またはC-u C-x v =を呼び出すと、カレント行にリストされたファイルが、カレントVCファイルセットとして扱われます。
M-x vc-ediffは、C-x v =と同じように機能しますが、Ediffセッションを使用します。Ediff in The Ediff Manualを参照してください。
C-x v D (vc-root-diff
)は、C-x v
=と似ていますが、カレント作業ツリー全体の変更を表示します(たとえばカレントVCファイルセットを含む作業ツリー)。このコマンドをDiredバッファーから呼び出すと、そのディレクトリーを含む作業ツリーに適用されます。
ツリー全体の任意の2つのリビジョンを比較するには、C-u C-x v
=のようにプレフィクス引数を指定してvc-root-diff
を呼び出します。これは2つのリビジョンID(バージョンコントロールの概念を参照)の入力を求めて、バージョンコントロールされたディレクトリー全体のバージョン間のdiffを表示します(RCS、SCCS、CVS、SRCはこの機能をサポートしない)。
C-x v =およびC-x v
Dが、diffを生成するために使用するdiff
オプションをカスタマイズできます。オプションには、変数vc-backend-diff-switches
、vc-diff-switches
、diff-switches
(ファイルの比較を参照)の順に、最初の非nil
の値が使用されます。ここでbackendは、関連するバージョンコントロールシステムで、たとえばBazaarの場合はbzr
です。nil
は順番に次の変数をチェックすることを意味するので、スイッチを指定しない場合は最初の2つの値をt
にします。ほとんどのvc-backend-diff-switches
変数のデフォルトはnil
ですが、いくつかのbackendのデフォルトはt
です。Subversionのように、これらのバージョンコントロールシステムのdiff
実装は、一般的なdiffオプションを受け付けません。
ファイルの古いバージョンを直接調べるには、作業ファイルをvisitして、C-x v ~ revision RET
(vc-revision-other-window
)とタイプします。これはrevisionに対応するバージョンのファイルを取得して、それをfilename.~revision~に保存してから、別のウィンドウでvisitします。
多くのバージョンコントロールシステムでは、C-x v g
(vc-annotate
)とタイプして、行ごとにリビジョン情報の注釈付き(annotated)でファイルを閲覧できます。これは新しい“annotate”バッファーを作成して、各行に古さを示すカラーをつけて、ファイルのテキストを表示します。赤いテキストは新しく、古いものは青、その中間色は中間のバージョンを示します。デフォルトでは、一番古い変更を青、一番新しい変更を赤で、すべてのバージョンレンジにカラーをスケーリングします。変数vc-annotate-background-mode
が非nil
の場合、各行の世代を表すカラーはバックグラウンドカラーに適用され、フォアグラウンドカラーはデフォルトのカラーのままです。
このコマンドにプレフィクス引数を指定した場合、Emacsはミニバッファーを使って、表示および注釈つけする(カレントファイル内容のかわりの)リビジョンと、カラーレンジがカバーすべきタイムスパンの、2つの引数を読み取ります。
“annotate”バッファーでは、‘VC-Annotate’メニューから、これら、または他のカラースケールオプションが利用可能です。このバッファーでは、過去のリビジョンの注釈の表示、diffの閲覧、ログエントリーの閲覧を行うために、以下のキーを使うこともできます:
前のリビジョン(たとえば現在の注釈付きのリビジョンの1つ前のリビジョン)に注釈を付けます。数引数は繰り返し回数となるので、C-u 10 pは10個前のリビジョンに注釈を付けます。
次のリビジョン(たとえば現在の注釈付きのリビジョンの1つ後のリビジョン)に注釈を付けます。数引数は繰り返し回数です。
カレント行に示されたリビジョンに解釈を付けます。
カレント行に示されたリビジョンの、1つ前のリビジョンに注釈を付けます。これはカレント行が変更される前の状態のファイルを見るとき便利です。
カレント行に示されたリビジョンのファイルを、バッファーに表示します。
カレント行のリビジョンと、その前のリビジョンの間のdiffを表示します。これはカレント行のリビジョンが実際にどのように変更されたか、ファイルを見るとき便利です。
カレント行のリビジョンと、その前のリビジョンの間で、(変更セットをサポートするバージョンコントロールシステムの)変更セットのすべてのファイルのdiffを表示します。これはカレント行のリビジョンが、実際にどのように変更されたかツリー内を見るとき便利です。
カレント行のリビジョンのログを表示します。これはカレント行のリビジョンの変更にたいする執筆者(author)の説明を見るのに便利です。
作業中のリビジョン(編集中のもの)に注釈を付けます。pやnを使って他のリビジョンを表示している場合、このキーで作業中のリビジョンに戻ることができます。
注釈の表示・非表示を切り替えます。これは邪魔になる注釈抜きでファイル内容だけを見たいとき便利です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
カレントファイルセットの変更履歴を表示します(vc-print-log
)。
カレントリポジトリーの変更履歴を表示します(vc-print-root-log
)。
pull操作が取り込む変更を表示します(vc-log-incoming
)。
push操作が送信する変更を表示します(vc-log-outgoing
)。
カレントバッファーがvisit中のファイルのリージョンにたいして行われた変更の履歴を表示します(vc-region-history
)。
指定したパターンの変更履歴を検索します。
C-x v l
(vc-print-log
)は、*vc-change-log*という名前のバッファーを表示して、誰が変更したのか、その日時、各変更のログエントリー(これらは*vc-log*バッファーを通じて入力したログエントリーと同じです。Log Entryバッファーの機能を参照してください)を含む、カレントファイルに行われた変更の履歴を表示します。現在visitしているファイルのリビジョンに、ポイントが配されます。プレフィクス引数を指定した場合、このコマンドはポイントが配されるリビジョンと、表示するリビジョンの最大数の入力を求めます。
VC Directoryバッファー(VC Directoryモードを参照してください)、またはDiredバッファー(Dired (ディレクトリーエディター)を参照してください)からC-x v lを呼び出した場合、カレント行にリストされたファイルにたいして適用されます。
C-x v L
(vc-print-root-log
)はバージョンコントロールされたディレクトリーツリー全体の履歴を示す*vc-change-log*バッファーを表示します(RCS、SCCS、CVS、SRCはこの機能をサポートしない)。コマンドにプレフィクス引数を与えると表示するリビジョンの最大数の入力を求めます。プレフィクス数引数は入力を求めることなくリビジョンの最大数を指定します。C-1 C-x v LやC-u 1 C-x v Lのようにプレフィクス数引数が1ならコマンドはリビジョンIDの入力を求めて、そのリビジョンで導入された変更(diff)とともにリビジョンのログエントリーを表示します(RCSやCVSのように機能に劣るバージョンコントロールシステムにはdiffとともにリビジョンログを表示するコマンドがなく、このコマンドはそれらにたいしてはログエントリーだけを表示するので、以下のdやDをタイプしてdiffを要求できる)。
C-x v
Lでは履歴は簡略化された形式で表示され、通常は各ログエントリーの最初の行だけが表示されます。しかし*vc-change-log*バッファーでRET
(log-view-toggle-entry-display
)とタイプすると、ポイント位置のリビジョンのログエントリー全体を表示します。2回目のRETで、再びそれを隠します。
分散型のバージョンコントロールシステムでは、C-x v I
(vc-log-incoming
)コマンドは、次回にバージョンコントロールのpullコマンドを実行するときに、他のリポジトリーから受け取る新しいリビジョンにより適用される変更を、ログバッファーに表示します(ブランチへ/からの変更のpull/pushを参照してください)。ここで他のリポジトリーとは、バージョンコントロールシステムで定義される、変更がpullされるリポジトリーのことです。プレフィクス引数を指定すると、vc-log-incoming
は特定のリポジトリーの入力を求めます。同様に、C-x
v O
(vc-log-outgoing
)は、次回にpushコマンドを実行するときに、他のリポジトリーに送る変更を表示します。プレフィクス引数を指定すると、特定の送信先リポジトリーの入力を求めます。
*vc-change-log*バッファーでは、リビジョンのログまたはファイル間の移動や、過去のリビジョン(古いリビジョンの調査と比較を参照してください)を調べたり比較するために、以下のキーを使うことができます:
前のリビジョンエントリーに移動します(logバッファーのリビジョンエントリーは通常、日時の降順になっているので、前のリビジョンアイテムは通常、もっと新しいリビジョンに対応します)。数引数は繰り返し回数です。
次のリビジョンエントリーに移動します。数引数は繰り返し回数です。
複数ファイルのVCファイルセットのログを表示している場合は、前のファイルのログに移動します。そうでない場合は、単にログの先頭に移動します。数引数は繰り返し回数です。
複数ファイルのVCファイルセットのログを表示している場合は、次のファイルのログに移動します。数引数は繰り返し回数です。
カレント行のリビジョンに注釈を付けます(古いリビジョンの調査と比較を参照してください)。
ポイント位置に表示された変更コメントを修正します。すべてのバージョンコントロールシステムが、変更コメントの修正をサポートするわけではないことに注意してください。
カレント行に示されたリビジョンをvisitします。
ポイント位置のリビジョンと、次に古いリビジョンとの間で、特定のファイルにたいするdiffを表示します。
ポイント位置のリビジョンと、次に古いリビジョンとの間で、変更セットのdiffを表示します。これは、そのリビジョンですべてのファイルにたいして行われた変更を表示します。
簡略形式のlogバッファー(たとえばC-x v Lで作成されたバッファー)で、ポイント位置のログエントリーにたいして、完全なログエントリーの表示・非表示を切り替えます。
多くのログエントリーを取得するには時間がかかるので、*vc-change-log*バッファーは、デフォルトで2000を超えるリビジョンは表示しません。変数vc-log-show-limit
はこの制限を指定します。この値を0にセットすると、制限が削除されます。既存の*vc-change-log*で、バッファーの最後のボタン‘Show
2X entries’または‘Show unlimited
entries’をクリックして、表示するリビジョン数を増やすこともできます。しかしRCS、SCCS、CVS、SRCはこの機能をサポートしません。
変更履歴を確認する有用な変種はコマンドvc-region-history (デフォルトではC-x v hにバインド)により提供されます。これはカレントバッファーのファイルのポイントとマーク(マークとリージョンを参照)の間にあるリージョンに行われた変更の履歴を*VC-history*バッファーに表示します。変更履歴にはコミットログメッセージ(commit log messages)と変更自体のDiff形式も含まれます。
カレントバッファーの興味がある変更にたいしてリージョンをマークした後に、このコマンドを呼び出します。このコマンドがポップアップする*VC-history*バッファーでは、上述した*vc-change-log*バッファーで利用可能なコマンドすべてと、Diffモード(Diffモードを参照)で定義されたコマンドも使用できます。
このコマンドは現在のところGitとMercurial(hg)だけで利用可能です。
コマンドvc-log-search
により変更ログのパターンによる検索が可能になります。これはパターン(正規表現)の入力を求めて、パターンにマッチするログメッセージをもつ変更履歴内のすべてのエントリーを表示します。プレフィクス引数とともに呼び出された際には、コマンドはこの目的にたいして実行する固有のVCSシェルコマンドの入力も求めます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
カレントVCファイルセットの作業ファイルを、最後のリビジョンにリバートします(vc-revert
)。
カレントVCファイルセットにたいするすべての変更を破棄したい場合、C-x v u
(vc-revert
)とタイプします。これは作業ファイルと、編集を開始したときのリビジョンのdiffを表示して、変更を破棄するか確認を求めます。これに同意するとファイルセットはリバートされます。C-x
v
uでdiffを表示させたくない場合は、変数vc-revert-show-diff
にnil
をセットします(この設定をしてもC-x
v =で直接diffを表示できます。古いリビジョンの調査と比較を参照)。
ロックベースのバージョンコントロールシステムでは、C-x v uはファイルをロックしないまま残します。編集を再開するには、再度ロックしなければなりません。ファイルをロックしてから、やはりそれを変更しないと決めたときも、C-x v uでファイルのロックを開放できます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
カレントのバージョンコントロールシステム配下のファイルを無視します(vc-ignore
)。
ソースツリーの多くは、エディターのバックアップや、オブジェクトファイル、バイトコードファイル、ビルドされるプログラムなどの、バージョン管理する必要のないファイルを含みます。これらは単に追加しないだけでも構いませんが、常に不明なファイルとして現れるでしょう。ツリーのトップの、無視するファイルのリストにこれらのファイルを追加して、それらを無視するようにバージョンコントロールシステムに指示することもできます。これを行うにはC-x
v G (vc-ignore
)が助けとなるでしょう。プレフィクス引数を指定すると、無視するファイルリストからファイルを削除できます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
VC Directoryバッファーは、ディレクトリーツリーにあるファイルのバージョンコントロール状態を見て、それらのファイルにバージョンコントロール操作を実行するために特化したバッファーです。特に複数ファイルのVCファイルセットにたいして、C-x v vのようなコマンドを適用するのに使用されます(VC Directoryコマンドを参照してください)。
VC Directoryバッファーを使用するには、C-x v d
(vc-dir
)とタイプします。これはミニバッファーを使用してディレクトリーの名前を読み取り、そのディレクトリーにたいするVC
Directoryバッファーに切り替えます。デフォルトでは、バッファーの名前は*vc-dir*です。その内容については、
VC Directoryバッファーで説明します。
vc-dir
コマンドは、指定したディレクトリーで使用されているバージョンコントロールシステムを自動的に検知します。そのディレクトリーにたいして複数のバージョンコントロールシステムが使用されている場合、C-u
C-x v dのようにプレフィクス引数を指定して、このコマンドを呼び出す必要があるでしょう。これはVC
Directoryバッファーが使用すべきバージョンコントロールシステムの入力を求めます。
VC Directoryバッファーに加えて、EmacsにはCVSに特化したPCL-CVSと呼ばれる似た機能があります。About PCL-CVS in PCL-CVS—The Emacs Front-End to CVSを参照してください。
28.1.10.1 VC Directoryバッファー | バッファーの外観と意味。 | |
28.1.10.2 VC Directoryコマンド | VC directoryバッファーで使用するコマンド。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
VC Directoryバッファーは、バージョンコントロールされたファイルと、それらのバージョンコントロール状態を含みます。これは、(C-x v dを呼び出すことにより指定される)カレントディレクトリーの、注目すべき状態のファイルとサブディレクトリーをだけリストします。最新のファイル(リポジトリーのものと同じ)は省略されます。サブディレクトリーのファイルがすべて最新の場合、そのサブディレクトリーもリストされません。例外として、VCコマンドの直接の結果として最新になったファイルはリストされます。
以下はVC Directoryバッファーのリストの例です:
./ edited configure.ac * added README unregistered temp.txt src/ * edited src/main.c
2つの作業ファイル、カレントディレクトリーのconfigure.acと、サブディレクトリーsrc/のmain.cは、変更されていますがコミットされていません。READMEという名前のファイルは追加されましたが、まだコミットされていません。そしてtemp.txtはバージョンコントロールの配下にありません(バージョンコントロールへのファイルの登録を参照してください)。
エントリーREADMEおよびsrc/main.cの隣の‘*’という文字は、ユーザーがそれらのファイルをカレントVCファイルセットとしてマークしたことを示します (VC Directoryコマンドを参照してください)。
上記は、Bazaar、Git、Mercurialのような分散型のバージョンコントロールシステムでの典型的な例です。他のシステムでは、他の状態も見られます。たとえばCVSは、リポジトリーが変更されていて、それがまだ作業ファイルに適用されていないときは、‘needs-update’という状態を表示します。RCSとSCCSは、ロックされているファイルの状態に、ロックしているユーザーの名前を表示します。
CVSでは通常、vc-dir
コマンドは更新のチェックのために、おそらくはリモートマシン上にあるであろうリポジトリーにアクセスします。変数vc-cvs-stay-local
をnil
(CVSに特有のオプションを参照)に変更すると、EmacsはVC
Directoryバッファーが生成されるときのリモートのリポジトリーへのアクセスを避けます(コミットを行うときなど、必要なときはアクセスします)。これは、オフラインで作業していたり、ネットワークが遅いときは望ましいでしょう。
VC
Directoryバッファーは、変数vc-directory-exclusion-list
にリストされているサブディレクトリーを省略します。この変数のデフォルト値には、バージョンコントロールシステムにより内部的に使用されるディレクトリーが含まれています。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
EmacsはVC Directoryバッファーの操作と、カレントVCファイルセットに属させるために、ファイルをマークするためのコマンドをいくつか提供します。
次のエントリーにポイントを移動します(vc-dir-next-line
)。
前のエントリーにポイントを移動します(vc-dir-previous-line
)。
次のディレクトリーエントリーに移動します(vc-dir-next-directory
)。
前のディレクトリーエントリーに移動します(vc-dir-previous-directory
)。
カレント行にリストされたファイル、またはディレクトリーをvisitします(vc-dir-find-file
)。
カレント行にリストされたファイル、またはディレクトリーを別のウィンドウでvisitします(vc-dir-find-file-other-window
)。
カレント行のファイルまたはディレクトリーをマークして、それをカレントVCファイルセットに加えます(vc-dir-mark
)。リージョンがアクティブのときは、リージョンの中のすべてのファイルをマークします。
すでにマークされたディレクトリーの中のファイル、またはそのサブディレクトリーは、このコマンドではマークされません。同様に、ツリーの中のいくつかのファイルがマークされているディレクトリーは、このコマンドではマークされません。
ポイントがファイルエントリーにあるときは、同じ状態のすべてのファイルをマークします。ポイントがディレクトリーエントリーにあるときは、そのディレクトリーツリーのすべてのファイルをマークします(vc-dir-mark-all-files
)。プレフィクス引数を指定した場合、リストされたファイルとディレクトリーのすべてをマークします。
ポイントの下にあるファイルをVCが無視(ignore)すべきファイルのリストに追加します(vc-dir-ignore
)。たとえばVCがGitなら、そのファイル.gitignoreファイルに追加します。プレフィクスが与えられたら、マークしたすべてのファイルにこれを行います。
VC Directoryバッファーを終了して、隠します(quit-window
)。
カレント行のファイル、またはディレクトリーのマークを外します(vc-dir-unmark
)。リージョンがアクティブのときは、リージョンの中のすべてのファイルのマークを外します。
ポイントがファイルエントリーにあるときは。同じ状態のすべてのファイルのマークを外し、ポイントがディレクトリーエントリーにあるときは、そのディレクトリーツリーのすべてのファイルのマークを外します(vc-dir-unmark-all-files
)。プレフィクス引数を指定した場合、すべてのファイルおよびディレクトリーのマークを外します。
状態が‘up-to-date’、または‘ignored’のファイルを隠します(vc-dir-hide-up-to-date
)。プレフィクス引数を指定した場合、状態がポイント位置のアイテムと同じアイテムを隠します。
VC Directoryバッファーでは、m (vc-dir-mark
)またはM
(vc-dir-mark-all-files
)でマークしたすべてのファイルが、カレントVCファイルセットになります。ディレクトリーエントリーをmでマークした場合、そのディレクトリーツリーにリストされたすべてのファイルが、カレントVCファイルセットになります。カレントVCファイルセットに属するファイルとディレクトリーは、VC
Directoryではバージョンコントロール状態の隣に、文字‘*’が示されます。この方法によりC-x v v
(バージョンコントロール下での基本的な編集を参照してください)、C-x v = (古いリビジョンの調査と比較を参照してください)、C-x v u (バージョンコントロール操作のアンドゥを参照してください)のようなVCコマンドが作用する、複数ファイルのVCファイルセットをセットアップできます。
VC Directoryバッファーは、C-x vというプレフィクスをもつコマンドを、1キーで入力するショートカット(=、+、l、i、D、L、G、I、O、v)を定義します。
たとえば、VC
Directoryバッファーで開いて編集された一連のファイルは、‘edited’という状態でリストされ、それらのファイルをマークして、vまたはC-x
v v
(vc-next-action
)でコミットできます。バージョンコントロールシステムが変更セットベースの場合、Emacsはそれらのファイルを1つのリビジョンとしてコミットします。
VC Directoryバッファーでは、以下のコマンドによりカレントVCファイルセットの検索と置換を処理することもできます:
ファイルセットを検索します(vc-dir-search
)。
ファイルセットにたいして、正規表現による問い合わせ置換を行います(vc-dir-query-replace-regexp
)。
ファイルセットにたいして、インクリメンタル検索を行います(vc-dir-isearch
)。
ファイルセットにたいして、インクリメンタルな正規表現検索を行います(vc-dir-isearch-regexp
)。
複数ファイルに作用する点を除けば、これらのコマンドは1つのバッファーに作用する同等のコマンドに似ています(検索と置換を参照してください)。
VC Directoryバッファーは、追加でブランチ関連のコマンドを定義し、それらはプレフィックスBで始まります:
新たなブランチを作成します(vc-create-tag
)。
ブランチ名の入力を求め、そのブランチの変更履歴を表示します(vc-print-branch-log
)。
ブランチを切り替えます(vc-retrieve-tag
)。ブランチ間の切り替えを参照してください。
マークされたファイル、マークされたファイルがなければカレントファイルを削除します(vc-dir-clean-delete)
。バージョンコントロールシステムではマークされたファイルが削除される訳ではないので、これは主としてバージョンコントロールシステムに未登録のファイルにたいして有用です。
上記のコマンドは、メニューバーおよびmouse-2によるコンテキストメニューを通じても利用可能です。さらにVCのバックエンドのいくつかは、そのバックエンド特有のコマンドを提供するメニューを使用します。たとえばGitとBazaarでは、stashes(隠してあるもの)とshelves(棚)(コミットされていない変更を一時的に除外して、後でそれを戻すコマンド)を操作できます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
バージョンコントロールの活用法の1つとして、ブランチ(branches)と呼ばれる複数の独立した開発ラインのサポートがあります。中でもとりわけブランチは、プログラムの安定版(stable)と開発版(development)を個別に保守したり、関係のない機能を他の版から隔離して開発するのに使用されます。
現在のところVCのブランチ操作にたいするサポートは、かなり制限されています。分散型のバージョンコントロールシステムにたいしては、あるブランチを他のブランチのコンテンツで更新するコマンドと、2つの異なるブランチの変更をマージするコマンドを提供します。集中型のバージョンコントロールシステムにたいしては、異なるブランチからチェックアウトして、新規または異なるブランチにコミットするコマンドを提供します。
28.1.11.1 ブランチ間の切り替え | 既存のブランチを取得する方法。 | |
28.1.11.2 ブランチへ/からの変更のpull/push | 他の場所からの変更を受信、変更の送信。 | |
28.1.11.3 ブランチのマージ | ブランチ間での変更の転送。 | |
28.1.11.4 新しいブランチの作成 | 新しいブランチを開始する方法。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
さまざまなバージョンコントロールシステムにおいて、ブランチが実装される方法は異なり、VCはこれらの違いを完全に隠蔽することはできません。
BazaarとMercurialを含む分散型バージョンコントロールシステムのいくつかは、ノーマルモードの操作では、各ブランチは自身の作業ディレクトリーツリーをもつので、ブランチの切り替えは単にディレクトリーを切り替えるだけです。Gitでは、ブランチは通常、同じディレクトリーの共通ロケーション(co-located)を使用し、ブランチの切り替えは、作業ツリーの内容をそのブランチに一致するように変更するgit checkoutを使用して行われます。Bazaarも共通ロケーションをサポートしており、この場合はコマンドbzr switchによりカレントディレクトリーでブランチを切り替えます。Subversionでは他のブランチへの切り替えにはコマンドsvn switchを使用します。Mercurialでは他のブランチへの切り替えにはコマンドhg updateを使用します。
カレントディレクトリーの他のブランチに切り替えるVCコマンドは、C-x v r branch-name RET
(vc-retrieve-tag
)です。
集中型のバージョンコントロールシステムでは、最新の作業ファイルでC-u C-x v vとタイプして(C-x v vの高度な制御を参照してください)、他のブランチのリビジョンIDを入力することにより、ブランチ間を切り替えることもできます。たとえばCVSでは、trunk(幹の意。開発の主要ラインを示します)のリビジョンは通常、1.1、1.2、1.3、…という形式をもち、最初のブランチがリビジョン1.2から作成された場合、リビジョン1.2は1.2.1.1、1.2.1.2、…というリビジョンIDをもち、さらに2番目のブランチが同じくリビジョン1.2から作成された場合、それは1.2.2.1、1.2.2.2、…という形式になります。ブランチのリビジョンIDから最後の部分を除いた(たとえば1.2.1)、ブランチID(branch ID)を指定して、そのブランチの最新のリビジョンに切り替えることもできます。
ロックベースのシステムでは、他のブランチに切り替えることにより、作業ツリーのロックが解除(書き込み禁止)になります。
1度ブランチを切り替えると、そのブランチを他に切り替えるまで、VCコマンドはそのブランチに適用されます。たとえば任意のVCファイルセットをコミットすると、そのブランチにコミットされるようになります。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
分散型のバージョンコントロールシステムでは、カレントブランチからの変更により、その変更で他のロケーションを更新(変更を“push”する、とも言います)します。この概念は集中型のバージョンコントロールシステムには存在しません。
分散型のバージョンコントロールシステムでは、他のロケーションから変更を“pull”することにより、カレントのブランチを更新します。
集中型のバージョンコントロールシステムでは、カレントVCファイルセットを更新します。
分散型のバージョンコントロールシステムでは、コマンドC-x v P
(vc-push
)は、カレントブランチからの変更により他のロケーションを更新します。プレフィクス引数を与えた場合、このコマンドは実行する正確なバージョンコントロールコマンドの入力をもとめます。これにより変更をどこにpushするか指定できます。デフォルトは、Bazaarではbzr
push、Gitではgit push、Mercurialではhg
pushです。デフォルトのコマンドは常に、ブランチ設定からバージョンコントロールシステムにより決定されるデフォルトのロケーションにpushします。
pullする前にC-x v O
(vc-log-outgoing
)を使用して、送信される変更のlogバッファーを閲覧できます。VC Change Logを参照してください。
現在のところ、このコマンドはBazaar、Git、Mercurialだけでサポートされます。“push”という概念は集中型のバージョンコントロールシステムには存在しません。なぜなら、この操作は変更セットのコミットの一部なので、集中型のVCSでこのコマンドを呼び出すと、エラーをシグナルします。Bazaarのbound branchでこのコマンドを試みたときもエラーをシグナルします。変更セットのコミットは、自動的に変更を(ローカルのブランチがバインドされている)リモートのリポジトリーにpushするからです。
分散型のバージョンコントロールシステムでは、コマンドC-x v +
(vc-pull
)は、カレントブランチと作業ツリーを更新します。これは通常、リモートのブランチのコピーを更新するのに使用されます。プレフィクス引数を与えた場合、このコマンドは使用する正確なバージョンコントロールコマンドの入力をもとめます。これにより変更をどこからpullするか指定できます。プレフィクス引数を指定しない場合は、バージョンコントロールシステムにより決定される、デフォルトのロケーションからpullします。
分散型のバージョンコントロールシステムの中で、現在C-x v +がサポートするのはBazaar、Git、Mercurialだけです。Bazaarでは、これは通常のブランチにたいしては、(マスターブランチをミラーリングされたブランチにpullするために) bzr pullを呼び出し、バインドされたブランチにたいしては、(中心となるリポジトリーからpullするために) bzr updateを呼び出します。Gitでは、これはリモートのリポジトリーから変更を取得して、それをカレントブランチにマージするためにgit pullを呼び出します。Mercurialでは、デフォルトのリモートリポジトリーから変更を取得して、作業ディレクトリーを更新するためにhg pull -uを呼び出します。
pullする前にC-x v I
(vc-log-incoming
)を使用して、適用される変更のlogバッファーを閲覧できます。VC Change Logを参照してください。
CVSのような集中型のバージョンコントロールシステムでは、C-x v +はリポジトリーからカレントVCファイルセットを更新します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
分散型のバージョンコントロールシステムでは、カレントのブランチに他のブランチの変更をマージします。
集中型のバージョンコントロールシステムでは、カレントVCファイルセットに他のブランチの変更をマージします。
ブランチで開発している場合、すでに他のブランチで行われた変更をマージ(merge)する必要があるときがあります。これは2つのブランチでの変更が重なる場合もあるため、些細な操作とはいえません。
分散型のバージョンコントロールシステムでは、マージはコマンドC-x v m
(vc-merge
)により行われます。Bazaarでは、これはbzr
mergeに渡す正確な引数の入力を求めます。そのとき、可能であれば目的にかなったデフォルトを提示します。Gitでは、これはマージするブランチ名の入力を求めます。このとき、(カレントリポジトリーが知っているブランチ名にもとづく)補完を行います。Mercurialではhg
mergeに渡す引数の入力を求めます。マージコマンドの実行による出力は、他のバッファーに表示されます。
CVSのような集中型のバージョンコントロールシステムでは、C-x v mはブランチID、または2つのリビジョンIDの入力を求めます。コマンドはそのブランチからの変更点、または指定した2つのリビジョン間の差分を探して、それらの変更をカレントVCファイルセットにマージします。RETだけをタイプした場合、Emacsは単にそのファイルをチェックアウトしたブランチに行われた変更をマージします。
マージを処理した直後は、作業ツリーだけが変更されており、C-x v Dおよび関連するコマンドで、マージにより生成された変更をレビューできます(古いリビジョンの調査と比較を参照してください)。2つのブランチが重なった変更をもつ場合、マージは衝突(conflict)を生成します。その場合、マージコマンドの出力には警告が現れ。影響のある作業ファイルの、衝突する2つの変更の周囲に、衝突マーカー(conflict markers)が挿入されます。衝突を解決するには、衝突するファイルを編集しなければなりません。編集が終わったら、マージが効果を発揮するように、通常の方法により変更したファイルをコミットしなければなりません(バージョンコントロール下での基本的な編集を参照してください)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
CVSのような集中型のバージョンコントロールシステムでは、Emacsはコミット操作の一部として、新しいブランチの作成をサポートします。変更されたVCファイルセットをコミットするとき、C-u
C-x v v (vc-next-action
のようにプレフィクス引数を指定します。C-x v vの高度な制御を参照してください).すると、Emacsは新しいリビジョンのリビジョンIDの入力を求めます。ここでカレントリビジョンから開始するブランチの。適切なブランチIDを指定する必要があります。たとえば、カレントリビジョンIDが2.5の場合、ブランチIDは2.5.1、2.5.2、...となるべきでしょう。ブランチIDは、その時点での既存のブランチの番号に依存します。
(すでにブランチのヘッドではない)古いリビジョンに新しいブランチを作成するには、最初にそのリビジョンを選択します(ブランチ間の切り替えを参照してください)。その後の手順は、ロックベースのバージョンコントロールシステムを使っているか、マージベースのものを使っているかで異なります。
ロックベースのバージョンコントロールシステムでは、C-x v vで古いリビジョンのブランチを選択します。古いリビジョンを選択する場合、本当に新しいブランチを作成したいのか確認を求めます。これにnoと応えた場合、かわりに最新のリビジョンをロックする機会が与えられます。マージベースのバージョンコントロールシステムでは、このステップはスキップします。
変更を行なってから、再びC-x v vとタイプして、新しいリビジョンをコミットします。これは選択されたリビジョンから始まる、新しいブランチを作成します。
ブランチが作成された後は、それ以降のコミットは、そのブランチに新しいリビジョンを作成します。ブランチを離れるには、C-u C-x v vで明示的に異なるリビジョンを選択しなければなりません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このセクションでは、それほど頻繁には使用されないVCの機能を説明します。
28.1.12.1 変更ログとVC | logエントリーからChangeLogファイルを生成する。 | |
28.1.12.2 バージョンコントロールされたファイルの削除とリネーム | バージョンコントロールされたファイルの削除とリネームについて。 | |
28.1.12.3 リビジョンタグ | リビジョンにたいするシンボリック名。 | |
28.1.12.4 バージョンコントロールヘッダーの挿入 | 作業ファイルへのバージョンコントロールヘッダーの挿入。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ChangeLogファイル (変更ログを参照してください)をもつプロググラムにたいしてRCSやCVSを使用する場合、 バージョンコントロールの以前のコミットのログエントリーから、ChangeLogのエントリーを生成することができます。
これはRCSとCVSだけで機能することに注意してください。この手段は特に、現代的な変更セットベースのバージョンコントロールシステムには不適切です。なぜなら、ChangeLogファイルへの変更自体が、通常は変更セットの一部としてコミットされるからです。この場合、最初にChangeLogエントリーを記述して、コミットするときにそれを‘*vc-log*’バッファーに引用します (Log Entryバッファーの機能を参照してください)。
カレントディレクトリーのChangeLogファイルをvisitして、そのディレクトリーの登録されたファイルにたいして、最新のChangeLogエントリー以降にコミットされたバージョンにたいする、新しいエントリーを作成します。(vc-update-change-log
)。
上記と同様ですが、カレントバッファーのファイルにたいするエントリーだけを探します。
たとえば、ChangeLogの最初の行の日付が1999-04-10で、それ以降のチェックインは1999-05-22のNathaniel Bowditchによるrcs2logだけで、それのログエントリーが‘Ignore log messages that start with '#'.’だったとします。その場合、C-x v aはChangeLogエントリーとして、以下を挿入します:
1999-05-22 Nathaniel Bowditch <nat@apn.org> * rcs2log: Ignore log messages that start with '#'.
バージョンコントロールのログエントリーが、(行頭にカッコで括られて記述される)関数名を指定する場合、それはChangeLogのエントリーに反映されます。たとえばvc.elにたいするログエントリーが‘(vc-do-command): Check call-process status.’の場合、ChangeLogのエントリーは以下のようになります:
1999-05-06 Nathaniel Bowditch <nat@apn.org> * vc.el (vc-do-command): Check call-process status.
C-x v aが複数のChangeLogエントリーを1度に追加するとき、それらがすべて同じ作者に、ほぼ同じ日時にチェックインされている場合、関連するログエントリーとしてそれらをグループ化します。複数のファイルにたいするログエントリーがすべての同じテキストの場合、それらを1つのエントリーにまとめます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ファイル名の入力を求め、そのファイルを作業ツリーから削除して、コミット時に削除するようスケジュールします。
2つのファイル名oldおよびnewの入力を求め、作業ツリーのファイルをリネームし、コミット時にリネームを行うようスケジュールします。カレントバッファーのファイルがVC配下にある場合は、そのファイルがoldのデフォルトファイルになります。
バージョンコントロールされたファイルを削除したい場合、コマンドM-x vc-delete-fileを使用します。これはファイル名の入力を求め、バージョンコントロールシステムを通じてそれを削除します。ファイルは作業ツリーから削除され、VC Directoryバッファー (VC Directoryモードを参照してください) では、状態に‘removed’が表示されます。それをコミットするとき、リポジトリー内で削除が実行されます。
バージョンコントロールされたファイルをリネームするには、M-x vc-rename-fileとタイプします。これは2つの引数の入力を求めます。それはリネームしたいファイルの名前を、それの新しい名前です。そしてバージョンコントロールシステムを通じてリネームを処理します。作業ツリーではリネームは即座に行われます。リネームされたファイルをコミットするとき、リポジトリーに反映されます。
現代的なバージョンコントロールシステムは、リネームにたいするビルトインのサポートがあり、リネームされたファイルは元のファイルのすべての変更履歴を保持します。CVSおよび古いバージョンコントロールシステムでは、vc-rename-file
コマンドは、実際には古いファイルを新しい名前にコピーして、それを登録してから古いファイルを削除することにより機能します。この場合、変更履歴は保存されません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ほとんどのバージョンコントロールシステムは、バージョンコントロールされたツリーの特定のバージョンにたいして、リビジョンタグ(revision tag)を適用できます。現代的な変更セットベースのバージョンコントロールシステムでは、リビジョンタグは単に特定のリビジョンにたいするシンボリック名です。CVSのようなファイルベースの古いシステムで、各タグははバージョンコントロールされた一連のファイル全体に追加され、それらを1つの単位として処理できるようにします。リビジョンタグは一般的にユーザーに配布されるリリースを識別するのに使用されます。
タグにたいする2つの基本的なコマンドがあります。1つは与えられた名前でタグを作成し、もう1つは名前がつけられたタグを取得するコマンドです。
C-x v s name RET
カレントディレクトリーまたはその配下のディレクトリーの、すべての登録されたファイルの作業リビジョンにたいする、nameという名前のタグを定義します(vc-create-tag
)。
C-x v r name RET
カレントディレクトリーまたはその配下のディレクトリーの、すべての登録されたファイルにたいして、リビジョンのタグがnameのものを取得します。nameがブランチ名で、バージョンコントロールシステムがタグからブランチを区別する場合、このコマンドはブランチを切り替えます。(vc-retrieve-tag
).
カレントディレクトリーまたは配下のディレクトリーのファイルがロックされている場合、このコマンドは何もせずにエラーを報告します。これは作業中の上書きを避けるためです。
C-x v =またはC-x v ~の引数として、タグまたはブランチ名を与えることができます (古いリビジョンの調査と比較を参照してください)。 したがって、カレントファイルとタグ付けされたバージョンを比較したり、タグ付けされたバージョン同士を比較することができます。
SCCSでは、VC自身がタグを実装しているので、VCを通じてのみタグを見ることができます。それより新しいほとんどのシステム(CVS、Subversion、bzr、git、hgを含む)は、ネイティブのタグ機能をもっており、利用可能な場合、VCはそれを使用します。これらのタグは、VCを通さなくても見ることができます。
ファイルベースのバージョンコントロールシステムでは、登録されたファイルをリネームするとき、それのマスターもリネームする必要があります。コマンドvc-rename-file
は、これを自動的に行います
(バージョンコントロールされたファイルの削除とリネームを参照してください)。
SCCSを使用している場合、、そのファイルが新しい名前になったことを告げるために、タグの記録も更新しなければなりません(vc-rename-file
もこれを行います)。記録された名前では、すでに存在しないマスターファイルを参照する古いタグは無効になります。VCはそれを取得しません。RCSおよびSCCSでのタグの手修正は、このマニュアルの範囲を超えるでしょう。vc-rename-file
を使用することにより、ファイルを取得できる有効なタグを作成できますが、それですべての問題が解決されるわけではありません。たとえば、プログラムのいくつかのファイルは、他のファイルを名前で参照するかもしれません。少なくともmakefileはリネームしたファイルを参照するでしょう。古いタグを取得した場合、リネームされたファイルは、makefileが期待しない新しい名前で取得されます。そのため、プログラムはうまく機能しないでしょう。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Subversion、CVS、RCS、SCCSでは、バージョンヘッダー(version headers)と呼ばれる文字列を、ファイル内に置くことができます。そのファイルがコミットされたとき、バージョンコントロールシステムは自動的にリビジョン番号、コミットしたユーザーの名前、その他関連する情報をバージョンヘッダーに挿入します。
VCは通常、バージョンヘッダーの情報を使用しません。例外として、RCSを使用している場合、EmacsはRCSのマスターファイルより信頼できる場合が多いという理由で、ファイルのバージョンを決定するためにバージョンヘッダーを使用します。この方法でバージョンヘッダーを使用するのを禁ずるには、変数vc-consult-headers
をnil
に変更します。その場合、VCは常に(それが信用できると推測されれば)ファイルパーミッションを使用し、それ以外はマスターファイルをチェックします。
カレントバッファーに適切なヘッダー文字列を挿入するには、コマンドM-x
vc-insert-headersを使用します。このコマンドはSubversion、CVS、RCS、SCCSだけで機能します。変数vc-backend-header
には、バージョンヘッダーに挿入されるキーワードのリストが含まれます。たとえばCVSはvc-cvs-header
を使用し、これのデフォルト値は'("\$Id\$")
です(余分なバックスラッシュは、もしEmacs
Lispファイルがバージョンコントロールにより保守されるときに、文字列定数がヘッダーと解釈されるのを防ぐためのものです)。vc-insert-headers
コマンドは。ポイント位置の新しい行にリストのタブで囲まれた各キーワードを挿入し、必要ならばコメント区切りで囲みます。
変数vc-static-header-alist
は、バッファー名にもとづき追加する文字列を指定します。これの値は、(regexp
.
format)
という形式の要素からなるリストです。regexpがバッファー名にマッチした場合、バージョンヘッダーの一部としてformatも挿入されます。formatの中の‘%s’は、そのファイルのバージョンコントロールのタイプに置換されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
変数vc-handled-backends
は、どのバージョンコントロールシステムが処理するかを決定します。デフォルト値は(RCS
CVS SVN SCCS SRC Bzr Git Hg Mtn
Arch)
で、これには、現在サポートされている、すべてのバージョンコントロールが含まれています。VCにこれらのシステムの1つ以上を無視させたい場合、リストからそのシステムの名前を除外します。VC全体を無効にするには、変数にnil
をセットしてください。
リストのシステム順序には意味があります。これらのシステムの1つ以上に登録されているファイルをvisitした場合、デフォルトではVCはvc-handled-backends
で最初にくるシステムを使用します。ファイルを最初に登録するときも、この順序が意味をもちます
(バージョンコントロールへのファイルの登録を参照してください)。
28.1.13.1 一般的なオプション | 複数のバックエンドに適用されるオプション。 | |
28.1.13.2 RCSとSCCSにたいするオプション | RCSとSCCSのためのオプションについて。 | |
28.1.13.3 CVSに特有のオプション | CVSにたいするオプションについて |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsは通常、バージョンコントロールにより保守されるソースファイルのバックアップファイルを保存しません。バージョンコントロールを使用したファイルにもバックアップファイルを作成したいときは、変数vc-make-backup-files
に非nil
値をセットしてください。
そのファイルがバージョンコントロールされていると知らずに、シンボリックリンクを通じてバージョンコントロールされたファイルを編集すると、予期せぬ結果を招くことがあります。変数vc-follow-symlinks
は、バージョンコントロールされたファイルを指すシンボリックリンクをvisitしようと試みたときの、Emacsの振る舞いを制御します。値がask
(デフォルト)の場合、Emacsは確認を求めます。値がnil
の場合、Emacsは警告メッセージを表示するだけです。値がt
の場合、Emacsは自動的にリンクをたどって、かわりに実際のファイルをvisitします。
vc-suppress-confirm
が非nil
の場合、C-x v vおよびC-x v
iは確認を求めずにカレントバッファーを保存し、C-x v uも確認を求めず処理を行います。
VCモードは多くの処理を、バージョンコントロールシステムにたいする適切なシェルコマンドを実行することにより行います。vc-command-messages
が非nil
の場合、VCはそれが実行するシェルコマンドを示すメッセージと、コマンドが終了したときの追加のメッセージを表示します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
デフォルトでは、複数ユーザーの活動を調停するためにRCSはロックを使用しますが、最初にファイルをロックしなくても変更をチェックインできる、厳密でないロック(non-strict
locking)と呼ばれるモードもあります。特定のファイルにたいして厳密でないロックに切り替えるには、‘rcs
-U’を使用します。詳細については、rcs
のman-pageを参照してください。
RCSファイルのバージョンコントロール状態を推論するとき、VCは最初にそのファイルのRCSバージョンヘッダー文字列を調べます(バージョンコントロールヘッダーの挿入を参照してください)。ヘッダー文字列がない場合、VCは通常、作業ファイルのパーミッションを調べます。これは速い処理です。ファイルのパーミッションが信頼できない状況もあるかもしれません。そのような場合はマスターファイルが調べられます。これはより高価な処理です。マスターファイルから判るのは、もしそのファイルにたいして何らかのロックがある場合、作業ファイルが実際にロックされたバージョンを含むかどうか、だけです。
vc-consult-headers
をnil
にセットすることにより、VCがファイル状態を決定するのにバージョンヘッダーを使用しないように指定できます。その場合、VCは常に、(それが信用できると思われる場合は)ファイルのパーミッションを使うか、マスターファイルをチェックします。
VCがSCCSの配下にあるファイルのバージョンコントロール状態を決定する方法は、RCSとほぼ同じです。しかしSCCSのバージョンヘッダーは考慮しません。したがって、vc-consult-headers
はSCCSの使用に影響しません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
変数vc-cvs-global-switches
で、すべてのCVS操作に渡す追加のコマンドラインオプションを指定できます。これらのスイッチはcvs
コマンドの直後、呼び出す操作名の前に挿入されます。
リモートマシン上でCVSリポジトリを使用する際は、ネットワーク通信を最小に維持するようVCに試行させることができます。これは、変数vc-cvs-stay-local
により制御されます。vc-cvs-stay-local
がonly-file
(デフォルト)の場合、VCはローカルのCVSサブディレクトリーのエントリーと、前のCVSコマンドから戻された情報だけを使って、各ファイルのバージョンコントロール状態を決定します。結果として、あなたがファイルを変更しているとき、他の誰かが他の変更をチェックインした場合、それのコミットを試みるまで衝突は通知されません。
vc-cvs-stay-local
をnil
に変更した場合、ローカルのリポジトリーと同じように、vc-next-action
(C-x v v)が何を行うか決定する前に、VCはリモートのリポジトリーに問い合わせを行います。
vc-cvs-stay-local
に、リポジトリーのあるホスト名にマッチする正規表現を指定することもできます。この場合、ホスト名がパターンにマッチしたときは、VCはローカルに留まります。
リモートのリポジトリーを使用する場合、Emacsは通常、編集された各ファイルのオリジナルバージョンである、自動バージョンバックアップ(automatic version backups)を作成します。これらのローカルのバックアップは、変更を最初にファイルに保存したときに作成され、リポジトリーに変更をコミットした後で削除されます(これらは通常のEmacsのバックアップファイルとは異なることに注意してください。 バックアップファイルを参照してください)。 C-x v =やC-x v uのようなコマンドは、ネットワークへのアクセスを避けるため、可能な場合は自動バージョンバックアップを使用します。
vc-cvs-stay-local
をnil
にセットすることにより、自動バージョンバックアップの作成を無効にできます。
自動バージョンバックアップは、file.~version.~
という形式の名前をもちます。これはC-x
v ~が古いバージョンを保存するときの名前と似ています
(古いリビジョンの調査と比較を参照してください)。
例外は、バージョンの後ろにある追加のドット(‘.’)です。関連するVCコマンドは、これら両方の種類のバージョンバックアップを使用できます。主な違いは、C-x
v ~により手動で作成されたバージョンバックアップは、コミットしたとき自動的に削除されないことです。
デフォルトでCVSはロックを使用しませんが、CVSREAD
またはwatchの機能を使用して、ロックのような振る舞いを有効にする方法があります。詳細については、CVSのドキュメントを参照してください。そのような場合、ロックベースのバージョンコントロールシステムで行うように、EmacsでC-x
v vを使用して、ロックを切り替えることができます
(ロックでの基本的なバージョンコントロールを参照してください)
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
プロジェクト(project)とは1つ以上のプログラムを生成するために使用するファイルのコレクションです。プロジェクトに属するファイルは、通常はディレクトリー階層に格納されます。この階層のトップレベルのディレクトリーはプロジェクトルート(project root)として知られています。
与えられたディレクトリーが何らかのプロジェクトのルートかどうかは、プロジェクトバックエンド(project back-end)として知られているプロジェクト固有のインフラストラクチャーにより判断されます。Emacsが現在のところサポートするバックエンドはVCSリポジトリーをプロジェクトとみなしたVC (バージョンコントロールを参照)、およびEDE (Emacs開発環境を参照)の2つです。将来的には追加のプロジェクトタイプをサポートするように拡張される予定です。
ファイルがプロジェクトに属するかどうかもプロジェクトバックエンドにより判断されます。たとえばVCバクエンドは“無視された(ignored)”ファイル(バージョンコントロールファイルを無視するを参照)をプロジェクトの一部とはみなしません。
Emacsはプロジェクトファイルを手軽に扱うためのコマンドを提供します。このセクションではそれらのコマンドについて説明します。
ここで説明するすべてのコマンドはカレントプロジェクト(current
project)という概念を共有します。カレントプロジェクトはコマンド呼び出し時にカレントだったバッファーのdefault-directory
(ファイルの名前を参照)により判断されます。そのディレクトリーが認識可能なプロジェクトに属していないようなら、これらのコマンドはプロジェクトディレクトリーの入力を求めます。
コマンドproject-find-file
はカレントプロジェクトに属するファイルをvisit(ファイルのvisit(訪問)を参照)する手軽な手段です。C-x
C-fとは異なり、このコマンドはvisitするファイルの完全な名前のタイプを要求せず、ファイルのベース名(先頭のディレクトリー部分を省略)だけでタイプできます。それに加えてコマンドが補完候補とみなすのはカレントプロジェクトに属するファイルだけであり、それ以外は含まれません。ポイント位置にファイル名があれば、このコマンドはvisitするデフォルトとしてそのファイルを提案します。
コマンドproject-find-regexp
はrgrep
(Emacs下でのGrepによる検索を参照)と似ていますが、カレントプロジェクトに属するファイルだけを検索します。このコマンドは検索する正規表現の入力を求めて、検索結果をXrefモードのコマンドを使用してマッチの選択が可能なXrefモードのバッファーでポップアップします。このコマンドをプレフィクス引数とともに呼び出した際には、検索を開始するベースディレクトリーの入力を追加で求めます。これはたとえばプロジェクトルートの特定のサブディレクトリー配下のファイルに検索を制限することを可能にします。
M-x
project-searchはproject-find-regexp
のインタラクティブな変種です。これはカレントプロジェクトのファイルを検索するために正規表現の入力を求めますが、すべてのマッチを探して表示するかわりに、マッチしたファイルを編集できるようにマッチを見つけたら停止してマッチしたファイルのマッチしたlocusをvisitします。マッチの残りを探すにはM-x fileloop-continue RETとタイプしてください。
M-x
project-query-replace-regexpはproject-search
と似ていますが、query-replace
(問い合わせつき置換を参照)が行うように見つかったそれぞれのマッチにたいして置き換えるかどうかを尋ねて、それに応答した後は次のマッチへと継続します。その応答によりEmacsがquery-replaceループをexitしてしまったら、M-x fileloop-continue RETで後から継続することができます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
多くのソフトウェアプロジェクトでは、変更ログ(change log)を管理します。これは通常、いつどのようにして、そのプログラムが変更されたかの日付順の記録を含む、ChangeLogという名前のファイルです。これらのファイルは、バージョンコントロールシステムに保存された変更ログエントリーから自動的に生成されたり、それらの変更ログエントリーを自動的に生成するのに使われる場合もあります。複数の変更ログファイルがあり、それぞれが1つのディレクトリー、またはディレクトリーツリーに対応する場合もあります。
28.3.1 変更ログコマンド | 変更ログファイルを編集するためのコマンド。 | |
28.3.2 ChangeLogの書式 | 変更ログファイルがどのように見えるか。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
EmacsコマンドC-x 4
aは、編集しているファイルにたいする新しいエントリーを、変更ログファイルに追加します(add-change-log-entry-other-window
)。そのファイルが実際にはバックアップファイルの場合、このコマンドはそのファイルの元のファイルのエントリーを適切に作成します
— これはカレントバージョンから削除された関数のログエントリーを作成するとき便利です。
C-x 4 aは変更ログファイルをvisitして、一番最近のエントリーが今日の日付であなたの名前でない場合は、新しいエントリーを作成します。これはカレントファイルにたいする、新しいアイテムも作成します。このコマンドは多くの言語にたいして、変更された関数またはその他のオブジェクトを推測することすらできます。
変更ログファイルを探すために、Emacsは編集中ファイルのディレクトリーからディレクトリー構造を上方に検索します。デフォルトでは、バージョンコントロールディレクトリーのルートと思われるディレクトリーが見つかると、検索はストップします。これを変更するには、change-log-directory-files
をカスタマイズしてください。
変数add-log-keep-changes-together
が非nil
の場合、C-x 4
aは新しいアイテムを開始せず、そのファイルにたいする既存のアイテムに追加します。
同じ性質の複数の変更を1つにまとめることができます。最初のC-x 4 aの後にテキストを何も入力せずに、続けてC-x 4 aをタイプしていくと、他のシンボルが変更ログエントリーに追加されます。
add-log-always-start-new-record
が非nil
の場合、最後のエントリーが同じ日付のあなたによる変更だったときでも、C-x
4 aは常に新しいエントリーを作成します。
変数change-log-version-info-enabled
の値が非nil
の場合、C-x 4
aは、ファイルのバージョン番号を変更ログのエントリーに追加します。これは変数change-log-version-number-regexp-list
の正規表現を使用して、ファイルの最初の10%から、バージョン番号を探します。
変更ログファイルは、Change Logモードでvisitされます。このメジャーモードでは、グループ化されたアイテムの集まりは1つのパラグラフと扱われ。各エントリーはページとみなされます。これはエントリーの編集を容易にします。C-jおよびauto-fillは、新しい行を前の行と同様にインデントします。これはエントリーの内容を入力するとき便利です。
Change Logモードがオンのときには、ポイント近傍の変更ログエントリーのソース位置に移動するために、(デフォルトでC-c
C-cにバインドされている)
change-log-goto-source
を使用できます。その後のnext-error
コマンド(デフォルトでM-g
M-nとC-x
`にバインドされている)は、変更ログ間のエントリーを移動します。次の変更ログエントリーだけではなく、変更されたファイルの実際のサイトにジャンプするでしょう。ヘンコウログエントリーも戻るためにprevious-error
も使用できます。
コマンドM-x change-log-mergeを使用して、他のログファイルを、エントリーの日付順を保持したまま、Change Logモードのバッファーにマージできます。
バージョンコントロールシステムはプログラム変更の追跡と変更ログを維持する別の手段です。VCSを使用する多くのプロジェクトは、今日ではバージョンごとの変更ログファイルを個別に保持しないので、そのようなファイルをリポジトリー内に保有することを避けたいと思うかもしれません。add-log-dont-create-changelog-file
の値が非nil
なら、C-x
4 a
(add-change-log-entry-other-window
)のようなコマンドは、すでにそのようなファイルが存在しなければファイルではなく適切に命名された一時バッファーに変更を記録します。
変更ログファイルかある場合や変更ログに一時バッファーを使用する場合のいずれにおいても、それらが存在すれば関連する変更ログエントリーを挿入するために、VC
LogバッファでC-c C-a
(log-edit-insert-changelog
)をタイプすることができます。Log Entryバッファーの機能を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
変更ログエントリーは、現在の日付、名前(変数add-log-full-name
より取得)、電子メールアドレス(変数add-log-mailing-address
より取得)を含むヘッダー行から開始されます。ヘッダー行を除いた変更ログの各行は、スペースまたはタブで開始されます。エントリーの大部分は、空白文字とアスタリスクで行が開始される、アイテム(items)から構成されます。以下は2つのアイテムおよび1つのアイテムをもつ、日付が1993年5月の、2つのエントリーの例です。
1993-05-25 Richard Stallman <rms@gnu.org> * man.el: Rename symbols 'man-*' to 'Man-*'. (manual-entry): Make prompt string clearer. * simple.el (blink-matching-paren-distance): Change default to 12,000. 1993-05-24 Richard Stallman <rms@gnu.org> * vc.el (minor-mode-map-alist): Don't use it if it's void. (vc-cancel-version): Doc fix.
1つのエントリーで複数の変更を記述できます。変更はそれぞれアイテム、またはアイテムの中の行を占めます。アイテムの間には通常、空行があります。アイテムが関連している場合(異なる場所での同じ変更など)、それらの間に空行を置かずにそれらをグループ化します。
変更ログファイルの最後には、著作権表示と使用許諾を配すべきです。以下は例です:
Copyright 1997, 1998 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted provided the copyright notice and this notice are preserved.
これはもちろん、正しい年と版権所有者に置き換えて使う必要があります。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
識別子(identifier)とは、プログラムの構文的なサブユニットの名前であり、関数(function)、サブルーチン(subroutine)、メソッド(method)、クラス(class)、データ型(data type)、マクロ(macro)などが該当します。プログラミング言語では、識別子はその言語の構文をもつシンボルです。そのプログラムの開発と保守では、プロジェクト全体を横断して識別子をリネームする等から、識別子がどこで定義されているか(defined)、どこから参照されているか(referenced)を素早く見つける能力が求められます。
これらの能力は、プログラミング言語をサポートするよう定義されたモード以外のメジャーモードでも、リファレンスを見つけるために有用です。たとえばテキストやTeXドキュメントのチャプター(chapters)、セクション(sections)、アペンディクス(appendices)も同様にサブユニットとなり得るし、それらの名前も識別子として使用できます。このチャプターでは、プログラムのソース、同様に他の種類のテキストの中の、任意の種類のサブユニットの名前を正確に参照するために、“識別子(identifiers)”という用語を使用します。
これらの能力のために、Emacsは‘xref’と呼ばれる統一されたインターフェースを提供します。
xref
が処理を行なうには、そのメジャーモード特有の情報とメソッドを使用する必要があります。どのファイルから識別子を検索するか、識別子にたいするリファレンス(references:
参照)を探す方法、識別子を補完する方法、これら(およびそれ以上のこと)は、モード固有の知識です。xref
は処理のモード固有な部分を、そのモードにより提供されるバックエンド(backend)に委託します。これには、いくつかのコマンドにたいするデフォルトや、そのモード自体が提供しないモードにたいするデフォルトも含まれます。
バックエンドはこれらの能力をさまざまな方法で実装できます。いくつかの例を示します:
etags
が含まれています。これはプログラム中の識別子の定義にタグ付けするコマンドで、リファレンスをタグテーブル(tags
tables)に抽出することにより、多くのプログラミング言語、およびHTMLのようなその他のモードをサポートします。タグテーブルの作成を参照してください。etags
によりサポートされた言語にたいするメジャーモードは、そのバックエンドの基準でタグテーブルを使用できます(この種のバックエンドの不利な点の1つは、タグテーブルは有効性を維持するために最新である必要があり、度々リビルドしなければならないことです)。
28.4.1 識別子を探す | 識別子のリスト等のために、識別子がどこで定義されているか、どこから参照されているかを探すコマンド。 | |
28.4.2 tagsテーブル | タグテーブルはシンボルがどのファイルで定義されているかを記録します。 | |
28.4.3 タグテーブルの選択 | 特定のタグテーブルをvisitする方法。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このサブセクションでは識別子にたいするリファレンスを探したり、識別子にたいしてさまざまな問い合わせを行なうコマンドを説明します。リファレンスは識別子を定義(define)するかもしれません(プログラム内のサブユニットを実装、ドキュメントのセクションのテキストなど)。あるいは識別子を使用(use)するかもしれません(関数やメソッドの呼び出し、変数への値の割り当て、クロスリファレンスで引用されるチャプターなど)。
28.4.1.1 識別子の照合 | 識別子の定義を見つけるコマンド。 | |
28.4.1.2 *xref*バッファーで利用可能なコマンド | *xref*バッファーでのコマンド。 | |
28.4.1.3 識別子の検索と置換 | ||
28.4.1.4 識別子の照会 | 識別子をリストして、それらを補完する。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
xref
が可能にすることの中で一番重要なのは、指定した識別子の定義を探すことです。
識別子の最初の定義を探します(xref-find-definitions
)。
patternにマッチする名前の識別子を探します(xref-find-apropos
)。
識別子の最初の定義を探して、他のウィンドウに表示します(xref-find-definitions-other-window
)。
識別子の定義を探して、それを新しいフレームに表示します(xref-find-definitions-other-frame
)。
マウスでクリックした識別子の最初の定義を探します。
前にM-.または同種のコマンドを呼び出した場所に戻ります(xref-pop-marker-stack
)。
etags
バックエンドを使用するように、xref
を切り替えます。
M-.
(xref-find-definitions
)は、ポイント位置の識別子の定義を表示します。プレフィックス引数を与えた、またはポイント位置に識別子がない場合は、識別子の入力を求めます(常に識別子を尋ねるようにしたい場合は、xref-prompt-for-identifier
をt
にカスタマイズする)。
指定された識別子の定義が1つだけの場合は、その定義にジャンプします。識別子に該当する定義が複数ある場合(たとえばオブジェクト指向言語や、同じな前の関数や変数がある場合)、*xref*バッファーに定義の候補と、その定義が見つかったファイルを表示します。候補の選択は、定義の候補でRETをタイプするかmouse-2をクリックして行い、これにより対応する定義を表示するバッファーがポップアップします。
M-.の引数に識別子を入力するとき、通常のミニバッファーの補完コマンドを使用できます(補完を参照してください)。補完では、既知の識別子の名前が補完候補になります。
バッファーを切り替えるほとんどのコマンドと同様に、xref-find-definitions
は新しいバッファーを他のウィンドウ、または新しいバッファーのために新しいフレームを作成する変種をもっています。前者はC-x 4 . (xref-find-definitions-other-window
)、後者はC-x 5 .
(xref-find-definitions-other-frame
)です。
コマンドxref-find-definitions-at-mouse
はxref-find-definitions
と同じように機能しますが、マウスイベントがあった箇所周辺の識別子を探します。このコマンドはたとえばC-M-mouse-1のようなマウスイベントにバインドされることを意図しています。
コマンドC-M-.
(xref-find-apropos
)は、指定した正規表現にマッチする1つ以上の識別子を探します。これはM-.と同じですが、固定長文字列として評価されたシンボル名にたいするマッチではなく、regexpにマッチする識別子です。
上記コマンドにより複数の定義が見つかった場合は、候補となる定義を*xref*バッファーに表示します。このバッファーでは、*xref*バッファーで利用可能なコマンドで説明されている、複数の特化されたコマンドが使用できます。
定義の検索を開始した場所に戻るには、M-,
(xref-pop-marker-stack
)を使用します。これは最後にM-.を呼び出したポイントにジャンプします。したがって、M-.により何らかの定義を見つけて確認したら、M-,で戻ることができます。M-,は変数xref-marker-ring-length
により決定される深さ(デフォルトは16)で、ステップを再トレースできます。
いくつかのメジャーモードは、特定の識別子の検索に失敗するかもしれないxref
サポート機能をインストールするかもしれません。たとえば、Emacs
Lispモード(Emacs Lisp式の評価を参照)では、デフォルトではM-.はカレントEmacsセッションにロードされた、あるいは自動ロード(Autoload in The Emacs Lisp Reference
Manualを参照)されるLispパッケージの関数と変数だけを検索します。M-.が何らかの識別子の検索に失敗する場合は、xref
にetags
バックエンド(識別子のリファレンスを探すを参照)の使用を強制することができます。これを行うには、M-x xref-etags-modeを呼び出してXref
Etagsマイナーモードをオンに切り替えて、再度M-.を呼び出します(これが機能するためには、ソースファイルのディレクトリーツリー内でtagテーブルを作成するために、必ずetags
を実行すること。タグテーブルの作成を参照されたい)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下のコマンドは*xref*バッファーのXREFモードにより提供されるコマンドです:
カレント行のリファレンスを表示します。
次のリファレンスに移動して、それを別のウィンドウに表示します(xref-next-line
)。
前のリファレンスに移動して、それを別のウィンドウに表示します(xref-prev-line
)。
カレント行のリファレンスを別のウィンドウに表示します(xref-show-location-at-point
)。
カレント行のリファレンスを表示して、*xref*バッファーを隠し(bury)ます(xref-quit-and-goto-xref
)。
patternにマッチするリファレンスにたいしてインタラクティブな問い合わせつき置換(query-replace)を行ない、マッチをreplacementに置換します。識別子の検索と置換を参照してください。
*xref*バッファーのコンテンツをリフレッシュします(xref-revert-buffer
)。
*xref*バッファーを表示しているウィンドウをquitします(xref-quit
)。
これらに加えて、リファレンスを表示せずにバッファー内を移動するために、C-nやC-pのような、通常のナビゲーションコマンドも利用可能です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このセクションのコマンドは、識別子自身、またはファイル内の識別子にたいするリファレンスにたいして、様々な検索と置換を行ないます。
ポイント位置の識別子にたいする、すべてのリファレンスを探します。
*xref*バッファーに表示されているすべての識別子の名前にたいして、regexpをreplacementにインタラクティブに置換します。
選択されたタグテーブルのファイルから、regexpを検索します。
選択されたタグテーブルの各ファイルにたいして、query-replace-regexp
を実行します。
ポイントのカレント位置から、上記コマンドの最後の2つを再開します。
M-?は、ポイント位置の識別子にたいして、必要に応じて補完つきで識別子の入力を促しつつ、すべてのリファレンスを探します。カレントのバックエンド(識別子のリファレンスを探すを参照)に依存して、ポイント位置に有効な識別子を見つけた場合でも、このコマンドは識別子の入力を促すかもしれません。プレフィクス引数が指定された場合、このコマンドは常に識別子の入力を求めます(常に入力を求めるようにしたい場合はxref-prompt-for-identifier
をt
、ポイント位置に利用できる識別子がない場合のみ入力を求めるようにするにはnil
にカスタマイズすればよい)。それからこのコマンドは、その識別子にたいするすべてのリファレンスについて、ファイル名と識別子が参照されている行を、*xref*バッファーに表示します。このバッファーではXREFモードのコマンドが利用可能です。*xref*バッファーで利用可能なコマンドを参照してください。
M-x xref-query-replace-in-resultsは、通常のM-x query-replace-regexpと同様に、識別子の名前にマッチするregexpと、置換する文字列を読み取ります。それから、その識別子が参照されている、すべてのファイルのすべての場所で、マッチする識別子の名前にたいして指定された置換を行ないます。これはリファクタリングの一部として、識別子のリネームを行なうときに有用です。このコマンドはM-?により生成された*xref*バッファーで呼び出されるべきです。
M-x
tags-searchは、ミニバッファーを使用してregexpを読み取り、選択されたタグテーブルのすべてのファイルから、1ファイルずつマッチを検索します。これは検索しているファイル名を表示するので、進行状況を確認することができます。マッチが見つかった場合、tags-search
はリターンします。このコマンドには利用可能なタグテーブル(tagsテーブルを参照してください)が必要です。
tags-search
で1つのマッチが見つかったら、おそらく残りのすべてについても検索したいと思うでしょう。M-x
fileloop-continueは、多くのマッチを探すためにtags-search
を再開します。これはカレントバッファーの残りの部分を検索して、その後タグテーブルの残りのファイルを検索します。
M-x
tags-query-replaceは、タグテーブルのすべてのファイルにたいして、1つのquery-replace-regexp
を実行します。これは、通常のM-x
query-replace-regexpと同様、検索するregexpと、それを置換する文字列を読み取ります。この検索はむしろM-x
tags-searchに似ていますが、入力へのマッチを繰り返し処理します。問い合わせ付き置換については、問い合わせつき置換を参照してください。
変数tags-case-fold-search
の値をカスタマイズすることにより、タグ検索コマンドの大文字小文字の扱いを制御できます。デフォルトには、case-fold-search
の値と同じ設定が使用されます(検索中のLaxマッチングを参照してください)。
1回のM-x tags-query-replaceの呼び出しで、タグテーブルのすべてのファイルを検索することが可能です。しかし、一時的に検索を抜けられると便利なときもあります。これは、問い合わせ付き置換として特別な意味をもたない入力イベントで行うことができます。つづけて問い合わせ付き置換を再開するには、M-x fileloop-continueとタイプします。このコマンドは、最後のタグ検索または置換コマンドを再開します。たとえばカレントファイルの残りをスキップするには、M-> M-x fileloop-continueとタイプします。
上記で説明したコマンドは、xref-find-definitions
系の検索より広範な検索を行うことに注意してください。xref-find-definitions
コマンドは、部分文字列または正規表現にマッチする識別子の定義だけを検索します。コマンドxref-find-references
、tags-search
、tags-query-replace
は、通常の検索および置換コマンドがカレントバッファーにたいして行うように、識別子またはregexpにたいするマッチを検索します。
xref-find-references
やtags-search
のかわりに、サブプロセスとしてgrep
を実行して、Emacsにマッチした行を1つずつ表示させることができます。Emacs下でのGrepによる検索を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
タグテーブルがロードされているときは、できるだけ選択されたタグテーブルを使って、ポイント周囲のテキストの置換を行います(completion-at-point
)。
regexpにマッチする、既知のすべての識別子のリストを表示します。
プログラムファイルfileで定義されている識別子のリストを表示します。
選択されたタグテーブルに記録されているファイルをvisitします。
プログラミング言語のモードのほとんどでは、C-M-iまたはM-TAB
(completion-at-point
)とタイプして、ポイント位置のシンボルを補完できます。このコマンドのために、モードに特化した補完候補を提供するモードもあります。補完候補を提供しないモードでは、選択されたタグテーブルがある場合、補完候補を生成するためにこのコマンドを使用することができます。シンボル名の補完を参照してください。
M-x list-tagsは、選択されたタグテーブルでカバーされたファイルの名前を1つ読み取り、そのファイルで定義されたタグのリストを表示します。タグテーブルに記録されたファイル名にディレクトリーが含まれない場合は、ファイル名にディレクトリーを含めないでください。このコマンドはバックエンドがetagsのときだけ機能し、そのプロジェクトのために利用可能なタグテーブルが必要です。tagsテーブルを参照してください。インタラクティブに使用すると、カレントバッファーのファイル名がデフォルトタグとして使用されます。
M-x tags-next-fileは、選択されたタグテーブルでカバーされるファイルをvisitします。最初に呼び出したとき、テーブルでカバーされた最初のファイルをvisitします。続けて呼び出すことにより、次のカバーされたファイルをvisitしていきます。プレフィクス引数を指定した場合、最初のファイルに戻ります。このコマンドには、選択されたタグテーブルが必要です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
タグテーブル(tags table)は、特定のプログラムまたはドキュメントのソースコードをスキャンすることにより抽出されたタグ15を記録します。生成されたファイルから抽出されたタグは、タグ抽出の際にスキャンされる生成されたファイルではなく、その元になるファイルを参照します。生成されたファイルの例として、Cwebソース、Yaccパーサー、Lexスキャナー定義から生成されたCファイルや、プリプロセスされたCファイルの.i、.fppソースファイルをプリプロセスすることにより生成されるFortranファイルがあります。
タグテーブルを生成するには、ドキュメントまたはソースコードファイルにたいして、シェルコマンドetags
を実行します。‘etags’プログラムは、タグテーブルファイル(tags
table file)、または略記してタグファイル(tags
file)にタグを書き込みます。タグファイルは慣習的にTAGSという名前です。タグテーブルの作成を参照してください(同じフォーマットでこのようなテーブルを生成できる他のコマンドを使用して、タグテーブルを作成することも可能です)。
Emacsは、xref
にたいするサポートされたバックエンドとして、etags
パッケージを通じてタグテーブルを使用します。タグテーブルはEmacsディストリビューションの一部であるetags
コマンドにより生成されるので、ここではタグテーブルについて、より詳細に説明します。
Ebrowse機能はetags
に似ていますが、C++に特化したものです。Ebrowse in Ebrowse User’s Manualを参照してください。
Semanticパッケージは、etags
機能とは別の、タグを生成して使用する他の方法を提供します。Semanticとはを参照してください。
28.4.2.1 ソースファイルタグの構文 | さまざまなタイプのコードおよびテキストファイルにたいするタグ構文。 | |
28.4.2.2 タグテーブルの作成 | etags によるタグテーブルの作成。
| |
28.4.2.3 etagsのregexp | 正規表現を使用した任意タグの作成。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下は、もっともポピュラーな言語でタグ構文が定義される方法です:
struct
、union
、enum
の定義もタグです。タグテーブルを作成するとき、‘--no-defines’を指定しなければ、#define
マクロ定義、#undef
およびenum
定数もタグになります。同様に、‘--no-globals’を指定しなければグローバル変数もタグで、‘--no-members’を指定していなければ構造体のメンバーもタグです。‘--no-globals’、‘--no-defines’、‘--no-members’を使用することにより、タグテーブルを小さくすることができます。
etags
に‘--declarations’オプションを与えることにより、関数定義(function
definitions)に加えて、関数宣言(function declarations)と外部変数(external
variables)もタグ付けできます。
operator
定義は、‘operator+’のような名前をもちます。‘--class-qualify’オプションを指定した場合、クラスの変数および関数にたいするタグは、‘class::variable’および‘class::function’という名前になります。デフォルトでは、クラスのメソッドとメンバーはクラス修飾されていません。これにより、ソース内でより正確に、それらの名前が識別可能になります。
interface
、extends
、implements
もタグとして認識されます。クラスの変数および関数にたいするタグは、‘class.variable’および‘class.function’という名前になります。
\chapter
、\section
、\subsection
、\subsubsection
、\eqno
、\label
、\ref
、\cite
、\bibitem
、\part
、\appendix
、\entry
、\index
、\def
、\newcommand
、\renewcommand
、\newenvironment
、\renewenvironment
にたいする引数がタグになります。
etags
を呼び出す前に、環境変数TEXTAGS
で指定することにより、他のコマンドも同様にタグにできます。この環境変数の値には、コロンで区切られたコマンド名のリストを指定します。たとえば、
TEXTAGS="mycommand:myothercommand" export TEXTAGS
これは、(Bourneシェルの構文の使用して)コマンド‘\mycommand’と‘\myothercommand’もタグとして定義します。
defun
で定義された任意の関数、defvar
およびdefconst
で定義された任意の変数、および一般的に列0から‘(def’で始まる任意の式の最初の引数はタグです。例外として(defvar
foo)
という形式の式は、宣言として扱われ、‘--declarations’オプションが与えられたときだけタグになります。
def
で定義されたすべて、または名前が‘def’で始まる構成がタグに含まれます。これらは、ファイルのトップレベルでset!
でセットされる変数も含まれます。
他の言語もいくつかサポートされます:
Adaでは、異なる種類のエンティティー(たとえば関数とプロシージャー)に、同じ名前を使うことができます。またパッケージ、プロシージャー、関数と似たものに、スペック(spec、たとえばinterface)およびボディー(body、たとえばimplementation)があります。欲しい定義を簡単に取り出すために、Adaのタグ名にはエンティティーのタイプを示す接尾辞がつきます:
パッケージのボディー(package body)。
関数(function)
タスク(task)。
プロシージャー(procedure)。
パッケージのスペック(package spec)。
タイプ(type)。
したがって、M-x find-tag RET bidule
RETは単にbidule
という任意のタグを検索しますが、M-x find-tag RET
bidule/b RETは直接パッケージbidule
のボディーに移動します。
title
、およびh1
、h2
、h3
ヘッダーがタグです。アンカー内のname=
、およびすべてのid=
もタグです。
package
、sub
、use
constant
、my
、local
で定義されます。グローバル変数をタグ付けしたい場合、‘--globals’を使用します。サブルーチンにたいするタグの名前は、‘package::sub’になります。デフォルトのパッケージで定義されたサブルーチンの名前は、‘main::sub’になります。
def
およびclass
はタグを生成します。
def
、class
、module
はタグを生成します。定数もタグを生成します。
他の書式や言語を扱うために、regexpにたいするマッチにもとづいてタグを生成することもできます(etagsのregexpを参照してください)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
etags
プログラムは、タグテーブルファイルを作成するために使用されます。このコマンドは、
ソースファイルタグの構文で説明している複数の構文を理解します。
以下はetags
を実行する方法です:
etags inputfiles…
etags
プログラムは、指定されたファイルを読み込んで、カレント作業ディレクトリーのTAGSという名前のファイルに、タグテーブルを書き込みます。‘--output=file’オプションを使用して、タグテーブルに異なる名前のファイル名を指定することもできます。ファイル名に-を指定すると、タグテーブルを標準出力に出力します。‘--append’オプションを使用して、既存のファイルに新たに作成したtagテーブルを追加することもできます。
指定されたファイルが見つからない場合、etags
はそれらの圧縮されたバージョンを探して、それらを解凍して読み込みます。MS-DOSでは、コマンドラインに‘mycode.c’が与えられ、‘mycode.c’が存在しないとき、etags
はmycode.cgzのような名前のファイルを探します。
ファイルの内容が変更されてタグテーブルが古くなったときは、etags
を再び実行することにより、タグテーブルを更新できます。タグテーブルにタグが記録されていなかったり、間違ったファイルにたいして記録している場合、タグテーブルを更新するまで、Emacsはそれの定義を見つけることができません。しかしタグに記録されている位置が、(編集により)少し間違っているようなときは、少しの遅れは生じますがEmacsは正しい位置を見つけることができます。
したがって、編集するたびにタグテーブルを更新する必要はありません。リストしたい新しいタグを定義したときや、タグ定義をあるファイルから他のファイルへ移動したとき、または大幅な変更を施したときは、タグテーブルを更新するべきです。
etags
に‘--include=file’オプションを渡すことにより、タグテーブルに他のタグテーブルをインクルード(include)できます。これによりインクルードされたタグファイルでカバーされる、すべてのファイルをカバーできます。
etags
を実行するとき、ソースファイルを相対ファイル名で指定した場合、タグファイルには、そのタグファイルが最初に書き込まれたディレクトリーにたいする相対ファイル名が含まれます。この方法を使えば、ディレクトリーツリー全体を移動しても、タグファイルは正しくソースファイルを参照します。しかしタグファイルが-または/devのときは、ファイル名はカレント作業ディレクトリーにたいする相対ファイル名になります。これはタグを標準出力に書き込むときに便利です。
相対ファイル名を使う場合、違うディレクトリーにあるタグファイルを指すシンボリックリンクを指定するべきではありません。なぜならこれは一般的にファイル名を無効にするからです。
etags
の引数に絶対ファイル名を指定した場合、タグファイルには絶対ファイル名が含まれます。この方法では、ソースファイルが同じ場所にある限り、タグファイルを移動してもタグファイルは同じ名前を参照します。絶対ファイル名は‘/’で開始されるか、MS-DOSおよびMS-Windowsでは‘device:/’で開始されます。
非常に大きな数のファイルからタグテーブルを作成したい場合、それをコマンドラインに指定すると問題が発生するかもしれません。なぜならコマンドライン引数の長さに制限のあるシステムもあるからです。この制限は、以下のようにファイル名の場所にダッシュを指定して、etags
にファイル名を標準入力から読み込むように指示して回避することができます。
find . -name "*.[chCH]" -print | etags -
etags
はファイル名とファイル内容にもとづいて、入力ファイルで使用されている言語を認識します。これは最初に、特定の言語にたいして一般的に使用されるファイル名と拡張子にたいするマッチを試みます。いくつかの言語には、既知の名前のインタープリター(Perlのperl
、Prologのpl
など)があるので、etags
は次に入力ファイルの最初の行でインタープリター指定‘#!interp’を調べて、既知のインタープリターとのマッチを行います。これが失敗、または言語の自動検知をオーバーライドしたい場合は、‘--language=name’オプションで、明示的に言語を指定できます。このオプションはファイル名に混ぜることができます。各指定はその後に続くファイル名に適用されます。‘--language=auto’の指定は、ファイル名とファイル内容から言語を推測するようetags
に指示します。‘--language=none’を指定すると、言語に特有の処理を完全にオフに切り替えます。この場合、etags
はregexpのマッチングだけでタグを認識します(etagsのregexpを参照してください)。これは、etags
がまだサポートしていない言語を使用するファイルが入力の際に、etags
がデフォルト言語としてFortranおよびCにフォールバックするのを抑止します。
オプション‘--parse-stdin=file’は、etags
をプログラムから呼び出すときに便利です。これは、(1回だけ)コマンドラインからファイル名を読み取るとき使用できます。etags
は標準入力から読み取り、生成されたタグがファイルfileに属するとマークします。
‘etags
--help’オプションはetags
が認識する言語と、言語を推測するためのファイル名ルールのリストを出力します。これは利用可能なetags
オプションと、簡単な説明のリストも出力します。このオプションの後に、1つ以上の‘--language=lang’を指定すると、langにたいするタグの生成方法の詳細を出力します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
‘--regex’オプションは、正規表現のマッチにもとづいてetags
がタグを認識できるようにします。このオプションはファイル名と混ぜることができます。オプションは、それぞれのオプション後に続くソースファイルに適用されます。複数の‘--regex’を指定した場合、それらすべては並列に使用されます。構文は以下のとおりです:
--regex=[{language}]/tagregexp/[nameregexp/]modifiers
オプション値の肝心な部分はtagregexpで、これはタグにマッチするregexpです。これは常に位置が固定されており、行の開始だけにマッチします。インデントされたタグの場合、最初の空白文字にマッチさせるために、‘[ \t]*’で始まるregexpを使用します。
これらの正規表現では、‘\’は次の文字をクォートします。またCのエスケープ文字シーケンスのすべて、すなわち‘\a’(bell)、‘\b’(back
space)、‘\e’(escape)、‘\f’(formfeed)、‘\n’(newline)、‘\r’(carriage
return)、‘\t’(tab)、and ‘\v’(vertical
tab)がサポートされます。これらに加えて、‘\\d’はDEL
文字を意味します。
理想的には、tagregexpはタグとして認識させるのに必要な文字以上にマッチさせるべきではありません。構文がそれを求める場合、タグより多くの文字にマッチするtagregexpを記述して、そのマッチからタグだけをピックアップするために、nameregexpを追加するべきです。これはEmacsがより正しくタグを見つけて、タグ名の補完をより確実にすることを可能にします。nameregexp内においてはこれは、tagregexp内でのカッコによるグループ化にたいする“後方参照(back references)” (正規表現でのバックスラッシュを参照)として有用であり、頻繁に使用されます。たとえば、‘\\1’はそのようなカッコによる最初のグループを参照します。以下でいくつかの例を見つけることができるでしょう。
modifiers(修飾子)は、etags
がマッチングを行う方法を変更するための0文字以上の文字シーケンスです。修飾子がないregexpは、大文字小文字を区別する方法で、入力ファイルの各行にたいして順番に適用されます。修飾子とその意味は以下のとおりです:
このregexpのマッチングで、大文字小文字を無視します。
この正規表現はファイル全体にマッチするので、複数行のマッチが可能です。
この正規表現はファイル全体にマッチし、tagregexp内の‘.’は改行にマッチします。
‘-R’オプションは、それの前に‘--regex’で定義されたregexpをすべて取り消します。これは後に続くファイル名にも適用されます。以下は例です:
etags --regex=/reg1/i voo.doo --regex=/reg2/m \ bar.ber -R --lang=lisp los.er
この例では、etags
はvoo.dooとbar.berにたいして。ファイル内容に一致する解析用の言語を選択します。etags
は、voo.doo内の追加のタグを認識するためにreg1も使用し、bar.ber内の追加のタグを認識するためにreg1とreg2の両方を使用します。voo.dooとbar.berの各行にたいして大文字小文字を区別せずにreg1がチェックされ、bar.berのファイル全体にたいして大文字小文字を区別してreg2がチェックされ、これは複数行へのマッチが許されます。los.erのタグの認識にはユーザー指定のregexpマッチは行わず、Lispのタグルールだけが使用されます。
オプションのプレフィクス{language}を使用して、与えられた言語だけに‘--regex’オプションを制限できます(‘etags
--help’でetags
が認識する言語のリストが表示されます)。これはファイルに、etags
にたいして事前に定義された多くの正規表現が含まれている場合に便利です。以下の例は、EmacsのC言語のソースファイルのDEFVAR
マクロにたいするタグです:
--regex='{c}/[ \t]*DEFVAR_[A-Z_ \t(]+"\([^"]+\)"/\1/'
正規表現が複雑な場合、そのリストをファイルに保存することができます。以下のオプション構文は、etags
に正規表現が保存された2つのファイルを指示します。2つ目のファイルに含まれる正規表現は、大文字小文字を区別せずにマッチします。
--regex=@case-sensitive-file --ignore-case-regex=@ignore-case-file
etags
にたいするregexファイルは、行ごとに1つの正規表現を含みます。空行およびスペースかタブで始まる行は無視されます。表の開始が‘@’の場合、etags
はその行の残りを他の正規表現ファイルとみなすので、そのようなファイルを他のファイルをインクルードできます。他のすべての行は正規表現です。最初の非空白文字が‘--’の場合、その行はコメントです。
たとえば、以下の内容の‘emacs.tags’という名前のファイルを作成できます:
-- This is for GNU Emacs C source files {c}/[ \t]*DEFVAR_[A-Z_ \t(]+"\([^"]+\)"/\1/
これは以下のように使用します:
etags --regex=@emacs.tags *.[ch] */*.[ch]
さらに例を示しましょう。regexpはシェルから解釈され内容にクォートされています。
etags --language=none \ --regex='/[ \t]*function.*=[ \t]*\([^ \t]*\)[ \t]*(/\1/' \ --regex='/###key \(.*\)/\1/' \ --regex='/[ \t]*global[ \t].*/' \ *.m
タグはスクリプトにたいして生成されるので、そのスクリプトにジャンプしたいときは、あなた自身で‘###key scriptname’という形式の行を追加する必要があることに注意してください。
etags --language=none --regex='/proc[ \t]+\([^ \t]+\)/\1/' *.tcl
etags --language=none \ --regex='/[ \t]*\(ARCHITECTURE\|CONFIGURATION\) +[^ ]* +OF/' \ --regex='/[ \t]*\(ATTRIBUTE\|ENTITY\|FUNCTION\|PACKAGE\ \( BODY\)?\|PROCEDURE\|PROCESS\|TYPE\)[ \t]+\([^ \t(]+\)/\3/'
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsは常に、選択されたタグテーブルを最大で1つもちます。タグテーブルにたいして機能するすべてのコマンドは、選択されたタグテーブルを使用します。タグテーブルを選択するには引数としてタグテーブルファイル名を読み取るM-x visit-tags-tableをタイプします。この引数のデフォルトはデフォルトディレクトリーからディレクトリーを上方へ再帰的に検索してTAGSという名前のファイルを含む最初のディレクトリーです。
Emacsは、タグテーブルを使用するまでは実際にタグテーブルの内容を読み込みません。visit-tags-table
が行うのは、ファイル名を変数tags-file-name
に格納することだけです。この変数の初期値はnil
です。この変数の値は、タグテーブルにたいして機能するすべてのコマンドに、使用するタグテーブルファイル名を知らせます。
タグテーブルがすでにロードされているときにvisit-tags-table
を使用すると、2つの選択肢が与えられます。つまり、タグテーブルのカレントリストに新しいタグを追加するか、あるいは新しいリストを開始することもできます。タグコマンドは、カレントリストのすべてのタグテーブルを使用します。新しいリストを開始した場合、他のもののかわりに、新しいタグテーブルが使用されます。カレントリストに新しいタグテーブルを追加した場合、それは他のものと同じように使用されます。
以下のようにして、変数tags-table-list
に文字列のリストをセットすることにより、タグテーブルのリストを正確に指定できます:
(setq tags-table-list '("~/.emacs.d" "/usr/local/lib/emacs/src"))
This tells the tags commands to look at the TAGS files in your ~/.emacs.d directory and in the /usr/local/lib/emacs/src directory. The order depends on which file you are in and which tags table mentions that file.
tags-file-name
とtags-table-list
の両方をセットしてはいけません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
EDE(Emacs Development Environment: Emacs開発環境)は、Emacsでの大きなプログラムの作成、ビルド、デバッグなどのタスクを単純化するパッケージです。これはEmacsにおいて、IDE(Integrated Development Environment: 統合開発環境)の機能をいくつか提供します。
このセクションは、EDEの簡単な説明を提供します。 完全な詳細については、EDE in Emacs Development Environmentを参照してください。
EDEは、グローバルなマイナーモードとして実装されています(マイナーモードを参照してください)。有効にするにはM-x global-ede-modeとタイプするか、‘Tools’メニューの‘Project Support (EDE)’アイテムをクリックします。以下の行をinitファイルに追加することにより、Emacs開始時にEDEを有効にすることもできます。
(global-ede-mode t)
EDEを有効にすることにより、メニューバーに‘Development’という名前のメニューが追加されます。以下で説明するコマンドを含めて、多くのEDEコマンドをこのメニューから呼び出すことができます。
EDEは、ファイルをプロジェクト(projects)に編成します。プロジェクトはディレクトリーに対応します。プロジェクトルート(project root)は、プロジェクトの最上層のディレクトリーです。新しいプロジェクトを定義するには、プロジェクトルートのファイルをvisitして、M-x ede-newとタイプします。このコマンドはプロジェクトタイプ(project type)の入力を求めます。これはEDEがプロジェクトを背後で管理する方式です(EDE in Emacs Development Environmentを参照してください)。もっとも一般的なプロジェクトタイプは、Makefilesを使用する‘Make’、およびGNU Automake(Automake in Automakeを参照してください)を使用する‘Automake’です。どちらの場合も、EDEはプロジェクトに関する情報を格納する、Project.edeという名前のファイルを作成します。
プロジェクトには、1つ以上のターゲット(targets)を含めることができます。ターゲットとは、プロジェクトの1つ以上のファイルからビルドされるオブジェクトファイル、実行ファイル、またはその他の種類のファイルです。
プロジェクトに新しいターゲット(target)を追加するには、C-c . t (M-x
ede-new-target
)とタイプします。このコマンドは、カレントファイルをそのターゲットに追加するか尋ねます。これはターゲットがそのファイルからビルドされることを意味します。ターゲットを定義した後は、C-c
. a (ede-add-file
)とタイプすることにより、ターゲットにファイルを追加することができます。
ターゲットをビルドするには、C-c . c
(ede-compile-target
)とタイプします。プロジェクトのすべてのターゲットをビルドするには、C-c . C
(ede-compile-project
)とタイプします。EDEはターゲットがどのようにビルドされるべきか推測するために、ファイルタイプを使用します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
行き違いの指示を受けて、同じプログラムを異なる2つの方向に修正してしまうのは、プログラマーにとって珍しいことではありません。この混乱を正常な状態に戻すには、2つのバージョンをマージする必要があります。Emergeはこれを簡単にします。ファイルを比較する他の方法については、 ファイルの比較、 およびEdiff in The Ediff Manualを参照してください。
28.6.1 Emergeの概要 | Emergeを開始する方法と、基本的な概念。 | |
28.6.2 Emergeのサブモード | Fastモード vs. Editモード。Skip PrefersモードとAuto Advanceモード。 | |
28.6.3 相違の状態 | 各相違にたいして、AまたはBの状態を指定することによりマージを行う。 | |
28.6.4 マージコマンド | 相違を選択したり、相違の状態を変更するコマンドなど。 | |
28.6.5 Emergeの終了 | マージを終えた後に行うこと。 | |
28.6.6 2つのバージョンの合成 | 相違にたいする両方の候補を維持する方法。 | |
28.6.7 Emergeの細かい注意点 | その他の問題。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emergeを開始するには、以下の4つのコマンドの1つを実行します:
指定した2つのファイルをマージします。
共通の祖先(ancestor)を参照して、指定した2つのファイルをマージします。
2つのバッファーをマージします。
第3のバッファーにある共通の祖先を参照して、2つのバッファーをマージします。
Emergeコマンドは2つのファイルまたはバッファーを比較して、3つのバッファーにそれ表示します。最初の2つは入力テキスト(AバッファーとBバッファー)で、残りの1つ(マージバッファー)はどこにマージが行われたかを表示します。マージバッファーは相違だけではなく、マージされたテキストをすべて表示します。2つの入力テキストが異なる場所では、どちらをマージバッファーに含めるか選択できます。
既存のバッファーから入力を得るEmergeコマンドは、そのバッファーがナローされている場合は、バッファーのアクセス可能な部分だけを使用します。 ナローイングを参照してください。
2つのマージされるテキストの元となる、共通の祖先となるバージョンが利用可能な場合は、Emergeはどちらが正しい候補かを推測するために、それを使用することができます。一方のカレントバージョンが祖先に一致する場合、Emergeはもう一方のカレントバージョンが、マージされたバージョンに残すべき、意図した変更であると仮定します。共通の祖先となるテキストを指定したい場合は、‘with-ancestor’がつくコマンドを使用します。これらのコマンドは3つのファイルまたはバッファーの名前 — バージョンA、バージョンB、そして共通の祖先の名前を読み取ります。
比較が終了してバッファーの準備ができた後、対話的なマージが開始されます。マージバッファーで特別なマージコマンドをタイプすることにより、マージを制御できます(マージコマンドを参照してください)。入力テキストの相違それぞれにたいして、どちらを残すか、または両方編集するか選択することができます。
マージバッファーはこれらの選択を行うために、Emergeモードという特別なメジャーモードを使用します。しかし、そのバッファーでは通常のEmacsコマンドで編集することもできます。
常にEmergeの注目は、選択された相違と呼ばれる、特定の相違に焦点を置きます。この相違は、3つのバッファーで以下のようにマークされます:
vvvvvvvvvvvvvvvvvvvv text that differs ^^^^^^^^^^^^^^^^^^^^
Emergeはすべての相違に順番に番号をふり、モードラインには選択された相違の番号が常に表示されます。
マージバッファーは通常、バージョンAのテキストで開始されます。しかしバージョンAの相違が共通の祖先と一致する場合、その相違の初期値にはバージョンBが優先されます。
マージバッファーを抜けるとき、Emergeはマージされたテキストを残します。このとき、C-x
C-wで、それをファイルに保存できます。emerge-files
またはemerge-files-with-ancestor
に数引数を与えた場合、ミニバッファーを使用して、出力するファイル名を読み取ります(これは、このコマンドが読み取るファイル名の最後のファイル名です)。その後Emergeから抜けると、マージされたテキストを出力ファイルに保存します。
通常、Emergeコマンドは終了するとき出力バッファーを、そのバッファーのファイルに保存します。EmergeをC-]で中断した場合、Emergeコマンドは出力バッファーを保存しませんが、もし保存したいときは自分で保存することができます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
マージコマンドに与える2つのモード — FastモードとEditモードを選択することができます。Fastモードでは、基本的なマージコマンドは1文字ですが、通常のEmacsコマンドは利用不可です。これはマージコマンドだけを使いたいときは便利です。Editモードでは、すべてのマージコマンドはプレフィクスキーC-c C-cで始まり、通常のEmacsコマンドも利用可能です。これによりマージバッファーで編集することができますが、Emerge操作は遅くなります。
eでEditモード、C-c C-c fでFastモードに切り替わります。モードラインにはEditモードおよびFastモードは、‘E’と‘F’で示されます。
Emergeは、特定のマージコマンドがどのように機能するかに影響を与える、2つの追加的なサブモード — Auto AdvanceモードとSkip Prefersモードがあります。
Auto Advanceモードが効力をもつ場合、aまたはbコマンドで次の相違に移動します。これは候補を単に選んでいくだけで、素早くマージすることができます。Auto Advanceモードの場合、モードラインに‘A’が示されます。
Skip Prefersモードが効力をもつ場合、nおよびpコマンドは、状態が“prefer-A”と“prefer-B”の相違をスキップします(相違の状態を参照してください)。したがって、どちらのバージョンも正しいと推定できない相違だけを見ていくことができます。Skip Prefersモードの場合、モードラインに‘S’が示されます。このモードは祖先がある場合にだけ適しています。
Auto Advanceをセットまたはクリアーするには、コマンドs a
(emerge-auto-advance
)を使用します。Skip Prefersモードをセットまたはクリアーするには、s s
(emerge-skip-prefers
)を使用します。これらのコマンドは、正の引数の場合はモードをオンにして、負または0の引数のときはモードをオフにし、引数がないときはモードのオン・オフを切り替えます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
マージバッファーでは、相違は文字‘v’および‘^’のラインでマークされます。各相違は、以下の7つの状態のうち1つをもちます:
相違にはバージョンAが表示されています。aコマンドは常にこの状態を生成します。モードラインには‘A’が示されます。
相違にはバージョンBが表示されています。bコマンドは常にこの状態を生成します。モードラインには‘B’が示されます。
選択を行っていないので、相違にはデフォルトとしてAまたはBの状態が表示されています。すべての相違はdefault-A状態で開始されます(したがってマージバッファーはAバッファーのコピーとなります)が、例外として、もう一方のほうがpreferred(好ましい)な場合を除きます(以下参照)。
相違を選択したときに、状態はdefault-Aまたはdefault-Bから、AまたはBに遷移します。したがって、選択された相違が状態default-Aまたはdefault-Bをもつことはなく、これらの状態がモードラインに表示されることはありません。
コマンドd aは、デフォルトの状態にdefault-Aを選択し、d bはdefault-Bを選択します。これらで選択されるデフォルトは、まだ1度も選択していないか、好ましい候補をもたないすべての相違に適用されます。順番に移動しながらマージを行っている場合、一度も選択されていない相違とは、選択された相違の後のすべての相違です。したがって順番に移動しながら、セクションの間でd aとd bを使い分けることにより、マージバッファーのあるセクションにたいしてはバージョンAをデフォルトに、他のセクションにはバージョンBを効果的に選択できます。
相違には、状態Aまたは状態Bが表示されています。なぜなら、それがpreferred(好ましい)からです。これはまだ明示的な選択を行なっていないが、一方の候補は共通の祖先と同じなので、もう一方の候補の方が正しく見えることを意味します。したがってAバッファーが共通の祖先と同じ場合、バージョンBの方が好ましいといえます。なぜなら、それは実際に変更されているからです。
これら2つの状態は、モードラインに‘A*’と‘B*’で表示されます。
x cまたはx Cコマンドの結果として、相違は状態Aおよび状態Bが混合されたものを表示しています。
相違が1度この状態になると、aコマンドとbコマンドは、数引数を与えないかぎり何もしません。
モードラインには状態‘comb’が表示されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下はFastモードのマージコマンドです。Editモードでは前にC-c C-cをつけてください:
前の相違を選択します。
次の相違を選択します。
この相違にバージョンAを選択します。
この相違にバージョンBを選択します。
番号nの相違を選択します。
ポイントを含む相違を選択します。
終了 — マージを終了します。
中断 — マージをexitして出力を保存しません。
Fastモードに移行します(Editモードでは実際にはC-c C-c fです)。
Editモードに移行します。
3つのウィンドウにたいして、(C-lのように)再センタリングをします。引数を指定すると、デフォルトの3ウィンドウ表示を再構築します。
数引数の一部を指定します。
これも数引数の一部を指定します。
ポイント位置からマージバッファーの下方へ、バージョンAをデフォルトとして選択します。
ポイント位置からマージバッファーの下方へ、バージョンBをデフォルトとして選択します。
この相違のバージョンAを、killリングにコピーします。
この相違のバージョンBを、killリングにコピーします。
この相違のバージョンAを、ポイント位置に挿入します。
この相違のバージョンBを、ポイント位置に挿入します。
相違の周囲に、ポイントとマークを配します。
3つのウィンドウすべてを、(M-vのように)下にスクロールします。
3つのウィンドウすべてを、(C-vのように)上にスクロールします。
3つのウィンドウすべてを、(C-x <のように)左にスクロールします。
3つのウィンドウすべてを、(C-x >のように)右にスクロールします。
3つのウィンドウすべての水平スクロールをリセットします。
マージウィンドウを1行に縮めます(フルサイズに復元するにはC-u lを使用します)。
この相違の2つのバージョンを合成します(2つのバージョンの合成を参照してください)。
Emergeが操作しているファイルまたはバッファーの名前を、Helpウィンドウに表示します(ウィンドウを復元するにはC-u lを使用します)。
この相違を次の相違に結合します(C-u x jは前の相違に結合します)。
この相違を2つの相違に分割します。このコマンドを使う前に、3つのバッファーで、相違を分割したい位置にポイントを配してください。
相違の上部と下部にある、同じ行を取り除きます。このような行は、バージョンAとバージョンBが同じでも、それらが祖先となるバージョンと異なる場合に発生します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
qコマンド(emerge-quit
)はマージを終了して、指定されている場合は結果を出力ファイルに保存します。これはバッファーAおよびBの内容を正しいものに復元するか、もしそれらがEmergeにより作成され、何も変更されていないときはkillします。これによりマージバッファーでEmergeコマンドは使えなくなります。なぜならそれらを実行することにより、さまざまなバッファーの内容にダメージを与えるからです。
C-]はマージを中断します。これは出力ファイルに書き込まずに終了することを意味します。出力ファイルを指定していない場合、マージの終了と中断に実際の違いはありません。
Emergeコマンドが他のLispプログラムから呼び出された場合、正常終了の戻り値はt
で、中断(abort)のときはnil
です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
特定の相違にたいして両方の候補を使いたいときがあります。これを行なうにはマージバッファーを以下のように編集するx cを使用します:
#ifdef NEW version from B buffer #else /* not NEW */ version from A buffer #endif /* not NEW */
この例はCプリプロセッサー条件が2つのバージョン候補を区切っていますが、区切りに使う文字列は、変数emerge-combine-versions-template
に選択した文字列をセットすることにより、指定することができます。この文字列で‘%a’はバージョンA、‘%b’はバージョンBです。上記の結果を生成するデフォルトのセッティングは、以下のようなものです:
"#ifdef NEW\n%b#else /* not NEW */\n%a#endif /* not NEW */\n"
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
マージの間、AおよびBバッファーを自分で編集してはいけません。Emergeは一時的にこれらを変更しますが、最終的には元の内容に戻します。
複数のマージを一度に行うことができます — ただし、ある1つのバッファーを複数のマージの入力として使用しないでください。なぜなら、これらのバッファーに加えられる一時的な変更が、1つのバッファーに加えられてしまうからです。
ファイル全体を比較する必要があるため、Emergeの開始には時間がかかることもあります。Emacsは、diff
が終了するまで他のことを行なえません。入力ファイルが大きいときはバックグラウンドで比較を行なうように、誰かがEmergeを変更するかもしれません
— そうなればEmergeがコマンドを受け付けられるようになるまでの間、Emacsで他の作業を続けることができるでしょう。
マージをセットアップした後、Emergeはフックemerge-startup-hook
を実行します。
フックを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
定義されたabbrev(abbreviation: 略語の意)とは、挿入したとき他のテキストに展開される単語のことです。abbrevは、特別な方法で展開されるようにユーザーにより定義されます。たとえば‘foo’を、‘find outer otter’に展開されるように定義したとします。その後、f o o SPCとタイプすることにより、バッファーに‘find outer otter ’を挿入できます。
略語機能の2番目の種類は、動的abbrev展開(dynamic abbrev expansion)と呼ばれます。ポイントの前の文字で始まる単語をバッファーから探して、その文字を展開するために、明示的なコマンドで動的abbrev展開を使用します。動的abbrev展開を参照してください。
3番目の種類のhippie expansion(ヒッピー展開)は、略語展開を一般化したものです。Hippie Expansion in Features for Automatic Typingを参照してください。
29.1 abbrevの概念 | 定義されたabbrevの基本。 | |
29.2 abbrevの定義 | abbrevを定義することにより、タイプしたとき展開されるようになります。 | |
29.3 abbrev展開の制御 | 展開の制御 — プレフィクス、展開の取り消し。 | |
29.4 abbrevのテストと編集 | 定義されたabbrevのリスト全体の閲覧と編集。 | |
29.5 abbrevの保存 | 他のセッションのためにabbrevのリスト全体を保存する。 | |
29.6 動的abbrev展開 | すでにバッファーにある単語にたいする略語。 | |
29.7 動的abbrevのカスタマイズ | 動的abbrevのための単語とは何か。ケースごとの処理。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
abbrevとは、特定の展開結果に展開されるために定義された単語のことです。abbrevの後ろに単語の区切りとなる文字を挿入したとき、それはabbrevを展開し、abbrevを展開結果に置き換えます。たとえば‘foo’が‘find outer otter’に展開されるabbrevとして定義された場合、f o o .とタイプすると‘find outer otter.’が挿入されます。
abbrevは、バッファーローカルなマイナーモードのAbbrevモードが有効なときだけ展開されます。Abbrevモードを無効にすると、定義したabbrevは忘れられますが、再びAbbrevモードを有効にすると展開されます。コマンドM-x abbrev-modeは、Abbrevモードを切り替えます。数引数を指定した場合、引数が正のときはAbbrevモードをオン、他の場合はオフに切り替えます。マイナーモードを参照してください。
abbrevは、あるメジャーモードのときだけアクティブになる、モード特有(mode-specific)な定義をもつことができます。abbrevは、すべてのメジャーモードでアクティブになる、グローバル(global)な定義をもつこともできます。同じabbrevが、グローバルな定義と、異なるメジャーモードのための、さまざまなモード特有の定義をもつことができます。カレントのメジャーモードにたいするモード特有の定義は、グローバルな定義をオーバーライドします。
Abbrevモードが有効かにかかわらず、編集セッションの間に対話的にabbrevを定義できます。それ以降のセッションでリロードして使用するために、ファイルにabbrev定義のリストを保存することもできます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ポイントの前の1つ以上の単語を使用して、それが展開結果となるabbrevを定義します(add-global-abbrev
)。
同じですが、カレントメジャーモードに特有のabbrevを定義します(add-mode-abbrev
)。
バッファーの単語をabbrevとして定義します(inverse-add-global-abbrev
)。
バッファーの単語を、モード特有のabbrevとして定義します(inverse-add-mode-abbrev
)。
abbrevを、expに展開されるabbrevとして定義します。
abbrevを、expに展開されるモード特有のabbrevとして定義します。
すべてのabbrev定義を削除して、白紙状態にします。
abbrevを定義する通常の方法は、abbrevに展開させたいテキストを入力して、ポイントをその後ろに配し、C-x a g
(add-global-abbrev
)とタイプします。これはミニバッファーを使ってabbrev自身を読み取り、ポイントの前の1つ以上の単語にたいするabbrevとして定義します。数引数を使用してポイントの前のいくつの単語が展開結果となるかを指定します。たとえば、上述したabbrevの‘foo’を定義するには、‘find
outer otter’とテキストをタイプしてから、C-u 3 C-x a g f o o RETとタイプします。
C-x a gの引数に0を指定すると、それは定義するabbrevの展開結果として、リージョンの内容を使用することを意味します。
C-x a l
(add-mode-abbrev
)は似ていますが、これはカレントのメジャーモードにたいする、モード特有のabbrevを定義します。引数の機能はC-x
a gと同じです。
C-x a i g (inverse-add-global-abbrev
)とC-x a i l
(inverse-add-mode-abbrev
)は、逆のことを行ないます。abbrevとなるテキストがすでにバッファーに存在する場合、これらのコマンドはミニバッファーに展開結果を指定することにより、abbrevを定義します。これらのコマンドは、この定義を使ってabbrevテキストを展開します。
abbrevまたは展開結果をバッファーに入力せずに、コマンドdefine-global-abbrev
で定義することができます。これは2つの引数
—
abbrevと展開結果を読み取ります。コマンドdefine-mode-abbrev
は、モード特有のabbrevにたいして同様のことを行います。
abbrevの定義を変更するには、単に新しい定義を作成するだけです。abbrevがすでに定義をもつ場合、abbrev定義コマンドはそれを置換する前に確認を求めます。
abbrev定義を削除するには、C-u - C-x a gやC-u - C-x a lのように、abbrev定義コマンドに負の引数を与えます。前者はグローバルな定義を削除し、後者はモード特有の定義を削除します。M-x kill-all-abbrevsは、すべてのabbrevにたいしてグローバルとローカルの両方の定義を削除します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Abbrevモードが有効な場合、バッファーのポイントの前にabbrevがあり、そこで自己挿入文字として空白文字か区切り文字(SPCやカンマなど)を挿入したときは、常にabbrevが展開されます。より正確には、単語を構成しない任意の文字はabbrevを展開し、単語を構成する任意の文字はabbrevの一部となります。もっとも一般的なabbrevの使用法は、まずabbrevを挿入し、それから区切り文字か空白文字を挿入してabbrevを展開する方法です。
abbrevの展開は、大文字小文字を維持します。つまり‘foo’は‘find outer
otter’に、‘Foo’は‘Find outer
otter’に展開されます。デフォルトでは‘FOO’は‘Find Outer
Otter’に展開されますが、変数abbrev-all-caps
を非nil
値に変更した場合は、‘FIND
OUTER OTTER’に展開されます。
以下はabbrevの展開を制御するコマンドです:
プレフィクスと、その後の展開されるabbrevを分割します(abbrev-prefix-mark
)。
ポイントの前のabbrevを展開します。(expand-abbrev
)。これはAッbレvモードが有効でなくても効果があります。
最後に展開したabbrevをアンドゥします。
リージョンで見つかったいくつか、またはすべてのabbrevを展開します。
abbrevを展開して、その展開結果にプレフィクスをつけたい場合があるかもしれません。たとえば、‘cnst’が‘construction’に展開されるとき、これを使って‘reconstruction’を入力したいと思うかもしれません。しかし、recnstとタイプしてもうまくいきません。なぜなら、それがabbrevとして定義される必要があるからです。これは、プレフィクス‘re’とabbrevの‘cnst’の間で、コマンドM-'
(abbrev-prefix-mark
)を使うことにより行なうことができます。最初にまず‘re’を挿入します。そこでM-'をタイプします。これにより、コマンドが機能していることを示すためバッファーにハイフンが挿入されます。その後、abbrevの‘cnst’を入力します。このときバッファーには‘re-cnst’が含まれます。そこで単語を構成しない文字を挿入すると、abbrevの‘cnst’が‘construction’に展開されます。この展開ステップでは、M-'が使用中であることを示していたハイフンも削除されます。結果は期待した通り‘reconstruction’となります。
abbrevを展開せずにabbrevのテキストをバッファーに残したい場合、abbrevの後ろの区切り文字をC-qで挿入して、これを行なうことができます。したがってfoo C-q ,とタイプすると、それは展開されず、バッファーには‘foo,’が残ります。
間違ってabbrevを展開した場合、C-/
(undo
)で展開をアンドゥできます。これはabbrev展開による挿入をアンドゥし、それをabbrevテキストに戻します。期待する結果が展開されないabbrevと終端となる非単語文字の場合、C-qでクォートして終端文字を再挿入しなければなりません。M-x
unexpand-abbrevを使えば終端文字を削除せずに、最後の展開を取り消すことができます。
M-x expand-region-abbrevsは、リージョン内の定義されたabbrevを検索し、見つかったabbrevそれぞれにたいして、abbrevを展開結果に置き換えるか尋ねます。このコマンドはabbrevを使ってテキストを挿入したが、最初にAbbrevモードをオンにするのを忘れたときに便利です。これは特別なabbrev定義のセットで、複数のグローバルな置き換えを一度に行なうときにも便利です。このコマンドは、Abbrevモードが有効でなくても効果があります。
関数expand-abbrev
は、abbrev-expand-function
が指定する関数を呼び出すことにより展開を行ないます。この関数を変更することにより、abbrevの展開を自由に変更できます。Abbrev
Expansion in The Emacs Lisp Reference Manualを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
すべてのabbrev定義のリストを表示します。数引数を指定した場合は、ローカルなabbrevのリストだけを表示します。
abbrevのリストを編集します。定義の追加、変更、削除ができます。
M-x list-abbrevsの出力は以下のようなものです:
他のさまざまなテーブル… (lisp-mode-abbrev-table) "dk" 0 "define-key" (global-abbrev-table) "dfn" 0 "definition"
(空行に意味はありません。また他のabbrevテーブルは省略しています。)
カッコで括られた名前を含む行は、特定のabbrevテーブルのabbrevにたいするヘッダーです。global-abbrev-table
はすべてのグローバルなabbrevを含み、その他のメジャーモードの後ろについたabbrevテーブルは、モード特有のabbrevを含みます。
それぞれのabbrevテーブルで、空行でない行は1つのabbrevの定義です。行の先頭の単語はabbrevです。その後ろの数字は、そのabbrevが展開された回数です。Emacsはこれを追跡することにより、実際に使用されているabbrevを調べて、ときどきしか使わないものを削除するのを助けます。行の最後の文字列はabbrevの展開結果です。
‘(sys)’とマークされているabbrevもいくつかあります。これらはsystem abbrevs(システムの略語)で、さまざまなモードにたいして事前に定義されており、ユーザーのabbrevファイルには保存されません(Abbrevs in The Emacs Lisp Reference Manualを参照してください)。systemのabbrevを無効にするには、同じ名前で展開結果がabbrev自身と同じになるabbrevを定義し、それをabbrevファイルに保存してください。
M-x edit-abbrevsを使うと、Emacsバッファーでabbrevのリストを編集することにより、abbrev定義の追加、変更、killができます。リストの書式は、上記で説明した書式を同じです。abbrevのバッファーは*Abbrevs*と呼ばれ、モードはEdit-Abbrevsモードです。このバッファーでC-c C-cをタイプすると、そのバッファーで指定されたabbrev定義がインストールされ、リストに定義されていないabbrevは削除されます。
コマンドedit-abbrevs
は、実際にはlist-abbrevs
と同じですが、list-abbrevs
が単に*Abbrevs*を他のウィンドウに表示するのに比べ、このコマンドはそのバッファーを選択する点が異なります。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下のコマンドにより、編集セッション間でabbrev定義を維持できます。
すべてのabbrev定義の記述を、ファイルfileに書き込みます。
ファイルfileを読み込み、そこで指定されているabbrevを定義します。
カレントバッファーの定義からabbrevを定義します。
すべてのabbrevとそれらの展開結果を、カレントバッファーに挿入します。
M-x write-abbrev-fileは、ミニバッファーを使用してファイル名を読み取り、すべてのカレントのabbrev定義の記述を、そのファイルに書き込みます。これは後のセッションで使用するために、abbrev定義を保存するのに使われます。ファイルに保存されるテキストは一連のLisp式で、それが実行されると保存したときと同じabbrevを定義します。
M-x
read-abbrev-fileは、ミニバッファーを使用してファイル名を読み取り、ファイル内容に対応するabbrevを定義します。関数quietly-read-abbrev-file
も同様ですが、これはエコーエリアにメッセージを表示しません。これを対話的に呼び出すことはできず、主にinitファイル(Emacs初期化ファイルを参照してください)で使用されます。どちらの関数も引数にnil
が指定されると、変数abbrev-file-name
で与えられるファイルを使用します。この変数のデフォルトは~/.emacs.d/abbrev_defsです。これは標準のabbrev定義ファイルで、Emacsは起動時にこのファイルから自動的にabbrevをロードします(例外としてEmacsがバッチモードで開始されたときはabbrevファイルをロードしません。バッチモードについての説明は、初期化オプションを参照してください)。
abbrevのどれかを変更した場合、Emacsは((C-x sやC-x
C-cなどで)、すべてのファイルの保存するか尋ねるときにabbrevについても尋ねます。これはabbrev-file-name
で指定したファイルに、それらを保存します。この機能は変数save-abbrevs
をnil
にセットすることにより抑止できます。silently
にセットすることにより、確認なしでabbrevが保存されるようになります。
コマンドM-x insert-abbrevsおよびM-x define-abbrevsは、前のコマンドと似ていますが、Emacsバッファーのテキストにたいして機能します。M-x insert-abbrevsは、カレントのabbrev定義の記述をカレントバッファーのポイントの後ろにテキストとして挿入します。M-x define-abbrevsは、カレントバッファー全体を解析して、対応するabbrevを定義します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
上記で説明したabbrev機能は、テキストの挿入にしたがい自動的に処理されますが、すべてのabbrevを明示的に定義しなければなりません。対照的に、動的abbrev(dynamic abbrevs)は、バッファーの内容から略語の展開結果を自動的に決定することができます、しかし動的abbrevの展開は、明示的に要求したときだけ行なわれます。
バッファーのポイントの前の単語を動的abbrevとして、その略語で始まる単語を検索することにより展開します(dabbrev-expand
)。
ポイントの前の単語を動的abbrevとして補完します(dabbrev-completion
)。
たとえばバッファーが‘does this follow ’が含んでいて、f o
M-/とタイプすると、これは‘follow’を挿入します。なぜならそれが‘fo’で始まる、そのバッファーの最後の単語だからです。M-/に数引数を指定すると、それはポイントから後方に検索して2番目、3番目、...の異なる展開結果を検索します。M-/を繰り返すと他の展開結果を後方に検索します。ポイントの前のテキストをすべて検索した後は、ポイントの後のテキストを検索します。変数dabbrev-limit
が非nil
の場合、それはバッファーの中で展開結果を探す範囲を指定します。
カレントバッファーを検索した後、通常M-/は他のバッファーを検索します。dabbrev-check-all-buffers
とdabbrev-check-other-buffers
は、他のバッファー(もし存在するなら)のどれが検索されたか決定するのに使用できます。
どのバッファーを検索するかを制御するには、変数dabbrev-ignored-buffer-names
およびdabbrev-ignored-buffer-regexps
をカスタマイズします。前者の値は、スキップするバッファー名のリストです。後者の値は正規表現のリストで、バッファー名がこれらの正規表現のどれかにマッチした場合、動的abbrev展開はそのバッファーをスキップします。
C-u - M-/のようにM-/に負の引数を指定すると、これは最初にポイントの後ろの展開結果を検索し、その後は他のバッファーを検索し、ポイントの前の展開結果は最後に報告します。他の展開結果を探すためにM-/を繰り返す場合は、引数に何もしていしないでください。M-/を繰り返すことにより、ポイントの後、その後はポイントの前の展開結果を巡回します。
動的abbrevを展開した後、その展開結果の元のコンテキストで展開結果の後ろに続く、追加の単語をコピーすることができます。コピーしたい追加の単語ごとに、単にSPC M-/とタイプします。単語間のスペースおよび区切り文字は、単語とともにコピーされます。
M-/が展開する単語を決定する方法と、それを展開する方法を制御できます。動的abbrevのカスタマイズを参照してください。
コマンドC-M-/
(dabbrev-completion
)は、動的abbrevの補完を行ないます。利用可能な展開結果を1つずつ試すかわりに、これはすべてを検索して、それらがもつ共通のテキストを挿入します。共通部分がない場合、C-M-/は、通常の方法で選択することができる補完リストを表示します。補完を参照してください。
動的abbrev展開は、Abbrevモードとは完全に独立しています。M-/での単語の展開は、その単語が通常のabbrevとして定義されていることとは無関係です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
動的abbrev展開は通常、展開結果の検索で大文字小文字を無視します。したがって、展開結果と展開する単語は、大文字小文字が一致する必要はありません。
この機能は変数dabbrev-case-fold-search
により制御されます。この値がt
の場合、検索で大文字小文字は無視されます。nil
の場合、単語と展開結果は大文字小文字が一致していなければなりません。値がcase-fold-search
(デフォルト)の場合、変数case-fold-search
が展開結果の検索で、大文字小文字を無視するかどうかを制御します(検索中のLaxマッチングを参照してください)。
動的abbrev展開は通常、大文字小文字のパターンにしたがって展開結果を変換することにより、展開する動的abbrevの大文字小文字のパターンを維持します。
変数dabbrev-case-replace
は、動的abbrevの大文字小文字のパターンを維持するかどうかを制御します。この値がt
の場合、動的abbrevの大文字小文字のパターンはほとんどのケースで維持されます。nil
の場合、展開結果は常にそのままコピーされます。値がcase-replace
(デフォルト)の場合、変数case-replace
が展開結果をそのままコピーするかどうかを制御します(置換コマンドとLaxマッチを参照してください)。
しかし、展開結果が複雑にミックスされた大文字小文字のパターンを含む場合、そして動的abbrevがそのパターンにある程度マッチする場合、これらの変数の値にかかわらず、展開結果は常にそのままコピーされます。したがって、たとえばバッファーがvariableWithSillyCasePattern
というテキストを含む場合、v
a M-/とタイプすると、大文字小文字のパターンを含めて展開結果をコピーします。
変数dabbrev-abbrev-char-regexp
が非nil
の場合、これは動的展開の目的のために、どの文字を単語の一部とするかを制御します。正規表現は2文字以上ではなく、ただ1文字だけにマッチしなければなりません。同じ正規表現が、どの文字が展開結果の一部となるかも決定します。値がnil
(デフォルト)の場合は特別な意味をもちます。動的abbrev(たとえばポイント位置の単語)は単語構成文字から構成されますが、それらの展開結果は単語とシンボル文字のシーケンスから取得されます。これはプログラムソース内、および多くの言語による人間が読むことができるテキストにたいするシンボルの展開にたいして、一般的にこれは適切ですが、一般的ではない句読点を含むテキストバッファーにおいては、おそらくあなたが望むものではないかもしれません。そのような場合は、値\"\\\\sw\"
がよい結果を生成するかもしれません。
シェルスクリプトおよびmakefileでは、変数名にプレフィクス‘$’があるときと、ないときがあります。このタイプのテキストのためのメジャーモードは、オプションのプレフィクスを扱うために、変数dabbrev-abbrev-skip-leading-regexp
をセットして、動的abbrev展開をカスタマイズできます。この値には、動的abbrev展開が無視すべきオプションのプレフィクスにマッチする正規表現を指定します。デフォルトはnil
で、これは文字をスキップしないことを意味します
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Diredはディレクトリー、およびオプションでそれのサブディレクトリーのリストを含む、Emacsバッファーを作成します。このバッファー内を移動するために、通常のEmacsコマンドと、リストされたファイルを操作するための、特別なコマンドを使うことができます。Diredはローカルとリモートの両方のディレクトリーで機能します。
通常はDiredバッファーは読み取り専用で、テキストの挿入はできません(とはいえWdiredモードではそれが可能。Diredバッファーの編集を参照されたい)。dやxのような通常のプリント文字は、特別なDiredコマンドに再定義されています。Diredコマンドには、カレントファイル(カレント行のファイルのこと)をマークしたり、フラグをつけるものがいくつかあり、他のコマンドは、マークされたファイルやフラグがつけられたファイルにたいして処理を行ないます。最初に特定のファイルをマークして、それらすべてにたいして1つのコマンドで操作を行なうのです。
Dired-Xパッケージは、Diredモードのためのさまざまな特別の機能を提供します。Dired-X in Dired Extra User’s Manualを参照してください。
ディレクトリーのファイルのリストは、C-x C-d
(list-directory
)でも閲覧することができます。Diredとは異なり、このコマンドではリストされたファイルにたいする操作はできません。ファイルディレクトリーを参照してください。
30.1 Diredの起動 | Diredの呼び出し方。 | |
30.2 Diredバッファーでの移動 | Diredバッファーでの特別な移動コマンド。 | |
30.3 Diredでのファイルの削除について | Diredでのファイルの削除。 | |
30.4 大量のファイルに一度にフラグをつける | ファイル名にもとづくファイルへのフラグ付け。 | |
30.5 Diredのファイルをvisitする | Diredによるその他のファイル操作。 | |
30.6 Diredでのマークとフラグ | 削除のためのフラグとマーク。 | |
30.7 ファイルにたいする操作 | 1つまたは複数ファイルにたいするコピー、リネーム、プリント、圧縮など。 | |
30.8 Diredでのシェルコマンド | マークしたファイルにたいするシェルコマンドの実行。 | |
30.9 Diredでのファイル名の変更 | 複数ファイルのリネームにパターンを使う。 | |
30.10 Diredでのファイル比較 | Diredの様式でdiff を実行する。
| |
30.11 Diredでのサブディレクトリー | Diredバッファーにたいするサブディレクトリーの追加。 | |
30.12 Diredでのサブディレクトリーにたいするスイッチ | Diredでのサブディレクトリーのスイッチ。 | |
30.13 サブディレクトリー間の移動 | サブディレクトリー間の移動、上下への移動。 | |
30.14 サブディレクトリーを隠す | サブディレクトリーの表示・非表示。 | |
30.15 Diredバッファーの更新 | 重要でないファイル行の削除。 | |
30.16 Diredとfind | Diredでファイルを選択するためにfind を使う。
| |
30.17 Diredバッファーの編集 | Diredバッファーの編集によりファイルを操作する。 | |
30.18 Diredでのイメージとサムネイルの閲覧 | Diredでのイメージサムネイルの閲覧。 | |
30.19 その他のDiredの機能 | その他のさまざまな機能。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Diredを呼び出すには、C-x d
(dired
)とタイプします。これはミニバッファーを使用してディレクトリー名を読み取り、そのディレクトリーのファイルを一覧するするDiredバッファーを開きます。ミニバッファーの引数に、ワイルドカードによるファイル名パターンを与えることもできます。この場合、Dliredバッファーには、そのパターンにマッチする、すべてのファイルが一覧されます。ディレクトリー部分にワイルドカードが出現することもあります。たとえば、
C-x d ~/foo/*.el RET C-x d ~/foo/*/*.el RET
1つ目の例は、ディレクトリー‘foo’内の、拡張子‘.el’のすべてのファイルをリストします。2つ目の例は、‘foo’のすべてのサブディレクトリー内の、拡張子‘.el’のファイルをリストします。
ミニバッファー内では、通常のヒストリー、および補完のコマンドが使用できます。特に、M-nは(もしあれば)visitされているファイルの名前を配します(ミニバッファーヒストリーを参照)。
C-x C-f (find-file
)にディレクトリー名を与えて、Diredを呼び出すこともできます。
変数dired-listing-switches
は、ディレクトリーをリストするために、ls
に与えるオプションを指定します。この文字列には、‘-l’が含まれていなければなりません。dired
コマンドにプレフィクス引数を使用した場合、ディレクトリーの指定の前に、ls
のためのスイッチを指定できます。スイッチが指定される方法は問いません。ls
のスイッチには、引数を要求しない短いオプション(1文字)と、長いオプション(‘--’で始まり、引数は‘=’で指定される)を含めることができます。
システムのls
コマンドが‘--dired’オプションをサポートする場合、Diredは自動的にそのオプションを渡します。これにより、Diredが名前を解析できないという特殊なファイル名にたいして、ls
が特別なエスケープシーケンスを付します。Emacsセッションで最初にDiredを実行するとき、ls
コマンドに‘--dired’オプションを指定して呼び出すことにより、そのスイッチをサポートするかどうかチェックします。exitコードが0の場合、それ以降Diredは‘--dired’オプションを使用し、それ以外の場合は使用しません。変数dired-use-ls-dired
をカスタマイズすることにより、このチェックを抑止することができます。値unspecified
(デフォルト)は、チェックを行なうことを意味します。その他の非nil
値は、‘--dired’オプションを使用することを意味します。nil
は、‘--dired’オプションを使用しないことを意味します。
MS-WindowsやMS-DOSシステム、およびいくつかのリモートシステムでは、Emacsがls
をエミュレートします。このエミュレーションのオプションと特性については、MS-Windowsでのls
のエミュレーションを参照してください。
Diredバッファーを他のウィンドウに表示するには、C-x 4 d
(dired-other-window
)を使用します。C-x 5 d
(dired-other-frame
)は、Diredバッファーを別のフレームに表示します。
q
(quit-window
)とタイプすると、Diredバッファーは隠され(bury)ます。ウィンドウがそのバッファーのためだけに作成された場合は、そのウィンドウを削除します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsの通常のカーソル移動コマンドは、Diredバッファーでも利用可能です。キーC-nとC-pはそれぞれdired-next-line
とdired-previous-line
を実行して、行の先頭ではなくファイル名の先頭にカーソルを配するように、再定義されています。
特に利便性のために、DiredでのSPCおよびnは、C-nと等価になっています。pはC-pと等価です(行の移動はDiredでは一般的な操作なので、タイプしやすいようにするべきです)。DEL(上に移動してフラグを外す)は、単なる上への移動でも便利なときがあります(Diredでのファイルの削除についてを参照してください)。
j
(dired-goto-file
)は、ミニバッファーを使用してファイル名の入力を求め、Diredバッファーで、そのファイルが記述されている行にポイントを移動します。
M-s f C-s
(dired-isearch-filenames
)は、Diredバッファーで前方へのインクリメンタル検索を行ないます。これはファイル名にたいするマッチだけを検索し、それ以外のバッファーのテキストは無視します。M-s
f M-C-s
(dired-isearch-filenames-regexp
)も同じことを行ないますが、これは正規表現による検索です。変数dired-isearch-filenames
をt
に変更した場合、通常の検索コマンドも検索対象がファイル名だけに制限されるようになります。たとえばC-sは、M-s
f
C-sと同様に振る舞います。変数の値がdwim
の場合、ポイントの最初の位置がファイル名にあるときだけ、検索コマンドはファイル名にマッチします。インクリメンタル検索についての情報は、検索と置換を参照してください。
複数ディレクトリーにたいするものも含めて、Diredバッファーでは追加の移動コマンドが利用可能です。サブディレクトリー間の移動を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
もっともよく使われるDiredの使用法は、最初にファイルを削除するためにフラグ(flag)をつけて、その後にフラグがつけられたファイルを削除をする方法です。
削除するために、このファイルにフラグをつけます(dired-flag-file-deletion
)。
削除フラグを外します(dired-unmark
)。
その行の削除フラグを外して、ポイントを前の行に移動します(dired-unmark-backward
)。
削除のフラグがつけられたファイルを削除します(dired-do-flagged-delete
)。
ファイルが記述されている行に移動して、d
(dired-flag-file-deletion
)とタイプすることにより、ファイルを削除するためのフラグをつけることができます。削除フラグは行頭に‘D’が表示されます。このコマンドはポイントを次の行に移動するので、dコマンドを繰り返すことにより、連続してファイルにフラグをつけることができます。数引数は繰り返し回数を指定します。負の引数は前のファイルにフラグをつけることを意味します。
リージョンがアクティブの場合、dコマンドはリージョンのすべてのファイルに削除のフラグをつけます。この場合、コマンドはポイントを移動せず、プレフィクス引数も無視します。
ファイルを即座に削除せず、削除のフラグをファイルにつける理由は、意図しないファイルを削除する危険を軽減するためです。フラグがついたファイルをDiredに削除をさせる前に、コマンドuまたはDELで、削除フラグを外すことができます。u
(dired-unmark
)はdと同じように機能しますが、これはフラグをつけるのではなくフラグを外します。DEL
(dired-unmark-backward
)は、上に移動してフラグを外します。これはuに引数-1を指定するのと同じです。どちらのコマンドも、数引数は繰り返し回数で、負の引数は反対方向にフラグを外していくことを意味します。リージョンがアクティブの場合、ポイントを移動せずにリージョン内のすべてのファイルのフラグを外します。
フラグがついたファイルを削除するには、x
(dired-do-flagged-delete
)とタイプします。このコマンドは削除フラグがついた、すべてのファイルのリストを表示して、確認を求めます。もしこれにyesと応えた場合、Diredはフラグがついたファイルを削除して、それらのファイルにたいするDiredバッファーの行を削除します。Diredバッファーの行数は少し減り、バッファーは選択されたまま残ります。
確認を求められたときnoと応えるか、C-gで中断した場合は、即座にDiredに戻ります。バッファーの削除フラグはそのまま残り、実際に削除されたファイルはありません。
空ディレクトリーは他のファイルと同様に削除できますが、Diredは通常、空でないディレクトリーは削除できません。しかし変数dired-recursive-deletes
が非nil
の場合には、Diredはディレクトリーの内容も含めて、空でないディレクトリーを削除できます。dired-recursive-deletes
をnil
にセットしている場合でも、ディレクトリーの内容すべてについて問い合わせされることなく、ディレクトリーを再帰的に削除したいこともあるかもしれません。これには若干の危険が伴います。変数の値がalways
の場合は、さらに危険性は増すとはいえ、Diredは空でないディレクトリーを再帰的に削除するでしょう。
dired-recursive-deletes
をnil
にセットしている場合でも、ディレクトリーの内容すべてについて問い合わせされることなく、ディレクトリーを再帰的に削除したいこともあるかもしれません。たとえば、多くのディレクトリーにたいして、それらすべてを安全に削除できると確信がもてるときは、それらに削除のマークを付与したいと思うかもしれません。空でないディレクトリーすべてにたいして、確認が求められますが、all
と応えた場合は、それ以上の問い合わせなしで残りすべてのディレクトリーが削除されます。
変数delete-by-moving-to-trash
をt
に変更した場合、上記の削除コマンドは対象となるファイルおよびディレクトリーを削除するかわりに、システムのTrash(ゴミ箱)に移動します。その他のファイル操作を参照してください。
ファイルを削除する代替手段は、それらをmでマークしてDで削除する方法です。ファイルにたいする操作を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
コマンド#、~、.、% &、% dは、ファイル名にもとづき多くのファイルにフラグをつけます。
すべての自動保存ファイル(名前の最初と最後が‘#’のファイル)にたいして、削除のフラグをつけます(自動保存-災害にたいする防御を参照してください)。
すべてのバックアップファイル(名前の最後が‘~’のファイル)にたいして、削除のフラグをつけます(バックアップファイルを参照してください)。
余分な番号付きバックアップファイルに、削除のフラグをつけます。一番古いものと、一番新しいバックアップのいくつかは除外され、その中間のファイルにフラグがつけられます。
簡単にファイルを再作成できることを示唆する、特定の種類の名前をもつすべてのファイルに削除のフラグをつけます。
正規表現regexpにマッチする名前の、すべてのファイルに削除のフラグをつけます。
# (dired-flag-auto-save-files
)は、名前が自動保存ファイルに見える —
つまり名前の最初と最後が‘#’の、すべてのファイルにフラグをつけます。自動保存-災害にたいする防御を参照してください。
~ (dired-flag-backup-files
)は、名前がバックアップファイルであることを告げる —
つまり名前の最後が‘~’の、すべてのファイルにフラグをつけます。バックアップファイルを参照してください。
.
(ピリオド、dired-clean-directory
)は、いくつかのバックアップファイルだけに削除のフラグをつけます。つまり、最古と最新のいくつかのファイルを除く、すべてのファイルです。残すべき最新バージョンの数は通常、変数dired-kept-versions
(kept-new-versions
ではありません。これは保存時だけ適用されます)で与えられます。残すべき最古バージョンの数は、変数kept-old-versions
により与えられます。
C-u 3
.のように、ピリオドに正の数引数を指定すると、dired-kept-versions
をオーバーライドして、残すべき最新バージョンの数を指定します。負の引数はkept-old-versions
をオーバーライドします。引数の値にマイナスをつけると、残すべき最古バージョンの数を指定します。
% &
(dired-flag-garbage-files
)は、変数dired-garbage-files-regexp
で指定される正規表現に、名前がマッチするファイルにフラグをつけます。デフォルトでは、TeXにより生成される‘.bak’ファイルと、patch
により生成される‘.orig’ファイルと‘.rej’ファイルにマッチします。
%
dは、指定された正規表現に名前がマッチするすべてのファイルにフラグをつけます(dired-flag-files-regexp
)。マッチングにはファイル名の非ディレクトリー部分だけが使用されます。マッチのアンカーとして‘^’と‘$’を使用できます。%
dを使用するとき、特定のサブディレクトリーを隠して除外できます。サブディレクトリーを隠すを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Diredバッファーにリストされたファイルをvisitしたり、調べるためのDiredコマンドが、いくつかあります。これらのコマンドは、すべてカレント行のファイルに適用されます。そのファイルが実際にはディレクトリーの場合、これらのコマンドは(別のDiredバッファーを作成して)、そのサブディレクトリーにたいしてDiredを呼び出します。
C-x
C-fとタイプしてファイル名を指定したときと同じように、カレント行に記述されたファイルをvisitします(dired-find-file
)。ファイルのvisit(訪問)を参照してください。
fと等価です。
fと同じですが、そのファイルのバッファーに別のウィンドウを使用します(dired-find-file-other-window
)。Diredバッファーは、最初のウィンドウに表示されたまま残ります。これはC-x
4 C-fを使用して、ファイルをvisitするのと似ています。複数ウィンドウを参照してください。
カレント行に記述されたファイルをvisitし、そのバッファーを別のウィンドウで表示しますが、そのウィンドウを選択しません(dired-display-file
)。
クリックした名前のファイルをvisitします(dired-mouse-find-file-other-window
)。これはoコマンドのように、ファイルの表示に別のウィンドウを使います。
カレント行に記述されたファイルを、Viewモードで表示します(dired-view-file
)。Viewモードは、バッファーを移動するための便利なコマンドを提供しますが、バッファーの変更はできません。Viewモードを参照してください。
カレントディレクトリーの親ディレクトリーをvisitします(dired-up-directory
)。これは、..の行に移動してfをタイプするのと等価です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ファイルに‘D’というフラグをつけるのではなく、他の文字(通常は‘*’)でファイルをマークすることもできます。ほとんどのDiredコマンドは、‘*’でマークされたファイルにたいしてコマンドを処理します。フラグ付けされたファイルだけに作用するコマンドは、それらのファイルを削除するxだけです。
以下は‘*’でマークしたり、マークを外したり、マークにたいして操作を行なうコマンドです(ファイルにたいしてフラグをつけたり外すコマンドについては、Diredでのファイルの削除についてを参照してください)。
カレントファイルを‘*’でマークします(dired-mark
)。リージョンがアクティブの場合、かわりにリージョン内のすべてのファイルをマークします。そうでない場合、数引数nが与えられたときは、カレント行から数えて、次のn個のファイルまでをマークします(nが負の場合、前の-n個のファイルをマークします)。サブディレクトリーのヘッダー行(subdirectory
header line: Diredでのサブディレクトリーを参照)で呼び出さた場合、このコマンドはそのサブディレクトリー内のすべてのファイルをマークします。
マークしたファイルの数とサイズを報告します(dired-number-of-marked-files
)。
すべての実行ファイルを‘*’でマークします(dired-mark-executables
)。数引数を指定すると、それらのファイルのマークを外します。
すべてのシンボリックリンクを、‘*’でマークします(dired-mark-symlinks
)。数引数を指定すると、それらのファイルのマークを外します。
.と..を除く、すべてのディレクトリーを‘*’でマークします(dired-mark-directories
)。数引数を指定すると、それらのディレクトリーのマークを外します。
.と..を除く、カレントのサブディレクトリー内のすべてのファイルをマークします(dired-mark-subdir-files
)。
この行の任意のマークを外します(dired-unmark
)。リージョンがアクティブの場合は、かわりにリージョン内のすべてのファイルのマークを外します。そうでない場合、数引数nが与えられた場合は、カレントファイルから数えて、次のn個のファイルのマークを外します(nが負の場合、前の-n個のファイルのマークを外します)。
ポイントを前の行に移動して、その行のマークを外します(dired-unmark-backward
)。リージョンがアクティブの場合、かわりにリージョン内のすべてのファイルのマークを外します。そうでない場合、数引数nが与えられたときは、カレントファイルから数えて、前のn個のファイルのマークを外します(nが負の場合、次の-n個のファイルのマークを外します)。
Diredバッファーの、すべてのファイルのマークを外します(dired-unmark-all-marks
)。
文字markcharを使用する、すべてのマークを外します(dired-unmark-all-files
)。M-DELで呼び出された場合、このコマンドはmarkcharの入力を求めます。markcharは1文字です
— これを終了させるためにRETを使用しないでください。以下の*
cの説明を参照してください。これは1つのマーク文字を、他の文字に置換します。
数引数を指定した場合、このコマンドはマークされたファイルごとに、マークを外すか確認します。yはyes(はい)で、nはno(いいえ)、!は残りのファイルにたいして確認を行なわずにマークを外します。
次にマークされたファイルへ下に移動します(dired-next-marked-file
)。“マークされた”ファイルとは、任意の種類のマークがついているファイルです。
前のマークされたファイルへ、上に移動します(dired-prev-marked-file
)。
すべてのマークを切り替えます(dired-toggle-marks
)。つまり、‘*’でマークされたファイルのマークを外し、マークされていないファイルを‘*’でマークします。他の方法でマークされたファイルは影響を受けません。
文字old-markcharを使ったすべてのマークを、文字new-markcharを使ったマークに置き換えます(dired-change-marks
)。このコマンドは主に‘*’や‘D’以外の文字を使用したマークを作成するのに使われます。引数は1文字です
— 終了させるためにRETを使用しないでください。
このコマンドは、マーク文字としてほとんどの任意の文字を使用できるので、ファイルをさまざまなクラスに分類することができます。old-markcharがスペース(‘ ’)の場合、このコマンドは、すべてのマークされていないファイルにたいして処理を行ないます。new-markcharがスペースの場合、このコマンドは対象となるファイルのマークを外します。
このコマンドの威力を知る例として、以下ではマークされていないファイルすべてにフラグ‘D’をセットして、すでに‘D’フラグがついているものはフラグを外しています:
* c D t * c SPC D * c t SPC
この例では、すでに‘t’でマークされたファイルがないと仮定しています。
名前が正規表現regexpにマッチするすべてのファイルを、(‘*’で)マークします(dired-mark-files-regexp
)。このコマンドは%
dと似ていますが、‘D’のフラグをつけるかわりに、‘*’でマークします。
マッチングには、ファイル名のディレクトリー部分以外だけが使用されます。マッチのアンカーとして、‘^’と‘$’が使用できます。サブディレクトリーを一時的に隠すことにより、それらを除外できます(サブディレクトリーを隠すを参照してください)。
内容(contents)に正規表現regexpにたいするマッチを含むすべてのファイルを、(‘*’で)マークします(dired-mark-files-containing-regexp
)。このコマンドは%
mと似ていますが、ファイル名ではなくファイル内容を検索する点が異なります。ファイルがEmacsバッファーでvisitされていて、dired-always-read-filesystem
がnil
(デフォルト)なら、このコマンドはファイルを再visitせずにバッファーの内容を調べるので、ディスク上のファイル内容が、最後にvisitしたときから変更されている場合は、矛盾した結果になるかもしれません。これを望まない場合は、このコマンドを呼び出す前に、バッファーでvisitされているファイルをリバートしたり、それらのバッファーにたいしてAuto-Revert
モードをオンに切り替えたいと思うかもしれません。バッファーのリバートを参照してください。ファイルをリバートしたりAuto-Revertモードをオンにせずに、このコマンドに常にファイルを再visitさせたい場合は、dired-always-read-filesystem
を非nil
にセットしたいと思うかもしれません。
Diredバッファーでの、マークの追加や削除などの変更をアンドゥします(dired-undo
)。このコマンドは実際のファイル操作をリバートしたり、失われたファイルを回復しません!
これは単にバッファー自身にたいする変更をアンドゥするだけです。
ファイルを操作するコマンドの後でこれを使用することにより、問題が起こる場合もあります。たとえば1つ以上のファイルをリネームしてから、Diredバッファーでdired-undo
により元の名前にリストアした場合、Diredバッファーと、そのディレクトリーの実際の内容が、同期しなくなります。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このセクションでは、1つまたは複数のファイルを操作する、基本的なDiredコマンドを説明します。これらのコマンドはすべて大文字で、引数を読み取ったり、実際に動作する前に確認を求めるのに、ミニバッファーを使用します。これらのコマンドはすべて、以下の方法により操作するファイルを指定します:
コマンド!や‘%’のような他のDiredコマンドにも、操作対象となるファイルを決定するのに、同じ規則を使うものがあります。
ファイルのコピーやリネーム、それらにたいするリンクを作成するような、対象ディレクトリーを尋ねるコマンドは、操作のためにデフォルトの対象ディレクトリーの推論を試みます。これらのコマンドは通常、Diredバッファーのデフォルトディレクトリーを提案しますが、オプションdired-dwim-target
が非nil
で、何らかのウィンドウに別のDiredバッファーが存在しない場合には、その他のバッファーのディレクトリーをかわりに提案します。dired-dwim-target
によりDiredバッファーを表示する次のウィンドウ、Diredバッファーを表示するもっとも最近使用されたウィンドウ、あるいはそれ以外の関数の使用のどれを優先するかをカスタマイズできます。値が関数ならそれは引数なしで呼び出されて、デフォルト(デフォルトターゲットおよび“future
history”)として使用するディレクトリーのリストをリターンすることが期待されます。
以下は、ファイルにたいして操作を行なうDiredコマンドです。
指定されたファイルをコピーします(dired-do-copy
)。引数newはコピー先のディレクトリー、または(1つのファイルをコピーする場合は)新しいファイル名です。これはシェルコマンドcp
と似ています。
オプションdired-create-destination-dirs
はDiredがファイルのコピーやリネームで対象先に存在しないディレクトリーがある場合に、それを作成するかどうかを制御します。デフォルト値のnil
はそのような存在しないディレクトリーを作成しないことを意味します。値always
はDiredが自動的にそれらを作成すること、値ask
はそれらを作成する前にDiredが確認を求めることを意味します。
dired-copy-preserve-time
が非nil
の場合、このコマンドでコピーすることにより、‘cp
-p’でコピーしたときのように、古いファイルの最終修正時刻(modification time)が保持されます。
変数dired-recursive-copies
は、(‘cp
-r’のように)ディレクトリーを再帰的にコピーするかを制御します。デフォルトはtop
で、これはディレクトリーを再帰的にコピーする前に、確認を求めることを意味します。
指定されたファイルを削除します(dired-do-delete
)。これはシェルコマンドrm
と似ています。
このセクションの他のコマンドと同様、このコマンドはマークされたファイル、または次のn個のファイルを操作します。対照的にx
(dired-do-flagged-delete
)は、フラグがついたすべてのファイルを削除します。
指定されたファイルをリネームします(dired-do-rename
)。1つのファイルをリネームする場合、引数newはファイルの新しい名前です。複数のファイルをリネームする場合、引数newはファイルを移動するディレクトリーです(これはシェルコマンドmv
と似ています)。
オプションdired-create-destination-dirs
はDiredがnew内に存在しないディレクトリーを作成するかどうかを制御します。
Diredはリネームされたファイルに関連付けられたバッファーによりvisitされたファイルの名前を自動的に変更するので、これらのバッファーは新しい名前を参照します。
変数dired-vc-rename-file
の値が非nil
なら、
vc-rename-file
(バージョンコントロールされたファイルの削除とリネームを参照)を通じて背後にあるVCSのコマンドを使用してファイルをリネームします。
指定されたファイルのハードリンクを作成します(dired-do-hardlink
)。これはシェルコマンドln
と似ています。引数newはリンクを中に作成するディレクトリー、または(1つのリンクだけを作成する場合は)リンクに与える名前です。
指定されたファイルのシンボリックリンクを作成します(dired-do-symlink
)。これは‘ln
-s’と似ています。引数newはリンクを中に作成するディレクトリー、または(1つのリンクだけを作成する場合は)リンクに与える名前です。
指定されたファイルのモード(パーミッションビットとも呼ばれる)を変更します(dired-do-chmod
)。modespecには、chmod
プログラムで扱われる引数のような、8進かシンボル表記を指定できます。
指定されたファイルのグループを、newgroupに変更します(dired-do-chgrp
)。
指定されたファイルの所有者を。newownerに変更します(dired-do-chown
。ほとんどのシステムでは、これを行なうことができるのはスーパーユーザーだけです)。
変数dired-chown-program
は、処理を行なうために使用するプログラムの名前を指定します(システムが異なると、chown
が違う場所に配されている場合があるので、この変数が必要)。
指定されたファイルにtouchします。これはファイルの修正時刻を、現在時刻で更新することを意味します。これはシェルコマンドtouch
に似ています。
指定されたファイルを印刷します(dired-do-print
)。それらを印刷するためのコマンドを指定しなければなりませんが、ミニバッファー開始時には、変数lpr-command
およびlpr-switches
(lpr-buffer
が使用するのと同じ変数。ハードコピーの印刷を参照してください)を使用することにより推定された、適切な初期値が示されます。
指定されたファイルを圧縮します(dired-do-compress
)。そのファイルがすでに圧縮されたように見える場合は、かわりにそれを解凍します。マークされたファイルはそれぞれ、自身のアーカイブ内に圧縮されます。これには利用可能ならgzip
、それ以外ではcompress
が使用されます。ディレクトリー名にたいしては、このコマンドはtar
コマンドの出力にgzip
をパイプして実行することにより、そのディレクトリーのすべてのファイルを含む、圧縮アーカイブ.tar.gzを生成します。圧縮されたディレクトリーの解凍は、アーカイブファイル.tar.gzや.tgz上でZをタイプすることにより、ファイル名から拡張子を除いた名前のディレクトリー内にアーカイブ内のすべてのファイルが解凍されます。
指定されたファイルを、ファイルシステム上のどこかにある1つのアーカイブに圧縮します(dired-do-compress-to
)。圧縮アルゴリズムはアーカイブの拡張子により決定されます。dired-compress-files-alist
を参照してください。
指定されたファイルを復号化します(epa-dired-do-decrypt
)。Dired integration in EasyPG Assistant User’s Manualを参照してください。
指定されたファイルのデジタル署名を検証します(epa-dired-do-verify
)。Dired integration in EasyPG Assistant User’s Manualを参照してください。
指定されたファイルにデジタル署名します(epa-dired-do-sign
)。Dired integration in EasyPG Assistant User’s Manualを参照してください。
指定されたファイルを暗号化します(epa-dired-do-encrypt
)。Dired integration in EasyPG Assistant User’s Manualを参照してください。
指定されたEmacs Lispファイルをロードします(dired-do-load
)。EmacsのためのLispコードによるライブラリーを参照してください。
指定されたEmacs Lispファイルをバイトコンパイルします(dired-do-byte-compile
)。Byte Compilation in The Emacs Lisp Reference
Manualを参照してください。
指定されたすべてのファイルにたいして、正規表現regexpを検索します(dired-do-find-regexp
)。
このコマンドはxref-find-references
(識別子の検索と置換を参照)の変種で、必要に応じて、*xref*バッファーで利用可能なコマンドで説明されているコマンドを使用することにより、マッチ間を移動したり、それらを表示することができる*xref*バッファーを表示します。
マークされたファイルやディレクトリーがある場合、このコマンドはそれらのディレクトリーにあるすべてのファイルとサブディレクトリーを再帰的に検索します。ただし名前がgrep-find-ignored-files
にマッチするファイルと、grep-find-ignored-directories
にマッチするサブディレクトリーは除外されます。
指定された各ファイルにたいしてquery-replace-regexp
を行い、regexpにたいするマッチを、文字列toに置換します(dired-do-find-regexp-and-replace
)。
このコマンドはxref-query-replace-in-results
の変種です。これはregexpにたいするすべてのマッチをリストする*xref*バッファーを表示します。このバッファーでは特別なコマンド(*xref*バッファーで利用可能なコマンドを参照)を使用できます。特に、問い合わせつき置換のループ(query replace
loop)をexitした場合は、そのバッファーで更に置換を行なうためにrを使用できます。識別子の検索と置換を参照してください。
dired-do-find-regexp
と同様に、マークされたファイルがディレクトリーの場合、このコマンドはそれらのディレクトリー内、およびそれらのサブディレクトリーのすべてのファイルの置換を再帰的に行います。ただし、名前がgrep-find-ignored-files
にマッチするファイル、および名前がgrep-find-ignored-directories
にマッチするサブディレクトリーは除外されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Diredコマンド!
(dired-do-shell-command
)は、ミニバッファーでシェルのコマンド文字列を読み取り、そのシェルコマンドを1つ以上のファイルにたいして実行します。シェルコマンドが処理するファイルは、Diredコマンドが操作するファイルを決定する方法と同じです(ファイルにたいする操作を参照してください)。コマンドXは、!の別名です。
コマンド&
(dired-do-async-shell-command
)は同じことを行ないますが、これはシェルコマンドを非同期で実行する点が異なります(!でシェルコマンドの最後に文字‘&’を追加しても、同じことを行なうことができます)。コマンドが複数のファイルを処理する場合、ファイルごとに指定したシェルコマンドの複数コピーを並行で実行します。例外として、指定されたシェルコマンドが‘;’または‘;&’で終わる場合、バックグラウンドで実行されるシェルコマンドは、各ファイルにたいして順番に実行されます。Emacsは次のコマンドを実行する前に、呼び出したシェルコマンドが終了するのを待ちます。
!と&のどちらも、シェルコマンドの作業ディレクトリーは、Diredバッファーのトップレベルのディレクトリーです。
!または&に複数ファイルを処理させる場合、シェルコマンド文字列は、シェルコマンドにそれらのファイルを渡す方法を決定します。
したがって! tar cf foo.tar *
RETは、ファイル名全体のリストにたいしてtar
を実行し、それらをtarファイルfoo.tarに格納します。
空白文字で囲まれたシェルのワイルドカードとして‘*’を使用したい場合は、‘*""’と記述します。シェルではこれは‘*’と等価です。しかし‘*’が空白文字で囲まれていないので、Diredはこれを特別に扱うことができるのです。
uudecode
を実行します。
もっと複雑な方法でファイル名を繰り返すには、明示的なシェルループを使用したいと思うかもしれません。たとえば以下は、各ファイルをuuencodeして、入力ファイル名に‘.uu’を追加して出力ファイル名を作成する例です:
for file in * ; do uuencode "$file" "$file" >"$file".uu; done
以下は、‘`?`’表記による同じ例です:
uuencode ? ? > `?`.uu
コマンド!および&は、新しいファイル、または変更されたファイルを表示するために、Diredバッファーを更新しようとはしません。なぜならこれらのコマンドは、どのファイルが変更されたかを知らないからです。Diredバッファーを更新するには、gを使用します(Diredバッファーの更新を参照してください)。
Diredの外でシェルコマンドを実行する情報に関しては、単一のシェルコマンドを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このセクションでは、ファイル名を系統的な方法で変更する、Diredコマンドを説明します。各コマンドは、既存の名前を変換することにより作成される新しい名前を使って、マークされたファイルのいくつか、またはすべてのマークされたファイルを操作します。
基本的なDiredのファイル操作コマンド(ファイルにたいする操作を参照してください)と同じように、ここで説明するコマンドは次のnファイル、または‘*’でマークされたすべてのファイル、またはカレントファイルにたいして操作を行ないます(ファイルをマークする方法はDiredでのマークとフラグで説明されています)。
このセクションで説明するすべてのコマンドは、対話的に機能します。つまり候補となるファイルごとに確認を求めます。したがって、実際に操作が必要なファイルより多くのファイルを選択(たとえばregexpにより多くのファイルを選択)して、コマンドが確認を求めるときにyまたはnをタイプすることにより、選択されたファイルを絞り込むことができます。
選択されたファイルを、大文字の名前にリネームします(dired-upcase
)。古いファイル名がFooとbarの場合、新しい名前はFOOとBARになります。
選択されたファイルを、小文字の名前にリネームします(dired-downcase
)。古いファイル名がFooとbarの場合、新しい名前はfooとbarになります。
これら4つのコマンドは、それぞれリネーム、コピー、ハードリンクの作成、ソフトリンクの作成を行い、古いファイル名にたいして正規表現による置換を行って、新しい名前を作成します。
正規表現の置換を行なう4つのコマンドは、実際には選択されたファイルの名前にたいして検索と置換を行ないます。これらのコマンドは2つの引数を読み取ります。それは式fromと、置換パターンtoです。これらは古いファイル名にマッチしたfromを、toに置き換えます。replace-regexp
(正規表現の置換を参照してください)のように、古い名前にマッチしたパターンの全体または一部を参照するために、toの中で‘\&’や‘\digit’を使用できます。正規表現がファイル名の複数の箇所にマッチする場合は、最初のマッチだけが置換されます。
たとえば% R ^.*$ RET x-\& RETは、選択された各ファイルの名前の前に‘x-’を追加してリネームします。逆に各ファイル名の前の‘x-’を削除することも可能です。1つは% R ^x-\(.*\)$ RET \1 RETとする方法です。他にも% R ^x- RET RETとする方法もあります(ファイル名の範囲を指定するために、アンカーへのマッチ‘^’および‘$’を使用しています)。
置換処理は通常、ファイルのディレクトリー名は考慮しません。これはディレクトリーにあるファイル名だけを操作します。しかし数引数を0にした場合、置換はディレクトリー名を含めた絶対ファイル名に作用します(非0の引数は、操作するファイルの個数を指定します)。
一連のファイルを操作対象に選択するために、それらを操作するときに使うのと同じ正規表現fromを使いたいと思うかもしれません。これを行なうには% m from RETでそれらのファイルをマークして、それらのファイルを操作するコマンドで同じ正規表現を使用します。もっと便利にするために、ファイルを操作する%コマンドは、最後の%コマンドで指定された正規表現をデフォルトで使用します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
=
(dired-diff
)コマンドは、diff
プログラムを使用して、カレントファイル(ポイント位置のファイル)と他のファイル(ミニバッファーを使用して指定)を比較します。ミニバッファーで指定されたファイルは、diff
の1番目の引数となり、ポイント位置のファイルは2番目の引数になります。diff
プログラムの出力は、Diffモードを使用するバッファーで表示されます(ファイルの比較を参照してください)。
リージョンがアクティブの場合、ミニバッファーを使って読み取られるファイル名のデフォルトは、マーク(Diredのマークではなく、Emacsの通常のマークのこと。マークのセットを参照してください)の位置のファイルになります。リージョンがアクティブでない場合、ポイント位置のファイルがバックアップファイル(バックアップファイルを参照してください)のときは、それがデフォルトになります。
ediff-files
を使用してファイルを比較することもできます。Major Entry Points in Ediff User’s Manualを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Diredバッファーは通常、1つのディレクトリーだけを表示しますが、オプションでサブディレクトリーも同様に含めることができます。
1つのDiredバッファーに複数のディレクトリーを含める一番簡単な方法は、ls
にオプション‘-lR’を指定して実行する方方です(Diredを実行するとき数引数を指定すると、ミニバッファーでこれらのオプションを指定できます)。これはすべてのサブディレクトリーの、すべてのレベルにたいして、再帰的にディレクトリーを一覧します。
特定のサブディレクトリーだけを見たいときもあります。これはi
(dired-maybe-insert-subdir
)により行なうことができます:
サブディレクトリーの内容を、バッファーの最後に挿入します。
ディレクトリーを記述する行でこのコマンドを使用した場合、同じDiredバッファーにそのディレクトリーの内容を挿入して、そこに移動します。サブディレクトリーの内容は、‘ls -lR’の出力と同じように、Diredバッファーのトップレベルのディレクトリーの後に挿入されます。
サブディレクトリーの内容がすでにバッファーに表示されている場合、iコマンドはそこに移動するだけです。
どちらの場合もmiは移動する前にマークをセットするので、C-u C-SPCでDiredバッファーの元の位置に戻ることができます(マークのセットを参照してください)。‘^’を使って、同じDiredバッファーの親ディレクトリーに戻ることもできます(Diredのファイルをvisitするを参照してください)。
l
(dired-do-redisplay
)コマンドを使用すると、サブディレクトリーの内容を更新し、サブディレクトリーのヘッダー行でC-u
kを使用すると、サブディレクトリーのリストを削除します(Diredバッファーの更新を参照してください)。挿入したサブディレクトリーを、隠したり表示したりすることもできます(サブディレクトリーを隠すを参照してください)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
C-u
iを使うことにより、ls
のスイッチを指定して、Diredバッファーにサブディレクトリーを挿入できます。すでに挿入されたサブディレクトリーのls
スイッチを変更するには、その位置でC-u
lを使用します。
バッファーをリバートしたとき、Diredはこれらのスイッチを保持します。サブディレクトリーを削除すると、それにたいするスイッチは忘れられます。
dired-undo
(Diredでのマークとフラグを参照してください)
を使用することにより、スイッチを明示的に指定して挿入されたサブディレクトリーにたいして、それらのスイッチを記憶する(または忘れる)ためのDiredの機構をバイパスして、それらのサブディレクトリーの再挿入または削除を行なうことができます。dired-undo
を使用してサブディレクトリーを削除しても、それのスイッチは記憶されています。後でiを使ってサブディレクトリーを再挿入すると、これは古いスイッチを使用してサブディレクトリーを再挿入します。(dired-undo
ではなく)通常のDiredコマンドを使って削除されたサブディレクトリーを、dired-undo
を使って再挿入すると、最初は古いスイッチを使ってサブディレクトリーを挿入します。しかしバッファーをリバートすると。バッファーのデフォルトのスイッチを使って再リストします。これが問題な場合、C-u
iかC-u lで、この状況を正すことができます。
DiredはR
スイッチを記憶しません。R
スイッチを含むスイッチでサブディレクトリーを挿入すると、それはそのサブディレクトリーの各サブディレクトリーそれぞれにたいして、残りのスイッチを使用して挿入を行なうのと等価です。たとえばR
で挿入されたサブディレクトリを更新またはkillしても、それのサブディレクトリーは更新またはkillされません。
バッファーのデフォルトスイッチは、明示的にスイッチを指定して挿入されたサブディレクトリーに影響を与えません。特にバッファーのスイッチを変更するsのようなコマンドは、そのようなサブディレクトリーに影響を与えません(しかし明示的にスイッチを割り当てられていないサブディレクトリーには影響します)。
M-x dired-reset-subdir-switchesを使うことにより、Diredにサブディレクトリーにたいするスイッチをすべて忘れさせて、すべてのサブディレクトリーを再びリストさせることができます。これはDiredのバッファーもリバートします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Diredバッファーがサブディレクトリーを一覧している場合、ディレクトリー全体を移動するためのページ移動コマンドC-x [およびC-x ]を使用することができます。
以下のコマンドは、ディレクトリー単位で移動したり、Diredバッファーのディレクトリーツリーを上下に移動します。これらのコマンドは、ディレクトリーヘッダー行に移動します。ディレクトリーヘッダー行とは、ディレクトリーの名前を示す行で、ディレクトリー内容の最初に表示されます。
ディレクトリーのレベルに関係なく、次のサブディレクトリーのヘッダー行に移動します(dired-next-subdir
)。
ディレクトリーのレベルに関係なく、前のサブディレクトリーのヘッダー行に移動します(dired-prev-subdir
)。
親ディレクトリーのヘッダー行に移動します(dired-tree-up
)。
次のサブディレクトリーのヘッダー行に、ディレクトリーツリーを下に移動します(dired-tree-down
)。
前のディレクトリーファイル行に、上へ移動します(dired-prev-dirline
)。これは親ディレクトリーのファイルとして、ディレクトリーが記述されている行のことです。
次のディレクトリーファイル行に、下へ移動します(dired-next-dirline
)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
サブディレクトリーを隠すとは、ヘッダー行を除きそれを非表示にすることを意味します。
ポイント位置のサブディレクトリーを隠す、または表示します(dired-hide-subdir
)。これは切り替えコマンドです。数引数は繰り返し回数として機能します。
Diredバッファーのすべてのサブディレクトリーを、ヘッダー行だけを残して隠します(dired-hide-all
)。1つでも隠されたサブディレクトリーがある場合、すべてのサブディレクトリーを再表示します。非常に深いディレクトリーツリーの概観を得たり、離れた場所のサブディレクトリーに素早く移動するために、このコマンドを使うことができます。
通常のDiredコマンドは、隠されたサブディレクトリーの中のファイルは考慮しません。たとえばマークされたファイルを操作するコマンドは、たとえファイルがマークされていても、それが隠されたディレクトリーの中にある場合は、それらを無視します。したがって、サブディレクトリーのファイルにつけられたDiredマークを外さなくても、そのサブディレクトリーを一時的に隠せば、操作対象から除外することができます。
サブディレクトリーのリストを挿入する方法についてはDiredでのサブディレクトリーを、それを削除する方法についてはDiredバッファーの更新を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このセクションでは、外部(Diredではない)のディレクトリーやファイルに対する変更を反映してDiredバッファーを更新したり、Diredバッファーの一部を削除するコマンドを説明します。
Diredバッファーの内容全体を更新します(revert-buffer
)。
指定したファイルを更新します(dired-do-redisplay
)。lにたいするファイルの指定は、ファイル操作にたいするファイル指定と同じ方法で行ないます。
指定したファイル行(ファイルではなく、その行だけ)を削除します(dired-do-kill-lines
)。
並び替えをアルファベット順、日時順に切り替えます(dired-sort-toggle-or-edit
)。
switchesをdired-listing-switches
に使用して、Diredバッファーを更新します。
g
(revert-buffer
)とタイプすると、リストされたファイルやディレクトリーにたいする変更にもとづき、Diredバッファーの内容を更新します。消されたファイルを除き、すでにあるマークはすべて保持されます。隠されたサブディレクトリーも更新されますが、隠されたまま残ります。
いくつかのファイルだけ更新するには、l
(dired-do-redisplay
)とタイプします。Diredのファイル操作コマンドと同様に、このコマンドは次のnファイル(または前の-nファイル)、または(もしあれば)マークされたファイル、またはカレントファイルを操作します。ファイルの更新とは、ファイルの現在の状態を読み取り、バッファーの対応する行がその状態を示すように、その行を更新することを意味します。
サブディレクトリーのヘッダー行でlを使用した場合、対応するサブディレクトリーの内容を更新します。
C-x
dや他のDiredコマンドを使用して、すでにDiredバッファーで表示されているディレクトリーをvisitする場合、Diredはそのバッファーに切り替えますが更新はしません。そのバッファーが最新でない場合、Diredはgをタイプして更新するよう警告を表示します。再visitしたとき、自動的にDiredバッファーをリバートするようEmacsに指示するには、変数dired-auto-revert-buffer
を非nil
値にセットしてください。
バッファーからファイル行 — 実際のファイルではなく ーーー を削除するには、k
(dired-do-kill-lines
)とタイプします。ファイル操作コマンドと同じように、このコマンドは次のnファイル、またはもしあればマークされたファイルを操作します。しかし、間違ってkをタイプしたとき面倒なので、カレントファイルは操作しません。
すでにDiredバッファーにサブディレクトリーとして挿入したディレクトリーファイル行で、k(Diredでのサブディレクトリーを参照)とタイプすると、これはサブディレクトリーのリストも同様に削除します。サブディレクトリーのヘッダー行でC-u kとタイプしても、Diredバッファーからサブディレクトリーの行を削除できます。
この方法でkillした個別の行はgで元通り表示されますが、サブディレクトリーについては、iを使ってサブディレクトリーを再挿入しなければなりません。
Diredバッファーのファイルは通常、ファイル名のアルファベット順で一覧されます。かわりにDiredは日時順でソートすることもできます。Diredコマンドs
(dired-sort-toggle-or-edit
)は2、つのソートモードを切り替えます。Diredバッファーのモードラインには、現在のソート方法がby
nameやby dateのように示されます。
C-u s switches
RETで、dired-listing-switches
に新しい値を指定できます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
find
ファイルを選択するためにfind
ユーティリティーを使うことにより、Diredバッファーに表示する一連のファイルを、より柔軟に選択できます。
ワイルドカードパターンに名前がマッチするファイルを検索するには、M-x find-name-diredを使います。これは引数directoryとpatternを読み取り、directoryおよびそのサブディレクトリーで、名前がpatternにマッチするすべてのファイルを選択します。
これにより選択されたファイルはDiredバッファーに表示され、通常のDiredコマンドが利用可能です。
ファイルの名前ではなく内容をテストしたいときは、M-x
find-grep-diredを使用します。ものコマンドはミニバッファーで2つの引数directoryとregexpを読み取ります。これはdirectoryまたはそれのサブディレクトリーで、内容がregexpにマッチするすべてのファイルを選択します。このコマンドは、プログラムfind
およびgrep
を実行することにより機能します。Emacs下でのGrepによる検索のM-x
grep-findも参照してください。正規表現を記述するときは、Emacsにたいしてではなく、grep
にたいして記述することを忘れないでください(与えられたregexpに内容がマッチするファイルを表示する別の方法として、%
g regexpがあります。Diredでのマークとフラグを参照してください)。
この系列でもっとも一般的なコマンドはM-x
find-diredで、これはfind
がテストできる任意の条件を指定することができます。これはミニバッファーで2つの引数directoryとfind-argsを受け取ります。このコマンドは、find
がどのような条件でテストを行なうかを指定するfind-argsを引数として、directoryでfind
を実行します。このコマンドを使うためには、find
の使い方を理解する必要があります。
これらのコマンドで生成されるリストの書式は変数find-ls-option
により制御されます。これは一対のオプションです。1番目にファイル一覧を生成するためにfind
をどのように呼び出すか、2番目にその出力をDiredが解析するかを指定します。
コマンドM-x locateは、locate
プログラムと似たインターフェースを提供します。M-x
locate-with-filterも同様ですが、与えられた正規表現に名前がマッチするファイルだけを保持します。
これらのバッファーは、通常のDiredバッファーと完全に同じようには機能しません。ファイル操作は機能しますが、常にバッファーを自動的に更新するわけではありません。gでバッファーをリバートすると、挿入されたサブディレクトリーは削除され、フラグとマークはすべてリセットされます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Wdiredは、Diredバッファーを直接変更することによりファイル操作を行なうことができる、特別なモードです(“Wdired”の“W”は、“writable:
書き込み可能”が由来です)。Wdiredモードに入るには、DiredバッファーでC-x C-q
(dired-toggle-read-only
)とタイプします。かわりに、メニューアイテムの‘Immediate / Edit
File Names’を使うこともできます。
Wdiredモードでは、Diredバッファーに表示されているファイルの名前を編集することにより、ファイルをリネームできます。矩形操作やquery-replace
も含めて、通常のEmacs編集コマンドがすべて利用できます。編集を終えたらC-c
C-c (wdired-finish-edit
)とタイプします。これにより変更が適用され、通常のDiredモードに戻ります。
単なるファイルのリネーム以外に、ファイルの新しい名前をタイプすることにより(絶対ファイル名でも相対ファイル名でも可)、ファイルを他のディレクトリーに移動することもできます。ファイルに削除のマークをつけるには、ファイル名全体を削除します。シンボリックリンクのリンク先を変更するには、リンク名の隣に表示されているリンク先の名前を編集します。
新たなサブディレクトリーを作成するためにファイル名を編集する場合、Wdiredはそれらの新たなディレクトリーを自動的に作成するでしょう。この振る舞いを抑止したい場合は、wdired-create-parent-directories
をnil
にセットしてください。
ファイルサイズや修正時刻など、バッファーの残りのテキストは読み込み専用にマークされているので、編集できません。しかしwdired-allow-to-change-permissions
をt
にセットした場合、ファイルのパーミッションを編集できます。たとえば‘-rw-r--r--’を‘-rw-rw-rw-’に変更することにより、そのファイルを誰でも書き込めるようにできます。これらの変更は、C-c
C-cをタイプしたときに効果をもちます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Image-Diredはイメージファイルをブラウズする機能です。これはイメージファイルにたいして、Emacs内または外部ビューアーを用いたサムネイルまたはフルサイズでの閲覧を提供します。これはEmacsバッファー内でイメージファイルをvisitするImageモードとは異なります(イメージファイルのvisitを参照)。
Image-Diredに入るには、Diredバッファーで見たいイメージファイルを、通常のようにmを使ってマークします。それからC-t
d
(image-dired-display-thumbs
)とタイプします。これはマークしたファイルに対応するimage-diredのバッファーを作成して切り替えます。
M-x
image-diredとタイプすることにより、直接Image-Diredに入ることもできます。これはディレクトリーの入力を求めるので、イメージファイルがあるディレクトリーを指定します。これによりそのディレクトリーにある、すべてのイメージファイルのサムネイルが作成され、それらはthumbnailバッファーに表示されます。ディレクトリーに大量のイメージファイルがある場合は長時間を要するため、イメージファイルの数が、image-dired-show-all-from-dir-max-files
を越える場合は確認を求めます。
thumbnailバッファーのサムネイルにポイントを移動して、RET
(image-dired-display-thumbnail-original-image
)とタイプすると、サイズ調整されたバージョンを別のウィンドウに表示します。これはイメージをウィンドウにフィットするようにサイズ調整します。バッファー内の移動は矢印キーを使用します。簡単にブラウズするには、次のイメージに移動して、それを表示するSPC
(image-dired-display-next-thumbnail-original
)を使用します。DEL
(image-dired-display-previous-thumbnail-original
)とタイプすると、前のサムネイルに戻って、かわりにそれを表示します。
イメージをオリジナルのサイズで閲覧するには、RETを押す前にプレフィクス引数(C-u)を与えるか、C-RET
(image-dired-thumbnail-display-external
)とタイプして、イメージを外部ビューアーで表示します。これは最初に、image-dired-external-viewer
を設定しなければなりません。
Image-Diredを通じて、イメージを削除することもできます。d
(image-dired-flag-thumb-original-file
)とタイプすると、Diredバッファーでそのイメージに削除のフラグをつけます。thumbnailバッファーでC-d
(image-dired-delete-char
)とタイプすることにより、サムネイルイメージを削除することもできます。
さらに上級の機能として、イメージタグ(image
tags)があります。これはイメージをカテゴリー分けするために使用されるメタデータです。このタグは、image-dired-db-file
により設定されるプレーンテキストファイルに格納されます。
イメージファイルにタグ付けするには、それらをDiredバッファーでマークして(thumbnailバッファーでmをタイプして、Diredのファイルをマークすることもできます)、C-t
t
(image-dired-tag-files
)とタイプします。このコマンドはミニバッファーでタグ名読み取ります。特定のタグをもつファイルをマークするには、C-t
f
(image-dired-mark-tagged-files
)とタイプします。特定のタグをもつイメージファイルをマークした後は、C-t
dを使ってそれらを閲覧することができます。
thumbnailバッファーから直接ファイルにタグ付けするにはt tとタイプし、タグを削除するにはt
rとタイプします。各ファイルにたいして、“コメント”と呼ばれる特別なタグがあります(コメントは他のタグと正確に同じ意味でのタグではありません。コメントは若干異なる扱いをされるからです)。コメントタグは、イメージについてのコメントや説明を入力するのに使用されます。thumbnailバッファーでコメントするには、cとタイプします。これはコメントの入力を求めます。Diredからコメントを追加するには、C-t
c (image-dired-dired-comment-files
)とタイプしてください。
Image-Diredは、シンプルなイメージ操作も提供します。thumbnailバッファーでLとタイプすると、オリジナルのイメージを反時計回りに90度ローテートし、Rで時計回りにローテートします。このローテーションは損失がなく、jpegtran
と呼ばれる外部ユーティリティーを使用し、これは最初にインストールする必要があります。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
コマンド+
(dired-create-directory
)はディレクトリー名を読み取り、そのディレクトリーを作成します。そのディレクトリーがすでに存在する場合は、エラーをシグナルします。
このコマンド(dired-create-empty-file
)はファイル名を読み取りファイルを作成します。そのファイルがすでに存在すればエラーをシグナルします。
コマンドM-s a C-s
(dired-do-isearch
)は、マークされたファイルにたいして、複数ファイルにたいするインクリメンタル検索を開始します。ファイル終端で検索が失敗した場合、C-sとタイプすると、マークされた次のファイルで検索を繰り返します。マークされた最後のファイルの終端に達すると、マークされた最初のファイルに戻って検索します。コマンドM-s
a M-C-s
(dired-do-isearch-regexp
)は、同じことを正規表現検索で行ないます。検索の繰り返しに関する情報は、インクリメンタル検索の繰り返しを参照してください。
コマンドw
(dired-copy-filename-as-kill
)は、マークされたファイル(または次のnファイル)の名前を、あたかもC-wでkillしたかのように、killリングに配します。ファイル名はスペースで区切られます。
プレフィクス引数に0を指定した場合、マークされた各ファイルの絶対ファイル名を使用します。プレフィクス引数にC-uだけを指定した場合、Diredバッファーのデフォルトディレクトリーからの相対ファイル名を使用します(サブディレクトリーから行なった場合はスラッシュが含まれます)。特別なケースとして、ポイントがディレクトリーのヘッダー行にある場合、wで、そのディレクトリーの絶対パスを得ることができます。この場合、プレフィクス引数とマークされたファイルは無視されます。
このコマンドの主な目的は、他のEmacsコマンドの引数として、ファイル名をyankすることです。これはkillリングに何が追加されたかも表示するので、現在マークされているファイルを、エコーエリアに表示するためにも使用できます。
ファイルリストの中にHTMLファイルがある場合は、そのファイルをブラウザで閲覧できると便利かもしれません。W
(browse-url-of-dired-file
)コマンドは、そのファイルの閲覧に標準に設定されたブラウザを使用します。
コマンド(
(dired-hide-details-mode
)は、カレントのDiredバッファーでの、ファイル所有者やファイルパーミッションなどの、詳細表示を切り替えます。デフォルトでは、シンボリックリンクのリンク先や、ヘッダー行とファイルやディレクトリーの一覧以外のすべての行も隠します。これを変更するには、オプションdired-hide-details-hide-symlink-targets
とdired-hide-details-hide-information-lines
をカスタマイズしてください。
visitしているディレクトリーが、バージョンコントロール(バージョンコントロール)の配下にある場合、選択されたファイルにたいして、通常のVC diffおよびVC logコマンドが処理を行ないます。
コマンドM-x dired-compare-directoriesは、カレントのDiredバッファーと、他のディレクトリーを比較するために使用されます。2つのディレクトリーで異なる、すべてのファイルがマークされます。カレントのDiredバッファーも含めて、それらのファイルをリストする、すべてのDiredバッファーでマークが付されます。
(入力を求められたときRETをタイプすると使用される)デフォルトの比較方法では、ファイル名だけを比較します —
つまり別のディレクトリーに存在しないファイルは、異なります。Lisp式を入力して、より厳密な比較を指定することができます。この場合、変数size1
とsize2
はファイルサイズ、mtime1
とmtime2
は最終修正時刻を秒で表した浮動小数点数、fa1
とfa2
はファイルの属性リスト(関数file-attributes
で返される形式)です。この比較は、同じ名前のファイルごとに評価され、式の値が非nil
の場合、それらのファイルは異なります。
たとえばシーケンスM-x dired-compare-directories RET (> mtime1 mtime2) RETは、別のディレクトリーよりこのディレクトリーのファイルが新しい場合はマークし、このディレクトリーより別のディレクトリーのファイルが古い場合にマークします。相手がいないファイルも、両方のディレクトリーでマークが付されます。
X Windowシステムでは、Emacsはドラッグアンドドロップをサポートします。ファイルオブジェクトを他のプログラムにドラッグしたり、Diredバッファーにドロップできます。これは、そのディレクトリーのファイルの移動、コピー、またはリンクを作成します。正確に言うと、どのアクションが選択されるかは、プログラムの動作により決定されます。Diredバッファーの外へのファイルのドラッグは、現在のところサポートされていません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsは、過去のイベントや将来のプランのためのダイアリーをもつ、卓上カレンダー機能を提供します。これにはアポイントメントを管理したり、特定のプロジェクトにどれだけ時間を費やしているか追跡する機能もあります。
カレンダーを起動するには、M-x calendarとタイプします。これは3ヶ月分のカレンダーを表示します。当月が中央に表示され、今日の日付にポイントが配されます。C-u M-x calendarのように数引数を指定すると、3ヶ月カレンダーの中央に表示する、月と年の入力を求めます。カレンダーは自身のバッファーを使用し、メジャーモードはCalendarモードです。
カレンダーの中でmouse-3をクリックすると、特定の日付にたいする操作メニューが表示されます。mouse-2をクリックすると、特定の日付とは関係のない、一般的に使用されるカレンダー機能のメニューが表示されます。カレンダーを終了するには、qとタイプします。
31.1 カレンダーでの移動 | カレンダー内の移動、日付の選択。 | |
31.2 カレンダーでのスクロール | 過去または将来の月をスクリーンに表示する。 | |
31.3 日付のカウント | 2つの日付の間の日数は? | |
31.4 その他のカレンダーコマンド | カレンダーの終了と再計算。 | |
31.5 カレンダーファイルの記述 | さまざまなフォーマットで、カレンダーをファイルに書き込む。 | |
31.6 休日 | 休日の日付を表示する。 | |
31.7 日の出と日の入りの時刻 | 日の出と日の入りの時間を地方時間で表示する。 | |
31.8 月の位相 | 月の位相の表示。 | |
31.9 他のカレンダーとの間の変換 | 他のカレンダーシステムへの日付の変換。 | |
31.10 ダイアリー | ダイアリーからイベントを表示する。 | |
31.11 サマータイム | 夏時間がアクティブな期間を指定する方法。 | |
31.12 時間間隔の加算 | 時間間隔の追跡。 | |
31.13 カレンダーとダイアリーの上級な機能 | カレンダーとダイアリーの上級のカスタマイズ。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Calendarモードは日、週、月、年のような論理的な単位で、カレンダーを移動するコマンドを提供します。最初に表示されている3ヶ月の外に移動すると、カレンダーの表示は選択された日付が表示されるように、自動的にスクロールします。ある日付に移動することにより、その日が何の休日かを表示したり、ダイアリーのエントリーを表示したり、他のカレンダーに変換できます。単にカレンダーをスクロールするのは、長い期間を移動するのにも便利です。
31.1.1 標準的な時間間隔での移動 | 日、週、月、年単位での移動。 | |
31.1.2 週、月、年の開始と終了 | 週、月、年の開始と終了への移動。 | |
31.1.3 日付の指定 | 今日の日付や、特定の日付への移動。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
カレンダーバッファーでの移動コマンドは、テキスト内での移動コマンドと似ています。日、週、月、年を前方および後方に移動できます。
ポイントを、1日前方に移動します(calendar-forward-day
)。
ポイントを、1日後方に移動します(calendar-backward-day
)。
ポイントを、1週前方に移動します(calendar-forward-week
)。
ポイントを、1週後方に移動します(calendar-backward-week
)。
ポイントを、1月前方に移動します(calendar-forward-month
)。
ポイントを、1月後方に移動します(calendar-backward-month
)。
ポイントを、1年前方に移動します(calendar-forward-year
)。
ポイントを、1年後方に移動します(calendar-backward-year
)。
dayおよびweekのコマンドは、文字単位または行単位で移動するためのEmacsコマンド、自然に類似しています。通常C-nは、後続の行の同じ列に移動しますが、Calendarモードでは翌週の同じ日に移動します。C-pは、前の週の同じ日に移動します。
他のモードで通常振る舞うように、矢印キーはC-f、C-b、C-n、C-pと等価です。
月単位および年単位の移動のためのコマンドは、週単位の移動コマンドに似ていますが、より長い期間を移動します。monthコマンドのM-}およびM-{は、月全体を前方または後方に移動します。yearコマンドのC-x ]およびC-x [は、年全体を前方または後方に移動します。
これらのコマンドを簡単に覚える方法は、月および年が、テキストのパラグラフとページに類似するものだと考えることです。しかし、カレンダーの移動コマンド自体は、テキスト間の移動コマンドと非常に類似している訳ではありません。Emacsのパラグラフコマンドは通常、パラグラフの先頭または最後に移動しますが、月コマンドと年コマンドは、月または年の同じ日を保ちながら、月単位または年単位で移動します。
これらのコマンドは、繰り返し回数として数引数を受け取ります。Calendarモードでは便宜上、メタ修飾なしの数字キーとマイナス記号で、数引数を指定できます。たとえば100 C-fは、現在の位置から100日前方へポイントを移動します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
週(または月や年)は、単に日が集まったものではなく、特定に日付から開始されると考えます。そのため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にセットします。どの日付ヘッダーを週末としてハイライトするか変更するには、変数calendar-weekend-days
をセットしてください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Calendarモードは、さまざまな方法で、指定された特定の日付へ移動するコマンドを提供します。
指定した日付にポイントを移動します(calendar-goto-date
)。
年の指定された日にポイントを移動します(calendar-goto-day-of-year
)。
年の指定された週にポイントを移動します(calendar-iso-goto-week
)。
指定された月をカレンダーの中央にします(calendar-other-month
)。
今日の日付にポイントを移動します(calendar-goto-today
)。
g d
(calendar-goto-date
)は年、月、月の何日目かの入力を求め、その日付に移動します。カレンダーは西暦の最初からすべての日付を含むので、年は全部タイプしなければなりません。つまり、‘10’ではなく‘2010’とタイプしてください。
g D
(calendar-goto-day-of-year
)は、年と日数の入力を求め、その日付に移動します。負の日数は年の最後から後方に数えます。g
w (calendar-iso-goto-week
)は、年と週数の入力を求め、その週に移動します。
o (calendar-other-month
)は、月と年の入力を求め、3ヶ月カレンダーの中央にその月を配します。
. (calendar-goto-today
)で今日の日付に戻ることができます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
カレンダーの表示は、ポイントが表示部分の外に移動すると、自動的にスクロールします。手動でスクロールすることもできます。カレンダーのウィンドウに、月が書き込まれた細長い紙が含まれているのを想像してみてください。カレンダーのスクロールとは、この紙を水平方向に動かして、そのウィンドウに新しい月を表示することを意味します。
カレンダーを1月前方にスクロールします(calendar-scroll-left
)。
カレンダーを1月後方にスクロールします(calendar-scroll-right
)。
カレンダーを3月前方にスクロールします(calendar-scroll-left-three-months
)。
カレンダーを3月後方にスクロールします(calendar-scroll-right-three-months
)。
もっとも基本的なカレンダーのスクロールコマンドは、1度に1月スクロールします。これはコマンドの前後の表示で、2月がオーバーラップして表示されることを意味します。>は内容を、1度に1月前方にスクロールします。<は内容を、1度に1月後方にスクロールします。
コマンドC-vおよびM-vは、カレンダーを画面全体 — つまり3月スクロールします。この動作は、これらのコマンドが通常意味する動作と類似しています。C-vは後の日付を表示し、M-vは前の日付を表示します。これらのコマンドは、繰り返し回数として数引数を受け取ります。特にC-uは次のコマンドを4倍するので、C-u C-vは1年前方にカレンダーをスクロールし、C-u M-vは1年後方にカレンダーをスクロールします。
他のモードのときと同様に、ファンクションキーのPageDown (またはnext)とPageUp (またはprior)は、C-vやM-vと等価です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
カレントリージョン内の日数を表示します(calendar-count-days-region
)。
ある範囲の日数を数えるには、C-SPCで日付をマークし、他の日付にポイントを移動して、M-=
(calendar-count-days-region
)とタイプします。表示される日数は包括的(inclusive)です。つまりマークとポイントで指定された日も、日数に含まれます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
day-in-year(1年で何日目か)を表示します(calendar-print-day-of-year
)。
カレンダーウィンドウを再生成します(calendar-redraw
)。
次のウィンドウを上にスクロールします(scroll-other-window
)。
次のウィンドウを下にスクロールします(scroll-other-window-down
)。
カレンダーをexitします(calendar-exit
)。
年の初めからの経過日数と、年の最後までの残り日数を表示するには、p d command
(calendar-print-day-of-year
)とタイプします。これは、それら両方の日数をエコーエリアに表示します。経過日数には選択された日付も含まれます。残り日数に、その日は含まれません。
カレンダーウィンドウのテキストがおかしくなった場合は、再描画するためにC-c C-l
(calendar-redraw
)とタイプします(これはCalendarモード以外のモードの編集コマンドを使ったときだけ発生します)。
Calendarモードでは、SPC (scroll-other-window
)とDEL
(scroll-other-window-down
)を使って、(もしあれば)他のウィンドウを上または下にスクロールします。これは休日のリストやダイアリーのエントリーを他のウィンドウに表示しているときなどに便利です。
カレンダーからexitするには、q
(calendar-exit
)とタイプします。これはカレンダーに関連するすべてのバッファーを隠し(bury)、他のバッファーを選択します(フレームがカレンダー専用のウィンドウを含む場合、カレンダーをexitすることによりそのフレームは、削除またはアイコン化されます。これは変数calendar-remove-frame-by-deleting
の値に依存します)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
カレンダーとダイアリーのエントリーを、HTMLやLaTeXに書き出すことができます。
Calendar
HTMLコマンドは、カレンダー、休日、ダイアリーのエントリーを含む、HTMLコードのファイルを生成します。各ファイルは1ヶ月に対応し、yyyy-mm.htmlという形式の名前をもちます。ここでyyyyは4桁の年、mmは2桁の月です。変数cal-html-directory
は、HTMLファイルのためのデフォルトの出力先ディレクトリーを指定します。休日が表示されないようにするには、cal-html-holidays
をカスタマイズしてください。
<
と>
で囲まれたダイアリーのエントリー(たとえば、this is a diary entry with <font
color=”red”>some red
text</font>)は、HTMLタグと解釈されます。HTMLファイルを含むディレクトリーの中にあるスタイルシートcal.cssを通じて、表示されるHTMLページの全体的な外観を変更できます(関連するスタイルセッティングについては、変数cal-html-css-default
の値を参照してください)。
1ヶ月のカレンダーを生成します(cal-html-cursor-month
)。
1年の各月のカレンダーファイルを生成し、同様にインデックスページも生成します(cal-html-cursor-year
)。デフォルトでは、このコマンドはファイルをサブディレクトリーyyyyに書き込みます。これを変更した場合、各年の間のハイパーリンクは機能しなくなるでしょう。
変数cal-html-print-day-number-flag
が非nil
の場合、マンスリーカレンダーにはday-of-the-year(年の何日目か)の数字が表示されます。変数cal-html-year-index-cols
は、年のインデックスページの列数を指定します。
Calendar LaTeXコマンドは、カレンダーとしてプリントされるLaTeXコードのバッファーを生成します。どのコマンドを使うかにより、プリントされるカレンダーは、ポイントのある日、週、月、年をカバーします。
1ヶ月のカレンダーを生成します(cal-tex-cursor-month
)。
横向き印刷(sideways-printing)で、1ヶ月のカレンダーを生成します(cal-tex-cursor-month-landscape
)。
1日のカレンダーを生成します(cal-tex-cursor-day
)。
時間を併記した、1週間の1ページカレンダーを生成します(cal-tex-cursor-week
)。
時間を併記した、1週間の2ページカレンダーを生成します(cal-tex-cursor-week2
)。
時間なしで、1週間のISOスタイルのカレンダーを生成します(cal-tex-cursor-week-iso
)。
時間を併記した、月曜で始まる1週間のカレンダーを生成します(cal-tex-cursor-week-monday
)。
時間なしで、1週間の2ページカレンダーを生成します(cal-tex-cursor-week2-summary
)。
2週間を見開きする、Filofaxスタイルのカレンダーを生成します(cal-tex-cursor-filofax-2week
)。
1週間を見開きする、Filofaxスタイルのカレンダーを生成します(cal-tex-cursor-filofax-week
)。
1年のカレンダーを生成します(cal-tex-cursor-year
)。
横向き印刷(sideways-printing)で、1年のカレンダーを生成します(cal-tex-cursor-year-landscape
)。
1年のFilofaxスタイルのカレンダーを生成します(cal-tex-cursor-filofax-year
)。
これらのコマンドの中には、カレンダーを(ランドスケープモードで)横向きに印刷するものがあり、その場合は縦長ではなく横長になります。Filofaxの用紙サイズ(3.75in x 6.75in)を使うものもあります。これらのコマンドはすべてプレフィクス引数を指定でき、これは何日、何週間、何ヶ月、何年分を印刷するかを指定します(常に選択された日付から開始されます)。
変数cal-tex-holidays
が非nil
(デフォルト)の場合、プリンとされたカレンダーにはcalendar-holidays
の休日が表示されます。変数cal-tex-diary
が非nil
(デフォルトはnil
)の場合、ダイアリーのエントリーも含まれます(マンスリー、Filofax、isoの週カレンダーのみ)。変数cal-tex-rules
が非nil
(デフォルトはnil
)の場合、カレンダーは充分な空間のある、罫線ページのスタイルで表示されます。そのカレンダーがどんな機能をサポートするかは、個別のcal-tex関数のドキュメントを参照してください。
必要なら、変数cal-tex-preamble-extra
を使用して、生成されたドキュメントのプリアンブル(preamble)に、追加のLaTeXコマンドを挿入できます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsのカレンダーは、多くのメジャーおよびマイナーな休日を知っており、それらを表示することができます。デフォルトリストに、あなた自身の休日を追加できます。
選択された日付の休日を表示します(calendar-cursor-holidays
)。
カレンダーウィンドウの休日をマークします(calendar-mark-holidays
)。
カレンダーウィンドウのマークを外します(calendar-unmark
)。
表示された3ヶ月の休日を別のウィンドウにリストします(calendar-list-holidays
)。
今日を含む3ヶ月の休日を別のウィンドウにリストします。
年の指定した範囲の休日を別のウィンドウにリストします。
ある日付が休日かどうか見るには、カレンダーウィンドウのその日付にポイントを置いて、hコマンドを使用します。その日付をmouse-3でクリックして表示されるメニューで、Holidaysを選択しても見ることができます。どちらの方法も、その日付にたいする休日を、エコーエリアか、エコーエリアに収まらない場合は別のウィンドウに表示します。
カレンダーに表示された、すべての日付にたいする休日の分布を閲覧するには、xコマンドを使用します。これは休日を異なるフェイスで表示します。
calendar-holiday-markerを参照してください。
このコマンドは、現在表示されている月と、スクロールすることにより見ることができる他の月の両方に適用されます。マークをオフにして現在のマークを消すには、uをタイプします。これはダイアリーマークも消します(ダイアリーを参照してください)。変数calendar-mark-holidays-flag
が非nil
の場合、カレンダーの作成または更新により、自動的に休日がマークされます。
さらに詳細な情報を得るには、aコマンドを使用します。これはカレントの3ヶ月の範囲のすべての休日を含むリストを、別のバッファーに表示します。カレンダーウィンドウでSPCおよびDELを使用することにより、そのリストを上または下にスクロールできます。
コマンドM-x
holidaysは、今月および前月と来月の休日のリストを表示します。これはカレンダーウィンドウがないときでも機能します。変数calendar-view-holidays-initially-flag
が非nil
の場合、カレンダーの作成により、休日がこの方法で表示されます。違う月を中心にした3ヶ月の休日リストが欲しい場合は、月と年の入力を求めるC-u
M-x holidaysを使用してください。
Emaceが知っている休日には、United States、major Bahá’í、Chinese、Christian、Islamic、Jewishの休日、および夏至と冬至(solstices)、春分と秋分(equinoxes)が含まれます。
M-x holiday-listは、ある年の範囲にたいする休日のリストを表示します。この関数は年の開始と終了の入力を求め、すべての休日、または複数のカテゴリーの中の1つのカテゴリーに属する休日を選択することができます。このコマンドは、カレンダーウィンドウがないときでも使用することができます。
休日に使用される日付は、歴史的事実ではなく、現在の慣習(current practice)にもとづきます。たとえばVeteran’s Day(退役軍人の日)は1919年に始まった休日ですが、それより前の年でも表示されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
特別なカレンダーコマンドにより、任意の日付にたいする日の出(sunrise)と日の入り(sunset)の時刻を、1、2分の範囲で調べることができます。
選択された日付の、日の出と日の入りの時刻を表示します(calendar-sunrise-sunset
)。
今日の日の出と日の入りの時刻を表示します。
指定した日付の日の出と日の入りの時刻を表示します。
選択された月の日の出と日の入りの時刻を表示します。
カレンダーからは、見たい日付にポイントを移動してSをタイプすると、エコーエリアに日の出と日の入りの時刻を、地方時間で表示します。日付をmouse-3でクリックし、表示されたメニューの‘Sunrise/sunset’を選択しても表示することができます。今日、または指定した日付にたいしてこの情報を表示するために、カレンダーの外からでも、コマンドM-x sunrise-sunsetが利用可能です。今日以外の日付を指定するには、年、月、日の入力を求めるC-u M-x sunrise-sunsetを使用してください。
C-u C-u M-x sunrise-sunsetにより、任意の地域の任意の日付にたいして、日の出と日の入りの時刻を表示できます。これは経度(longitude)、緯度(latitude)、調整済みグリニッジ平均時(Coordinated Universal Time)との分差、日付の入力を求め、その地域の、その日付の日の出と日の入りの時刻を表示します。
日の出と日の入りの時刻は地球上の位置に依存するので、これらのコマンドを使用する前に、Emacsに経度(latitude)、緯度(longitude)、地域名(location name)を指定する必要があります。以下は何をセットするかの例です:
(setq calendar-latitude 40.1) (setq calendar-longitude -88.2) (setq calendar-location-name "Urbana, IL")
calendar-latitude
とcalendar-longitude
には、小数点以下1位までの数値を使用します。
タイムゾーン(time zone)も、地方時間での日の入りと日の出の時刻に影響を与えます。Emacsは通常、タイムゾーンの情報をオペレーティングシステムから得ますが、その情報が間違っている場合(またはオペレーティングシステムがその情報を提供しない場合)、これらを自分でセットしなければなりません。以下は例です:
(setq calendar-time-zone -360) (setq calendar-standard-time-zone-name "CST") (setq calendar-daylight-time-zone-name "CDT")
calendar-time-zone
の値は地方標準時(local standard
time)と、調整済みグリニッジ平均時(Coordinated Universal Time)、またはグリニッジ時(Greenwich time:
GMT)との分差です。calendar-standard-time-zone-name
とcalendar-daylight-time-zone-name
の値は、あなたのタイムゾーンで使用される略語です。Emacsは、サマータイム(daylight
saving time)で調整済みの、日の出と日の入りの時刻を表示します。サマータイムが決定される方法については、サマータイムを参照してください。
ユーザーとしては.emacsで、普段いる場所をカレンダーの位置変数にセットすると便利だと思うかもしれません。システム管理者としては、default.elで、すべてのユーザーにたいして、これらの変数をセットしたいと思うかもしれません。Emacs初期化ファイルを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下のカレンダーコマンドは、月の位相(phases of the moon)、つまり新月(new moon)、上弦(first quarter)、満月(full moon)、下弦(last quarter)の日付と時刻を表示します。この機能は、月の位相に依存する問題をデバッグするのに便利です。
表示されている3ヶ月にたいして、月のすべての4位相の日付と時刻を表示します(calendar-lunar-phases
)。
今日を含む3ヶ月にたいして、月のすべての4位相の日付と時刻を表示します。
カレンダーからはMを使用して、カレントの3ヶ月の範囲での月の位相を、別のバッファーに表示します。数分の誤差で、日付と時刻がリストされます。
カレンダーの外からは、コマンドM-x lunar-phasesで今月と前後1ヶ月の、月の位相のリストが表示されます。違う月についての情報は、月と年の入力を求めるC-u M-x lunar-phasesを使用してください。
月の位相にたいして与えられる日付と時刻は、(それが適切なときはサマータイム調整されて)地方時間で与えられます。前のセクションの議論を参照してください。日の出と日の入りの時刻を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsのカレンダーは、常にグレゴリオ暦(Gregorian calendar)で表示されます。これは、新暦(New Style calendar)と呼ばれることもあり、今日では世界のほとんどで使用されています。しかし、このカレンダーは16世紀より前には存在しておらず、、18世紀より前は広く使われていませんでした。ユリウス暦(Julian calendar)を置き換えて、世界的に受け入れられたのも20世紀初頭です。Emacsカレンダーは、西暦1年1月から任意の月を表示できますが、グレゴリオ歴がまだ存在しない日付にたいしても、カレンダーは常にグレゴリオ暦で表示されます。
Emacsは他のカレンダーを表示できませんが、日付を他のカレンダーに変換することができます。
31.9.1 サポートされるカレンダーシステム | (グレゴリオ歴以外の)Emacsが理解するカレンダー。 | |
31.9.2 他のカレンダーへの変換 | 選択された日付をさまざまなカレンダーに変換する。 | |
31.9.3 他のカレンダーからの変換 | 他のカレンダーで指定された日付に移動する。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ISO商用暦(ISO commercial calendar)は、ビジネスで使われることがあります。
ユリウス暦(Julian calendar)は、ジュリアス・シーザー(Julius Caesar)から名前がつけられたカレンダーで、中世ヨーロッパで使用され、19世紀まで多くの国で使用されてきました。
天文学者は、ユリウス歴のBC4713年1月1日正午からの、単純な通算日を使用します。この経過日はユリウス日(Julian day: JD)、または天文日(Astronomical day)と呼ばれます。
ヘブライ暦(Hebrew calendar)は伝統的にユダヤ教(Jewish religion)で使用されます。EmacsのカレンダープログラムはJewishの休日を決定するためにヘブライ暦を使用します。ヘブライ暦では日没が1日の開始と終了です。
イスラム暦(Islamic calendar)は、主にIslamic国で広く使用されます。EmacsはIslamicの休日の日付を決定するのに、これを使用します。Islamicの世界では、カレンダーについての世界的な取り決めが存在しません。Emacsは広く受け入れられているバージョンを使用しますが、Islamicの休日の正確な日付は、計算によってではなく、宗教的な権威による公告に依存することがしばしばあります。結果として、行事の正確な日付はEmacsが計算する日付と若干違う場合があります。イスラム暦では、日没が1日の開始と終了です。
フランス革命暦(French Revolutionary calendar)は、より非宗教的で自然にもとづいた観点により1年のサイクルを表すために、1789年の革命後にジャコバン派(Jacobins)により作成されました。これはメートル法のような、合理的な目安により1週が10日に設定されます。フランス政府は1805年の終わりに、このカレンダーを公式に放棄しました。
中央アメリカのマヤには、互いに個別で重複した3つのカレンダーシステムlong count、tzolkin、haabがあります。Emacsはこれら3つのカレンダーすべてを知っています。専門家はマヤのカレンダーと私たちのカレンダーとの正確な関連を議論しています。Emacsは、Goodman-Martinez-Thompsonの相関関係を使用して計算を行ないます。
コプト教徒(Copts: エジプト教会のクリスチャン)は、エジプト古代の太陽暦にもとづいたカレンダーを使用します。彼らのカレンダーは30日からなる12の月と、その後に余分の5日が含まれます。4年に1度、余分な5日に閏日を加えて6日とします。エチオピア暦は構造的に同じですが、異なる年数と月の名前をもちます。
ペルシャ人は、Omar Khayyamのデザインにもとづく太陽暦を使用します。かれらのカレンダーは12の月を含み、最初の6ヶ月は31日、次の5ヶ月は30日、最後の月は、通常の年は29日で、閏年は30日です。閏年は4年または5年後との複雑なパターンで発生します。ここで実装されているカレンダーは、Birashkにより指示されている数学的なペルシャ歴で、2820年周期にもとづいています。天文学的なペルシャ暦との違いは、それが天文学的なイベントにもとづいている点です。これを記述している時点で、2つの歴に最初に矛盾が発生すると予測されるのは、2025年の3月20日です。現時点では、そのときのイランの公式カレンダーが何になるかは、明確ではありません。
旧暦(Chinese calendar)は、太陽年に太陰月を組み込んだ複雑なシステムです。年は60周期で、各年は通常の年は12ヶ月、閏年は13ヶ月です。各月は通常の月は29日または30日です。年、通常月、日は10のcelestial stemsと、12のterrestrial branchesの組み合わせにより名前がつけられ、これが合計で60個の名前となり、60回周期で繰り返されます。
Bahá’íのカレンダーシステムは、19日を持つ19ヶ月の太陽周期にもとづきます。のこり4日の閏日(intercalary days)は、18ヶ月目と19ヶ月目の間に配されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下のコマンドは、選択された日付(ポイント位置の日付)をさまざまなカレンダーシステムで記述します:
選択された日付を、他のさまざまなカレンダーで表示します(calendar-print-other-dates
)。
選択された日付を、ISO商用暦(ISO commercial
calendar)で表示します(calendar-iso-print-date
)。
選択された日付を、ユリウス日(Julian date)で表示します(calendar-julian-print-date
)。
選択された日付を、ユリウス日にもとづく天文日(astronomical
day)で表示します(calendar-astro-print-day-number
)。
選択された日付を、ヘブライ暦の日付(Hebrew date)で表示します(calendar-hebrew-print-date
)。
選択された日付を、イスラム暦の日付(Islamic date)で表示します(calendar-islamic-print-date
)。
選択された日付を、フランス革命暦の日付(French Revolutionary
date)で表示します(calendar-french-print-date
)。
選択された日付を、Bahá’í dateで表示します(calendar-bahai-print-date
)。
選択された日付を、旧暦の日付(Chinese date)で表示します(calendar-chinese-print-date
)。
選択された日付を、Coptic dateで表示します(calendar-coptic-print-date
)。
選択された日付を、Ethiopic dateで表示します(calendar-ethiopic-print-date
)。
選択された日付を、ペルシャ暦の日付(Persian date)で表示します(calendar-persian-print-date
)。
選択された日付を、マヤ暦の日付(Mayan date)で表示します(calendar-mayan-print-date
)。
変換したい日付にポイントを移動して、上記のテーブルからpで始まる適切なコマンドをタイプします。プレフィクスのpは、“print”のニーモニックです。これは、Emacsが」変換した日付を、エコーエリアに“プリント”するからです。p oは日付を、Emacsが知るすべての形式で表示します。mouse-3でクリックして表示されるメニューから、Other calendarsを選択することもできます。これは、日付をEmacsが知るすべての形式でメニュー形式で表示します(メニュー形式で表示されるさまざまな形式の日付を選択しても、何もおこりません。この場合、メニューは表示のためだけに使用されます)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
サポートされている他のカレンダーで日付を指定して、その日付に移動することができます。このセクションでは、マヤ暦以外のカレンダーを使用してこれを行なうコマンドを説明します。マヤ暦については、以降のセクションを参照してください。
ISO商用暦(ISO commercial
calendar)で指定された日付に移動します(calendar-iso-goto-date
)。
ISO商用暦で指定された週に移動します(calendar-iso-goto-week
)。
ユリウス暦(Julian calendar)で指定された日付に移動します(calendar-julian-goto-date
)。
ユリウス暦にもとづく天文日で指定された日付に移動します(calendar-astro-goto-day-number
)。
Bahá’í calendarで指定された日付に移動します(calendar-bahai-goto-date
)。
ヘブライ暦(Hebrew calendar)で指定された日付に移動します(calendar-hebrew-goto-date
)。
イスラム暦(Islamic calendar)で指定された日付に移動します(calendar-islamic-goto-date
)。
フランス革命暦(French Revolutionary
calendar)で指定された日付に移動します(calendar-french-goto-date
)。
旧暦(Chinese calendar)で指定された日付に移動します(calendar-chinese-goto-date
)。
ペルシャ暦(Persian calendar)で指定された日付に移動します(calendar-persian-goto-date
)。
コプト暦(Coptic calendar)で指定された日付に移動します(calendar-coptic-goto-date
)。
エチオピア暦(Ethiopic calendar)で指定された日付に移動します(calendar-ethiopic-goto-date
)。
これらのコマンドは、他のカレンダーの日付の入力を求め、その日付と等価なグレゴリオ暦(Ethiopic calendar)の日付に移動して、他のカレンダーの日付をエコーエリアに表示します。Emacsは月の名前を入力するとき、常に強い補完(補完の終了を参照してください)を使うので、ヘブライ、イスラム、フランスの名前のスペルを心配する必要はありません。
ヘブライ暦に関する一般的な問題として、yahrzeitと呼ばれる死亡日にたいする記念日の計算があります。Emacsのカレンダーには、そのような計算の機能が含まれています。カレンダーにいるときは、コマンドM-x calendar-hebrew-list-yahrzeitsにより、まず年の範囲の入力を求め、ポイント位置の日付により、それらの年のyahrzeitの日付のリストを表示します。カレンダーにいないときは、このコマンドは最初に死亡日、次に年の範囲の入力を求め、yahrzeitの日付の一覧を表示します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsのダイアリーはカレンダーと共に、日常のアポイントメントやその他のイベントを管理します。ダイアリー機能を使うには、最初にイベントとその日付を含むダイアリーファイル(diary file)を作成しなければなりません。Emacsは今日、近い将来、指定された日付のイベントを自動的にピックアップして表示します。
ダイアリーの作成を手作業で行なおうと考えているかもしれませんが、Emacsはダイアリーのエントリーを閲覧、追加、変更するいくつかのコマンドを提供します。
31.10.1 ダイアリーファイル | ダイアリーにイベントを入力する。 | |
31.10.2 ダイアリーの表示 | ダイアリーのエントリーと、それに関連するカレンダーの日付を閲覧する。 | |
31.10.3 日付のフォーマット | 日付を指定するさまざまな方法。 | |
31.10.4 ダイアリーに追加するコマンド | ダイアリーのエントリーを作成するコマンド。 | |
31.10.5 特別なダイアリーエントリー | 記念日、日付ブロック、周期的なエントリーなど。 | |
31.10.6 アポイントメント | 何かを行なう時刻のためのリマインダー。 | |
31.10.7 ダイアリーエントリーのインポートとエクスポート | ダイアリーのイベントと他のフォーマットの変換。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ダイアリーファイル(diary
file)とは、特定の日付に関連付けられたイベントを記録するファイルです。ダイアリーファイルの名前は、変数diary-file
により指定されます。デフォルトは~/.emacs.d/diaryですが、古いバージョンのEmacsとの互換性のため、~/diaryが存在する場合は、それを使用します。
ダイアリーファイルの各エントリーは、1つ以上の行からなる1つのイベントを記述します。エントリーは、常に左端の日付指定で開始されます。エントリーの残りの部分は、イベントを説明するテキストです。エントリーが複数行の場合、2行目以降はそれが前のエントリーの継続行であることを示すために、空白文字で開始しなければなりません。有効な日付で開始されておらず、前のエントリーの継続行でもない行は無視されます。以下は例です:
12/22/2015 Twentieth wedding anniversary! 10/22 Ruth's birthday. * 21, *: Payday Tuesday--weekly meeting with grad students at 10am Supowit, Shen, Bitner, and Kapoor to attend. 1/13/89 Friday the thirteenth!! thu 4pm squash game with Lloyd. mar 16 Dad's birthday April 15, 2016 Income tax due. * 15 time cards due.
この例では、ほとんどのエントリーにたいして、余分なスペースでイベント説明を位置揃えしています。このようなフォーマットは、純粋に好みの問題です。
ダイアリーエントリーの最初の行が、日付または曜日名(後にブランクも句読点もない)だけの形式を使うこともできます。たとえば:
02/11/2012 Bill B. visits Princeton today 2pm Cognitive Studies Committee meeting 2:30-5:30 Liz at Lawrenceville 4:00pm Dentist appt 7:30pm Dinner at George's 8:00-10:00pm concert
このエントリーは、シンプルなダイアリー表示を使ったときは、異なる表示になります (ダイアリーの表示を参照してください)。 シンプルなダイアリー表示は最初の日付行を省略して、継続行だけが表示されます。このスタイルのエントリーは、1日分だけのエントリーを表示するときはうまく表示されますが、複数日のエントリーの場合は混乱するかもしれません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
1度ダイアリーファイルを作成すると、カレンダーを使ってそれを閲覧できます。Calendarモードの外で、今日のイベントを閲覧することもできます。以下はCalendarバッファーで参照されるキーバインドです。
選択された日付の、すべてのダイアリーエントリーを表示します(diary-view-entries
)。
ダイアリーファイル全体を表示します(diary-show-all-entries
)。
表示されている日付で、ダイアリーエントリーをもつものをすべてマークします(diary-mark-entries
)。
カレンダーウィンドウのマークを外します(calendar-unmark
)。
表示されているダイアリーのハードコピーを印刷します。
今日の日付の、すべてのダイアリーエントリーを表示します。
近づきつつあるダイアリーエントリーのリマインダーとして、あなた自身にメールします。
dでダイアリーエントリーを表示すると、カレンダーで選択された日付のダイアリーエントリーが別のバッファーに表示されます。新しいバッファーのモードラインには、ダイアリーエントリーの日付が表示されます。休日はバッファーとモードラインの両方で表示され、それは選択した表示方法に依存します (ダイアリーの表示を参照してください)。 dに数引数を指定した場合、選択した日付から指定した日数までのすべてのダイアリーエントリーを表示します。したがって、2 dは選択された日と、その次の日のすべてのエントリーを表示します。
ある日付にたいするダイアリーエントリーを表示する別の方法は、日付をmouse-3でクリックして、表示されるメニューからDiary
entriesを選択する方法です。変数calendar-view-diary-initially-flag
が非nil
の場合、カレンダーの作成により、その日のダイアリーエントリーがリストされます(その日が表示されている場合)。
より広い視点でダイアリーが記載されている日を知るには、mコマンドを使用します。これはダイアリーエントリーをもつ日付を、異なるフェイスでマークします。 diary-entry-markerを参照してください。
このコマンドは現在表示されている月と、スクロールすることにより表示される月の両方に適用されます。マークを消すにはuをタイプします。これにより休日のマークもオフになります(休日を参照してください)。変数calendar-mark-diary-entries-flag
が非nil
の場合、カレンダーの作成または更新により、ダイアリーの日付が自動的にマークされます。
カレンダーで、特定のダイアリーエントリーのマークを抑止するには、エントリーの開始、日付の前に、diary-nonmarking-symbol
で指定された文字列(デフォルトは‘&’)を挿入します。これはエントリーをダイアリーバッファーで表示する場合は、影響ありません。カレンダーウィンドウで日付をマークするときだけ影響があります。マークされないエントリーは、マークの数が多くなりすぎるような、一般的なエントリーにたいして有用かもしれません。
限られたエントリーだけでなく、ダイアリーファイル全体を参照するには、sコマンドを使用します。
コマンドM-x
diaryは、カレンダーの表示とは独立に、その日のダイアリーエントリーと、オプションでその後の何日かのダイアリーエントリーも同様に表示します。何日分を含めるかは変数diary-number-of-entries
で指定してください。
diary-number-of-entriesを参照してください。
.emacsファイルに(diary)
を記述した場合、Emacsを開始したときに、その日のダイアリーエントリーのウィンドウを自動的に表示します。
ダイアリーのイベント通知を、メールで受けとるのを好む人もいます。そのようなメールをあなた自身に送るには、コマンドM-x
diary-mail-entriesを使用します。プレフィクス引数は、(今日から開始して)何日分をチェックするかを指定します。プレフィクス引数を指定しない場合、変数diary-mail-days
により、何日分をチェックするかが指定されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下は、異なる方法でフォーマットされた日付を説明するために、ダイアリーエントリーの例をいくつか示したものです。この例では、日付はすべてアメリカ形式(月、日、年)ですが、Calendarモードは、オプションでヨーロッパ形式(日、月、年)と、ISO形式(年、月、日)をサポートします。
4/20/12 Switch-over to new tabulation system apr. 25 Start tabulating annual results 4/30 Results for April are due */25 Monthly cycle finishes Friday Don't leave without backing up files
最初のエントリーは、2012年4月20日に1度だけ表示されます。2番目と3番目のエントリーは毎年、指定した日に表示され、4番目のエントリーは月にワイルドカード(アスタリスク)を使っているので、毎月25日に表示されます。最後のエントリーは毎週、金曜日に表示されます。
‘month/day’や‘month/day/year’のように、日付を表すのに数字だけを使うこともできます。この場合、その後に続く文字は数字以外の文字でなければなりません。日付のmonthとdayは、1桁または2桁の数字です。オプションのyearも数字で、省略形として最後の2桁を使うこともできます。つまり、‘11/12/2012’または‘11/12/12’を使うことができます。
日付は、‘monthname day’または‘monthname day,
year’という形式をもつこともできます。月の名前のスペルには完全形、または省略形(最後のピリオドはあってもなくてもよい)を指定できます。月または曜日の優先される省略形は、変数calendar-abbrev-length
、calendar-month-abbrev-array
、calendar-day-abbrev-array
を使ってセットできます。デフォルトは、名前の最初の3文字を省略形として使用します。大文字小文字に違いはありません。
日付はジェネリック(generic) — つまり指定されていない部分があっても構いません。この場合、エントリーは日付に指定された部分にマッチする、すべての日付に適用されます。日付が年を含まない場合、これはジェネリックで、任意の年に適用されます。かわりにmonth、day、yearに‘*’を使用することもできます。これは任意の月、任意の日、任意の年にマッチします。したがって、日付は‘3/*/*’のダイアリーエントリーは任意の年の3月の任意の日にマッチします。‘march *’も同じです。
ヨーロッパ形式(月の前に日を記述する)、またはISO形式(年、月、日の順で記述する)で日付を記述したい場合は、カレンダーでM-x
calendar-set-date-styleとタイプするか、変数calendar-date-style
をカスタマイズします。これはダイアリーの日付がどのように解釈されるか、日付の表示、コマンドが与えられた引数に要求する順序に影響を与えます。
週のある曜日に適用されるジェネリックな日付として、曜日名を使うことができます。曜日名は完全なスペルを記述するか、上述した省略形を使用できます。大文字小文字に違いはありません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
カレンダーでは、ダイアリーのエントリーを作成するコマンドがいくつかあります。以下は基本的なコマンドの一覧です。より複雑なコマンドは次のセクションで説明します((特別なダイアリーエントリーを参照してください))。エントリーにはグレゴリオ暦以外も使用できます。 非グレゴリオ暦を使用するカレンダーエントリーを参照してください。
選択された日付のダイアリーエントリーを追加します(diary-insert-entry
)。
選択された曜日のダイアリーエントリーを、各週に追加します(diary-insert-weekly-entry
)。
選択された日のダイアリーエントリーを、各月に追加します(diary-insert-monthly-entry
)。
選択された日のダイアリーエントリーを、各年に追加します(diary-insert-yearly-entry
)。
カレンダーウィンドウで日付を選択して、i dコマンドをタイプすることにより、特定の日付にたいするダイアリーエントリーを作成することができます。このコマンドは、ダイアリーファイルの最後の部分を別のウィンドウに表示して、その日付を追加します。その後、ダイアリーエントリーの残りの部分をタイプできます。
毎週、特定の曜日に適用されるダイアリーエントリーを作成したいときは、その曜日(同じ曜日ならどの日でも構いません)を選択して、i wとタイプします。これは曜日をジェネリックな日付として挿入します。そのあとダイアリーエントリーの残りの部分をタイプできます。月ごとのダイアリーエントリーも同じやり方で作成できます。まず月のある日付を選択して、i mコマンドを使い、その後エントリーの残りの部分をタイプします。同様にi yコマンドで、年ごとのダイアリーエントリーを挿入できます。
上記のすべてのコマンドは、デフォルトでマークされるダイアリーエントリーを作成します。マークされないダイアリーエントリーを作成するには、コマンドにプレフィクス引数を与えます。たとえば、C-u i wは、マークされない週次のダイアリーエントリーを作成します。
ダイアリーファイルを変更したときは、Emacsを終了する前にそのファイルを保存してください。上記の挿入コマンドを使用した後でダイアリーファイルを保存することにより、それが適切な場合は、カレンダーウィンドウのダイアリーのマークを自動的に更新します。随時に更新させるには、コマンドcalendar-redraw
を使うことができます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
カレンダーの日付にもとづくエントリーに加え、ダイアリーファイルは記念日のような定期的なイベントにたいする、sexpエントリー(sexp entries: S式エントリー)を含むことができます。これらのエントリーは、Emacsがダイアリーファイルをスキャンすることにより評価される、Lisp式(sexp)にもとづきます。日付のかわりに、sexpエントリーは‘%%’と、その後ろに続くLisp式を含んでおり、Lisp式はカッコで始まりカッコで終わらなければなりません。Lisp式は、エントリーが適用される日付を決定します。
Calendarモードは、一般的に使用される特定のsexpエントリーを挿入するためのコマンドを提供します:
選択された日付にたいして、記念日ダイアリーエントリー(anniversary diary entry)を追加します。
カレントリージョンにたいして、ブロックダイアリーエントリー(block diary entry)を追加します。
その日付に開始される、周期的ダイアリーエントリー(cyclic diary entry)を追加します。
特定の日付の記念日に適用されるダイアリーエントリーを作成したい場合は、ポイントをその日付に移動してi aコマンドを使用します。これはダイアリーファイルの最後の部分を別のウィンドウに表示して、記念日の記述を追加します。その後ダイアリーエントリーの残りの部分をタイプできます。エントリーは以下のようになります:
%%(diary-anniversary 10 31 1988) Arthur's birthday
このエントリーは、1988年以降の任意の年の10月31日に適用されます。‘10 31 1988’は日付を指定します(ヨーロッパ形式またはISO形式を使用している場合、入力順は月、日、年とは異なります)。この式が開始年を要求する理由は、ダイアリーの上級機能が、経過年数を計算できるようにするためです。
ブロックダイアリーエントリーは、特定の連続する日付範囲に適用されます。以下は2012年6月24日から2012年7月10日までの、すべての日付に適用されるブロックダイアリーエントリーです:
%%(diary-block 6 24 2012 7 10 2012) Vacation
‘6 24 2012’は開始日付を示し、‘7 10 2012’は終了日付を示します(繰り返しになりますが、ヨーロッパ形式またはISOカレンダー形式を使用している場合、月、日、年の順は異なります)。
ブロックエントリーを入力するには、開始と終了の範囲となる2つの日付にポイントとマークを配し、i bとタイプします。このコマンドは、ダイアリーファイルの最後の部分を別のウィンドウに表示して、ブロックの記述を挿入します。その後で、ダイアリーエントリーをタイプすることができます。
周期的(cyclic)ダイアリーエントリーは、ある固定された日数の期間繰り替えされるエントリーです。これを作成するには、開始日を選択してi cコマンドを使用します。コマンドは期間の長さの入力を求め、それから以下のようなエントリーを挿入します:
%%(diary-cyclic 50 3 1 2012) Renew medication
このエントリーは、2012年3月1日以降の50日間適用されます。‘3 1 2012’は開始日の指定です(ヨーロッパ形式またはISOカレンダー形式を使用している場合、月、日、年の入力順は異なります)。
これら3つのコマンドはすべて、ダイアリーエントリーをマークします。マークしないダイアリーエントリーを挿入するには、プレフィクス引数を与えます。たとえばC-u i aは、マークされない記念日ダイアリーエントリーを作成します。
カレンダーでsexpダイアリーエントリーを作成すると、カレンダーウィンドウで表示されているすべての日付にたいして個別にチェックしなければならないので、時間がかかるかもしれません。そのため、可能ならsexpダイアリーエントリーを、(‘&’を使って)マークされないようにするのがよいでしょう。
その他の複雑なsexpエントリーとして、浮動(floating)ダイアリーエントリーがあります。これは日、週、年のオフセットで指定される、定期的に発生するイベントを指定するためのものです。これはcron
により解釈されるcrontabエントリーに類似しています。以下はマークされない、浮動ダイアリーエントリーで、11月の第4木曜日に適用されます。
&%%(diary-float 11 4 4) American Thanksgiving
11は11月(11番目の月)を指定し、4は木曜日(週の第4日。日曜日は0)、2番目の4は第4週(1は第1週、2は第2週、-2は最終週から2番目の週)を指定します。月は1つの月、または月のリストを使用できます。したがって上記の11を‘'(1
2
3)’に変更すると、このエントリーは1月、2月、3月の第4木曜日に適用されることになります。月がt
の場合、そのエントリーは年の各月に適用されます。
標準的なsexpダイアリーエントリーは、フェイス名またはカレンダーをマークするときに使用する1文字の文字列を指定する、オプションのパラメーターを受け取ります。一般的には、sexpダイアリーエントリーは、それらが適用されるときを決定するために、任意の計算を処理することができます。 sexpエントリーとFancy Diary表示を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
アポイントメント(appointment:
約束、予約)にたいするダイアリーエントリーがある場合、そのダイアリーエントリーが認識可能な日時で開始されていれば、Emacsは保留されたアポイントメントがあることを警告することができます。Emacsは、変数appt-display-format
で選択されたフォーマットでメッセージを表示して、アポイントメントにたいする注意を喚起します。appt-audible
の値が非nil
の場合、警告には音によるリマインダーも含まれます。加えて、appt-display-mode-line
が非nil
の場合、Emacsはアポイントメントまで何分あるかを、モードラインに表示します。
appt-display-format
の値がwindow
の場合、変数appt-display-duration
がリマインダーウィンドウを表示する長さを制御します。変数appt-disp-window-function
およびappt-delete-window-function
は、ウィンドウを生成または破棄する関数の名前を与えます。
アポイントメントの通知を有効にするには、M-x appt-activateとタイプします。正の引数は通知を有効に、負の引数は通知を無効に、引数を指定しない場合は通知のオンとオフを切り替えます。通知を有効にすることにより、ダイアリーファイルから見つかった、認識可能な日時をもつすべてのダイアリーエントリーにより、今日のアポイントメントリストをセットアップし、それらのアポイントメントの直前に注意を促します。
たとえば、ダイアリーファイルに以下のような行が含まれているとします:
Monday 9:30am Coffee break 12:00pm Lunch
月曜日には、9:20am頃にコーヒーブレーク、11:50am頃にランチの注意が促されます。変数appt-message-warning-time
には、前もって何分前(デフォルトは12)に警告するかを指定します。これはデフォルトの警告タイムです。appt-warning-time-regexp
に部分マッチングを追加することにより、各アポイントメントに異なる警告タイムを指定できます(詳細は、この変数のドキュメントを参照してください)。
時刻はam/pmスタイル(‘12:00am’は真夜中で、‘12:00pm’は正午)、またはヨーロッパ/軍隊の24時間制で記述できます。どちらを使うか一貫性がある必要はありません。ダイアリーファイルで、この2つのスタイルを混交させることができます。時刻が認識されるためは、それがダイアリーエントリーの最初に記述されていなければなりません。
Emacsは、真夜中直後にダイアリーファイルから自動的にアポイントメントリストを更新します。アポイントメント通知を再度有効にすることにより、随時に更新させることができます。appt-display-diary
をnil
にセットしていなければ、これらのアクションはその日のダイアリーバッファーにも表示されます。アポイントメントリストは、ダイアリーファイル(またはそれをインクルードするファイル。
Fancy Diary表示を参照)
に保存されます。Orgモードを使用していて、アポイントメントをOrgアジェンダファイルに保持したい場合は、org-agenda-to-appt
コマンドを使用して、アポイントメントをアジェンダファイルのリストに追加できます。このコマンドについての詳細は、Appointment reminders in The Org Manualを参照してください。
アラーム時計のように、アポイントメント通知機能を使うこともできます。コマンドM-x appt-addは、ダイアリーファイルに影響を与えずに、アポイントメントリストにエントリーを追加します。アポイントメントリストからエントリーを削除するには、M-x appt-deleteを使います。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsのダイアリーファイルと、他のさまざまなフォーマットの間で、ダイアリーエントリーを変換できます。
Outlookが生成したアポイントメントメッセージから、ダイアリーエントリーをインポートできます。そのようなメッセージをRmailやGnusで閲覧しているときは、エントリーをインポートするためにM-x
diary-from-outlookを実行します。変数diary-outlook-formats
をカスタマイズすることにより、このコマンドに追加のアポイントメッセージ形式を認識させることができます。他のメールクライアントは、diary-from-outlook-function
を適切な値にセットできます。
icalendarパッケージにより、Emacsダイアリーファイルと、RFC 2445 — Internet Calendaring and Scheduling Core Object Specification (iCalendar)で定義されるiCalendarとの間で、データを変換することができます(初期のvCalendar形式も同様)。
コマンドicalendar-import-buffer
は、カレントバッファーからiCalendarデータを抽出して、それをダイアリーファイルに追加します。この関数は、iCalendarデータを自動的に抽出するためにも適しています。たとえばRmailメールクライアントは、以下を使用できます:
(add-hook 'rmail-show-message-hook 'icalendar-import-buffer)
コマンドicalendar-import-file
は、iCalendarファイルをインポートして、その結果をEmacsダイアリーファイルに追加します。たとえば:
(icalendar-import-file "/here/is/calendar.ics" "/there/goes/ical-diary")
もし違うファイルが存在する場合は、インポートファイルの内容を追加するために、#include
ディレクティブを使うことができます。
Fancy Diary表示を参照してください。
icalendar-export-file
を使って、Emacsダイアリーファイル全体をiCalendar形式にエクスポートできます。ダイアリーファイルの一部をエクスポートするには、関連する領域をマークして、icalendar-export-region
を呼び出します。どちらの場合も、Emacsは結果をターゲットファイルに追加します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsは、標準時とサマータイムの違いを理解します。日の出、日の入り、夏至、冬至、春分、秋分、月の位相では、時刻を補正しています。サマータイムのルールは、場所によりさまざまで、歴史的にも異なります。処理を正しく行なうには、Emacsが使用するルールを知る必要があります。
どこにいるかにより適用されるルールを、追跡するオペレーティングシステムもあります。そのようなシステムでは、Emacsはそのシステムから必要な情報を取得します。これらの情報の一部またはすべてが欠落している場合、Emacsは現在マサチューセッツのケンブリッジで使用されているルールで、そのギャップを埋めます。その結果としてのルールが望むものでない場合、変数calendar-daylight-savings-starts
およびcalendar-daylight-savings-ends
をセットすることにより、Emacsに使用するルールを指定できます。
これらの値は、変数year
を参照するLisp式で、サマータイムが開始または終了される、(month
day
year)
という形式のリストによる、グレゴリオ暦の日付として評価されます。その地域がサマータイムを使用しない場合、値はnil
であるべきです。
Emacsは、サマータイムの開始を決定するためにこれらの式を使い、休日リスト、太陽および月に関する時刻の補正を行ないます。
マサチューセッツのケンブリッジにたいする値は、以下のとおりです:
(calendar-nth-named-day 2 0 3 year) (calendar-nth-named-day 1 0 11 year)
つまり、year
で指定される年の、3番目の月(3月)の、第2週の0番目の曜日(日曜日)と、、その年の11番目の月(11月)の、第1週の日曜日です。サマータイムが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
は、サマータイムの開始と終了の遷移時に、地方時の真夜中から何分ずれるかを指定します。マサチューセッツのケンブリッジでは、変数の値は両方とも120です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
timeclockパッケージは、時間間隔を加算していくので、(たとえば)特定のプロジェクトにどれだけ時間を費やしているか、追跡することができます(より上級の代替手段はOrgモードの時間計測機能の使用である。Clocking Work Time in The Org Manualを参照)。
プロジェクトの作業を開始したときM-x timeclock-inコマンドを使用し、作業を終えたらM-x timeclock-outコマンドを使用します。これを行なうたびに、プロジェクトの記録に時間間隔を追加します。違うプロジェクトの作業に変更する場合は、M-x timeclock-changeを使用します。
いくつかの時間間隔をからデータを収集したら、M-x timeclock-workday-remainingを使って、その作業にたいして今日の残り時間を見ることができ(1日の作業時間の平均は通常8時間とみなします)、M-x timeclock-when-to-leaveで作業を終了する時間を計算します。
Emacsにたいして、モードラインに作業日の残り時間を表示させたいときは、変数timeclock-mode-line-display
をt
にセットするか、コマンドM-x
timeclock-mode-line-displayを呼び出します。
Emacsのカレントセッションを終了することは、そのプロジェクトの作業を終えることを意味するか不明なので、デフォルトではEmacsは確認を求めます。しかし変数timeclock-ask-before-exiting
の値をnil
にカスタマイズすることにより、確認を無視できます。その場合、明示的にM-x
timeclock-outかM-x
timeclock-changeを呼び出した場合だけ、カレントの時間間隔が終了したとEmacsに告げます。
timeclock関数は、~/.emacs.d/timelogと呼ばれるファイルに、データを集積することにより機能します。変数timeclock-file
をカスタマイズすることにより、このファイルに違う名前を指定できます。手作業でtimeclockを編集したり、timeclockのカスタマイズ可能な変数の値を変更したときは、コマンドM-x
timeclock-reread-logを実行するべきです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このセクションでは、カレンダーとダイアリーの、より上級で特別な機能をいくつか説明します。まず最初に、個人的な好みに合うようにカレンダーをカスタマイズする、多くの方法を紹介します。
31.13.1 カレンダーのカスタマイズ | カレンダーのレイアウトとフック。 | |
31.13.2 休日のカスタマイズ | 独自の休日を定義する。 | |
31.13.3 マヤ暦からの変換 | マヤ暦で指定された日付への移動。 | |
31.13.4 日付の表示フォーマット | フォーマットの変更。 | |
31.13.5 時刻の表示フォーマット | フォーマットの変更。 | |
31.13.6 ダイアリーのカスタマイズ | セットできるデフォルト。 | |
31.13.7 非グレゴリオ暦を使用するカレンダーエントリー | 他のカレンダーにもとづくダイアリーエントリー。 | |
31.13.8 ダイアリーの表示 | ダイアリーを表示する方法の選択。 | |
31.13.9 Fancy Diary表示 | インクルードされたダイアリーファイルを使ったダイアリーエントリーのソート。 | |
31.13.10 sexpエントリーとFancy Diary表示 | より柔軟なダイアリーエントリー。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
残念ながら、カレンダーの表示が3ヶ月であるのを変更することはできませんが、変数calendar-left-margin
、calendar-day-header-width
、calendar-day-digit-width
、calendar-column-width
、calendar-intermonth-spacing
をカスタマイズすることにより、使用される空白文字をカスタマイズすることはできます。各月の間に、たとえば週の番号を表示するには、変数calendar-intermonth-header
とcalendar-intermonth-text
を、変数のドキュメントに記載されているようにカスタマイズします。
変数calendar-month-header
は、カレンダーの各月の上に表示されるテキストを制御します。デフォルトでは月と年を表示します。変数calendar-day-header-array
は、各月の各曜日の上に表示されるテキストを制御します。デフォルトでは、各曜日の名前の最初の2文字を表示します。
変数calendar-holiday-marker
は、休日をどのようにマークするか指定します。この変数は、日付の隣に挿入する1文字の文字列か、その日付を表示するのに使用するフェイス名です。同様に、変数diary-entry-marker
は、ダイアリーエントリーをもつ日を、どのようにマークするか指定します。関数calendar-mark-today
は、今日の日付をマークするのにcalendar-today-marker
を使用します。デフォルトでは、この目的のためにカレンダーはholiday
、diary
、calendar-today
という名前のフェイスを使います。
カレンダーの開始により、ノーマルフックcalendar-initial-window-hook
が実行されます。カレンダー表示の再計算では、このフックは実行されません。しかしqでカレンダーを離れ、再度カレンダーに入ると、このフックが再び実行されます。
変数calendar-today-visible-hook
は、カレンダーバッファーがカレンダーのために準備された後、カレント日付がウィンドウで表示されるときに実行されるノーマルフックです。このフックの用途の1つは、今日の日付のマークです。これを行なうには、関数calendar-mark-today
またはcalendar-star-date
を使います:
(add-hook 'calendar-today-visible-hook 'calendar-mark-today)
同様のノーマルフックcalendar-today-invisible-hook
は、カレント日付がウィンドウに表示されなくなるとき実行されます。
カレンダーのカーソル移動コマンドは、カーソルを移動した後に、フックcalendar-move-hook
を実行します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsが知る、デフォルト休日のリスト変数がいくつかあります。それはholiday-general-holidays
、holiday-local-holidays
、holiday-solar-holidays
、holiday-bahai-holidays
、holiday-christian-holidays
、holiday-hebrew-holidays
、holiday-islamic-holidays
、holiday-oriental-holidays
、holiday-other-holidays
です。変数の名前は自己説明的であるべきです。たとえば、holiday-solar-holidays
は、太陽と月に関連した休日のリストです。
これらの休日リストにたいして、必要に応じて、下記で説明しているように休日を削除したり追加してカスタマイズできます。これらをnil
にセットすると、関連する休日は表示されなくなります。
一般的な休日、すなわちholiday-general-holidaysは、デフォルトではUnited
Statesで一般的な休日です。対照的に、holiday-local-holidays
とholiday-other-holidays
は、デフォルトでは空です。前者はシステムワイドなセッティング、後者は個人的な使用を意図しています。
デフォルトでは、Emacsは世俗的なカレンダーに一般的に見出されるものを除き、宗教的な休日のすべてを含んではいません。宗教的な休日の、より広範なコレクションのために、変数calendar-bahai-all-holidays-flag
、calendar-christian-all-holidays-flag
、calendar-hebrew-all-holidays-flag
。calendar-islamic-all-holidays-flag
のどれか(またはすべて)をt
にセットできます。
それぞれの休日の変数はholiday formsのリストです。各formは休日(休日のリストの場合もある)を記述します。以下は利用可能なholiday formの表です。日付と月は1から数えますが、曜日名(dayname)は日曜日を0として数えます。引数stringは、その休日を説明する文字列です。
(holiday-fixed month day string)
グレゴリオ暦(Gregorian calendar)の固定日付です。
(holiday-float month dayname k string &optional day)
グレゴリオ暦のmonth月day日の前または後のk番目の曜日dayname(dayname=0の場合は日曜日)です。kが負の場合、月の最後から数えます。オプションのdayのデフォルトは、kが正のときは1、負のときはmonthの最後の日になります。
(holiday-chinese month day string)
旧暦(Chinese calendar)の固定日付です。
(holiday-hebrew month day string)
ヘブライ暦(Hebrew calendar)の固定日付です。
(holiday-islamic month day string)
イスラム暦(Islamic calendar)の固定日付です。
(holiday-julian month day string)
ユリウス暦(Julian calendar)の固定日付です。
(holiday-sexp sexp string)
Lisp式sexpにより計算される日付です。式は計算に変数year
を使い、(month
day year)
の形式のリストを返すか、その年に休日が発生しない場合はnil
を返すべきです。
(if condition holiday-form)
条件conditionが真のときだけ休日が発生します。
(function [args])
引数argsを指定して関数functionを呼び出すことにより計算される日付のリストです。
たとえばフランスで有名な7月14日のパリ革命記念日(Bastille Day)を追加したいとしましょう。以下でこれを行なうことができます:
(setq holiday-other-holidays '((holiday-fixed 7 14 "Bastille Day")))
多くの休日は、特定の月の特定の曜日に発生します。以下はVirgin Islandsで有名な7月第4月曜日のHurricane Supplication Dayを記述します。
(holiday-float 7 1 4 "Hurricane Supplication Day")
ここで7は7月、1は月曜日(日曜日は0、火曜日は2です)、4はその月の4番目(1は1番目、2は2番目、-1は最後、-2は最後から2番目)を指定しています。
Bahá’í暦、旧暦、ヘブライ暦、イスラム暦、ユリウス暦の固定日付に発生する休日を指定することもできます。たとえば、
(setq holiday-other-holidays '((holiday-hebrew 10 2 "Last day of Hanukkah") (holiday-islamic 3 12 "Mohammed's Birthday") (holiday-julian 4 2 "Jefferson's Birthday")))
これは、Hanukkahの最後の日(ヘブライ暦の月はNisanを1として数えられます)、Mohammedの誕生日を祝うイスラムの祭日(イスラム暦の月はMuharramを1として数えられます)、そしてユリウス暦の1743年4月2日のThomas Jeffersonの誕生日を記述したものです。
条件付きの休日を含めるには、Emacs
Lispのif
か、holiday-sexp
形式を使用します。たとえばアメリカ大統領選挙は、4で割りきれる年の11月の第1月曜日の後の、最初の火曜日に発生します:
(holiday-sexp '(if (zerop (% year 4)) (calendar-gregorian-from-absolute (1+ (calendar-dayname-on-or-before 1 (+ 6 (calendar-absolute-from-gregorian (list 11 1 year))))))) "US Presidential Election")
または
(if (zerop (% displayed-year 4)) (holiday-fixed 11 (calendar-extract-day (calendar-gregorian-from-absolute (1+ (calendar-dayname-on-or-before 1 (+ 6 (calendar-absolute-from-gregorian (list 11 1 displayed-year))))))) "US Presidential Election"))
休日の決定に特別な計算が含まれるために、上記の形式に当てはまらない休日もあります。そのような場合は、その計算を行なうLisp関数を記述しなければなりません。たとえば食(eclipses)を含めるにはholiday-other-holidays
に(eclipses)
を追加して、以下のような、カレンダーウィンドウに表示されている月に関連するグレゴリオ暦の日付のリスト(空の場合もあり得る)を返す、Emacs
Lisp関数(eclipses)
を記述します。
(((6 4 2012) "Lunar Eclipse") ((11 13 2012) "Solar Eclipse") ... )
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下は、マヤ暦(Mayan calendar)にもとづく日付を選択するコマンドです:
long countカレンダーで指定された日付に移動します(calendar-mayan-goto-long-count-date
)。
tzolkinカレンダーの次の周期の日付に移動します(calendar-mayan-next-tzolkin-date
)。
tzolkinカレンダーの前の周期の日付に移動します(calendar-mayan-previous-tzolkin-date
)。
haabカレンダーの次の周期の日付に移動します(calendar-mayan-next-haab-date
)。
haabカレンダーの前の周期の日付に移動します(calendar-mayan-previous-haab-date
)。
マヤ暦の次の周期の日付に移動します(calendar-mayan-next-calendar-round-date
)。
マヤ暦の前の周期の日付に移動します(calendar-mayan-previous-calendar-round-date
)。
これらのコマンドを理解するためには、マヤ暦(Mayan calendars)を理解する必要があります。long countは以下の単位にもとづいて日数を計算します:
1 kin = 1日 1 uinal = 20 kin 1 tun = 18 uinal 1 katun = 20 tun 1 baktun = 20 katun
したがってlong countの日付12.16.11.16.6は、12baktunの16katunの11tunの16uinalの6kinを意味します。Emacsのカレンダーはマヤ暦のlong countを7.17.18.13.3まで遡ることができます。g m lコマンドを使うときはマヤ暦のlong countの日付baktun、katun、tun、uinal、kinをピリオドで区切って入力します。
マヤ暦のtzolkinは、13日と20日の独立した周期を組み合わせた形式からなる260日周期のカレンダーです。この周期が永遠に繰り替えされるので、Emacsはこのサイクルの前または次の位置に、後方または前方に移動するコマンドを提供します。g m p tは前のtzolkin日付に移動します。Emacsはtzolkin日付の入力を求め、前の周期のその日付にポイントを移動します。同様に、g m n tとタイプすると、次の周期のtzolkin日付に移動します。
マヤ暦のhaabは、20日からなる18の月と、月に属さない5日間からなる365日周期のカレンダーです。tzolkinの周期と同様に、この周期は永遠に繰り返されるので、この周期の前または次の位置へ後方または前方に移動するコマンドがあります。g m p hは前のhaab日付に移動します。Emacsはhaab日付の入力を求め、前の周期のその日付にポイントを移動します。同様に、g m n hとタイプすると次の周期のhaab日付に移動します。
マヤ暦ではtzolkin日付とhaab日付を組み合わせた日付も使用されていました。この組み合わせやcalendar roundと呼ばれる、約52年の周期です。g m p cとタイプすると、Emacsはhaab日付とtzolkin日付の入力を求め、前の周期のその組み合わせの日付にポイントを移動します。g m n cを使用すると、次の周期のsぽの組み合わせの日付にポイントを移動します。あり得ないhaab日付とtzolkin日付の組み合わせをタイプした場合は、エラーをシグナルします。
EmacsはMaya暦の名前の入力を求めるときは強い補完 (補完の終了を参照してください) を使うので、スペルについて心配する必要はありません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
calendar-date-display-form
をセットすることにより、ダイアリー、モードライン、メッセージに表示される日付をカスタマイズできます。この変数は、文字列形式の数字をもつ変数month
、day
、year
と、アルファベット文字列をもつmonthname
、dayname
を含む式のリストを保持します。アメリカ様式では、このリストのデフォルト値は以下のようになります:
((if dayname (concat dayname ", ")) monthname " " day ", " year)
ヨーロッパ様式では、この値のデフォルトは以下のようになります:
((if dayname (concat dayname ", ")) day " " monthname " " year)
デフォルトのISO日付は以下のようになります:
((format "%s-%.2d-%.2d" year (string-to-number month) (string-to-number day)))
他の典型的なアメリカ様式は以下のものです:
(month "/" day "/" (substring year -2))
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
カレンダーとダイアリーは、デフォルトで1日の時刻を、‘am’または‘pm’と、1から12の時刻と分によるアメリカ様式の慣習にしたがって表示します。00から23の時刻による、ヨーロッパ様式(US軍用様式とも呼ばれる)にしたい場合は、変数calendar-time-display-form
を変更することができます。この変数は式のリストです。このリストには文字列形式の数字をもつ変数12-hours
、24-hours
、minutes
と、アルファベット文字列をもつam-pm
、time-zone
を含めることができます。デフォルト値は以下のとおりです:
(12-hours ":" minutes am-pm (if time-zone " (") time-zone (if time-zone ")"))
以下の値はヨーロッパ形式の時刻を提供します:
(24-hours ":" minutes (if time-zone " (") time-zone (if time-zone ")"))
1日の時刻を返すカレンダー関数は少ないことに注意してください(現在のところsolar関数のみ)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ダイアリーウィンドウは通常、ダイアリーエントリーの日付が休日に相当する場合は、モードラインとバッファー自身にそれを示します。休日をチェックするプロセスは時間がかかることがあり、それは定義された休日に依存します。このような場合、diary-show-holidays-flag
をnil
にセットすることにより、ダイアリーの表示を速くすることができます。
変数diary-number-of-entries
は、1度に表示されるダイアリーエントリーの日数を制御します。これはcalendar-view-diary-initially-flag
がt
のときの初期表示と、コマンドM-x
diaryに影響します。たとえば値1(デフォルト)は、その日のダイアリーエントリーだけを表示し、値2は翌日のエントリーも表示します。値には7つの整数のvectorも指定できます。たとえば値が[0
2 2 2 2 4
1]
の場合、日曜日にはダイアリーエントリーは表示されず、月曜日から木曜日までは当日と翌日のダイアリーエントリーが表示され、金曜日には金曜日から月曜日のエントリーが表示され、土曜日にはその日のエントリーだけが表示されます。
変数diary-date-forms
をセットすることにより、ダイアリーファイルの日付形式をカスタマイズできます。この変数は日付を認識するパターンのリストです。各日付パターンは、要素が正規表現(Regular
Expressions in the Emacs Lisp Reference
Manualを参照してください)、またはシンボルmonth
、day
、year
、monthname
、dayname
のリストです。これらすべての要素は、ダイアリーファイルの特定の種類のテキストにマッチするパターンに供されます。日付パターン全体がマッチするためには、リストの各要素が連続してマッチしなければなりません。
日付パターンの正規表現は、標準の構文テーブルを変更してそれ自身の通常の方法でマッチするので、‘*’は単語の構成要素になります。
シンボルmonth
、day
、year
、monthname
、dayname
は、日付と考えられる月番号、日付番号、年番号、月の名前、曜日名にマッチします。数字にマッチするシンボルは、0で開始することもできます。名前にマッチするものは、大文字名と、(calendar-month-abbrev-array
とcalendar-day-abbrev-array
で指定されるような)省略形を許容します。ダイアリーエントリーの‘*’は“任意の月”の‘任意の日付”などを意味するので、すべてのシンボルは‘*’にマッチすることができ、日付とみなされないものにもマッチするべきです。
アメリカ様式でのdiary-date-forms
のデフォルト値は、diary-american-date-forms
により提供されます:
((month "/" day "[^/0-9]") (month "/" day "/" year "[^0-9]") (monthname " *" day "[^,0-9]") (monthname " *" day ", *" year "[^0-9]") (dayname "\\W"))
変数diary-european-date-forms
およびdiary-iso-date-forms
は、他のデフォルト様式を提供します。
このリストの日付パターンは、相互排他的(mutually
exclusive)でなければならず、ダイアリーエントリーの任意の部分にマッチせず、日付と1文字の空白文字だけにマッチしなければなりません。相互排他的であるならば、パターンは日付を終端する空白文字を越えて、ダイアリーエントリーの一部にマッチしなければならず、日付パターンの最初の要素はバックアップ(backup)
されなければなりません。これにより日付識別処理はマッチお終えた後、ダイアリーエントリーの先頭の単語をバックアップします。backup
を使う場合でも、日付パターンはダイアリーエントリーの最初の単語の部分を越えてマッチしてはなりません。たとえばdiary-european-date-forms
は以下のようなデフォルト値です:
((day "/" month "[^/0-9]") (day "/" month "/" year "[^0-9]") (backup day " *" monthname "\\W+\\<\\([^*0-9]\\|\\([0-9]+[:aApP]\\)\\)") (day " *" monthname " *" year "[^0-9]") (dayname "\\W"))
3番目のパターンでのbackup
の使用に注目してください。これは4番目のパターンと区別するために、日付自体を越えて単語の一部にマッチする必要があるからです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
グレゴリオ暦にもとづくエントリーと同様に、ダイアリーはBahá’í、Chinese、Hebrew、Islamicの日付にもとづくエントリーをもつことができます。そのようなエントリーの識別は時間がかかる場合がありますが、これらを使用する人はほとんどいないので、使用する場合は明示的に有効にしなければなりません。ダイアリーが、ダイアリーエントリーのHebrew日付を識別するようにしたい場合、たとえば以下のようにして、これを行なわなければなりません:
(add-hook 'diary-nongregorian-listing-hook 'diary-hebrew-list-entries) (add-hook 'diary-nongregorian-marking-hook 'diary-hebrew-mark-entries)
同様にIslamic、Bahá’í、Chineseのエントリーにたいしては、diary-islamic-list-entries
とdiary-islamic-mark-entries
、またはdiary-bahai-list-entries
とdiary-bahai-mark-entries
、またはdiary-chinese-list-entries
とdiary-chinese-mark-entries
を追加します。
これらのダイアリーエントリーは、グレゴリオ日付のダイアリーエントリーと同じフォーマットをもちます。例外は、Bahá’í日付の前にはdiary-bahai-entry-symbol
(デフォルトは‘B’)、Chinese日付の前にはdiary-chinese-entry-symbol
(デフォルトは‘C’)、Hebrew日付の前にはdiary-hebrew-entry-symbol
(デフォルトは‘H’)、Islamic日付の前にはdiary-islamic-entry-symbol
(デフォルトは‘I’)が前置されなければならないことです。さらに、非グレゴリオの月の名前は省略できません(最初の3文字では一意にならないものがあるからです。一般的なHebrew年のAdarを使いたい場合は、“Adar
I”を使わなければならないことにも注意してください。) たとえばHebrew日付のHeshvan
25にたいするダイアリーエントリーは、以下のようになります:
HHeshvan 25 Happy Hebrew birthday!
これはヘブライ暦のHeshvan 25に対応する日付のダイアリーに表示されます。以下はIslamic日付のDhu al-Qada 25にマッチするダイアリーエントリーです:
IDhu al-Qada 25 Happy Islamic birthday!
グレゴリオ日付のダイアリーエントリーのように、非グレゴリオのエントリーも前にdiary-nonmarking-symbol
(デフォルトは‘&’)が前置されている場合はマークされません。
以下は、選択された日付または他の日付にたいして、Bahá’í、Chinese、Hebrew、Islamicの日付によるダイアリーエントリーを作成するコマンドの表です:
diary-hebrew-insert-entry
diary-hebrew-insert-monthly-entry
diary-hebrew-insert-yearly-entry
diary-islamic-insert-entry
diary-islamic-insert-monthly-entry
diary-islamic-insert-yearly-entry
diary-bahai-insert-entry
diary-bahai-insert-monthly-entry
diary-bahai-insert-yearly-entry
diary-chinese-insert-entry
diary-chinese-insert-monthly-entry
diary-chinese-insert-yearly-entry
diary-chinese-insert-anniversary-entry
これらのコマンドは、通常のダイアリーエントリーの対応するコマンドに似ています。これらはカレンダーウィンドウのポイント位置の日付に適用され、これらのコマンドが行なうのはダイアリーファイルの最後にダイアリーエントリーの日付部分を挿入することだけです。その後、ダイアリーエントリーの残りを挿入しなければなりません。特定の非グレゴリオ日付のエントリーを追加する基本的なコマンドとして、与えられた非グレゴリオ日を各月に追加する‘monthly’コマンド、与えられた非グレゴリオの月日を各年に追加する‘yearly’コマンドがあります。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ダイアリーの表示は、ダイアリーエントリーのリストを準備して、変数diary-display-function
で指定された関数を実行することにより機能します。デフォルト値のdiary-fancy-display
は、ダイアリーエントリーを表示するためだけに存在する特別なバッファーにコピーして、ダイアリーエントリーと休日を表示します。ダイアリーエントリーを別のバッファーにコピーすることにより、表示されるテキストの見栄えをよくする機会
— たとえばダイアリーエントリーに適用される日付順にソートするなど — が提供されます。
通常、fancy
diary(装飾的なダイアリー)バッファーは、たとえその日が休日であっても、ダイアリーエントリーがない日は表示しません。そのような日をfancy
diaryバッファーに表示したいときは、変数diary-list-include-blanks
をt
にセットします。
fancy diaryバッファーはViewモードを有効にします (Viewモードを参照してください)。
他の表示方法のdiary-simple-display
は、実際のダイアリーバッファーを表示して、適合しないエントリーを隠すために非表示のテキストを使います。休日はモードラインに表示されます。この方法の有利な点は、ダイアリーファイルを直接編集して、変更を保存できることです。しかし、この方法はfancy方式のように柔軟ではありません。たとえば、これはエントリーのソートはできません。他の不利な点としては、非表示のテキストが混乱の元となることがある点です。たとえば、他の場所に張り付けるためにリージョンのテキストをコピーした場合、非表示のテキストも含まれます。同様に、目に見えるダイアリーバッファーは一種の幻影なので、単にバッファーを印刷しても、スクリーンで表示されているものが印刷されるわけではありません。
この理由により、ダイアリーバッファーのハードコピーを見た通りに印刷する特別なコマンドM-x
diary-print-entriesがあります。これは、どちらの表示方式でも機能します(たとえfancy
displayバッファーが他のバッファーと同じようにプリントできるとしても)。週の各曜日のハードコピーを印刷するには、ポイントを週の初めの曜日に移動して7
dとタイプし、それからM-x
diary-print-entriesを実行します。通常のように、休日が含まれる場合、表示は若干遅くなります。変数diary-show-holidays-flag
をnil
にセットすることにより、速度を改善することができます。
このコマンドは、ダイアリーバッファーで現在可視なダイアリーエントリーだけを含んだ一時的なバッファーを作成します。単なる表示とは異なり、他の無関係なエントリーは隠されるだけではなく、まったく含まれません。バッファーを作成したら、フックdiary-print-entries-hook
が実行されます。このフックのデフォルト値はコマンドlpr-buffer
で、これはデータを直接プリンターに送信します
(ハードコピーの印刷を参照してください)。
違うコマンドを印刷に使いたい場合は、単にこのフックの値を変更するだけです。他のコマンドには、たとえば行を日付と時刻順に再配置することなどが含まれるかもしれません。
simpleダイアリーウィンドウで表示されているときと同じように、ダイアリーエントリーを編集できますが、表示されているバッファーには、表示から隠されている部分が含まれていることを覚えておくのは重要です。これは、たとえばC-f
(forward-char
)は表示されている最後の行にポイントを移動できますが、実際は隠されている行の途中かもしれないことを意味します。
simple表示でダイアリーエントリーを編集するときは注意してください。表示されている行の途中での行の追加、文字の追加や削除は問題になりませんが、行の最後で編集する場合は、意図した通りにはならないでしょう。行の削除は、それに続く他の非表示のエントリーを削除するかもしれません。simple
diaryバッファーで編集する前に、s (diary-show-all-entries
)でファイル全体を表示するのが最善です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下の機能は、fancy diary表示だけで機能します。
ノーマルフックdiary-list-entries-hook
を使用して、各曜日のダイアリーエントリーを日時順でソートできます。以下はその方法です:
(add-hook 'diary-list-entries-hook 'diary-sort-entries t)
これは各曜日にたいして、認識可能は日時で始まるダイアリーエントリーをソートします。時刻がないダイアリーエントリーは、各曜日の最初に配置されます。ソートコマンドがフックリストの最後に配置されているわけに注意してください。リストの最初の方に配置されている場合、これはダイアリーエントリーの順序を変更したり、アイテムを追加します。
コメント区切りとなる文字列をdiary-comment-start
とdiary-comment-end
にセットすることにより、ダイアリーエントリーに‘コメント’を記述できます。fancy表示はコメントを印刷しません。他のパッケージ(たとえばappointmentパッケージ。
アポイントメントを参照してください)
で使用するメタデータをコメント内に記述したいと思うかもしれません。
メインとなるダイアリーファイルに、他のファイルをインクルードできます。これにより、グループのメンバー全員に適用されるイベント用のダイアリーファイルを、共有することができます。ダイアリーファイルで、diary-include-string
で開始される行:
#include "filename"
は、ファイルfilenameからダイアリーエントリーをfancy diaryバッファーにインクルードします。インクルードの仕組みは再帰的なので、インクルードされたファイルは他のファイルをインクルードできます(もちろん循環的なインクルードについては注意しなければなりません)。インクルード機能を有効にするには、以下のようにします:
(add-hook 'diary-list-entries-hook 'diary-include-other-diary-files) (add-hook 'diary-mark-entries-hook 'diary-mark-included-diary-files)
インクルード機能はfancy diaryだけで機能します。なぜならsimple diary表示は、エントリーをダイアリーファイルから直接表示するからです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
sexp( s-expression:
S式)ダイアリーエントリーにより、どのダイアリーエントリーに適用するか、複雑な条件判定以上のことができます。sexpエントリーは、ダイアリーファイルでdiary-sexp-entry-symbol
(デフォルトは‘%%’)が前置されている行です。fancy
diary表示では、sexpエントリーはエントリーの日付に応じて、エントリーのテキストを生成できます。
たとえば記念日のダイアリーエントリーでは、記念日から経過した年数をダイアリーエントリーのテキストに挿入できます。したがって、以下のダイアリーエントリーの‘%d’:
%%(diary-anniversary 10 31 1948) Arthur's birthday (%d years old)
は年齢に置換されるので、1990年10月31日のfancy diaryバッファーでは、以下のように表示されます:
Arthur's birthday (42 years old)
かわりに、ダイアリーファイルに以下のようなエントリーが含まれている場合:
%%(diary-anniversary 10 31 1948) Arthur's %d%s birthday
は1990年10月31日のfancy diaryバッファーで、以下のように表示されます:
Arthur's 42nd birthday
同様に、周期的なダイアリーエントリーは、それが繰り返し発生した回数を挿入できます:
%%(diary-cyclic 50 1 1 2012) Renew medication (%d%s time)
これは以下のように表示されます:
Renew medication (5th time)
これは2012年9月7日のfancy diary表示です。
発生する日付だけでなく、それより前のダイアリーエントリーを含めるための、事前リマインダー(early-reminder)となるsexpダイアリーエントリーもあります。たとえば記念日の1週間前にリマインダーが欲しいときは、以下を使用します
%%(diary-remind '(diary-anniversary 12 22 1968) 7) Ed's anniversary
これにより、fancy diaryは12月15日と12月22日に、‘Ed's anniversary’を表示します。
関数diary-date
は、整数またはt
(すべての値を意味します)からなるmonth、day、yearの組み合わせで日付を指定します。たとえば、
%%(diary-date '(10 11 12) 22 t) Rake leaves
これによりfancy diaryは
Rake leaves
を毎年10月22日、11月22日、12月22日に表示します。
関数diary-float
を使って、11月の第3金曜日や、4月の最後の火曜日といった日付をダイアリーエントリーに記述することができます。パラメーターはmonth、dayname、およびインデックスnです。エントリーはmonthの最初の日の後のn番目の曜日daynameに表示されます。ここでdayname=0は日曜日、1は月曜日、…です。nが負の場合、monthの最後から後方に数えます。monthの値に指定できるのは、月のリスト、単一の月、t
の場合はすべての月を意味します。オプションのパラメーターdayを使用して、monthのday日目の後または前の、n番目の曜日daynameを指定することもできます。dayのデフォルト値は、nが正のときは1で、nが負のときはと気はの最後の日です。たとえば、
%%(diary-float t 1 -1) Pay rent
これによりfancy diaryは
Pay rent
を毎月最後の月曜日に表示します。
sexpダイアリーエントリーの一般性により、アルゴリズム的に記述したダイアリーエントリーを指定できます。sexpダイアリーエントリーには、任意の与えられた日付にたいして、エントリーを適用するかどうかを計算する式が含まれます。値が非nil
の場合はその日付にエントリーが適用され、そうでない場合は適用されません。式では判定する日付を変数date
で使用することができます。この変数の値は、グレゴリオ暦を参照するリスト(month
day year)です。
sexpダイアリーエントリーは、式の値が非nil
のときはその日付に適用されますが、いくつかの値は特別な意味をもちます。値が文字列の場合、その文字列はその日に発生するイベントを説明する文字列です。値は(mark
.
string)
という形式をもつこともできます。markは、カレンダーでその日をどのようにマークするかを指定し、stringはそのイベントの説明です。markが1文字の文字列の場合、その文字はカレンダーの日付の隣に表示されます。markがフェイス名の場合、その日はそのフェイスで表示されます。markがnil
の場合、その日を特にハイライト表示しません。
21日がウィークデイのときは21日、21日が週末のときは前の日の金曜日に給料が支払われるとしましょう。以下はそのような日付にマッチするsexpダイアリーエントリーです:
&%%(let ((dayname (calendar-day-of-week date)) (day (cadr date))) (or (and (= day 21) (memq dayname '(1 2 3 4 5))) (and (memq day '(19 20)) (= dayname 5))) ) Pay check deposited
以下のsexpダイアリーエントリーは、(fancy diary表示において)日付により異なるテキストをもつダイアリーエントリーを作成することができます:
%%(diary-sunrise-sunset)
地方時で、今日の日の出と日の入りの時刻のダイアリーエントリーを作成します。
%%(diary-lunar-phases)
月の位相にたいするダイアリーエントリーを作成します。
%%(diary-day-of-year)
その年での通算日数と、その年の残り日数でダイアリーエントリーを作成します。
%%(diary-iso-date)
今日と等価な、ISO商用日付のダイアリーエントリーを作成します。
%%(diary-julian-date)
今日と等価な、ユリウス暦日のダイアリーエントリーを作成します。
%%(diary-astro-day-number)
今日と等価な、天文日(ユリウス日)のダイアリーエントリーを作成します。
%%(diary-bahai-date)
今日と等価な、Bahá’í暦日のダイアリーエントリーを作成します。
%%(diary-chinese-date)
今日と等価な、旧暦日のダイアリーエントリーを作成します。
%%(diary-coptic-date)
今日と等価な、Copticカレンダー日のダイアリーエントリーを作成します。
%%(diary-ethiopic-date)
今日と等価な、エチオピア暦日のダイアリーエントリーを作成します。
%%(diary-french-date)
今日と等価な、フランス革命暦の日付のダイアリーエントリーを作成します。
%%(diary-hebrew-date)
今日と等価な、ヘブライ暦の日付のダイアリーエントリーを作成します。
%%(diary-islamic-date)
今日と等価な、イスラム暦の非助のダイアリーエントリーを作成します。
%%(diary-mayan-date)
今日と等価な、マヤ暦の日付のダイアリーエントリーを作成します。
%%(diary-persian-date)
今日と等価な、Persian calendarの日付のダイアリーエントリーを作成します。
例えば、以下のようなダイアリーエントリーを含めると
&%%(diary-hebrew-date)
fancy diary表示を使用している場合は、毎日のダイアリー表示に、その日に対応するヘブライ暦の日付が含まれるようになります(simple diary表示を使用している場合は、任意の日付のダイアリーにリテラル行‘&%%(diary-hebrew-date)’が表示されます)。
以下の関数は、特定の標準的なヘブライsexpダイアリーエントリーを構築するために使用されます:
%%(diary-hebrew-rosh-hodesh)
新しいヘブライ月にたいして、礼拝の発生と告知を告げるダイアリーエントリーを作成します。
%%(diary-hebrew-parasha)
毎週のシナゴーグ経典(synagogue scripture)の読書会を告げる、土曜日のダイアリーエントリーを作成します。
%%(diary-hebrew-sabbath-candles)
安息日のキャンドルライトを告げる、地方時のダイアリーエントリーを作成します。
%%(diary-hebrew-omer)
適切な場合は、omerを数えるダイアリーエントリーを作成します。
%%(diary-hebrew-yahrzeit month day year) name
命日をマークするダイアリーエントリーを作成します。命日の日付はグレゴリオ暦の日付です。ダイアリーエントリーは適切なヘブライ暦の命日、およびその前日に表示されます(カレンダーの日付様式に対応してパラメーターの順序は変化します。たとえばヨーロッパ標識ではday、month、yearの順です)。
%%(diary-hebrew-birthday month day year)
ヘブライ暦での誕生日のダイアリーエントリーを作成します。
上記でドキュメントされたすべての関数は、オプションの引数markを受け取ります。これはカレンダー表示で、その日をどのようにマークするかを指定します。上記の関数の1つが特定の日付に適用されると決定された場合、上述したようにmarkを含んだ値を戻します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsから電子メールのメッセージを送信するには、C-x mとタイプします。これはメッセージのテキストとヘッダーを編集できる、*unsent mail*という名前のバッファーに切り替えます。編集が終了したらC-c C-sまたはC-c C-cとタイプして、それを送信します。
メールの作成を開始します(compose-mail
)。
同様ですが、他のウィンドウで行ないます(compose-mail-other-window
)。
同様ですが、新しいフレームで行ないます(compose-mail-other-frame
)。
メールバッファーでは、メッセージを送信します(message-send
)。
メールバッファーでは、メッセージを送信して、そのバッファーを隠し(bury)ます(message-send-and-exit
)。
メールバッファーは通常のEmacsバッファーなので、メールの作成中に他のバッファーに切り替えることができます。現在のメールを終了する前に他のメールを送信したい場合は、再度C-x mとタイプして新しいメールバッファーを開きます、このバッファーは異なる数字が後ろについた名前をもちます(その他のバッファー操作を参照)。(これはメール作成にデフォルトのMessageモードを使用する場合のみ機能する。メールコマンドを参照のこと。) 編集中の未送信メッセージの作成を継続したいと判っている場合には、C-u C-x mのようにコマンドにプレフィクス引数を与えれば、Emacsは使用していた最後のメールバッファーに切り替えて、終了する前にメッセージの編集ができるように計らいます。
コマンドC-x 4 m (compose-mail-other-window
)は、C-x
mと同じことを行ないますが、これはメールバッファーを別のウィンドウに表示します。コマンドC-x 5 m
(compose-mail-other-frame
)は、新しいフレームでこれを行ないます。
C-c C-cまたはC-c C-sとタイプしてメールを送信するとき、Emacsはどのようにしてメールを送信するべきか — SMTPを通じて直接送信するか、またはほかの方法を使うか — を尋ねます。詳細は、メールの送信を参照してください。
32.1 メールバッファーのフォーマット | メールメッセージのフォーマット。 | |
32.2 メールヘッダーフィールド | いくつかの標準的なメールヘッダーフィールドの詳細。 | |
32.3 メールエイリアス | メールアドレスの短縮とグループ化。 | |
32.4 メールコマンド | 作成するメールを編集するための特別なコマンド。 | |
32.5 メール署名 | 各メッセージに署名を追加する。 | |
32.6 アミューズメント | NSAを混乱させるキーワードや、fortuneのメッセージを累加する。 | |
32.7 メール作成方法 | 他のメール作成方法を使用する。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下はメールバッファーの内容の例です(訳注: 出典はコナン・ザ・グレートらしいです):
To: subotai@example.org CC: mongol.soldier@example.net, rms@gnu.org Subject: Re: What is best in life? From: conan@example.org --text follows this line-- To crush your enemies, see them driven before you, and to hear the lamentation of their women.
メールバッファーのトップは、一連のヘッダーフィールド(header fields)です。これは電子メールの受取人、subject(題目)などに関する情報を指定するのに使用されます。上記のバッファー例には‘To’、‘CC’、‘Subject’、‘From’のヘッダーフィールドが含まれています。いくつかのヘッダーフィールドは、それが適切なときは、事前に自動的に初期化されます。
‘--text follows this line--’という行は、ヘッダーフィールドとメッセージのbody(本文、またはtext)を分割します。この行の上にあるすべては、ヘッダーの一部として扱われます。下にあるすべては、bodyとして扱われます。区切り行自体は、実際に送信されるメッセージには含まれません。
通常の編集コマンドで、ヘッダーフィールドの挿入と編集ができます。ヘッダーフィールドを編集するための特定のコマンドについては、メールヘッダーの編集を参照してください。‘Date’や‘Message-Id’のような特定のヘッダーは、通常はメールバッファーでは省略され、メッセージを送信するとき自動的に作成されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
メールバッファーのヘッダーフィールドは、行の最初がフィールド名で始まります。フィールド名はコロンで終端されます。フィールド名で大文字小文字は区別されません。コロンとオプションの空白文字の後に、フィールドの内容を記述します。
好きな名前のヘッダーフィールドを使用できますが、多くの人は通常、一般に認められた意味をもつは、標準的なフィールド名だけを使用します。
ヘッダーフィールド‘From’は、電子メールを送信した人(あとえばあなた)を識別します。これは有効なメールアドレスである必要があります。なぜなら、通常はそのアドレスに返信されるからです。このヘッダーフィールドのデフォルトの内容は、変数user-full-name
(あなたのフルネームを指定します)とuser-mail-address
(あなたの電子メールアドレス)から計算されます。いくつかのオペレーティングシステムでは、Emacsはこの2つの変数を環境変数から初期化します(一般的な変数を参照してください)。この情報が利用不可能か間違っている場合、変数を自分でカスタマイズする必要があります(Easy Customizationインターフェースを参照してください)。
以下は‘From’以外の、一般的に使用されるフィールドの表です:
メッセージを送信するメールアドレスです。複数のアドレスを記述するには、それらを区切るのにカンマを使用します。
メッセージのsubjectです。
メッセージを送信する追加のメールアドレスです。これは‘To’と似ていますが、受取人はそのメッセージが自分宛だと思うべきではありません。
実際に送信するメッセージのヘッダーには現れない、追加のメッセージ送信先のメールアドレスです。‘BCC’はblind carbon copiesが由来です。
送信されたメッセージのコピーが追加されるべき、ファイルの名前です。ファイルがBabyl形式(Emacs23以前のRmailで使用されていました)の場合、EmacsはBabyl形式で書き込み、それ以外はmbox形式で書き込みます。Rmailバッファーがそのファイルをvisitしている場合、Emacsはそれに合わせて更新します。複数のファイルを指定するには、複数の‘FCC’フィールドを使用して、各フィールドに1つのファイル名を記述します。
‘From’のかわりとなる、返信が送信されるべきアドレスです。これは何らかの理由により、‘From’のアドレスが返信を受け取れないときに使用します。
このフィールドは‘Reply-To’より優先されます。メーリングリストの中には、‘Reply-To’を独自の目的(問題の多い、何らかの方法)のために使用しているものがあるため、これが使用されます。
follow-upメッセージのための、デフォルトの受取人のために使用する1つ以上のアドレスです。これは通常、登録しているメーリングリストからメッセージを受信するとき、余分なコピーを送らせないようにしたいときに使用します。
返信するメッセージのための識別子です。ほとんどのメールリーダーは、関連するメッセージをまとめてグループ化するためにこの情報を使用します。このヘッダーは通常、Emacsに組み込まれた任意のメールプログラムでメッセージに返信するとき、自動的に充填されます。
以前の関連するメッセージのための識別子です。‘In-reply-To’と同じように、これは通常、自動的に充填されます。
‘To’、‘CC’、‘BCC’のフィールドは何回記述してもよく、また各フィールドにはカンマで括って複数のアドレスを含めることができます。この方法により、メッセージを送信する複数の場所を指定できます。これらのフィールドには継続行も使用できます。フィールドの開始行に続く、空白文字で始まる1行以上の行は、そのフィールドの一部とみなされます。以下は継続行を使用した‘To’フィールドの例です:
To: foo@example.net, this@example.net, bob@example.com
変数mail-default-headers
に文字列をセットすることにより、特定のデフォルトヘッダーを挿入するよう、Emacsに指示できます。これによりC-x
mでメッセージヘッダーにその文字列が挿入されます。たとえば以下は、各メッセージにヘッダー‘Reply-To’と‘FCC’を追加する例です:
(setq mail-default-headers "Reply-To: foo@example.com\nFCC: ~/Mail/sent")
デフォルトのヘッダーフィールドが、特定のメッセージにたいして適切でない場合、メッセージを送信する前にそれらを編集する必要があります。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
メールエイリアス(mail
aliases)を定義することができます。これは1つ以上のメールアドレスを意味する短い呼び名です。デフォルトでは、メールエイリアスはファイル~/.mailrcで定義されます。変数mail-personal-alias-file
をセットすることにより、異なるファイル名を指定できます。
~/.mailrcでエイリアスを定義するには、以下のように記述します:
alias nick fulladdresses
これはnickがfulladdressesに展開されるという意味で、fulladdressesは単一のアドレス、またはスペースで区切られた複数のアドレスです。たとえばmaingnu
が、gnu@gnu.org
とあなた自身のローカルのアドレスを意味するよう定義するには、以下の行を記述します:
alias maingnu gnu@gnu.org local-gnu
アドレスにスペースが含まれる場合は、以下のようにダブルクォートでアドレス全体をクォートします:
alias jsmith "John Q. Smith <none@example.com>"
その人の名前の部分などのような、アドレスの特定の部分をダブルクォートで括る必要はないことに注意してください。Emacsは必要に応じてそれらを挿入します。たとえば上記のアドレスは‘"John Q. Smith" <none@example.com>’のように挿入されます。
Emacsは、~/.mailrcでのincludeコマンドも識別します。これらは以下のようなものです:
source filename
ファイル~/.mailrcは、Emacsだけのものではありません。他の多くのメールを閲覧するプログラムが、メールアドレスのためにこれを使用し、他にもさまざまなコマンドが含まれます。しかしEmacsは、エイリアスの定義とインクルードコマンド以外のすべてを無視します。
メールエイリアスはabbrevのように — つまり、エイリアスの後で単語区切り文字をタイプするとすぐに — 展開されます。この展開はヘッダーフィールド‘To’、‘From’、‘CC’、‘BCC’、‘Reply-To’(およびそれらの‘Resent-’の変種)だけで展開されます。‘Subject’のような、他のヘッダーフィールドでは展開されません。
コマンドM-x mail-abbrev-insert-aliasを使って、エイリアスされたアドレスを直接挿入することもできます。これは補完つきでエイリアス名を読み取り、ポイント位置にそれの定義を挿入します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
*mail*バッファーのデフォルトのメジャーモードは、Messageモードと呼ばれます。これはTextモードのように振る舞いますが、メッセージをより快適に編集するために、C-cプレフィクスを伴う、追加のコマンドをいくつか提供します。
このセクションでは、Messageモードで利用可能な、もっとも一般的に使用されるコマンドを説明します。 Messageモードにはそれ自身のマニュアルがあり、その機能についてより詳細に説明されています。Message in Messageを参照してください。
32.4.1 メールの送信 | メッセージを送信するコマンド。 | |
32.4.2 メールヘッダーの編集 | ヘッダーフィールドに移動して編集するコマンド。 | |
32.4.3 メールの引用 | 返信するメッセージのクォート。 | |
32.4.4 メール、その他 | ファイル添付、スペルチェックなど。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
そのメッセージを送信して、メールバッファーを隠し(bury)ます(message-send-and-exit
)。
そのメッセージを送信して、メールバッファーを選択されたまま残します(message-send
)。
メッセージを送信するために通常使用されるコマンドは、C-c C-c
(message-send-and-exit
)です。これはメッセージを送信して、メールバッファーを隠す(bury) —
つまりバッファーを再選択するときもっとも低い優先順位になるようにします。かわりにメールバッファーをkillしたい場合は、変数message-kill-buffer-on-exit
をt
に変更してください。
コマンドC-c C-s
(message-send
)はメッセージを送信して、そのバッファーを選択されたまま残します。(たとえば新しい送信先のために)メッセージを変更して、再度送信したい場合に、このコマンドを使用します。
メッセージの送信により、フックmessage-send-hook
が実行されます。メールバッファーがファイルをvisitしているバッファーの場合をのぞき、送信によりメールバッファーは変更なし(unmodified)とマークされます(ファイルをvisitしている場合は、そのファイルを保存したときだけ変更なしとマークされます。このため、同じメッセージを2回送信しても警告はされません)。
変数message-send-mail-function
はメッセージの配送方法を制御します(send-mail-function
はMailモードで使用される)。send-mail-function
の値は以下の関数のいずれかを指定します:
sendmail-query-once
配送方法(このリストの他の項目のうちの1つ)を尋ね、このメッセージにその方法を使用します。smtpmail-send-it
を通じてすでにメールの配送方法を変数にセットしていない場合(以下参照)、これがデフォルトです。
smtpmail-send-it
インターネットサービスプロバイダーの対外SMTPメールサーバーのような、外部のメールホストを通じてメールを送信します。そのSMTPサーバーに接続する方法をEmacsに指示していない場合、コマンドはこの情報の入力を求め、それは変数smtpmail-smtp-server
と、ファイル~/.authinfoに保存されます。Emacs
SMTP Library in Sending mail via SMTPを参照してください。
sendmail-send-it
システムのデフォルトのsendmail
プログラム、またはそれと等価なプログラムを使用してメールを送信します。これは、そのシステムがSMTPで直接メールを配送できるように、セットアップされている必要があります。
mailclient-send-it
メールバッファーを、システムで指定されたメールクライアントに渡します。詳細はファイルmailclient.elの、コメントセクションを参照してください。
feedmail-send-it
これはsendmail-send-it
と同様ですが、後で送信するためにメッセージをキューできます。詳細は、ファイルfeedmail.elの、コメントセクションを参照してください。
非ASCII文字を含むメッセージを送信する場合、それらはコーディングシステムでエンコードされる必要があります。コーディングシステムは通常、選択された言語環境(言語環境を参照してください)により、自動的に指定されます。変数sendmail-coding-system
をセットすることにより、対外に送信するメールのコーディングシステムを明示的に指定することができます(コーディングシステムの認識を参照してください)。そのようにして決定されたコーディングシステムで扱えない文字が、特定のメッセージに含まれる場合、Emacsは利用可能なコーディングシステムのリストを表示して、使用するコーディングシステムの選択を求めます。出力のためのコーディングシステムの選択を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Messageモードは、特定のヘッダーフィールドに移動したり、ヘッダーのアドレスを補完する、以下の特別なコマンドを提供します。
‘To’ヘッダーに移動します(message-goto-to
)。
‘Subject’ヘッダーに移動します(message-goto-subject
)。
‘CC’ヘッダーに移動します(message-goto-cc
)。
‘BCC’ヘッダーに移動します(message-goto-bcc
)。
‘Reply-To’ヘッダーに移動します(message-goto-reply-to
)。
‘Mail-Followup-To’ヘッダーフィールドに移動します(message-goto-followup-to
)。
ファイル名の補完つきで、新しい‘FCC’ヘッダーフィールドを追加します(message-goto-fcc
)。
メッセージ本文の先頭に移動します(message-goto-body
)。
メールアドレスを補完します(message-tab
)。
特定のヘッダーフィールドにポイントを移動するコマンドは、すべてC-c
C-fというプレフィクスを指定します(‘C-f’は“field”が由来です)。指定したフィールドが存在しない場合、コマンドは新たにそれを作成します(例外はmail-fcc
で、これは毎回新たなフィールドを作成します)。
コマンドC-c C-b (message-goto-body
)は、ポイントをヘッダー区切り行の下 —
つまり本文の先頭にポイントを移動します。
‘To:’、‘CC:’、‘BCC:’のようなアドレスを含むヘッダーフィールドを編集しているときは、TAB
(message-tab
)をタイプすることにより、アドレスを補完できます。これは2つの方法にもとづいて、そのアドレスにタイプするフルネームを挿入しようと試みます。まず複数のディレクトリーサーバープロトコルを認識するEUDCライブラリーを試み(EUDC in The Emacs Unified Directory
Clientを参照してください)、それに失敗したときはメールエイリアスによりアドレスの展開を試みます(メールエイリアスを参照してください)。メール本文のような、アドレスを要求しないヘッダーフィールドにポイントがあるとき、TABはタブ文字を挿入するだけです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
選択されたメッセージを、引用のためにメールリーダーからyankします(message-yank-original
)。
他のメッセージから引用された各パラグラフをフィルします(message-fill-yanked-message
)。
C-c C-y
(message-yank-original
)を使用して、返信するメッセージから“引用(cite)”することができます。これは、そのメッセージのテキストをメールバッファーに挿入します。このコマンドは、Rmailのように、Emacsから実行されるメールリーダーから呼び出されたときだけ機能します。
デフォルトでは、Emacsは引用されたテキストの各行の前に、文字列‘>’を挿入します。このプレフィクス文字列は、変数message-yank-prefix
で指定されます。プレフィクス引数を指定してmessage-yank-original
を呼び出した場合、引用のためのプレフィクスは挿入されません。
C-c C-yを使用した後で、C-c C-q
(message-fill-yanked-message
)とタイプして、引用されたメッセージのパラグラフをフィルできます。C-c
C-qの1つの使い方としては、そのようなパラグラフのすべてを個別にフィルすることです。クォートされたメッセージの1つのパラグラフをフィルするには、M-qを使います。フィルが、あなたが使用している引用プレフィクスを自動的に処理しない場合は、フィルプレフィクスを明示的にセットしてみてください。テキストのフィルを参照してください。
フックmail-citation-hook
を通じて、メールの引用をカスタマイズできます。たとえば、より柔軟な引用を提供するSuperciteパッケージを使うことができます(Introduction in Superciteを参照してください)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
メールバッファーでC-c C-a
(mml-attach-file
)とタイプすることにより、送信するメッセージに、ファイルを添付(attach)できます。添付は、MIME(Multipurpose
Internet Mail Extensions)標準を使って行なわれます。
mml-attach-file
コマンドはファイル名と、添付ファイルのcontent
type(内容のタイプ)、description(説明)、disposition(性質)の入力を求めます。通常content
typeは自動的に検知されます。単にRETとタイプすると、そのデフォルトが適用されます。descriptionは1行のテキストで、そのメールの受取人には添付ファイルの隣に表示されます。これは空にすることもできます。dispositionは‘inline’、または‘attachment’のどちらかです。‘inline’の場合、メッセージ本文に添付ファイルへのリンクが表示され、‘attachment’の場合は、本文とは別にリンクが表示されます。
mml-attach-file
コマンドは、Messageモードに特有なコマンドです。Mailモードではかわりに、mail-add-attachmentを使用します。これはファイル名の入力だけを求め、content
typeとdispositionは自動的に決定されます。添付ファイルの説明を含めたい場合は、それをメッセージの本文にタイプしてください。
添付ファイルの実際の内容は、メールバッファーには挿入されません。かわりに、以下のような代替テキストがメールバッファーに挿入されます:
<#part type="text/plain" filename="~/foo.txt" disposition=inline> <#/part>
C-c C-cまたはC-c C-sでメッセージを送信するとき、それと一緒に添付ファイルも送信されます。
メッセージを作成しているとき、M-x
ispell-messageとタイプして、メッセージテキストのスペル訂正を行なうことができます。受信メッセージから送信用の下書きにyankした場合、このコマンドはyankされたテキストをスキップして、あなた自身が挿入したテキストだけをチェックします(このコマンドはインデント、またはあなたの入力と引用された行を区別するmail-yank-prefix
を調べます)。スペルのチェックと訂正を参照してください。
Messageモードをオンに切り替えると(C-x
mは自動的にこれを行ないます)、ノーマルフックのtext-mode-hook
とmessage-mode-hook
が自動的に実行されます。新しい送信メッセージの初期化では、ノーマルフックmessage-setup-hook
が実行されます。メールバッファーの外観を変更したい場合は、このフックを使うことができます。フックを参照してください。
これらのフックの主な違いは、それらが呼び出されるタイミングだけです。C-x m,
message-mode-hook
とタイプしたときは、メールバッファーが作成された直後にmessage-mode-hook
が実行されます。その後message-setup
関数がそのバッファーのデフォルトの内容を挿入します。これらのデフォルトの内容が挿入された後に、message-setup-hook
が実行されます。
既存のメッセージにたいして、C-x
mで作成を継続する場合、そのメールバッファーに切り替えた直後に、message-mode-hook
が実行されます。バッファーが変更されていない場合、またはそれを削除して新たに作成を開始する場合には、デフォルトの内容が挿入された後に、message-setup-hook
が実行されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
各メッセージの最後に標準的なテキストの断片 — メール署名(mail signature) —
を追加できます。この署名には、あなたの電話番号や住所などの情報を含めることができます。変数message-signature
は、Emacsがメール署名を扱う方法を決定します。
message-signature
のデフォルト値はt
です。これはメール署名をファイル~/.signatureから探すことを意味します。ファイルが存在する場合、そのファイルの内容がメールバッファーの最後に自動的に挿入されます。変数message-signature-file
を通じて署名ファイルを変更できます。
message-signature
を文字列に変更すると、それは署名のテキストを直接指定することになります。
message-signature
をnil
に変更した場合、Emacsはメール署名を自動的に挿入しません。メールバッファーでC-c
C-w
(message-insert-signature
)とタイプすることにより、メール署名を挿入できます。この場合も、Emacsは署名ファイルから署名を探します。
メールを作成するのにMessageモードではなくMailモードを使用する場合、どのようにして署名を送るか決定する変数は、mail-signature
とmail-signature-file
になります。
慣例により、メール署名は行の内容が‘-- ’であることによりマークされるべきです。署名にこのプレフィクスがない場合、このプレフィクスが追加されます。署名は4行を超えないようにするべきです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
M-x spookは、送信するメールメッセージに、ランダムに選択されたキーワードの行を追加します。これらのキーワードは、あなたが何らかの破壊活動を企てていると思わせるような単語のリストから選択されます。
この機能の背後にあるアイデアは、NSA16や他の情報機関が、かれらが関心をもつキーワードを含むすべてのインターネットメールのメッセージを監視しているという疑惑です(そのような政府機関は、“やっていない”と言いますが、もちろんかれらはそう言うでしょう)。このアイデアは、もし多くの人々がメッセージに不審な単語を含めれば、政府機関は不審な入力で手一杯になり、やがて最後はそれらを読むのを止めるだろうというものです。これが本当かどうかはわかりませんが、少なくとも人々を楽しませることができます。
fortune
プログラムを使用して、送信メールにフォーチューンクッキー(fortune
cookie)メッセージを追加できます。これを行なうにはmail-setup-hook
にfortune-to-signature
を追加してください。
(add-hook 'mail-setup-hook 'fortune-to-signature)
多分、これを使う前に変数fortune-file
をセットする必要があるでしょう。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このチャプターでは、メールを編集したり送信する通常のEmacsモードである、Messageモードを説明してきました。これは、いくつかの利用可能なモードのうちの1つに過ぎません。Emacs23.2以前では、デフォルトのモードはMailモードで、これは多くの点でMessageモードに似ていますが、MIMEサポートのような機能がありません。その他の利用可能なモードはMH-Eです(MH-E in The Emacs Interface to MHを参照してください)。
これらのメールユーザーエージェント(mail user
agents)から、メールを編集したり送信するための、好みの方法を選択できます。コマンドC-x m、C-x 4
m、C-x 5
mは指定されたエージェントを使用するので、Emacsでメールを送信する他の様々な部分(たとえばバグリポーターなど、バグの報告を参照してください)もこれを行ないます。メールユーザーエージェントを指定するには、変数mail-user-agent
をカスタマイズします。現在のところ、正式な値にはmessage-user-agent
(Messageモード)、sendmail-user-agent
(Mailモード)、gnus-user-agent
、mh-e-user-agent
が含まれます。
他のメール作成方法を選択した場合、メールバッファーとMessageモードに関するこのチャプターの情報は適用できません。他の方法は違うバッファーで異なるフォーマットのテキストを使用し、コマンドも異なります。
同様に、メールを読むための好みの方法を指定するには、変数read-mail-command
をカスタマイズします。デフォルトはrmail
です(Rmailでメールを読むを参照してください)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Rmailは、メールを閲覧したり処理するための、Emacsのサブシステムです。Rmailは、Rmailファイルを呼ばれるファイルに、メールメッセージを保存します。Rmailファイルの中のメッセージの閲覧は、Rmailモードという特別なメジャーモードで行なわれます。このモードはメールを管理するために実行するコマンドのために、多くの文字を再定義します。
Emacsには、より複雑かつ柔軟なGnusと呼ばれるメールを読むためのサブシステムが同梱されています。Gnusは巨大なパッケージなので、独自のマニュアルTop in The Gnus Newsreaderで説明されているので、それを参照してください。
33.1 Rmailの基本的な概念 | Rmailの基本的な概念と簡単な使い方。 | |
33.2 メッセージのスクロール | メッセージをスクロールする。 | |
33.3 メッセージ間の移動 | 他のメッセージへの移動。 | |
33.4 メッセージの削除 | メッセージの削除と完全な削除。 | |
33.5 Rmailファイルとinbox | メールがRmailファイルに取り込まれる方法。 | |
33.6 複数のRmailファイル | 複数のRmailファイルの使用。 | |
33.7 外部ファイルへのメッセージのコピー | ファイルの外へメッセージをコピーする。 | |
33.8 ラベル | メッセージにラベルをつけて分類する。 | |
33.9 Rmailの属性 | 属性と呼ばれる標準的なラベル。 | |
33.10 返信の送信 | 閲覧しているメッセージにたいして返信する。 | |
33.11 サマリー | 多くのメッセージの簡単な情報の要約。 | |
33.12 Rmailファイルのソート | Rmailでのメッセージのソート。 | |
33.13 メッセージの表示 | Rmailがメッセージを表示する方法とカスタマイズ。 | |
33.14 Rmailとコーディングシステム | Rmailがデコードされた文字セットを扱う方法。 | |
33.15 メッセージの編集 | Rmailでのメッセージのテキストとヘッダーの編集。 | |
33.16 ダイジェストメッセージ | メッセージのダイジェストからメッセージを抽出する。 | |
33.17 Rot13メッセージを読む | rot13コードでエンコードされたメッセージの閲覧。 | |
33.18 movemail program | 新たなメールのフェッチに関する詳細。 | |
33.19 リモートmailboxからのメールの取得 | リモートmailboxからのメールの取得について。 | |
33.20 さまざまな形式のローカルmailboxからのメールの取得 | さまざまなフォーマットのローカルmailboxからのメールの取得。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
もっとも簡単な方法でRmailを使用するには、メールが保存される~/RMAILというRmailファイルを使用します。これはプライマリーRmailファイル(primary
Rmail file)と呼ばれます。コマンドM-x
rmailはプライマリーRmailファイルを読み込み、inbox(受信箱)から新しいメールをマージして、未読の最初のメッセージを表示して、それを閲覧出きるようにします。変数rmail-file-name
はプライマリーRmailファイルの名前を指定します。
Rmailは、Rmailファイルのメッセージを、1度に1つだけ表示します。表示されているメッセージは、カレントメッセージ(current message: 現在のメッセージ)と呼ばれます。Rmailモードの特別なコマンドは、カレントメッセージの削除、他のファイルへのコピー、返信、他のメッセージへの移動を行なうことができます。複数のRmailファイル(ファイルの処理を参照)を作成して、それらの間でメッセージの移動をするのに、Rmailを使用することができます(外部ファイルへのメッセージのコピーを参照)。
Rmailファイルでは通常、メッセージは受信した順になっています。それらをソートする他の方法を指定できます(Rmailファイルのソートを参照してください)。メッセージは連続する整数で識別され、それはメッセージナンバー(message numbers)と呼ばれます。カレントメッセージのナンバーはRmailのモードラインに表示され、その後にはファイル内のメッセージの総数が続きます。jでメッセージナンバーを指定して、そのメッセージに移動できます(メッセージ間の移動を参照してください)。
通常のEmacsの慣例にしたがい、Rmailでの変更は、そのファイルを保存したときだけ永続化されます。s
(rmail-expunge-and-save
)で、ファイルを保存することができます、これは最初に削除されたメッセージをファイルから完全に削除します(メッセージの削除を参照してください)。完全な削除を行なわずにファイルを保存するには、C-x
C-sを使用します。Rmailは、inboxファイルから新しいメールをマージした後に、自動的にRmailファイルを保存します。
Rmailをexitするには、q
(rmail-quit
)を使用します。これはRmailにたいして完全な削除と保存を行い、Rmailバッファーと、(表示されていれば)サマリーバッファーを隠します(サマリーを参照してください)。しかし正式にexitする必要はありません。Rmailから他のバッファーを編集するために切り替えて、2度とRmailに戻らなければ、それはexitしたことになります。(他の変更したファイルと同様に)最終的にRmailファイルを確実に保存することだけが重要です。これを行なうにはC-x
sが適しています(ファイルを保存するコマンドを参照してください)。Rmailコマンドのb
rmail-bury
は、Rmailファイルにたいする完全な削除と保存を行なわずに、Rmailバッファーとサマリーを隠します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Rmailが画面に収まらないメッセージを表示しているときは、残りを読むためにスクロールしなければなりません。通常のスクロールコマンドC-v、M-v、M-< (スクロールを参照)などでこれを行なうことができますが、Rmailでのスクロールは頻繁に行なわれるので、簡単に行なえるようにする価値があります。
前方にスクロールします(scroll-up-command
)。
後方にスクロールします(scroll-down-command
)。
メッセージの最初にスクロールします(rmail-beginning-of-message
)。
メッセージの最後にスクロールします(rmail-end-of-message
)。
メッセージを読むときにもっとも一般的に行なうのは、画面単位でメッセージをスクロールすることなので、RmailはSPCとDEL(またはS-SPC)で、C-v
(scroll-up-command
)とM-v
(scroll-down-command
)と同じことを行なうようにしています。
コマンド.
(rmail-beginning-of-message
)は、選択されたメッセージの最初に、後方へスクロールします。これはM-<とまったく同じではありません。このコマンドはマークをセットしません。他にも、カレントメッセージのバッファー境界を変更していた場合(たとえば編集により。メッセージの編集を参照されたい)は、それをリセットします。同様に、コマンド/
(rmail-end-of-message
)は、選択されたメッセージの最後に、前方へスクロールします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
メッセージにたいして行なうもっとも基本的なことは、それを読むことです。Rmailでこれを行なうために、そのメッセージをカレントにします。通常の方法はファイルを、受信したメッセージ順に移動していく方法です(その最初のメッセージは‘unseen’(未読)の属性をもちます。Rmailの属性を参照してください)。他の新しいメッセージを読むには、前方に移動します。古いメッセージを再読するには後方に移動します。
間にある削除されたメッセージをスキップして、次の削除されていないメッセージに移動します(rmail-next-undeleted-message
)。
前の削除されていないメッセージに移動します(rmail-previous-undeleted-message
)。
削除されたメッセージも含めて、次のメッセージに移動します(rmail-next-message
)。
削除されたメッセージも含めて、前のメッセージに移動します(rmail-previous-message
)。
カレントメッセージと同じsubjectの、次のメッセージに移動します(rmail-next-same-subject
)。
カレントメッセージと同じsubjectの、前のメッセージに移動します(rmail-previous-same-subject
)。
最初のメッセージに移動します。引数nを指定すると、n番目のメッセージに移動します(rmail-show-message
)。
最後のメッセージに移動します(rmail-last-message
)。
最初のメッセージに移動します(rmail-first-message
)。
regexpへのマッチを含む、次のメッセージに移動します(rmail-search
)。
regexpへのマッチを含む、前のメッセージに移動します(これは負の引数によるM-sである)。
nとpは、Rmailでメッセージを移動する通常の方法です。これらは、(通常そうしたいように)削除されたメッセージをスキップして、メッセージを順番に移動していきます。これらのコマンドの定義には、rmail-next-undeleted-message
およびrmail-previous-undeleted-message
という名前がつけられています。削除されたメッセージをスキップしたくない場合
— たとえばメッセージの削除を取り消すために —
は、変種のM-nとM-p(rmail-next-message
とrmail-previous-message
)を使います。これらのコマンドへの数引数は、繰り返し回数を指定します。
Rmailでは数引数の指定は、単に数字をタイプして行なうことができます。最初にC-uをタイプする必要はありません。単に-とタイプして、負の引数を指定することもできます。
M-s
(rmail-search
)は、Rmail版の検索コマンドです。通常のインクリメンタル検索C-sは機能しますが、これはカレントメッセージだけを検索します。M-sの目的は、他のメッセージにたいする検索です。これは非インクリメンタルに正規表現(正規表現の構文を参照してください)を読み取り、後続のメッセージの先頭から検索を開始して、見つかったらそのメッセージを選択します。regexpが空の場合、M-sは前回使用したregexpを再使用します。
ファイルの中の他のメッセージにたいして後方に検索するには、M-sに負の引数を与えます。Rmailでは- M-sでこれを行なうことができます。これは前のメッセージの最後から検索を開始します。
ラベルにもとづく検索も可能です。ラベルを参照してください。
C-c C-n
(rmail-next-same-subject
)コマンドは、カレントメッセージと同じsubjectをもつ、次のメッセージに移動します。プレフィクス引数は繰り返し回数として使用されます。負の引数を指定すると、C-c
C-p
(rmail-previous-same-subject
)のように、後方に移動します。subjectを比較するとき、subjectへの返信に通常付加されるようなプレフィクスは無視します。これらのコマンドは、同じsubjectに関するすべてのメッセージ、いわゆるthreadを読むときに有用です。
メッセージの絶対番号を指定してメッセージに移動するには、メッセージ番号を引数として、j
(rmail-show-message
)を使用します。引数を与えない場合、jは最初のメッセージに移動します。<
(rmail-first-message
)も最初のメッセージを選択します。>
(rmail-last-message
)は最後のメッセージを選択します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
メッセージを残す必要がなくなったとき、それを削除(delete)できます。これはそのメッセージを無視するフラグをつけ、いくつかのRmailコマンドは、そのメッセージが存在しないかのように振る舞います。しかし、そのメッセージはまだRmailファイルの中にあり、メッセージ番号ももっています。
Rmailファイルにたいして完全な削除(expunging)を行なうことにより、削除されたメッセージを実際に消去します。残ったメッセージには新たに連番が振られます。
カレントメッセージを削除して、次の削除されていないメッセージに移動します(rmail-delete-forward
)。
カレントメッセージを削除して、前の削除されていないメッセージに移動します(rmail-delete-backward
)。
カレントメッセージの削除を取り消すか、前の削除されたメッセージに後方へ移動して、そのメッセージの削除を取り消します(rmail-undelete-previous-message
)。
Rmailファイルにたいして完全な削除を行ないます(rmail-expunge
)。
Rmailには、メッセージを削除するためのコマンドが2つあります。両方ともカレントメッセージを削除して、他のメッセージを選択します。d
(rmail-delete-forward
)は、すでに削除されたメッセージをスキップして次のメッセージに移動し、C-d
(rmail-delete-backward
)は、前の削除されていないメッセージに移動します。指定方向に、移動先となる削除されていないメッセージが存在しない場合は、単にそのメッセージを削除するだけで、カレントメッセージはそのメッセージのままです。数引数は繰り返し回数を指定します。これにより1つのコマンドで複数のメッセージを削除できます。負の引数はdとC-dの意味を逆転します。
Rmailがメッセージを削除するときは、フックrmail-delete-message-hook
が実行されます。フック関数が呼び出されるとき、そのメッセージは削除とマークされますが、そのメッセージがRmailバッファーのカレントメッセージのままです。
すべての削除されたメッセージを最終的にRmailファイルから消すには、x
(rmail-expunge
)とタイプします。これを行なうまでは、削除されたメッセージの削除を取り消す(undelete)ことができます。削除の取り消しコマンドu
(rmail-undelete-previous-message
)は、ほとんどのケースにおいてdコマンドの効果を取り消すようにデザインされています。カレントメッセージが削除されている場合は、カレントメッセージの削除を取り消します。そうでない場合は、削除されたメッセージが見つかるまで後方に移動して、そのメッセージの削除を取り消します。数引数は繰り返し回数を指定します。これにより1つのコマンドで複数のメッセージ削除を取り消すことができます。。
通常、dをuで取り消すことができます。なぜならuは後方に移動して、dで削除されたメッセージの削除を取り消すからです。しかしこれは、削除するメッセージの前にすでに削除されたメッセージがある場合、dはこれらのメッセージをスキップするのでうまく機能しません。その後でuコマンドを実行すると、スキップされた最後のメッセージの削除を取り消すからです。この問題を避ける明解な方法はありません。しかしuコマンドを繰り返すことにより、削除を取り消したいメッセージに戻ることができます。M-pコマンドで特定の削除されたメッセージを選択してから、uをタイプして削除を取り消すこともできます。
削除されたメッセージは‘deleted’の属性をもち、結果として、カレントメッセージが削除されている場合はモードラインに‘deleted’が表示されます。実際のところ、メッセージの削除と削除の取り消しは、この属性の追加または削除に過ぎません。Rmailの属性を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ローカルでメールを受信したとき、オペレーティングシステムは受信メールを、私たちがinboxと呼ぶファイルに配します。Rmailを開始したとき、movemail
と呼ばれるCプログラムを実行して、inboxから新しいメッセージを、RmailセッションのRmailファイルにコピーします。このRmailファイルには、以前のRmailセッションの他のメッセージも含まれています。Rmailで実際に読むメールは、このファイルの中にあります。この操作は新しいメールの取得(getting
new mail)と呼ばれます。gとタイプすることにより、いつでも新しいメールを取得できます。
変数rmail-primary-inbox-list
は、プライマリーRmailファイルにたいするinboxファイルのリストを含みます。この変数を明示的にセットしない場合、Rmailは環境変数MAIL
を使用するか、最後の手段としてrmail-spool-directory
にもとづく、デフォルトのinboxを使用します。デフォルトのinboxはオペレーティングシステムに依存し、それは/var/mail/username、/var/spool/mail/username、/usr/spool/mail/usernameなどです。
コマンドset-rmail-inbox-list
で、カレントセッションでの任意のRmailファイルにたいするinboxファイルを指定できます。複数のRmailファイルを参照してください。
inboxとは別にRmailファイルをもつべき理由が2つあります。
Rmailは、Rmailファイルの内部フォーマットとして、UnixおよびGNUシステムに取り入れられた、標準的な‘mbox’フォーマットを使用します(実際のところ、mboxフォーマットとは若干の違いがあります。その違いは重要ではありませんが、変数rmail-mbox-format
をセットすることにより、あなたのシステムが使用するフォーマットをRmailに指定できます。詳細は、変数のドキュメントを参照してください)。
新しいメールを受信したとき、Rmailは最初にその新しいメールをinboxファイルからRmailファイルにコピーします。それからRmailファイルを保存して、その後でinboxファイルからそれをクリアーします。この方法では、システムのクラッシュにより、inboxとRmailファイルの間でメールの重複は発生するかもしれませんが、メールを失うことはあり得ません。rmail-preserve-inbox
が非nil
の場合、Rmailは新しいメールを受信したときにinboxファイルをクリアーしません。旅行の際など、携帯用のコンピューターでPOPを通じてメールをチェックするときは、この変数をセットすれば、メールはサーバーに残るので、後であなたがメインに使用するワークステーションのデスクトップに保存することができます。
Rmailがinboxファイルから間接的に新しいメールをコピーするケースがあります。最初にmovemail
プログラムを実行してinboxから、Rmailファイルと同じディレクトリーにある、.newmail-inboxnameと呼ばれる中間ファイルにメールを移動します。その後、Rmailは、そのファイルから新しいメールをマージして、Rmailファイルを保存し、中間ファイルの削除はその後にだけ行なわれます。悪いタイミングでクラッシュが発生した場合、中間ファイルは残っているので、Rmailは次にinboxファイルから新しいメールを取得するとき、それを再使用します。
Rmailが.newmail-inboxnameの中のデータをmbox形式に変換できない場合、ファイルをRMAILOSE.n(nはファイル名を一意にするために選ばれます)にリネームするので、Rmailはそのデータで再度問題を起こすことはなくなります。メッセージの何がRmailを混乱させたか調べて、それを削除すべきです(大抵は8進コード037のcontrol-underscoreがメッセージに含まれている場合です)。その後、修正されたファイルから1 gを使って新しいメールを取得できます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Rmailはデフォルトで、あなたのプライマリーRmailファイル(primary Rmail file)を操作します。これは~/RMAILというファイルで、inboxファイルからメールを受け取ります。しかし他のRmailファイルを所有して。Rmailでそれを編集することができます。これらのファイルは、それら自身のinboxからメールを受け取ったり、明示的なRmailコマンドでメッセージを移動することができます(外部ファイルへのメッセージのコピーを参照してください)。
fileをEmacsに読み込んで、それにたいしてRmailを実行します(rmail-input
)。
カレントRmailファイルのinboxから、新しいメールをマージします(rmail-get-new-mail
)。
inboxファイルfileから新しいメールをマージします。
プライマリーRmailファイル以外のファイルでRmailを実行するために、Rmailでi
(rmail-input
)コマンドを使用できます。これは、そのファイルをRmailモードでvisitします。Rmailの外からでもM-x
rmail-inputを使用することができますが、同じことを行なうC-u M-x rmailの方が簡単にタイプできます。
通常iで読み込むファイルは、有効なmboxファイルであるべきです。そうでない場合、Rmailはそのファイルのテキストをmbox形式に変換しようと試み、そのバッファーで変換されたテキストをvisitします。バッファーを保存すると、そのファイルが変換されます。
存在しないファイル名を指定した場合、iは新しいRmailファイルを作成するために、新しいバッファーを初期化します。
メニューからRmailファイルを選択することもできます。メニューClassifyの、アイテムInput Rmail
Fileを選択して、Rmailファイルを選択します。変数rmail-secondary-file-directory
およびrmail-secondary-file-regexp
は、メニューがどのファイルを表示するかを指定します。最初の変数はファイルを探すディレクトリーを指定し、2番目の変数はそのディレクトリーのどのファイル(正規表現にマッチするファイルすべて)を表示するかを指定します。マッチするファイルがない場合、このメニューアイテムは選択できません。これらの変数は、出力するファイルの選択にも適用されます(外部ファイルへのメッセージのコピーを参照してください)。
使用するinboxファイルは変数rmail-inbox-list
により指定され、これはRmailモードではバッファーローカルな変数です。特別な例外として、プライマリーRmailファイルにinboxを指定していない場合、これは環境変数MAIL
、またはシステム標準のinboxを使用します。
g
(rmail-get-new-mail
)コマンドは、inboxのメールを、カレントRmailファイルにマージします。Rmailファイルにinboxがない場合、gは何もしません。コマンドM-x
rmailも、新しいメールをプライマリーRmailファイルにマージします。
通常のinboxではないファイルからメールをマージするには、C-u gのようにgキーに数引数を与えます。するとファイル名を読み取り、そのファイルからメールをマージします。引数を使用してgを使用しても、inboxファイルの削除・変更はされません。したがって、これはあるファイルのメッセージを、他のファイルにマージする一般的な方法です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下はRmailファイルから他のファイルにメッセージをコピーするコマンドです。
カレントメッセージの完全なコピーを、ファイルfileに追加します(rmail-output
)。
カレントメッセージの表示にしたがい、ファイルfileに追加します(rmail-output-as-seen
)。
メッセージの本文だけをファイルfileに出力します。デフォルトのファイル名は、そのメッセージの‘Subject’ヘッダーからとられます。
コマンドoとC-oはカレントメッセージを指定したファイルの後尾に追加することによりコピーします。正のプレフィクス引数は繰り返し回数として振る舞います。カレントメッセージから開始して削除済みメッセージを無視しつつ後続のメッセージをその個数分コピーします。
2つのコマンドの主な違いは、どれだけコピーするかです。C-oが現在表示されているヘッダーだけをコピーするのにたいし、oはヘッダーがすべて表示されていなくても、メッセージヘッダーを完全にコピーします。メッセージの表示を参照してください。加えて、ファイルがBabylフォーマットのとき、oはメッセージをBabylフォーマットに変換しますが、C-oはBabylファイルを出力できません。
Emacsバッファーで出力ファイルをvisitしていた場合、出力コマンドはメッセージをそのバッファーに追加します。最終的にそのバッファーをファイルに保存するかは、あなた次第です。
本文にファイル内容がそのまま記載されているようなメッセージを受信することがあるかもしれません。そのような場合、w
(rmail-output-body-to-file
)コマンドで、本文を(メッセージヘッダーを除いて)ファイルに保存できます。そのようなメッセージは‘Subject’フィールドにファイル名を意図した内容を含んでいる場合があるので、wコマンドは(ファイル名に可搬的に使用できないいくつかの文字を置換した後)デフォルトの出力ファイル名に‘Subject’フィールドを使用します。しかし、ファイル名はミニバッファーを使って読み取られるので、異なる名前を指定できます。
メニューからRmailファイルを選択して、メッセージを出力することもできます。メニューClassifyの、メニューアイテムOutput Rmail
Fileを選択して、出力したいRmailファイルを選択します。これはoコマンドのように、カレントメッセージをそのファイルに出力します。変数rmail-secondary-file-directory
およびrmail-secondary-file-regexp
は、メニューがどのファイルを表示するかを指定します。最初の変数はファイルを探すディレクトリーを指定し、2番目の変数はそのディレクトリーのどのファイル(正規表現にマッチするファイルすべて)を表示するかを指定します。マッチするファイルがない場合、このメニューアイテムは選択できません。
oまたはC-oでメッセージをコピーすることにより、メッセージのオリジナルコピーには属性‘filed’が与えられるので、そのメッセージがカレントのときは、モードラインに‘filed’が表示されます。
各メールメッセージにたいして1つのコピーを保持したい場合は、変数rmail-delete-after-output
にt
をセットします。その場合、コマンドo、C-oおよびwは、コピー後にオリジナルのメッセージを削除します(望むなら後で削除を取り消すことができる。メッセージの削除を参照されたい)。
デフォルトではoは出力したメッセージの削除ステータスを元メッセージのままに留めます。したがって出力される前に削除済みのメッセージは出力ファイル中に削除済みとして現われます。変数rmail-output-reset-deleted-flag
を非nil
値にセットすることによりこれを回避できます。メッセージのコピーは削除ステータスがリセットされるので出力ファイル中には未削除として現れます。さらにこの変数が非nil
でoに正の引数を指定すると、後続メッセージから出力メッセージを探す際に削除済みメッセージを無視しなくなります。
変数rmail-output-file-alist
は、カレントメッセージの内容にもとづいて、理にかなったデフォルトの出力ファイルを指定できます。値は以下の形式をもつ要素のリストです:
(regexp . name-exp)
カレントメッセージにregexpにたいするマッチが存在する場合、デフォルトの出力ファイルはname-expになります。複数の要素がそのメッセージにマッチする場合、最初にマッチした要素がデフォルトのファイル名を決定します。式name-expは使用するファイル名を与える文字列定数、またはより一般的に、ファイル名を文字列として取得する任意のLisp式を指定できます。rmail-output-file-alist
は、oとC-oの両方に適用されます。
Rmailは、(rmail-file-name
で指定される)プライマリーRmailファイルから、(変数rmail-automatic-folder-directives
の値にもとづいて)他のファイルにメッセージを自動的に保存できます。この変数は、どのメッセージをどこに保存するかを指定する要素(‘directives’)のリストです。各directiveは出力ファイルからなるリストで、ヘッダー名と正規表現の組が1つ以上後に続きます。メッセージのヘッダーが指定された正規表現にマッチする場合、そのメッセージは与えられたファイルに保存されます。directiveが複数のヘッダーエントリーをもつ場合、それらすべてがマッチしなければなりません。Rmailはファイルrmail-file-name
からメッセージを表示するときdirectiveをチェックして、(もしあれば)最初のマッチに適用します。出力ファイルがnil
の場合、そのメッセージは削除され、保存されません。たとえば特定のアドレスや、特定のsubjectのメッセージを保存するのに、この機能を使用することができます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
各メッセージは、分類(classification)のために割り当てられる、さまざまなラベル(labels)をもつことができます。各ラベルは名前をもち、名前が異なると違うラベルになります。任意のラベルは、特定のメッセージにたいして、付いているか付いていないかのどちらかです。標準的な意味をもつラベル名がいくつかあり、それが適切なときは、Rmailにより自動的にメッセージに付与されます。これらの特別なラベルは、属性(attribute)と呼ばれます (Rmailの属性を参照してください)。 それ以外のすべてのラベルは、ユーザーにより付与されます。
カレントメッセージに、ラベルlabelを割り当てます(rmail-add-label
)。
カレントメッセージから、ラベルlabelを外します(rmail-kill-label
)。
複数のラベルlabelsのどれか1つをもつ、次のメッセージに移動します(rmail-next-labeled-message
)。
複数のラベルlabelsのどれか1つをもつ、前のメッセージに移動します(rmail-previous-labeled-message
)。
複数のラベルlabelsのどれかを含む、すべてのメッセージのサマリーを作成します(rmail-summary-by-labels
)。
コマンドa (rmail-add-label
)およびk
(rmail-kill-label
)で、カレントメッセージにたいして任意のラベルを割り当てたり、外すことができます。引数labelが空の場合、もっとも最近割り当てられた(または外された)ラベルを割り当てる(または外す)ことを意味します。
メッセージを分類するためにラベルを割り当てた後、ラベルを使用する3つの方法 — 移動、サマリー、ソート — があります。
C-M-n labels RET
(rmail-next-labeled-message
)は、複数のラベルlabelsのうちどれか1つをもつ、次のメッセージに移動します。引数labelsには、カンマで区切られた1つ以上のラベル名を指定します。C-M-p
(rmail-previous-labeled-message
)も同様ですが、前のメッセージに後方へ移動します。どちらのコマンドも、数引数は繰り返し回数を指定します。
コマンドC-M-l labels RET
(rmail-summary-by-labels
)は、指定された複数のラベルのうち、少なくとも1つをもつメッセージだけを含むサマリーを表示します。引数labelsはカンマで区切られた1つ以上のラベル名です。サマリーについての詳細は、サマリーを参照してください。
C-M-n、C-M-p、C-M-lにたいして引数labelsが空の場合は、それらのコマンドにたいして、もっとも最近に指定されたlabelsを使うことを意味します。
ラベルでメッセージをソートする情報については、Rmailファイルのソートを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
‘deleted’や‘filed’のようないくつかのラベルはビルトインの意味をもち、Rmailは適切なときに、それらをメッセージに割り当てます。これらのラベルは属性(attributes)と呼ばれます。以下はRmailの属性のリストです:
そのメッセージが1度もカレントになっていないことを意味します。inboxからメッセージが到着したとき割り当てられ、そのメッセージがカレントになったときに外されます。Rmailを開始したとき、この属性をもつメッセージを最初に表示します。
メッセージが削除されたことを意味します。削除コマンドにより割り当てられ、削除を取り消すコマンドで外されます(メッセージの削除を参照してください)。
そのメッセージが他のファイルにコピーされたことを意味します。ファイル出力コマンドoおよびC-oにより割り当てられます(外部ファイルへのメッセージのコピーを参照してください)。
メッセージへの返信をメールしたことを意味します。r
(rmail-reply
)コマンドにより割り当てられます。返信の送信を参照してください。
メッセージを転送したことを意味します。f (rmail-forward
)コマンドにより割り当てられます。返信の送信を参照してください。
メッセージのテキストをRmailで編集したことを意味します。メッセージの編集を参照してください。
メッセージを再送したことを意味します。コマンドM-x rmail-resendにより割り当てられます。返信の送信を参照してください。
送信に失敗したメッセージを再試行したことを意味します。コマンドM-x rmail-retry-failureにより割り当てられます。返信の送信を参照してください。
これ以外のすべてのラベルは、ユーザーだけが割り当てたり外すことができ、それらのラベルは標準的な意味をもちません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Rmailには、送信メールを送るための複数のコマンドがあります。Messageモードの使い方(Rmailでも動作する特別な機能を含む)に関する情報は、メールの送信を参照してください。このセクションでは、送信メッセージ作成に使用する、mailバッファーに入るエンターするためのRmailの特別なコマンドを説明します。メールを送信するための通常のキー — C-x m、C-x 4 m、C-x 5 m — は、Rmailモードでも通常どおり機能することに注意してください。
メッセージを送信します(rmail-mail
)。
すでに編集を開始した送信メッセージの編集を続けます(rmail-continue
)。
カレントRmailメッセージにたいする返信を送信します(rmail-reply
)。
カレントメッセージを他のユーザーに転送します(rmail-forward
)。
カレントメッセージを他のユーザーに再送します(rmail-resend
)。
送信に失敗して戻ってきたメッセージにたいして、2回目の送信を試みます(rmail-retry-failure
)。
Rmailにいるときにメッセージを送信する理由でもっとも一般的なのは、読んでいるメールに返信するときでしょう。これを行なうには、r
(rmail-reply
)とタイプします。これはC-x 4
mのように、別ウィンドウにメール作成バッファーを表示しますが、ヘッダーフィールド‘Subject’、‘To’、‘CC’、‘In-reply-To’、‘References’は、返信するメッセージにもとづいて、事前に初期化されています。‘To’フィールドには、返信するメッセージを送信した人のアドレスがセットされ、‘CC’にはそのメッセージを受け取った、他のすべての人のアドレスがセットされます。
変数mail-dont-reply-to-names
を使用して、自動的に返信に含まれる受信者から、特定の受信者を除外することができます。この変数の値には正規表現を指定します。正規表現にマッチする受信者は、‘CC’フィールドから除外されます。その受信者を除外することにより‘To’フィールドが空になる場合を除き、‘To’フィールドからも除外されます。この変数がnil
の場合、最初に返信を作成するときに、あなた自身のアドレスにマッチするデフォルト値に初期化されます。
元メッセージの送信者だけにリプライするには、C-u rまたは1 rのように、数引数とともに返信コマンドをエンターします。特定の返信にたいして‘CC’フィールドを完全に省略するには、返信コマンドに数引数を指定します。これは、元のメッセージを送信した人だけに返信することを意味します。
1度メール作成バッファーが初期化されると、後は通常どおりメールの編集と送信を行なうことができます(メールの送信を参照してください)。事前にセットされたヘッダーフィールドが適切でない場合は、それを編集することができます。C-c C-yのようなコマンドを使うこともできます。これは返信するメッセージをyankします(メールコマンドを参照してください)。Rmailバッファーに切り替えて、異なるメッセージを選択してから、また戻って新しいカレントメッセージにyankすることもできます。
メッセージが送信先に届かないこともあります。そのような場合メーラーは通常、失敗メッセージ(failure
message)をあなたに返信します。RmailコマンドのM-m
(rmail-retry-failure
)は、同じメッセージの2回目の送信を準備をします。これは前と同じテキストとヘッダーフィールドで、メール作成バッファーをセットアップします。そこですぐにC-c
C-cをタイプすると、初回とまったく同じメッセージを再送します。テキストやヘッダーを編集してから送信することもできます。変数rmail-retry-ignored-headers
は、失敗したメッセージを再試行するとき除外するヘッダーを制御し、フォーマットはrmail-ignored-headers
(メッセージの表示を参照してください)と同じです。
Rmailからメールを送信する他のよくある理由に、カレントメッセージを他のユーザーに転送(forward)することです。f
(rmail-forward
)は、メール作成バッファーのテキストとsubjectを、カレントメッセージで事前に初期化することにより、これを簡単に行なえるようにします。subjectは[from:
subject]
という形式で初期化されます。fromとsubjectには、元のメッセージの送信者とsubjectが入ります。あなたが行なう必要があるのは、送信先を記述して、それを送信することだけです。メッセージを転送するとき、受信者が受け取るメッセージのfromはあなたになり、メールの内容は元のメッセージと同じになります。
Rmailは転送メッセージにたいして2つのフォーマットを提供します。デフォルトはMIMEフォーマットを使用します(メッセージの表示を参照してください)。これは元のメッセージを別の部分に含めます。変数rmail-enable-mime-composing
をnil
にセットすることにより、もっと簡単なフォーマットを使うこともできます。この場合、Rmailは元のメッセージを2つの区切り行で囲むだけです。これは各行の行頭に‘- ’を挿入することにより、各行の変更も行ないます。このフォーマットによる転送メッセージを受信した場合、それに普通のテキスト以外の何か —
たとえばプログラムのソースコード —
が含まれている場合、この変更を取り消せたら便利だと思うかもしれません。これを行なうには、転送されたメッセージを選択して、M-x
unforward-rmail-messageとタイプします。このコマンドは、挿入された文字列‘- ’を削除して、転送されたメッセージのオリジナルを抽出し、カレントメッセージの直後に、別のメッセージとしてRmailファイルに挿入します。
再送(Resending)は、転送と似た別の方法です。違いは、再送により送信されるメッセージは、あなたが受け取ったときのように、元の送信者がfromになり、追加のヘッダーフィールド(‘Resent-From’と‘Resent-To’)により、それがあなたを通じて送られたことを示すことです。Rmailでメッセージを再送するには、C-u
fを使用します(fはrmail-forward
を実行し、数引数を指定するとrmail-resend
を呼び出します)。
m
(rmail-mail
)を使用することにより、返信ではない送信用のメールの編集を開始します。これはヘッダーフィールドを空のままにします。C-x
4 mとの違いは、rのようにC-c C-yでRmailにアクセスできることです。
c
(rmail-continue
)コマンドは、既に編集を開始した送信用メッセージの編集を終えるために、または送信したメッセージを変更するために、メール作成バッファーでの編集を再開します。
変数rmail-mail-new-frame
を非nil
にセットした場合、メッセージの送信を開始するすべてのコマンドは、それを編集するために新しいフレームを作成します。このフレームは、そのメッセージを送信すると削除されます。
メッセージを送信するすべてのRmailコマンドは、選択されたメール作成方法を使用します(メール作成方法を参照してください)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
サマリー(summary)は、Rmailファイルのメールを概観するために、メッセージごとに1つの行を含むバッファーです。各行にはメッセージ番号、日付、送信者、行数、ラベル、subjectが表示されます。サマリーバッファーでポイントを移動することにより、そのサマリー行のメッセージを選択することができます。ほとんどのRmailコマンドはサマリーバッファーでも有効です。それらのコマンドを使うと、サマリーのカレント行に記述されているメッセージに適用されます。
サマリーバッファーは、1つのRmailファイルだけに適用されます。複数のRmailファイルを編集している場合、それぞれが自身のサマリーバッファーをもつことができます。サマリーバッファーの名前は、Rmailバッファーの名前に‘-summary’を追加して作成されます。通常は1度に1つだけのサマリーバッファーが表示されます。
33.11.1 サマリーの作成 | さまざまな種類のサマリーの作成。 | |
33.11.2 サマリーでの編集 | サマリーからのメッセージの操作。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下は、カレントRmailバッファーでサマリーを作成するコマンドです。Rmailバッファーが1度サマリーされると、Rmailバッファーでの変更(メッセージの削除や完全な削除、新しいメールの受信など)により、サマリーも自動的に更新されます。
すべてのメッセージをサマリーします(rmail-summary
)。
1つ以上の指定したラベルをもつメッセージをサマリーします(rmail-summary-by-labels
)。
指定した受信者にマッチするメッセージをサマリーします(rmail-summary-by-recipients
)。
指定した正規表現topicにマッチするsubjectをもつメッセージをサマリーします(rmail-summary-by-topic
)。
指定した正規表現regexpにマッチするヘッダーをもつメッセージをサマリーします(rmail-summary-by-regexp
)。
指定した送信者にマッチするメッセージをサマリーします(rmail-summary-by-senders
)。
コマンドhまたはC-M-h
(rmail-summary
)は、カレントRmailバッファーにたいする、すべてのメッセージのサマリーを、サマリーバッファーに表示します。その後、別のウィンドウにサマリーバッファーを表示して、それを選択します。
C-M-l labels RET
(rmail-summary-by-labels
)は、1つ以上のラベルlabelsをもつメッセージの、部分的なサマリーを作成します。labelsには、カンマで区切られたラベル名を指定します。
C-M-r rcpts RET
(rmail-summary-by-recipients
)は、正規表現rcptsにマッチする、1つ以上の受信者をもつメッセージのサマリーを作成します。これはヘッダー‘To’、‘From’、‘CC’にたいしてマッチを行ないます(プレフィクス引数を与えた場合は‘CC’ヘッダーを除外する)。
C-M-t topic RET
(rmail-summary-by-topic
)は、正規表現topicにマッチするsubjectをもつメッセージの、部分的なサマリーを作成します。プレフィクス引数を指定した場合、subjectだけでなく、メッセージ全体にたいしてマッチを行ないます。
C-M-s regexp RET
(rmail-summary-by-regexp
)は、正規表現regexpにマッチするヘッダー(日付とsubject行を含む)をもつメッセージの、部分的なサマリーを作成します。
C-M-f senders RET
(rmail-summary-by-senders
)は、正規表現sendersにマッチする‘From’フィールドをもつメッセージの、部分的なサマリーを作成します。
1つのRmailバッファーにたいして、1つのサマリーしか存在しないことに注意してください。他の種類のサマリーを作成すると、以前のサマリーは破棄されます。
変数rmail-summary-window-size
は、サマリーウィンドウに何行使用するかを指定します。変数rmail-summary-line-count-flag
は、メッセージのサマリー行に、メッセージの総行数を含めるかを制御します。このオプションにnil
をセットすると、サマリーの生成が速くなるかもしれません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Rmailバッファーで行なえることのほとんどは、Rmailサマリーバッファーでも使用できます。実際、1度サマリーバッファーを作成すれば、Rmailバッファーに戻る必要はありません。
サマリーバッファーで異なる行にポイントを移動するだけで、サマリーバッファーからメッセージを選択して、Rmailバッファーに表示することができます。ポイントを移動するEmacsコマンドが何であるかは問題になりません。コマンドの最後でポイントのある行のメッセージが、Rmailバッファーに表示されます。
ほとんどのRmailコマンドは、Rmailバッファーと同様に機能します。したがって、サマリーバッファーでは、dがカレントメッセージの削除、uは削除の取り消し、xで完全に削除します(しかし、サマリーバッファーでは関連する方向に削除されていないメッセージが存在しない場合、削除コマンドはカレントメッセージに留まるのではなく、最初または最後のメッセージに移動します)。oとC-oは、カレントメッセージをファイルに出力します。他にも、rはそれにたいする返信を開始する、などです。サマリーバッファーでSPCとDELを使用することにより、カレントメッセージをスクロールできます。しかし、サマリーバッファーでSPCまたはDELにより、メッセージの終端または先頭を超えてスクロールすると、削除されていない次または前のメッセージに移動します。rmail-summary-scroll-between-messages
オプションをnil
にカスタマイズすれば、次または前のメッセージへのスクロールが無効になります。
M-u
(rmail-summary-undelete-many
)は、サマリーで削除されたすべてのメッセージの削除を取り消します。プレフィクス引数を指定した場合、以前に削除された、指定した数のメッセージの削除を取り消すことを意味します。
メッセージ間を移動するRmailコマンドはサマリーバッファーでも機能しますが、動作が少し異なります。これらのコマンドはサマリーに含まれる一連のメッセージ間を移動します。これらのコマンドは、常にRmailバッファーがスクリーンに表示されるようにします(カーソル移動コマンドはRmailバッファーの内容を更新しますが、これらのコマンドはウィンドウにすでにそれが表示されているのでなければ、表示しません)。以下はそれらのコマンドのリストです:
“deleted”の行をスキップして次の行に移動し、その行のメッセージを選択します(rmail-summary-next-msg
)。
“deleted”の行をスキップして前の行に移動し、その行のメッセージを選択します(rmail-summary-previous-msg
)。
次の行に移動して、その行のメッセージを選択します(rmail-summary-next-all
)。
前の行に移動して、その行のメッセージを選択します(rmail-summary-previous-all
)。
最後の行に移動して、その行のメッセージを選択します(rmail-summary-last-message
)。
最初の行に移動して、その行のメッセージを選択します(rmail-summary-first-message
)。
(Rmailバッファーがスクリーンに確実に表示されるようにして)カレント行のメッセージを選択します(rmail-summary-goto-msg
)。引数nを指定した場合、メッセージ番号nのメッセージを選択し、サマリーバッファーのそのメッセージの行に移動します。そのメッセージがサマリーバッファーにリストされていない場合は、エラーをシグナルします。
メッセージからpatternを検索します。検索はカレントメッセージから開始されます。マッチが見つかったらそのメッセージを選択して、サマリーバッファーのそのメッセージの行にポイントを移動します(rmail-summary-search
)。プレフィクス引数は繰り返し回数として機能します。負の引数は後方に検索を行なうことを意味します(rmail-summary-search-backward
と等価です)。
指定した1つ以上のラベルのうち、少なくとも1つをもつ次のメッセージに移動します(rmail-summary-next-labeled-message
)。labelsはカンマで区切られたラベルのリストです。プレフィクス引数は繰り返し回数として機能します。
指定した1つ以上のラベルのうち、少なくとも1つをもつ前のメッセージに移動します(rmail-summary-previous-labeled-message
)。
カレントメッセージと同じsubjectをもつ、次のメッセージに移動します(rmail-summary-next-same-subject
)。プレフィクス引数は繰り返し回数として機能します。
カレントメッセージと同じsubjectをもつ、前のメッセージに移動します(rmail-summary-previous-same-subject
)。
削除、削除の取り消し、新しいメールの取得はもちろん、異なるメッセージの選択でも、それらの操作をRmailバッファーで行なったとき、サマリーバッファーは更新されます。変数rmail-redisplay-summary
が非nil
の場合、これらの操作はサマリーバッファーをスクリーンに表示します。
サマリーの使用を終了するときは、Q
(rmail-summary-wipe
)とタイプして、サマリーバッファーのウィンドウを削除します。サマリーからRmailを終了することもできます。q
(rmail-summary-quit
)はサマリーウィンドウを削除して、Rmailファイルを保存してからRmailを終了してから、他のバッファーに切り替えます。かわりにb
(rmail-summary-bury
)とタイプすると、単にRmailとRmailサマリーバッファーを隠し(bury)ます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
カレントRmailバッファーのメッセージを、日付順にソートします。
カレントRmailバッファーのメッセージを、subject順にソートします。
カレントRmailバッファーのメッセージを、送信者順にソートします。
カレントRmailバッファーのメッセージを、受信者の名前順にソートします。
カレントRmailバッファーのメッセージを、他の受信者名順にソートします。
カレントRmailバッファーのメッセージを、行数順にソートします。
カレントRmailバッファーのメッセージを、ラベル順にソートします。引数labelsは、カンマで区切られたラベルのリストです。ラベルの順序は、メッセージの順序を指定します。最初のラベルをもつメッセージが最初に、2番目のラベルをもつメッセージが次に、というようになります。ラベルをもたないメッセージは最後になります。
Rmailのソートコマンドは安定ソート(stable
sort)を行ないます。2つのメッセージのどちらを先にするか特に理由がない場合、メッセージの順序は変更されません。これを使用して複数のソート条件を使用できます。たとえば、rmail-sort-by-date
の後にrmail-sort-by-author
を使用すれば、メッセージは作者ごとに日付順にソートされます。
プレフィクス引数を指定した場合、これらのコマンドは逆順で比較をします。これはメッセージが新しいものから古いものへ、大きいものから小さいものへ、アルファベットの逆順でソートされることを意味します。
同じキーをサマリーバッファーで使うと、似た関数が実行されます。たとえばC-c C-s
C-lは、rmail-summary-sort-by-lines
を実行します。これらのコマンドは、たとえサマリーがメッセージの一部しか表示していなくても、Rmailバッファー全体をソートします。
ソートのアンドゥはできないことに注意してください。そのため、ソートをする前にRmailバッファーを保存したいと思うかもしれません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このセクションではRmailが、メールヘッダー、MIMEのセクションと添付、URL、暗号化されたメッセージを表示する方法を説明します。
ヘッダーの完全表示を切り替えます(rmail-toggle-header
)。
各メッセージを最初に表示する前に、Rmailは余分な物を減らすために、重要でないヘッダーを隠して、メッセージのヘッダーを再フォーマットします。t
(rmail-toggle-header
)コマンドは、これを切り替えます。つまり再フォーマットされたヘッダーフィールドと、完全な元のヘッダーの間で、表示を切り替えます。正の引数を指定した場合、このコマンドは再フォーマットされたヘッダーを表示します。0または負の引数を指定した場合、完全なヘッダーを表示します。メッセージを再選択することにより、必要な場合は再フォーマットします。
変数rmail-ignored-headers
は、隠すべきヘッダーフィールドを指定する正規表現を保持します。これにマッチするヘッダー行は隠されます。変数rmail-nonignored-headers
は、これをオーバーライドします。この変数の正規表現にマッチするヘッダーフィールドは、たとえそれがrmail-ignored-headers
にマッチしても、表示されます。変数rmail-displayed-headers
は、これら2つの変数のかわりに使用されます。非nil
の場合、その値には表示するヘッダーを指定する正規表現を指定します(デフォルトはnil
です)。
Rmailは特に重要なヘッダーフィールド —
デフォルトでは‘From’と‘Subject’フィールドをハイライトします。ハイライトにはrmail-highlight
フェイスが使用されます。変数rmail-highlighted-headers
は、ハイライトするヘッダーフィールドを指定する正規表現を保持します。これがヘッダーフィールドの先頭にマッチした場合、フィールド全体がハイライトされます。この機能を無効にするには、rmail-highlighted-headers
にnil
をセットしてください。
メッセージがMIME(Multipurpose Internet Mail Extensions)形式で、複数パート(MIMEエンティティー)が含まれている場合、Rmailは各パートにタグライン(tagline)を表示します。タグラインはそのパートのインデックス、サイズ、コンテントタイプを要約します。コンテントタイプに依存して、1つ以上のボタンが含まれる場合があります。これらのボタンは、そのパートをファイルに保存する、などの処理を行ないます。
ポイント位置のMIMEパートを隠す、または表示します(rmail-mime-toggle-hidden
)。
次のMIMEタグラインのボタンにポイントを移動します(rmail-mime-next-item
)。
前のMIMEパートにポイントを移動します(rmail-mime-previous-item
)。
MIME表示とrawメッセージの表示を切り替えます(rmail-mime
)。
プレーンテキストのMIMEパートは、最初タグラインの直後に表示され、Rmailバッファーの他のタイプのMIMEパートは、Rmailバッファーの一部としてタグラインだけが表示され(メッセージがHTMLパートをもたない場合。以下参照)、実際のコンテンツは隠されています。どちらの場合も、MIMEパートのどこか、またはそれのタグラインでRETをタイプすることにより、表示と非表示を切り替えることができます(他の処理を行なうボタンがある場合を除きます)。RETとタイプするかマウスでクリックすることにより、タグラインボタンをアクティブにでき、TABでタグラインのボタンにたいして循環的にポイントを移動できます。
v
(rmail-mime
)コマンドは、上記で説明したデフォルトのMIME表示と、MIMEでデコードされていないrawデータの表示を切り替えます。プレフィクス引数を指定した場合は、ポイント位置にあるものの表示だけを切り替えます。
メッセージにHTMLのMIMEパートがあり、EmacsがHTMLを表示できる場合、Rmailはそれをplain-textパートより優先して表示します17。これを抑制してかわりにplain-textパートを表示するには、変数rmail-mime-prefer-html
をnil
にカスタマイズしてください。
RmailからMIMEでデコードされたメッセージの処理を抑止するには、変数rmail-enable-mime
をnil
に変更します。この場合、v
(rmail-mime
)は、カレントMIMEメッセージを表示するために、一時的なバッファーを作成します。
カレントメッセージが暗号化されている場合、復号化するためにM-x rmail-epa-decryptを使用します。これはEasyPGライブラリーを使用します(EasyPG in EasyPG Assistant User’s Manualを参照してください)。
RmailバッファーでGoto Addressモードを使用して、URLのハイライトとアクティブ化ができます:
(add-hook 'rmail-show-message-hook 'goto-address-mode)
このモードを使用すると、そのURLをmouse-2でクリック(またはmouse-1で素早くクリック)するか、ポイントをそこに移動してC-c RETとタイプすることにより、それらのURLをブラウズできます。Activating URLsを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Rmailは、Emacsがファイルをvisitしたりサブプロセスの出力にたいして行なうように、非ASCII文字を含むメッセージを自動的にデコードします。Rmailはメッセージで標準の‘charset=charset’ヘッダーを使用し、もしそれがあれば、送信者によりメッセージがどのようにエンコードされたか決定します。これはcharsetを、対応するEmacsコーディングシステム(コーディングシステムを参照してください)にマップして、メッセージテキストをデコードするために、そのコーディングシステムを使います。メッセージヘッダーに‘charset’指定がない場合、またはcharsetが認識されなかった場合、Rmailは通常のEmacsの経験則とデフォルトに則ったコーディングシステムを選択します(コーディングシステムの認識を参照してください)。
メッセージが間違ってデコードされることもあります。これは‘charset’指定がないためにEmacsが間違ったコーディングシステムを推測したか、そもそも指定が間違っているかです。たとえば間違って設定されたメーラーが、メッセージが実際にはkoi8-r
でエンコードされているのに、‘charset=iso-8859-1’というヘッダーでメッセージを送るかもしれません。メッセージテキストが文字化けしていたり、文字が16進コードや空ボックスで表示されているときは、おそらくこれが発生しています。
正しいコーディングシステムを解決または推測できる場合、正しいコーディングシステムを使ってメッセージを再デコードすることにより、問題を訂正することができます。これを行なうにはM-x rmail-redecode-bodyコマンドを呼び出します。これはコーディングシステムの名前を読み取り、指定したコーディングシステムを使って、メッセージを再デコードします。正しいコーディングシステムを指定した場合、デコード結果は読めるようになるでしょう。
Rmailで新しいメールを受信したとき、各メッセージは、それらがあたかも個別のファイルであるかのように、それぞれが記述されたコーディングシステムに自動的に変換されます。これは指定されたコーディングシステムの優先順を使用します。MIMEメッセージが文字セットを指定している場合、Rmailはその指定にしたがいます。Rmailファイルの読み込みと保存にたいして、Emacsは、変数rmail-file-coding-system
で指定されたコーディングシステムを使用します。デフォルト値はnil
で、これはRmailファイルが変換されないことを意味します(これらはEmacsの内部文字セットで読み書きされます)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
通常のEmacsのキーバインドのほとんどはRmailモードで利用可能ですが、C-M-nやC-M-hのように、他の目的のためにRmailにより再定義されているものもあります。しかしRmailバッファーは通常読み取り専用で、ほとんどの文字はRmailコマンドに再定義されています。メッセージのテキストを編集したい場合、Rmailのeコマンドを使わなければなりません。
カレントメッセージを通常のテキストとして編集します。
e command (rmail-edit-current-message
)は、Rmailモードから、Rmail
Editモードという、Textモードと類似した、別のメジャーモードに切り替えます。メジャーモードの変更はモードラインに示されます。
Rmail
Editモードでは、文字は通常どおり文字自身を挿入し、Rmailコマンドは利用できません。メッセージの本文とヘッダーフィールドを編集することができます。メッセージの編集を終えたら、C-c
C-c (rmail-cease-edit
)でRmailモードに戻ります。かわりにC-c C-]
(rmail-abort-edit
)とタイプすれば、編集をキャンセルしてRmailモードに戻ることができます。
Rmail
Editモードに入ることにより、フックtext-mode-hook
、その後にフックrmail-edit-mode-hook
が実行されます(フックを参照してください)。通常のRmailモードにもどると、メッセージを変更した場合には、そのメッセージに属性‘edited’が追加されます(Rmailの属性を参照)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ダイジェストメッセージ(digest message)は、複数の他のメッセージを含み、それを運ぶために存在するメッセージです。ダイジェストは、いくつかのメーリングリストで使用されています。1日というような一定の期間の間にメーリングリストに到着したすべてのメッセージが、1つのダイジェストにまとめられて、メーリングリストに登録した人に送られます。1つのダイジェストを送信するのにかかるコンピューター時間は、たとえ合計サイズが同じでも個別にメッセージを送信するより短くなります。なぜならネットワークでのメール送信において、メッセージ単位のオーバーヘッドがあるからです。
ダイジェストメッセージを受信したとき、それを読むもっとも便利な方法は、それを非ダイジェスト化(undigestify)することです。これはダイジェストを複数のメッセージに戻します。それから個別にメッセージを読んだり削除できます。これを行なうにはダイジェストメッセージを選択して、コマンドM-x undigestify-rmail-messageをタイプします。これはダイジェストに含まれるメッセージを個別のRmailメッセージに抽出し、ダイジェストの後に挿入します。ダイジェストメッセージ自身には、削除のフラグがつけられます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
読む人を怒らせたり不快にするかもしれないメーリングリストのメッセージは、rot13と呼ばれる単純なコードでエンコードされているときがあります。この名前は、エンコードの方法がアルファベットを13文字分巡回させることに由来します。このコードに機密性はなく、それを提供もしません。むしろ、実際のテキストを見るのを避けたいと思う人のためのものです。たとえばビデオの講評などでは、重要なあらすじを隠すためにrot13を使います。
rot13を使ったバッファーを閲覧するには、コマンドM-x rot13-other-windowを使用します。これはカレントバッファーを他のウィンドウで表示します。このウィンドウではテキストを表示するときこのコードを適用します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
movemail
programRmailは、inboxからRmailファイルにメールを移動するために、movemail
プログラムを使用します。最初にロードされたとき、Rmailはmovemail
プログラムを探して、そのバージョンを判断します。movemail
プログラムには2つのバージョンがあります。それはGNU
Mailutilsバージョン(movemail in GNU
mailutilsを参照)と、--with-mailutilsでEmacsをconfigureしたときにインストールされるEmacs固有バージョンです。これらのコマンドは、同じコマンドラインシンタックスをもち、同じ基本的なサブセットオプションをもちます。しかしMailutilsバージョンは、追加の機能を提供します。
Emacsバージョンのmovemail
は、通常のUnix
mailbox形式のmailboxからメールを取得することができます。警告:
これはPOP3プロトコルの使用も可能ですが、暗号化されたTLSチャンネルを通じたPOP3をサポートしないので、推奨しません。
Mailutilsバージョンは、プレーンUnix
mailbox、maildir
およびMH
のメールボックスなどの、より広範なmailbox形式を処理することができます。これはPOP3またはIMAP4プロトコルを使用してリモートのmailboxにアクセスでき、TLS暗号化チャンネル(TLS
encrypted
channel)を使用してメールを取得できます。これはURL形式でのmailbox引数を受けとることもできます。mailboix
URLの詳細な説明は、URL in Mailbox URL
Formatsで見ることができます。短く言うと、URLは以下のようなものです:
proto://[user[:password]@]host-or-file-name[:port]
角カッコ(bracket)はオプションの要素を意味します。
mailboxプロトコル、または使用するフォーマットを指定します。URLの残りの要素の正確な意味は、protoの実際の値に依存します(以下参照)。
リモートmailboxにアクセスするためのユーザー名です。
リモートmailboxにアクセスするためのユーザーパスワードです。
リモートmailboxのリモートサーバーのホスト名、またはローカルmailboxのファイル名です。
そのプロトコルのデフォルト以外のポート番号をオプションで指定します。
protoには以下の1つを指定します:
mbox
通常のUnix
mailbox形式です。この場合user、pass、portは使用せず、host-or-file-nameはmailboxファイルのファイル名を意味します(例:
mbox:///var/spool/mail/smith
)。
mh
MH形式のローカルmailboxです。user、pass、portは使用せず、host-or-file-nameはMHフォルダーのファイル名を意味します(例:
mh:///Mail/inbox
)。
maildir
maildir形式のローカルmailboxです。user、pass、portは使用せず、host-or-file-nameはmaildir
mailboxの名前を意味します(例: maildir:///mail/inbox
)。
file
mailbox形式の任意のローカルファイルです。実際の形式はmovemail
により自動的に決定されます。
pop
pops
POP3プロトコルを通じてアクセスされるリモートmailboxです。userは使用するリモートのユーザー名を指定し、passはユーザーパスワードを指定するのに使用され、host-or-file-nameは接続するリモートメールサーバーのホスト名かIPアドレス、portはポート番号です(例:
pop://smith:guessme@remote.server.net:995
)。サーバーがサポートする場合、movemail
は暗号化された接続
— 暗号化接続に要求される‘pops’の使用を試みます。
imap
imaps
IMAP4プロトコルを通じてアクセスされるリモートmailboxです。userは使用するリモートのユーザー名を指定し、passはユーザーパスワードを指定するのに使用され、host-or-file-nameは接続するリモートメールサーバーのホスト名かIPアドレス、portはポート番号です(例:
imap://smith:guessme@remote.server.net:993
)。サーバーがサポートする場合、movemail
は暗号化された接続
— 暗号化接続に要求される‘imaps’の使用を試みます。"
かわりに、使用するmailboxのファイル名を指定できます。これはプロトコルに‘file’を指定するのと等価です:
/var/spool/mail/user ≡ file:///var/spool/mail/user
変数rmail-movemail-program
は、どのバージョンのmovemail
を使用するかを制御します。文字列の場合、それはmovemail
実行ファイルの絶対ファイル名を指定します。nil
の場合、Rmailはrmail-movemail-search-path
、exec-path
(Emacsからのシェルコマンドの実行を参照してください)、exec-directory
の順で、これらの変数にリストされたディレクトリーから、movemail
を検索します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
inboxファイルにデータを格納するかわりに、POP3と呼ばれる手法を使用してユーザーのinboxデータにアクセスするサイトがいくつかあります。Mailutilsのmovemail
は、デフォルトでTLS暗号化されたPOP3をサポートします。警告:
たとえEmacs
movemail
がPOP3をサポートしていても、Mailutilsバージョンがサポートする暗号化された接続をサポートしないので、これを使用することは推奨しません。どちらのバージョンのmovemail
も、POP3にたいしてだけ機能し、POPの古いバージョンにたいしては機能しません。
どちらのmovemail
を使用するかにかかわらず、POP3 URL(movemail
programを参照)を使用してPOP3
inboxを指定できます。POP3
URLは、‘pop://username@hostname:port’という形式で、hostnameとportはリモートメールサーバーのホスト名(またはIPアドレス)とポート番号、usernameはそのサーバーでのユーザー名です。これに加えて‘pop://username:password@hostname:port’のようなmailbox
URLでパスワードを指定することもできます。この場合、passwordはrmail-remote-password
(以下参照)で指定された値より優先されます。これは複数のリモートメールサーバーで異なるパスワードを指定するとき、特に便利です。
後方互換のため、RmailはリモートのPOP3
mailboxを指定する他の方法もサポートします。‘po:username:hostname:port’によるinbox名の指定は、‘pop://username@hostname:port’と等価です。:hostnameの部分を省略した場合は、環境変数MAILHOST
で、どのマシンのPOP3サーバーを探すか指定します。
リモートmailboxesにアクセスする他の方法に、IMAPがあります。この方法はMailutils
movemail
だけでサポートされます。inboxリストでIMAP
mailboxを指定するには、‘imap://username[:password]@hostname:port’の形式のmailbox
URLを使用します。上記で説明したように、passwordの部分はオプションです。‘imap’の箇所に‘imaps’を使用したいと思うかもしれません。
リモートmailboxへのアクセスにはパスワードが要求されます。これを取得するためにRmailは以下のアルゴリズムを使います:
rmail-remote-password-required
がnil
の場合、Rmailはパスワードが要求されないと想定します。
rmail-remote-password
が非nil
の場合はその値を使います。
追加のコマンドラインフラグをmovemail
に渡す必要がある場合は、使いたいフラグのリストを変数rmail-movemail-flags
にセットします。inboxの内容を保持するために。この変数を使ってフラグ‘-p’を渡さないでください。かわりにrmail-preserve-inbox
を使用してください。
あなたのサイトにインストールされたmovemail
プログラムは、ケルベロス認証(Kerberos
authentication)をサポートするでしょう。もしサポートされている場合、rmail-remote-password
およびrmail-remote-password-required
がセットされていないときに、POP3メールの取得を試みたときは、デフォルトでケルベロス認証を使います。
メッセージを逆順に保存するPOP3サーバーもあります。あなたのサーバーがこれを行なっている場合、到着した順にメールを読みたいときは、rmail-movemail-flags
に‘-r’フラグを追加することにより、逆順でメッセージをダウンロードするよう、movemail
に指示できます。
Mailutils movemail
は、TLS暗号化(TLS
encryption)をサポートします。これを使いたい場合は、rmail-movemail-flags
に‘--tls’フラグをセットしてください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
受信したメールがローカルマシンのUnix mailbox以外の形式に保存される場合、これを取得するためにMailutils
movemail
を使う必要があるでしょう。movemail
のバージョンについての詳細な説明は、movemail
programを参照してください。たとえば/var/spool/mail/inにあるmaildir
形式のinboxのメールにアクセスするには、Rmailのinboxリストに以下を含める必要があるでしょう:
maildir:///var/spool/mail/in
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Gnusは、主にUsenetニュースを読んだりポストするためにデザインされた、Emacsパッケージです。これはいくつかの異なるソース — 電子メール、リモートディレクトリー、ダイジェスト、などを読んだり、メッセージを返すためにも使うことができます。以下はGnusの紹介と、いくつかの基本的な機能の説明です。 完全な詳細に付いては、Gnus in The Gnus Manualを参照してください。
34.1 Gnusバッファー | グループ、サマリー、アーティクルバッファー。 | |
34.2 Gnusを起動したとき | Gnusの開始するにあたって知っておくべきこと。 | |
34.3 Gnus Groupバッファーの使用 | Gnusグループコマンドの短い説明。 | |
34.4 Gnus Summaryバッファーの使用 | Gnusサマリーコマンドの短い説明。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Gnusは、情報を表示したり返信コマンドのために、複数のバッファーを使用します。もっとも一般的に使用される3つのGnusバッファーはグループバッファー(group buffer)、サマリーバッファー(summary buffer)、アーティクルバッファー(article buffer)です。
グループバッファーは、アーティクルソースのリスト(たとえばニュースグループや電子メールのinbox)を含んでおり、それらはグループとして参照されます。これはGnusを開始したときに最初に表示されるバッファーです。これは通常、あなたが登録したグループと、未読のアーティクルだけを表示します。このバッファーから、読みたいグループを選択できます。
サマリーバッファーは1つのグループのアーティクルをリストし、1行に1つのアーティクルを表示します。デフォルトでは、アーティクルの作者、subject、 行数が表示されますが、これはカスタマイズできます。Summary Buffer Format in The Gnus Manualを参照してください。 サマリーバッファーは、グループバッファーでグループを選択すると作成され、グループを抜けるとkillされます。
サマリーバッファーから、閲覧するアーティクルを選択できます。アーティクルはアーティクルバッファーで表示されます。通常のGnusの使い方では、このバッファーを閲覧はしますが選択はしません — すべての便利なGnusコマンドはサマリーバッファーから呼び出すことができます。しかし望むなら、アーティクルバッファーを選択して、そこからGnusコマンドを実行することもできます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
あなたのシステムがUsenetニュースをよむためにセットアップされていれば、Gnusを始めるのは簡単です — M-x gnusとタイプするだけです。
起動時に、Gnusはホームディレクトリーにある.newsrcという名前のニュース初期化ファイル(news
initialization
file)を読み込みます。これにはあなたのUsenetニュースグループと購読状況がリストされています(これはGnus固有のファイルではありません。他の多くのニュースリーダープログラムにより使用されています)。その後システムのデフォルトのニュースサーバーへの接続を試みます。これは通常、環境変数NNTPSERVER
により指定されます。
あなたのシステムがデフォルトのニュースサーバーをもっていない場合、または電子メールを読むためにGnusを使いたい場合は、M-x
gnusを呼び出す前に、どこでニュースおよび/またはメールを取得するか、Gnusに指示する必要があります。これを行なうには、変数gnus-select-method
および/またはgnus-secondary-select-methods
をカスタマイズします。
Finding the News in The Gnus Manualを参照してください。
1度Gnusを開始すると、グループバッファーを表示します。デフォルトでは少数のsubscribedグループ(subscribed groups: 登録されたグループ)だけが表示されます。他の状態 — unsubscribed、killed、zombie — のグループは表示されません。最初にGnusを開始したとき、登録していないグループはkilledグループになります。その後にニュースサーバーに現れたグループはzombieグループになります。
先に進むには、グループバッファーでグループを選択して、そのグループのサマリーバッファーを開かなければなりません。その後サマリーバッファーのアーティクルを選択して、別のウィンドウでアーティクルバッファーを閲覧します。以下のセクションでは、これを行なうための、グループバッファーとサマリーバッファーの使用について説明します。
Gnusを終了するには、グループバッファーでqとタイプします。これは自動的にグループの状態をファイル.newsrcト.newsrc.eldに記録するので、その後のGnusセッションでも効果があります。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下のコマンドは、Gnusグループバッファーで利用可能です:
カレント行のグループの、サマリーバッファーに切り替えます(gnus-group-read-group
)。
eグループバッファーでは、未読のアーティクルを含む登録したグループだけをリストします(gnus-group-list-groups
。これはデフォルトの一覧方法である)。
すべてのsubscribed(登録)およびunsubscribed(未登録)のグループをリストしますが、killedまたはzombieのグループは表示しません(gnus-group-list-all-groups
)。
killされたグループをリストします(gnus-group-list-killed
)。
ゾンビ状態のグループをリストします(gnus-group-list-zombies
)。
カレント行のグループの登録状態を切り替えます((gnus-group-unsubscribe-current-group
。たとえばsubscribedグループをunsubscribedグループにしたり、その逆を行なう)。killedまたはzombieのグループにたいしてこれを呼び出すと、そのグループをunsubscribedグループにします。
カレント行のグループをkillします(gnus-group-kill-group
)。killedとなったグループは.newsrcファイルに記録され、lまたはLのリストには表示されなくなります。
未読アーティクルを含む、前のグループにポイントを移動します(gnus-group-prev-unread-group
)。
次の未読グループにポイントを移動します(gnus-group-next-unread-group
)。
前の未読グループにポイントを移動します(gnus-group-prev-unread-group
)。
Gnusのセッティングを更新してGnusを終了します(gnus-group-exit
)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下のコマンドは、Gnusサマリーバッファーで利用可能です:
選択されたアーティクルがない場合、カレント行のアーティクルを選択して、それをアーティクルバッファーに表示します。そうでない場合、選択されたアーティクルバッファーのウィンドウでスクロールを試みます。バッファーの最後に到達した場合、次の未読アーティクルを選択します(gnus-summary-next-page
)。
したがって、繰り返しSPCをタイプすることにより、すべてのアーティクルを読むことができます。
アーティクルのテキストを後方にスクロールします(gnus-summary-prev-page
)。
次の未読アーティクルを選択します(gnus-summary-next-unread-article
)。
前の未読アーティクルを選択します(gnus-summary-prev-unread-article
)。
選択されたアーティクルバッファーで、あたかもそのバッファーに切り替えてC-s(インクリメンタル検索を参照してください)とタイプしたかのように、インクリメンタル検索を行ないます(gnus-summary-isearch-article
)。
regexpへのマッチを含むアーティクルを、前方に検索します(gnus-summary-search-article-forward
)。
regexpへのマッチを含むアーティクルを、後方に検索します(gnus-summary-search-article-backward
)。
サマリーバッファーをexitして、グループバッファーに戻ります(gnus-summary-exit
)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
EmacsはGNU/Linuxのようなオペレーティングシステムの内部で実行され、ファイルアクセスのようなセキュリティー制限のチェックはオペレーティングシステムに依存します。Emacsのデフォルトセッティングは、通常の使用のためにデザインされています。通常よりセキュリティーが重要な場合、または重要でない環境では、何らかの調整が必要になるでしょう。たとえばファイルローカル変数(file-local
variables)が危険な場合もあるので、変数enable-local-variables
に:safe
や、(より安全に)nil
をセットできます。ファイルがすべて信用でき、それらの変数にたいするデフォルトのチェックが煩わしいときには、enable-local-variables
に:all
をセットできます。安全なファイル変数を参照してください。
大きなアプリケーションの一部としてEmacsを使用する場合の、セキュリティー考慮についての情報は、Security Considerations in The Emacs Lisp Reference Manualを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsがネットワーク接続を確立するときは、常にその確立された接続をNSM(Network Security Manager)に渡します。NSMは、あなたのコントロールのもとにセットワークセキュリティーを実施する責任があります。現在のところ、これはTLS(Transport Layer Security)の機能を使用して動作します。
変数network-security-level
はNSMが実施するセキュリティーレベルを決定します。変数の値がlow
ならセキュリティーのチェックは行なわれません。これは必須ではなく。基本的にはそのネットワーク接続が信頼できないことを意味しています。しかしネットワークの問題テスト時のように制限された状況ではこのセッティングは便利かもしれません。
この変数がmedium
(デフォルト)の場合、いくつかのチェックが行なわれます。チェックの結果、NSMがそのネットワーク接続を信頼できないと判断した場合は、それを知らせて、そのネットワーク接続にたいして何を行なうか尋ねます。
証明されていない接続(unverified connection)にたいして、永続的なセキュリティー例外(security exception)を登録したり、一時的な例外(temporary exception)とするか、接続を完全に拒絶することができます。
証明書の基本的な正当性チェック加えて、いくつかのTLSアルゴリズムによるチェックが利用可能です。 以前は安全だと思われていたいくつかの暗号化技術で脆弱性が判明しているものについては、(デフォルトでは)Emacsは問題に関して警告します。
プロトコルネットワークのチェックはnetwork-security-protocol-checks
変数を介して制御されます。
これは各連想値の最初の要素がチェックの名前、2つ目の要素がチェックの使用を要するセキュリティレベルであるようなalistです。
関数nsm-protocol-check--rc4
の結果内の(rc4
medium)
のような要素は(nsm-protocol-check--rc4 host port status settings)
のように呼び出します。この関数は接続を継続するなら非nil
、それ以外は非nil
をリターンします。
以下はデフォルトのmedium
で行なわれるチェックのリストです。
その接続がTLS、SSL、STARTTLS接続の場合、NSMは接続しようとしているサーバーの同一性(identity)を証明するために使用される認証が、検証できるかどうかチェックします。
無効な認証が懸念される場合(Man-in-the-Middleによりネットワーク接続がハイジャックて、あなたのパスワードが盗まれるかもしれません)や、とにかく接続を行なう正当な理由があるかもしれません。たとえばサーバーが自己署名された認証(self-signed certificate)を使用していたり、認証の期限が切れている場合もあるでしょう。接続の継続を容認するかどうかの決定は、あなたに任されています。
以前自己署名された認証を許容したが、今回はそれが変更されていて、それはそのサーバーが単に認証を変更しただけかもしれませんが、ネットワーク接続がハイジャックされている可能性もあります。
接続が暗号化されていないが、以前のセッションでは暗号化されていた場合、あなたとそのサーバーの間にSTARTTLSアナウンス(STARTTLS announcements)を剥奪して、接続を非暗号化するプロキシーがあることを意味するかもしれません。これは通常とても疑わしいです。
IMAPやPOP3のサーバーに接続するとき、ネットワーク越しにパスワードを送信するのが一般的なので、接続は通常暗号化されています。同様に、パスワードを要求するSMTPを通じてemailを送信する場合は通常、その接続が暗号化されていることを望むでしょう。その接続が暗号化されていない場合、NSMは警告します。
パグリックキーの交換を行なう際、そのチャンネルが第三者により盗聴できないことを確実にするために、プライムビット(prime
bits)の数は十分に高くあるべきです。この数があまりに低い(low)場合にはEmacsは警告を発するでしょう(これはnetwork-security-protocol-checks
のdiffie-hellman-prime-bits
チェック)。
RC4ストリーム暗号は低品質とされており、第三者による盗聴を許すかもしれません(これはnetwork-security-protocol-checks
のrc4
チェック)。
中間証明書(intermediate
certificate)がSHA1ハッシュアルゴリズムを使用していれば、第三者がその発行インスタンスを偽装して証明書を発行できると考えられています。したがってこれらの接続は中間者攻撃にたいして脆弱です(これらはnetwork-security-protocol-checks
のsignature-sha1
とintermediate-sha1
チェック)。
TLS1.0より古いプロトコルは、様々な攻撃にたいして脆弱とされており、あなたが行なうことがより高いセキュリティーを要する場合は、使用を避けたいと思うかもしれません(これはnetwork-security-protocol-checks
のssl
チェック)。
network-security-level
がhigh
の場合、上記に加えて以下のチェックが行なわれます:
3DESストリーム暗号は最大112ビットの効果的なセキュリティーを提供してローエンド向きと考えられています(これはnetwork-security-protocol-checks
の3des
チェック)。
サーバーはキーを変更するときがあり、通常それは心配することはありません。しかし、サードパーティーのサービスにたいして新しい認証を発行する、偽装しやすい証明期間(pliable Certificate Authorities)へのアクセスをもつエージェントにより、ネットワーク接続がハイジャックされているか心配なときは、これらの変更を追跡したいと思うかもしれません。
最後に、network-security-level
がparanoid
の場合は、最初にNSMが新たな認証に遭遇したときに、それが通知されます。これによりEmacsによるすべての接続のすべての認証を検証することができるでしょう。
以下の追加の変数は、NSM操作の詳細を制御するために使用できます。
nsm-settings-file
これはNSMが接続の詳細を保存するファイルです。デフォルトは~/.emacs.d/network-security.dataです。
nsm-save-host-names
デフォルトでは、非STARTTLS
接続ではホスト名は保存されません。接続の識別には、かわりにホストとポートによるハッシュ値(host/port
hash)が使用されます。ユーザーがどのサーバーに接続しているか確認するために、誰かが気軽に設定ファイルを読めないことを意味します。この変数がt
の場合、NSMはnsm-settings-file
にもホスト名を保存します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
DocViewモードは、DVI、PostScript(PS)、PDF、OpenDocument、Microsoft
Officeドキュメントを閲覧するためのメジャーモードです。このモードはスライス、ズーム、ドキュメント内の検索などの機能を提供します。これは、gs
(GhostScript)、またはmudraw
/pdfdraw
(MuPDF)、およびその他の外部ツール18を使用して、ドキュメントを一連のイメージに変換し、それらのイメージを表示することにより機能します
DocViewモードで表示可能なドキュメントをvisitすると、Emacsは自動的にそのモードを使用します19。例外として、PostScriptファイルをvisitしたとき、EmacsはPostScriptファイルをテキストとして編集するためのメジャーモードの、PSモードに切り替わります。しかし、これはDocView
minorモードも有効にするので、C-c
C-cとタイプして、そのドキュメントを閲覧することができます。DocViewモードまたはDocView minorモードでは、C-c
C-c
(doc-view-toggle-display
)を繰り返すことにより、DocViewとその背後にあるファイル内容を切り替えることができます。
いくつかの要件が満たされないとき(たとえばテキスト端末のフレームを操作していたり、そのEmacsはPNGをサポートしないときなど)に、通常DocViewモードで処理されるファイルをvisitした場合は、そのドキュメントの内容をプレーンテキストとして閲覧したいか問い合わせます。これに同意すると、そのバッファーはtextモードとなり、DocView
minorモードがアクティブになります。したがってC-c
C-cとタイプすることにより、fallbackモードに切り替わります。もう1度C-c
C-cとタイプすると、DocViewモードに戻ります。DocViewモードでC-c C-t
(doc-view-open-text
)とタイプすることにより、プレーンテキストで内容を表示することもできます。
コマンドM-x doc-view-modeで、DocViewモードを明示的に有効にすることができます。また、M-x doc-view-minor-modeで、DocView minorモードに切り替えることができます。
DocViewモードを開始したときは、ウェルカム画面を表示して、そのファイルを1ページずつフォーマットしていきます。最初のページがフォーマットされると、そのページを表示します。
DocViewバッファーをkillするには、k
(doc-view-kill-proc-and-buffer
)とタイプします。バッファーを隠す(bury)には、q
(quit-window
)とタイプします。
37.1 DocViewの操作 | DocViewバッファーの操作。 | |
37.2 DocViewの検索 | ドキュメント内の検索。 | |
37.3 DocViewのスライス | ページのどの部分を表示するか指定する。 | |
37.4 DocViewの変換 | 変換に影響を与えたり、それを誘発するもの。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
DocViewモードでは通常のEmacs移動キー、つまりC-p、C-n、C-b、C-f、および矢印キーを使って、ページをスクロールできます。
デフォルトでは、行移動キーのC-pとC-nは、カレントページの先頭または最後でスクロールを止めます。しかし、変数doc-view-continuous
を非nil
値に変更した場合、カレントページの先頭でC-pとタイプすると前のページを表示し、カレントページの最後でC-nとタイプすると次のページを表示します。
n、PageDown、next、C-x
]をタイプすることにより、次のページを表示することもできます(doc-view-next-page
)。前のページを表示するには、p、PageUp、prior、C-x
[をタイプします(doc-view-previous-page
)。
SPC
(doc-view-scroll-up-or-next-page
)は、ドキュメントを順に読んでいくのに便利な方法です。これはカレントページをスクロールするか、次のページに移動します。DEL
(doc-view-scroll-down-or-previous-page
)は、同様の方法で後方に移動します。
最初のページに移動するには、M-<
(doc-view-first-page
)とタイプします。最後のページに移動するには、M->
(doc-view-last-page
)とタイプします。ページ番号を指定して移動するには、M-g M-gまたはM-g
g (doc-view-goto-page
)とタイプしてください。
+ (doc-view-enlarge
)と-
(doc-view-shrink
)で、ドキュメントを拡大したり縮小することができます。これらのコマンドはデフォルトではすでに描画済みのイメージを再スケールします。かわりにイメージを新たなサイズに再描画するにはdoc-view-scale-internally
をnil
にセットしてください。DocViewにたいするデフォルトサイズを指定するには、変数doc-view-resolution
をカスタマイズしてください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
DocViewモードでは、ファイルのテキストにたいして正規表現の検索を行なうことができます(正規表現の構文を参照してください)。検索のインターフェースはisearch
が元になっています(インクリメンタル検索を参照してください)。
検索を開始するには、C-s (doc-view-search
)またはC-r
(doc-view-search-backward
)とタイプします。これはミニバッファーを使用して正規表現を読み取り、そのドキュメントでマッチした数をエコーします。C-sまたはC-rとタイプすることにより、マッチ間を前方または後方に移動できます。DocViewモードはページイメージの中でマッチを表示できません。かわりに、カレントページのマッチするすべての行を一覧するツールチップを、(マウス位置に)表示します。このツールチップを強制的に表示するにはC-t
(doc-view-show-tooltip
)とタイプしてください。
新しい検索を開始するには、たとえば前方検索ではC-u C-s、後方検索ではC-u C-rのように、検索コマンドにプレフィクス引数を使用します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
印刷のために広い余白をもつドキュメントもあります。これらはスクリーンでドキュメントを読むとき邪魔になることがあります。なぜならこれらは画面スペースを消費して、スクロールが不便になるからです。
DocViewでは、表示するページのスライス(slice)を選択することにより、これらの余白を隠すことができます。スライスはページ内の矩形領域です。DocViewで1度スライスを指定すると、閲覧するすべてのページに適用されます。
数値でスライスを指定するには、c s
(doc-view-set-slice
)とタイプします。その後、スライスの左上のピクセル位置(pixel
position)と、スライスの幅(width)と高さ(height)を入力します。
スライスを指定するための、もっと便利でグラフィカルな方法は、c m
(doc-view-set-slice-using-mouse
)で、スライスの選択にマウスを使う方法です。これは単に、スライスにしたいリージョンの左上隅で左マウスボタンを押して、そのまま右下隅にマウスポインターを移動してマウスボタンを離します。
最適なスライスをセットする一番簡単な方法は、c b
(doc-view-set-slice-from-bounding-box
)とタイプすることにより、そのドキュメントから自動的に判断されるBoundingBox情報を使う方法です。
選択されたスライスを取り消すには、c r
(doc-view-reset-slice
)とタイプします。するとDocViewは、余白全体を含めたページ全体を表示します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
効率のために、DocViewはgs
により生成されたイメージをキャッシュします。イメージをキャッシュするディレクトリーの名前は、変数doc-view-cache-directory
により与えられます。M-x
doc-view-clear-cacheとタイプすることにより、キャッシュディレクトリーをクリアーできます。
現在閲覧中のドキュメントを強制的に再変換するには、type rまたはg
(revert-buffer
)とタイプします。カレントバッファーに関連付けられた変換プロセスをkillするには、K
(doc-view-kill-proc
)とタイプします。コマンドk
(doc-view-kill-proc-and-buffer
)は、変換プロセスとDocViewバッファーをkillします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsには、シェルサブプロセスに1つのコマンドラインを渡したり、入出力にEmacsバッファーを使用して対話的にシェルを実行するコマンドや、端末エミュレーターウィンドウでシェルを実行するコマンドがあります。
シェルコマンドcmdを実行して、出力を表示します(shell-command
)。
リージョンの内容を入力としてシェルコマンドcmdを実行します。オプションでリージョンを出力で置き換えます(shell-command-on-region
)。
シェルコマンドcmdを非同期で実行し、出力を表示します(async-shell-command
)。
Emacsバッファーを通じて入出力を行なう、サブシェルを実行します。その後で、コマンドを対話的に与えることができます。
Emacsバッファーを通じて入出力を行なう、サブシェルを実行します。その後でコマンドを対話的に与えることができます。完全な端末エミュレーションが利用できます。
(上記のコマンドのcmd引数、または他のコンテキストにおいて)実行可能プログラムとして相対ファイル名を指定したときは、Emacsは変数exec-path
により指定されるディレクトリーのプログラムを検索します。この変数の値は、ディレクトリーのリストでなければなりません。デフォルト値は、Emacsが開始されたときの環境変数PATH
により初期化されます(一般的な変数を参照してください)。
M-x eshellは、Emacsで完全に実装されたシェルを呼び出します。eshellについては、自身のマニュアルにドキュメントされています。 Eshell in Eshell: The Emacs Shellを参照してください。
38.1 単一のシェルコマンド | シェルコマンドを実行してから、戻る方法。 | |
38.2 対話的なサブシェル | Emacsを通じて入力を行なう永続的なシェル。 | |
38.3 Shellモード | 永続的なシェルで使用される特別なEmacsコマンド。 | |
38.4 Shellプロンプト | シェルプロンプトを認識する2つの方法。 | |
38.5 Shellコマンドヒストリー | シェルバッファーで前のコマンドを繰り返す。 | |
38.6 ディレクトリーの追跡 | サブシェルでのディレクトリーの変更の追跡。 | |
38.7 Shellモードのオプション | Shellモードをカスタマイズするオプション。 | |
38.8 Emacsの端末エミュレーター | 端末エミュレーターとしてのEmacsウィンドウ。 | |
38.9 Termモード | Termモードで使用される特別なEmacsコマンド。 | |
38.10 リモートホストのシェル | 他のコンピューターへの接続。 | |
38.11 シリアル端末 | シリアルポートへの接続。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
M-!
(shell-command
)は、ミニバッファーを使って1行のテキストを読み取り、それをシェルコマンドとして、そのコマンドのためだけに作成されたサブシェルで実行します。そのコマンドの標準入力はnullデバイスです。シェルコマンドが出力を生成する場合、その出力はエコーエリア(出力が短い場合)、または別のウィンドウの*Shell
Command
Output*という名前のEmacsバッファー(出力が長い場合)に表示されます。変数resize-mini-windows
とmax-mini-window-height
は、出力がエコーエリアにたいして長過ぎるとEmacsが判断した場合に、ウィンドウのサイズ変更を制御します(ミニバッファーでの編集を参照)。
たとえばfoo.gzという名前のファイルを解凍する1つの方法は、M-! gunzip foo.gz RETとタイプすることです。このシェルコマンドは通常、ファイルfooを作成して、端末出力を生成しません。
たとえばM-1
M-!のようにshell-command
に数引数を指定した場合、別のバッファーではなく、カレントバッファーに端末出力を挿入します。これはデフォルトではポイントを出力の前、出力の後にマークを配置します(しかし以下の非デフォルト値shell-command-dont-erase-buffer
でこれを変更できます)。たとえばM-1
M-! gunzip < foo.gz RETは、カレントバッファーにファイルfoo.gzの解凍された内容を挿入します。
最後が‘&’でないシェルコマンドを指定した場合、コマンドは同期(synchronously)で実行され、Emacsを継続して使用するには、コマンドがexitするのを待たなければなりません。待つのを中止するには、C-gとタイプします。これはシェルコマンドを終了するために、シグナルSIGINT
を送ります(これは通常、シェルでC-cとタイプしたときに生成されるのと同じシグナルです)。その後、Emacsはコマンドが実際に終了するまで待ちます。シェルコマンドが終了しない場合(そのコマンドがシグナルSIGINT
を無視する場合)は、再度C-gとタイプします。これは そのコマンドにたいして、無視することが不可能なシグナルSIGKILL
を送ります。
‘&’で終わるシェルコマンドは非同期(asynchronously)で実行され、それを実行した後でも、継続してEmacsを使用できます。シェルコマンドを非同期で実行する前に、M-&
(async-shell-command
)とタイプすることもできます。これは最後の‘&’が必要ない点を除き、最後に‘&’を指定してM-!を呼び出すことと同じです。非同期シェルコマンドにたいするデフォルトの出力バッファーは、‘*Async
Shell
Command*’という名前のバッファーです。このバッファーがウィンドウに表示されているかに関わらず、Emacsは出力をこのバッファーに挿入します。
同時に複数の非同期シェルコマンドを実行した場合、出力バッファーが競合します。この場合どのようにするか —
たとえば既存の出力バッファーをリネームしたり、新しいコマンドに異なるバッファーを使用する —
を、オプションasync-shell-command-buffer
で指定できます。他の可能なオプションについては、この変数のドキュメントを参照してください。
非同期シェルコマンドが出力を生成したときだけ出力バッファーが表示されるようにしたい場合は、async-shell-command-display-buffer
をnil
にセットしてください。
オプションasync-shell-command-width
は非同期シェルコマンドの出力に利用可能な表示列数を定義します。正の整数はコマンド出力にその列数を使用するようシェルに指示します。デフォルト値nil
はシェルが提供する列数と同じ列数の使用を意味します。
上記コマンドにプロンプトにカレントディレクトリーを表示するようにさせるには変数shell-command-prompt-show-cwd
を非nil
値にカスタマイズしてください。
M-|
(shell-command-on-region
)はM-!と同様ですが、入力を与えないかわりに、リージョンの内容をシェルコマンドの標準入力として渡します。数引数を指定した場合、古いリージョンの内容を、シェルコマンドの出力で置き換えます。
たとえばM-|でgpg
プログラムを使用して、そのバッファーのキーが何かを見ることができます。そのバッファーがGnuPGキーを含む場合、C-x
h M-| gpg
RETとタイプして、バッファー全体の内容をgpg
に送ることができます。これはキーのリストを、*Shell
Command Output*バッファーに出力します。
上記のコマンドは、変数shell-file-name
で指定されたシェルを使用します。この変数のデフォルト値は、Emacsが開始されたときの環境変数SHELL
により決定されます。相対ファイル名の場合、Emacsはexec-path
にリストされたディレクトリーを検索します(Emacsからのシェルコマンドの実行を参照してください)。
デフォルトディレクトリーがリモート(リモートファイルを参照)ならデフォルト値は/bin/shです。これは接続ローカルにshell-file-name
を宣言することにより変更可能です(▼接続ごとのローカル変数を参照)。
M-!またはM-|にたいするコーディングシステムを指定するには、あらかじめコマンドC-x RET cを使用します。プロセス間通信にたいするコーディングシステムを参照してください。
デフォルトでは、出力バッファーではエラー出力と標準出力が混ざって出力されます。しかし変数shell-command-default-error-buffer
の値を文字列に変更すると、エラー出力はその名前のバッファーに出力されます。
デフォルトではカレントバッファーに出力される場合を除き、シェルコマンド間に出力バッファーは消去されます。オプションshell-command-dont-erase-buffer
の値をerase
に変更すると出力バッファーは常に消去されます。それ以外の非nil
値なら出力バッファーの消去は抑制されて、(出力バッファーがカレントバッファーでなければ)シェルコマンドの出力の挿入後にポイントを配置する位置を制御します:
beg-last-out
ポイントを最後のシェルコマンドの出力の先頭に配置します。
end-last-out
ポイントを最後のシェルコマンドの出力の最後(出力バッファー終端)に配置します。
save-point
シェルコマンドの出力の挿入前の位置にポイントをリストアします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
対話的にサブシェルを実行するには、M-x shellとタイプします。これは*shell*という名前のバッファーを作成(または再使用)して、そのバッファーにたいして入出力を行なう、シェルのサブプロセスを実行します。つまりサブシェルからの端末出力はポイントの後に挿入されてポイントを進め、サブシェルにたいする端末入力はそのバッファーのテキストになります。サブシェルにたいして入力を与えるには、バッファーの最後に移動して入力をタイプし、RETで終了します。
デフォルトでは、サブシェルが対話的に呼び出された際、カレントウィンドウですでに*shell*バッファーを表示していない場合は、新たなウィンドウに*shell*バッファーが表示されます。この動作はdisplay-buffer-alist
(display-buffer
が機能する方法を参照)を通じてカスタマイズできます。
サブシェルがコマンドの実行を待つ間、ウィンドウまたはバッファーを切り替えてEmacsで他の編集を行なうことができます。Emacsはそれを処理するときがきたら(たとえばキーボード入力待ちになったとき)、サブシェルからの出力をShellバッファーに挿入します。
Shellバッファーでは、プロンプトはフェイスcomint-highlight-prompt
で表示され、サブミットされた入力行はフェイスcomint-highlight-input
で表示されます。これにより入力行とシェル出力を容易に区別することができます。テキストのフェイスを参照してください。
複数のサブシェルを作成するには、(C-u M-x shell)のように)プレフィクス引数を指定してM-x shellを呼び出します。その後、このコマンドはバッファー名を読み取り、そのバッファーでサブシェルを作成(または再使用)します。M-x rename-uniquelyを使用して*shell*バッファーをリネームしてから、M-x shellで新しい*shell*バッファーを作成することもできます。異なるバッファーのサブシェルは、並行して独立に実行されます。
M-x
shellによりシェルファイル名を指定するには、変数explicit-shell-file-name
をカスタマイズします。これがnil
(デフォルト)の場合、もし存在すればEmacsは環境変数ESHELL
を使用します。そうでない場合は通常、変数shell-file-name
を使用します(単一のシェルコマンドを参照してください)。しかしデフォルトディレクトリーがリモートの場合(リモートファイルを参照してください)、シェルファイル名の入力を求めます。リモートファイル名を正しくタイプする方法に関するヒントは、ミニバッファーでのファイル名を参照してください。
Emacsは新しいシェルにたいする入力として、もしそれが存在すればファイル~/.emacs_shellnameの内容を送ります。ここでshellnameは、そのシェルがロードされたファイルの名前です。たとえばbashを使う場合、送られるファイルは~/.emacs_bashになります。ファイルが見つからない場合、Emacsは~/.emacs.d/init_shellname.shの使用を試みます。
シェルにたいしてコーディングシステムを指定するには、M-x shellの直前にコマンドC-x RET cを使用します。C-x RET pとタイプすることにより、実行されているサブシェルにたいするコーディングシステムを変更することもできます。プロセス間通信にたいするコーディングシステムを参照してください。
サブシェルでは、Emacsは環境変数INSIDE_EMACS
に‘version,comint’をセットします。ここでversionは、Emacsのバージョン(たとえば‘24.1’)です。プログラムはこの変数をチェックして、Emacsの内部で実行されているかを判断することができます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ShellバッファーのためのメジャーモードはShellモードです。このモードの特別なコマンドはC-cプレフィクスにバインドされており、最初にC-cをタイプしなければならない点を除けば、通常のシェルでの編集やジョブ制御文字と共通点があります。以下はShellモードのコマンドのリストです:
サブシェルの入力にカレント行を送ります(comint-send-input
)。行頭のシェルプロンプトは省略されます(Shellプロンプトを参照してください)。ポイントがバッファーの最後にある場合、これは通常の対話的なシェルにおいてコマンド行をサブミットするのに似ています。しかし、シェルバッファーの他の場所でも、RETを呼び出してカレント行を入力としてサブミットできます。
シェルバッファーのポイントの前のコマンド名、またはファイル名を補完します(completion-at-point
)。これは通常のEmacs補完ルールを使用します(補完を参照してください)。ファイル名、環境変数名、シェルコマンドヒストリー、ヒストリー参照が補完候補になります(Shellヒストリーの参照を参照してください)。補完を制御するオプションについては、Shellモードのオプションを参照してください。
ポイントの前のファイル名にたいして、可能性のある補完リストを一時的に表示します(comint-dynamic-list-filename-completions
)。
delete文字、またはEOF文字を送ります(comint-delchar-or-maybe-eof
)。シェルバッファーの最後でこれをタイプすると、サブシェルにEOFが送られます。バッファーの他の場所でタイプすると、通常どおり文字を削除します。
行の先頭に移動しますが、プロンプトがある場合はプロンプトの後に移動します(comint-bol-or-process-mark
)。このコマンドを連続して繰り返すと、2回目はプロセスマーク(process
mark)に戻ります。これはサブシェルにまだ送信されていない入力の開始位置のことです(通常これは同じ場所 — その行のプロンプトの最後 —
ですが、C-c SPCの後では、プロセスマークは前の行にあるかもしれません)。
複数行の入力を累積して、それらを合わせて送ります(comint-accumulate
)。このコマンドはポイントの前に改行を挿入しますが、その前のテキストをサブシェルの入力として
— 少なくともその時点では —
送りません。改行の前後の行は両方、(それらを分割する改行も含めて)RETをタイプしたとき一緒に送られます。
まだ入力として送られていない、バッファーの最後のすべてのテキストをkillします(comint-kill-input
)。ポイントがバッファーの最後にない場合、これはポイントの前のテキストだけをkillします。
ポイントの前の単語をkillします(backward-kill-word
)。
シェルまたは(もしあれば)カレントのサブジョブに割り込み(interrupt)ます(comint-interrupt-subjob
)。このコマンドはシェルバッファーの最後の、まだ送られていない任意のシェル入力もkillします。
シェルまたは(もしあれば)カレントのサブジョブを停止(stop)します。(comint-stop-subjob
)。このコマンドはシェルバッファーの最後の、まだ送られていない任意のシェル入力もkillします。
シェルまたは(もしあれば)カレントのサブジョブに、シグナルQUITを送ります(comint-quit-subjob
)。このコマンドはシェルバッファーの最後の、まだ送られていない任意のシェル入力もkillします。
前のシェルコマンドからの出力の一群を削除します(comint-delete-output
)。これはシェルコマンドが大量の出力を吐くときに便利です。
前のシェルコマンドからの出力の一群をファイルに書き込みます(comint-write-output
)。プレフィクス引数を指定した場合は、ファイルに追加で書き込みます。出力の最後のプロンプトは書き込まれません。
前の一群の出力の最初がウィンドウの最上部になるようにスクロールし、カーソルもそこに移動します(comint-show-output
)。
バッファーの最後の行がウィンドウの最下部になるようにスクロールします(comint-show-maximum-output
)。
シェルコマンド1つ分、前方に移動しますが、カレント行を超えては移動しません(shell-forward-command
)。変数shell-command-regexp
は、コマンドの最後を認識する方法を指定します。
シェルコマンド1つ分、後方に移動しますが、カレント行を超えて移動はしません(shell-backward-command
)。
シェルに作業ディレクトリーを尋ね、Shellバッファーのデフォルトディレクトリーを更新します。ディレクトリーの追跡を参照してください。
エコーなしでtextを読み取った後、それをシェルの入力として送ります。これはシェルコマンドでパスワードを尋ねるプログラムを実行するとき便利です。
デフォルトではEmacsはパスワードをエコーしないことに注意してください。もし本当にエコーさせたいときは、以下のLisp式を評価します(Emacs Lisp式の評価を参照してください):
(remove-hook 'comint-output-filter-functions 'comint-watch-for-password-prompt)
シェルプロセスを継続します。これは間違ってシェルプロセスをサスペンドしてしまったときなどに便利です。20
シェル出力のカレントグループから、すべてのcontrol-M文字を破棄します。このコマンドを使うもっとも便利な方法は、サブシェルからの出力を受け取ったときに自動的に実行されるようにする方法です。これを行なうには、以下のLisp式を評価します:
(add-hook 'comint-output-filter-functions 'comint-strip-ctrl-m)
このコマンドはシェルバッファーを、変数comint-buffer-maximum-size
により指定される、特定の最大行数に切り詰めます。以下は、サブシェルから出力を受けとるとき、毎回自動的にこれを行なう方法です:
(add-hook 'comint-output-filter-functions 'comint-truncate-buffer)
Shellモードは、サブプロセスと対話的に通信を行なう一般的な用途向けのComintモードから派生したモードです。上記のコマンド名からも判るとおり、Shellモードのほとんどの機能は、実際にはComintモードが由来です。Shellモードの特別な機能には、ディレクトリー追跡機能、およびいくつかのユーザーコマンドが含まれます。
Comintモードの変種を使う他のEmacs機能には、GUD (Emacs下でのデバッガーの実行を参照してください)や、M-x run-lisp (外部Lispの実行を参照してください)が含まれます。
サブプロセスとして選択した任意のプログラムを実行するために、Shellモードに特化しない未修正のComintモードを使用するには、M-x comint-runを使用することができます。プログラムに引数を渡すにはC-u M-x comint-runを使用します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
プロンプトとは、新しいユーザー入力を受け取る準備ができたことを表す、プログラムによるテキスト出力のことです。Comintモード(したがってShellモードも)は通常、サブプロセスからの出力にもとづいて、バッファーの一部をプロンプトとして自動的に判断します(具体的には、改行で終端されていない任意の出力行を受け取ったときは、プロンプトとみなします)。
Comintモードは、バッファーを2つのタイプのフィールド(fields)に分けます。1つは入力フィールド(ユーザーの入力がタイプされるところ)で、もう1つは出力フィールド(入力フィールド以外)です。プロンプトは出力フィールドの一部です。ほとんどのEmacs移動コマンドは、そのコマンドが複数行を移動しない限り、フィールド境界を超えることはありません。たとえば、ポイントがシェルコマンドの入力フィールドにある場合、C-aはポイントを入力フィールドの先頭、プロンプトの後に配します。内部的には、フィールドはテキストプロパティーfield
を使って実装されています(Text
Properties in the Emacs Lisp Reference Manualを参照してください)。
変数comint-use-prompt-regexp
を非nil
値に変更した場合、Comintモードは正規表現を使ってプロンプトを認識します(正規表現の構文を参照してください)。Shellモードでは、その正規表現は変数shell-prompt-pattern
により指定されます。comint-use-prompt-regexp
のデフォルト値はnil
です。なぜならプロンプト認識のためのこの方法は信頼性が低いためです。しかし特殊な状況では、これを非nil
値にセットしたいと思うこともあるでしょう。そのような場合、EmacsはComintバッファーをフィールドに分割しないので、一般的な移動コマンドは、テキストプロパティーを使用せず、それらのコマンドがバッファーで通常行なうように振る舞います。しかし、バッファーを便利に操作するために、パラグラフ移動コマンドを使うことができます(パラグラフを参照してください)。Shellモードでは、Emacsはパラグラフ境界にshell-prompt-pattern
を使用します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Shellバッファーは、以前のコマンドを繰り返す3つの方法をサポートします。1つ目はミニバッファーヒストリーにたいして使うのと同じようなキーを使う方法です。つまり、これらはミニバッファーで行なうのと同じように、前のコマンドからテキストを挿入して、ポイントを常にバッファーの最後に保ちます。2つ目は、バッファーを移動して元の場所から前の入力を取得して、それらを再実行したり、バッファーの最後にコピーする方法です。3つ目は‘!’スタイルのヒストリー参照を使う方法です。
38.5.1 Shellヒストリーリング | ヒストリーリストからコマンドを取り出す。 | |
38.5.2 Shellヒストリーのコピー | コマンドに移動して、それをコピーする。 | |
38.5.3 Shellヒストリーの参照 | ‘!’スタイルのヒストリー参照の展開。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以前のシェルコマンドから、次に古いコマンドを取り出します(comint-previous-input
)。
以前のシェルコマンドから、次に新しいコマンドを取り出します(comint-next-input
)。
以前のシェルコマンドにたいして、インクリメンタルregexp検索を開始します(comint-history-isearch-backward-regexp
)。
ヒストリーから次のコマンドを取り出します(comint-get-next-from-history
)。
以前のシェルコマンドから引数を1つ取り出します(comint-input-previous-argument
)。
そのバッファーのシェルコマンドのヒストリーを、別のウィンドウに表示します(comint-dynamic-list-input-ring
)。
Shellバッファーは、以前に入力したシェルコマンドのヒストリーを提供します。ヒストリーからシェルコマンドを再利用するには、編集コマンドM-p、M-n、M-rを使用します。これらは、ミニバッファーではなくShellバッファーを操作する点を除き、ミニバッファーヒストリーコマンド(ミニバッファーヒストリーを参照してください)と同じように機能します。またShellバッファー内でのM-r
は、シェルコマンドヒストリーにたいするインクリメンタル検索を呼び出します。
M-pは、シェルバッファーの最後から以前のシェルコマンドを取り出します。連続してM-pを使用すると、古いシェルコマンドを連続して取り出し、その度にシェル入力の候補として表示されているテキストを置き換えます。M-nも同様に機能しますが、これはバッファーから、より新しいシェルコマンドを連続して探します。C-UPはM-pと同様に機能し、C-DOWNはM-nと同様に機能します。
ヒストリー検索コマンドM-rは、以前のシェルコマンドにたいしてインクリメンタル正規表現検索を開始します。M-rとタイプした後に、検索したい文字列か正規表現のタイプを開始します。するとマッチする最後のシェルコマンドがカレント行に表示されます。インクリメンタル検索コマンドは通常の効果をもちます — たとえばC-sおよびC-rは前方または後方に、次のマッチを検索します(インクリメンタル検索を参照してください)。探している入力が見つかったら、検索を終了するためにRETをタイプします。これにより、入力がコマンドラインに配されます。ヒストリーリストを操作する前にタイプしていた入力の一部は、ヒストリーリングの先頭または最後に達したときに復元されます。
以前に実行した一連のシェルコマンドを、同じ順番で再実行できたら便利なこともあります。これを行なうには、最初に順番に再実行する1番目のコマンドを検索します。その後C-c C-xとタイプします。これは次のコマンド — つまり再実行したコマンドの次のコマンドを取り出します。それからRETでそのコマンドを実行します。C-c C-x RETを繰り返しタイプすることにより、連続する複数のコマンドを再実行することができます。
コマンドC-c .
(comint-insert-previous-argument
)は、BashのESC
.のように、以前のコマンドから個別に引数をコピーします。一番簡単な使い方は、以前のシェルコマンドから最後の引数をコピーする方法です。プレフィクス引数nを指定すると、n番目の引数をコピーします。繰り返しC-c
.とタイプすることにより、さらに古いシェルコマンドからコピーします。この場合、常に同じnの値を使用します(C-c
.を繰り返すときは、プレフィクス引数を与えないでください)。
comint-insert-previous-argument-from-end
を非nil
値にセットすると、C-c
.はかわりに最後から数えてn番目の引数をコピーします。これはzsh
のESC
.をエミュレートしたものです。
これらのコマンドは、以前のシェルコマンドのテキストを、シェルバッファー自身からではなく、特別なヒストリーリストから取得します。したがってシェルバッファーを編集したり、広い範囲をkillしても、これらのコマンドがアクセスするヒストリーに影響はありません。
シェルの中には、コマンドヒストリーをファイルに保存して、以前のシェルセッションからコマンドを参照できるようにするものがあります。Emacsは選択されたシェルにたいして、コマンドヒストリーを初期化するために、コマンドヒストリーファイルを読み込みます。ヒストリーファイル名は、bashでは~/.bash_history、kshでは~/.sh_history、他のシェルでは~/.historyです。
リモートホストでシェルを実行した場合には、このセッティングは変数tramp-histfile-override
に上書きされるかもしれません。この変数はnil
にセットすることを推奨します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
前のプロンプトにポイントを移動します(comint-previous-prompt
)。
次のプロンプトにポイントを移動します(comint-next-prompt
)。
ポイント位置の入力コマンドをコピーして、そのコピーをバッファーの最後に挿入します(comint-copy-old-input
)。これは以前のコマンドにポイントを移動したときに便利です。コマンドをコピーした後、RETでそのコピーを入力として実行することができます。再実行する前に、そのコピーを編集することもできます。このコマンドを出力行で使用した場合、その行をバッファーの最後にコピーします。
comint-use-prompt-regexp
がnil
(デフォルト)の場合、クリックした以前の入力コマンドをコピーして、そのコピーをバッファーの最後に挿入します(comint-insert-input
)。comint-use-prompt-regexp
が非nil
、または以前の入力以外の場所をクリックしたときは、通常のようにyankします。
以前の入力に移動して、C-c RETまたはmouse-2でコピーすることは、M-pを充分な回数使用して、ヒストリーリングから以前の入力を取り出したときと同じ結果 — つまり同じバッファー内容 — を生成します。しかしC-c RETは、バッファーからテキストをコピーするので、入力をシェルに送信した後に入力テキストを編集していた場合は、ヒストリーリストと異なります。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
cshやbashを含むさまざまなシェルは、‘!’や‘^’で始まるヒストリー参照(history references)をサポートします。Shellモードはこれらを認識して、ヒストリーの置き換える処理をします。
ヒストリー参照を挿入してTABとタイプすると、これは入力ヒストリーからマッチするコマンドを検索して、必要なら置換を行い、結果をバッファー内のヒストリー参照の場所に配します。たとえば、一番最近の‘mv’で始まるコマンドを取り出すには、! m v TABとタイプします。必要ならコマンドを編集して、RETでシェルにたいしてコマンドを再実行できます。
Shellモードはヒストリー参照をシェルに送るとき、オプションでヒストリー参照を展開できます。これを行なうには、変数comint-input-autoexpand
をinput
にセットします。SPCをcomint-magic-space
にバインドすれば、SPCでヒストリー参照を展開できます。対話的なキーバインディングの変更を参照してください。
Shellモードは、ヒストリー参照がプロンプトの後にあればヒストリー参照を認識します。Shellモードがプロンプトを認識する方法については、Shellプロンプトを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Shellモードは、Shellバッファーのデフォルトディレクトリー(ファイルの名前を参照してください)をシェルの作業ディレクトリーと同一に保つために、サブシェルに与えられる‘cd’、‘pushd’、‘popd’のコマンドを追跡します。これは、送信する入力行を調べることにより認識されます。
これらのコマンドにたいしてエイリアスを使用する場合、変数shell-pushd-regexp
、shell-popd-regexp
、shell-cd-regexp
に適切な正規表現(正規表現の構文を参照してください)をセットすることにより、それらも認識するようEmacsに指示できます。たとえば、shell-pushd-regexp
がシェルコマンドラインの先頭にマッチした場合、その行はpushd
コマンドとして記録されます。これらのコマンドは、シェルコマンドラインの先頭だけで認識されます。
Emacsが作業ディレクトリーの変更に際して混乱した場合は、M-x dirsを試してください。このコマンドはシェルに作業ディレクトリーを尋ねて、それに対応してデフォルトディレクリーを更新します。これは、一般的なコマンド構文のほとんどをサポートするシェルでは機能しますが、特殊なシェルでは機能しないかもしれません。
シェルの作業ディレクトリーを追跡する他の方法を実装した、バッファーローカルなマイナーモードの、Dirtrackモードを使うこともできます。この方法を使うには、シェルプロンプトに常に作業ディレクトリーが含まれていなければならず、プロンプトのどの部分が作業ディレクトリーを含むか認識するための正規表現を与えなければなりません。詳細は、変数dirtrack-list
のドキュメントを参照してください。Dirtrackモードを使用するには、ShellバッファーでM-x
dirtrack-modeとタイプするか、shell-mode-hook
にdirtrack-mode
を追加します(フックを参照してください)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
変数comint-scroll-to-bottom-on-input
が非nil
の場合、挿入およびyankコマンドは、挿入する前に選択されたウィンドウを、バッファーの最後までスクロールします。デフォルトはnil
です。
comint-scroll-show-maximum-output
が非nil
の場合、ポイントが最後にあるとき到着した出力は、可能な限り有用なテキストを表示するために、テキストの最後の行がウィンドウの一番下になるようなスクロールを試みます(これはほとんどの端末のスクロール動作を真似た動作です)。デフォルトはt
です。
comint-move-point-for-output
をセットすることにより、出力が到着したときにバッファーの最後にポイントをジャンプさせることができます
—
その前にポイントがバッファーのどこにあろうと関係ありません。値がthis
の場合、選択されたウィンドウ内でポイントがジャンプします。値がall
の場合、Comintバッファーを表示するすべてのウィンドウでポイントがジャンプします。値がother
の場合、カレントバッファーを表示する、選択されていないすべてのウィンドウでポイントがジャンプします。デフォルト値はnil
で、これはポイントが最後にジャンプしないことを意味します。
comint-prompt-read-only
をセットした場合、Comintバッファーのプロンプトは読み取り専用になります。
変数comint-input-ignoredups
は、連続する同じ入力を入力ヒストリーに保存するかを制御します。非nil
値は、入力が前の入力と同じ場合は省略することを意味します。デフォルトはnil
で、これは入力が前の入力と同じでも保存することを意味します。
ファイル名の補完をカスタマイズする3つの変数があります。変数comint-completion-addsuffix
は、完全に補完されたファイル名またはディレクトリー名の最後にスペースまたはスラッシュを挿入するかを制御します(非nil
は、スペースまたはスラッシュを挿入することを意味します)。comint-completion-recexact
が非nil
の場合、通常のEmacs補完アルゴリズムが1文字も追加できないようなときは、TABで一番短い利用可能な補完を選択するよう指示します。comint-completion-autolist
が非nil
の場合、補完が完全でないときは、利用可能なすべての候補をリストするよう指示します。
コマンド補完は通常、実行可能ファイルだけを考慮します。shell-completion-execonly
をnil
にセットした場合は、実行可能ファイル以外も同様に考慮します。
変数shell-completion-fignore
は、Shellモードで無視するファイル名の拡張子のリストを指定します。デフォルトはnil
ですが、‘~’、‘#’、‘%’で終わるファイル名を無視するために("~"
"#"
"%")
をセットするユーザーもいます。他のComintモードに関連するモードは、かわりに変数comint-completion-fignore
を使用します。
シェルコマンド補完の実装の詳細は、shell-dynamic-complete-command
関数のlispドキュメントで見ることもできます。
‘pushd’の動作を設定することができます。shell-pushd-tohome
は、引数を与えない場合に‘pushd’が‘cd’のように振る舞うかを制御します。shell-pushd-dextract
は、数引数を与えたときローテートするのではなくpopするかを制御します。shell-pushd-dunique
は、ディレクトリースタックにディレクトリーがない場合だけ追加するかを制御します。もちろん選択する値は背後のシェルに適合する必要があります。
Comintモードは、環境変数TERM
の値を安全なデフォルト値にセットしますが、この値はいくつかの有用な機能を無効にします。たとえば、カラーがサポートされているかの判断にTERM
を使用するため、アプリケーションではカラーが無効になっています。したがって、Emacsはオプションcomint-terminfo-terminal
を提供します。そのため、その端末の高度な機能を利用するために、システムのterminfoデータベースにより提供される端末にセットできます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
テキスト端末エミュレーターでサブシェルを実行するには、M-x termを使用します。これは*terminal*という名前のバッファーを作成(または再利用)して、キーボードを入力とするサブシェルを実行し、出力はそのバッファーになります。
端末エミュレーターは、2つの入力モードをもつTermモードを使用します。lineモード(line mode)では、Termは基本的にShellモードのように振る舞います(Shellモードを参照してください)。charモード(char mode)では、文字は端末入力として直接サブシェルに送られます。唯一の例外は端末エスケープ文字で、デフォルトはC-cです(Termモードを参照してください)。入力をエコーするのはサブシェルの役目です。サブシェルからの端末出力は、バッファーのポイントの後に送られます。
(Emacsのような)いくつかのプログラムでは、端末スクリーンで詳細に外観を制御する必要があります。これらのプログラムは特別な制御コードを送ることによりこれを行ないます。Termモードは、xterm
を含むほとんどの現代的な端末で使用できる、ANSI標準のVT100スタイルのエスケープシーケンスを認識・処理します(したがって、実際にEmacsのTermウィンドウ内でEmacsを実行することもできます)。
term
フェイスは、端末エミュレーターのテキストのデフォルトの外観を指定します(デフォルトはdefault
フェイスと同じ外観です)。端末の制御コードがテキストの外観を変更するために使用される場合、これらは端末エミュレーター内で、フェイスterm-color-black
、term-color-red
、term-color-green
、term-color-yellow
、term-color-blue
、term-color-magenta
、term-color-cyan
、term-color-white
、term-color-underline
、term-color-bold
で表示されます。テキストのフェイスを参照してください。
シリアルポートに接続されたデバイスと通信するために、Termモードを使うこともできます。シリアル端末を参照してください。
サブシェルをロードするために使用されるファイル名は、Shellモードと同じ方法で決定されます。複数の端末エミュレーターを作成するには、Shellモードと同じように、M-x rename-uniquelyを使って、バッファー*terminal*を違う名前にリネームします。
Shellモードとは異なり、Termモードは入力を調べてカレントディレクトリーを追跡することはしません。しかし、いくつかのシェルはカレントディレクトリーをTermに告げることができます。これはbash
のバージョン1.15以降では自動的に行なわれます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Termモードでlineモードとcharモードを切り替えるには、以下のコマンドを使用します:
lineモードに切り替えます(term-line-mode
)。すでにlineモードのときは何もしません。
charモードに切り替えます(term-char-mode
)。すでにcharモードのときは何もしません。
以下のコマンドはcharモードだけで利用可能です:
サブシェルに、リテラルのC-cを送ります(term-interrupt-subjob
)。
これは通常のEmacsでのC-x charと等価です。たとえばC-c oは、通常C-x oにグローバルにバインドされている‘other-window’を呼び出します。
Termモードにはpage-at-a-time(1度に1ページ)機能があります。これが有効な場合、出力の画面の最後で一時停止します。
page-at-a-time機能を切り替えます(term-pager-toggle
)。このコマンドはlineモードとcharモードの両方で機能します。この機能が有効な場合、モードラインには単語‘page’が表示され、Termが1画面に収まらない出力を受け取ったときは、一時停止してモードラインに‘**MORE**’を表示します。SPCとタイプすると次の1画面分の出力を表示し、?でオプションを見ることができます。このインターフェースは、more
プログラムと同様です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Termウィンドウから、通常の端末から使うコマンド(たとえばssh
、telnet
、rlogin
)で、リモートコンピューターにログインすることができます。
パスワードを尋ねるようなプログラムは、通常パスワードをエコーしないので、パスワードはバッファーにも表示されません。バッファーがcharモードの場合、実際の端末で使用しているのと同じ動作になります。lineモードの場合、パスワードは一時的に表示されますが、リターンをタイプするとパスワードは消去されます(これは自動的に行なわれます。特別なパスワード処理は行なっていません)。
別のマシンにログインしているときは、リモートログインコマンドのために、環境変数TERM
をセットすることにより、端末タイプを指定する必要があります(bashを使用している場合、リモートログインコマンドの前に、カンマで区切らず値割り当てを記述することにより、これを行なうことができます)。端末タイプ‘ansi’または‘vt100’は、ほとんどのシステムで動作するでしょう。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
コンピューターに、シリアルポートに接続されたデバイスがあるとき、M-x serial-termとタイプすることにより、デバイスと通信することができます。このコマンドは新しいTermモードのバッファーのために、ポート番号、スピード、スイッチを尋ねます。Emacsは、通常のTermモードの端末で行なうのと同じように、このバッファーを通じてシリアルデバイスと通信します。
シリアルポートのスピードはビット毎秒で計ります。もっとも一般的なスピードは9600ビット毎秒です。モードラインをクリックすることにより、このスピードを対話的に変更できます。
シリアルポートはモードラインの‘8N1’をクリックしても設定できます。デフォルトでは、シリアルポートは‘8N1’に設定されており、これは各バイトは8ビットからなり、パリティービットチェックなし、ストップビットが1であることを意味します。
スピードや設定が間違っている場合、デバイスと通信できず、おそらくウィンドウにはゴミが出力されるでしょう。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
さまざまなプログラムが、特定のテキスト断片を編集するために、あなたが選択したエディターを呼び出すことができます。たとえば、バージョンコントロールシステム(バージョンコントロールを参照してください)は、バージョンコントロールログを入力するためのエディターを呼び出し、Unixのmail
ユーティリティーは送信メッセージの入力にエディターを呼び出します。慣例により、選択するエディターは、環境変数EDITOR
で指定されます。しかしEDITOR
を‘emacs’にセットした場合、Emacsが呼び出されますが、これは便利な方法ではありません
—
なぜなら新しいEmacsプロセスが開始されるからです。なぜこれが不便かというと、新たなEmacsプロセスは、既存のEmacsプロセスのバッファー、コマンドヒストリー、その他の情報を共有しないからです。
Emacsをedit server(編集サーバー)としてセットアップして、Emacsが外部からの編集リクエストを“listen”し、それに応じて動作させることにより、この問題を解決できます。Emacsサーバーを開始するにはさまざまな方法があります:
(server-start)
を記述して、既存のEmacsプロセスでコマンドserver-start
を実行します。既存のEmacsプロセスがサーバーになり、Emacsを終了すると、サーバーはそのEmacsプロセスとともに終了します。
server-start
を呼び出して、初期フレームを開きません。その後クライアントからの編集リクエストをwaitします。
systemd
を使用する場合、提供されるsystemdユニットファイル(systemd
unit file)を使用して、ログイン時に自動的にデーモンモードのEmacsを開始できます。これをアクティブにするには:
systemctl --user enable emacs
(Emacsが標準的な場所にインストールされていない場合は、~/.config/systemd/user/のような標準的なディレクトリーにemacs.serviceをコピーする必要があるかもしれません。)
systemd
のソケット機能です。systemd
サービスはソケットを作成して、そのソケットへの接続をlistenします。emacsclient
が最初にこれに接続したとき、emacsclient
による接続のために、systemd
はEmacsサーバーを起動して、そのソケットを渡すことができます。emacsclient
が最初にこれに接続したとき、emacsclient
による接続のために、systemd
はEmacsサーバーを起動して、そのソケットを渡すことができます。この機能を使用するためのセットアップは:
~/.config/systemd/user/emacs.socket:
[Socket] ListenStream=/path/to/.emacs.socket [Install] WantedBy=sockets.target
(上述のファイルemacs.serviceもインストールされていなければなりません。)
パスListenStream
は、Emacsがemacsclient
からの接続をlistenするパスです。これは、あなたが選択するファイルです。
Emacsサーバーを一度開始すると、emacsclient
というシェルコマンドを使用してEmacsに接続して、ファイルをvisitするよう指示できます。環境変数EDITOR
に‘emacsclient’をセットすれば、外部プログラムは編集のために既存のEmacsプロセスを使用できます。21
変数server-name
を使って、一意なサーバー名を与えることにより、同一マシン上で複数のEmacsサーバーを実行することができます。たとえばM-x
set-variable RET server-name RET "foo"
RETは、サーバー名を‘foo’にセットします。emacsclient
プログラムはTCPソケット使用の有無に応じて‘-s’オプション、または‘-f’オプション(emacsclient
のオプションを参照)で、名前によりサーバーを指定できます(emacsclient
のオプションを参照)。
複数のEmacsデーモン(初期化オプションをい参照してください)を実行したい場合、以下のようにデーモンごとにそれぞれ、独自のサーバー名を与えることができます:
emacs --daemon=foo
一意なサーバー名によりサーバーを定義した場合、他のEmacsインスタンスからそのサーバーに接続し、server-eval-at
関数を使用して、そのサーバーでLisp式を評価できます。たとえば(server-eval-at
"foo" '(+ 1 2))
は、式(+ 1
2)
をサーバー‘foo’で評価して、3
を返します(そのような名前のサーバーが存在しない場合はエラーをシグナルします)。現在のところ、これは主に開発者に有用な機能です。
39.1 TCP Emacs server | TCPソケットのlisten。 | |
39.2 emacsclient の呼び出し | Emacsサーバーへの接続。 | |
39.3 emacsclient のオプション | Emacsクライアントの開始オプション。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsサーバーは通常、接続にたいしてローカルのUnixドメインソケットをlistenします。
MS-Windowsのようないくつかのオペレーティングシステムは、ローカルソケットをサポートしません。そのような場合、サーバーはかわりにTCPソケットをlistenします。ローカルソケットがサポートされている場合でも、サーバーにTCPソケットをlistenさせるほうが便利な場合があります(たとえばリモートマシンからEmacsサーバーに接続する必要がある場合)。ローカルソケットのかわりにTCPソケットをEmacsにlistenさせる場合は、server-use-tcp
に非nil
をセットできます。これはOSがローカルソケットをサポートしない場合は、デフォルトです。
EmacsサーバーがTCPを使うように設定されている場合は、デフォルトではlocalhostインターフェイスのランダムなポートをlistenします。server-host
とserver-port
を使用して、これを他のインターフェイス、および/または固定されたポートに変更できます。
TCPソケットは、ファイルシステムのパーミッションの対象ではありません。TCPソケットを通じて、誰がEmacsサーバーと通信できるか何らかの制御を得るには、emacsclient
プログラムがサーバーに認証キーを送信しなければなりません。このキーは通常、Emacsサーバーによりランダムに生成されます。これが推奨されるモードです。
必要なら、server-auth-key
変数をセットすることにより、認証キーに静的な値をセットできます。このキーは、スペースを除くプリント可能な64文字のASCII文字(これは‘!’から‘~’、10進コードの33から126を意味します)から構成されなければなりません。ランダムキーを得るために、M-x
server-generate-keyを使用できます。
TCP
Emacsサーバーを開始したとき、Emacsはemacsclient
がサーバーに接続するために使用する、TCP情報を含むサーバーファイル(server
file)を作成します。変数server-auth-dir
は、サーバーファイルを含むデフォルトディレクトリーを指定します。デフォルトでは、これは~/.emacs.d/server/です。アクセス権限(file
permission)をもつlocalソケットが存在しない場合は、このディレクトリーのパーミッションにより、どのユーザーのemacsclient
プロセスがEmacsサーバーと対話(talk)できるか判断されます。server-name
がー絶対ファイル名なら、サーバーファイルはそのファイル名で作成されます。
特定のserverファイルによりTCPサーバーに接続するようemacsclient
に指示するには、オプション‘-f’または‘--server-file’を使用するか、環境変数EMACS_SERVER_FILE
をセットします(emacsclient
のオプションを参照)。server-auth-dir
が非標準的な値にセットされていたり、server-name
に絶対ファイル名がセットされていると、デフォルトのserver-auth-dir
は、相対ファイル名を解決するために使用するディレクトリーとして、emacsclient
内にハードコーディングされているため、serverファイルにたいする絶対ファイル名が必要になります。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
emacsclient
の呼び出しemacsclient
プログラムを使う一番簡単な方法は、シェルコマンド‘emacsclient
file’を実行する方法です。ここでfileはファイル名です。これはEmacsサーバーに接続して、Emacsプロセスの既存のフレームの1つ
— グラフィカルなフレーム、またはテキスト端末のフレーム(フレームとグラフィカルなディスプレーを参照してください) —
でfileをvisitするよう指示します。それから、そのフレームを選択して編集を開始できます。
Emacsサーバーが存在しない場合、emacsclient
はエラーメッセージと共に終了します(このハプニングによるエラー終了は、emacsclient
にたいして‘--alternate-editor=\"\"’オプションを使用して回避できる。emacsclient
のオプションを参照されたい)。Emacsプロセスに既存のフレームがない場合 — これはサーバーがデーモン(サーバーとしてのEmacsの使用を参照してください)として開始されたときに発生し得ます —
は、emacsclient
を呼び出した端末でEmacsフレームをオープンします。
オプション‘-c’でグラフィカルなディスプレー、‘-t’を使用しテキスト端末で新しいフレームを開くように、emacsclient
に強制することもできます。emacsclient
のオプションを参照してください。
単一のテキスト端末で実行している場合、emacsclient
のシェルとEmacsサーバーを、次の2つの方法で切り替えることができます。1つ目は、Emacsサーバーと、別の仮想端末でemacsclient
を実行して、emacsclient
を呼び出した後にEmacsサーバーの仮想端末に切り替える方法です。2つ目は、Emacsサーバー自身からShellモード(対話的なサブシェルを参照してください)、またはTermモード(Termモードを参照してください)を使ってemacsclient
を呼び出す方法です。emacsclient
は、Emacs配下のサブシェルのときだけブロックするので、依然としてファイルの編集にEmacsを使用できます。
Emacsサーバーでfileの編集を終えたら、そのバッファーでC-x #
(server-edit
)とタイプします。これはファイルを保存して、emacsclient
プログラムに終了を告げるメッセージを送り返します。通常、EDITOR
を使うプログラムは、何か他のことを行なう前にエディター
— この場合はemacsclient
— の終了を待ちます。
複数のファイル名を引数にしてemacsclient
を呼び出すこともできます。‘emacsclient
file1 file2
...’は、Emacsサーバーにfile1、file2、...をvisitするよう指示します。Emacsはfile1をvisitしているバッファーを選択して、他のバッファーをバッファーリストの最後に隠します(複数バッファーの使用を参照してください)。指定されたすべてのファイルを終了したら(たとえば各サーバーバッファーでC-x
#をタイプしたら)、emacsclient
プログラムは終了します。
サーバーバッファーを終了すると、そのバッファーがサーバーバッファーを作成する前から存在していたバッファーでないかぎり、そのバッファーもkillされます。しかしserver-kill-new-buffers
をnil
にセットした場合、別の基準が使用されます。この場合、サーバーバッファーの終了は、ファイル名が正規表現server-temp-file-regexp
にマッチするときは、バッファーをkillします。これはある種の一時ファイルを区別するための仕組みです。
各C-x
#は、さまざまなファイルを編集する、保留されている外部要求が他にないかチェックして、次のそのようなファイルを選択します。サーバーバッファーに辿り着くのに、C-x
#だけを使わなければならない訳ではありません。サーバーバッファーに手動で切り替えることもできます。しかしC-x
#は、emacsclient
に終了したことを告げる方法なのです。
変数server-window
の値をウィンドウやフレームにした場合、C-x
#は常に次のサーバーバッファーを、そのウィンドウまたはそのフレームに表示します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
emacsclient
のオプション以下のようなオプション引数をemacsclient
プログラムに渡すことができます:
emacsclient -c +12 file1 +4:3 file2
引数‘+line’および‘+line:column’は、その後に続くファイルの行番号、または行番号と列番号を指定します。これらはEmacs自身に対するコマンドライン引数と同じように機能します。 動作引数を参照してください。
その他のemacsclient
により認識されるオプション引数を以下にリストします:
emacsclient
が、Emacsとの接続に失敗したとき実行するシェルコマンドを指定します。これはスクリプト内でemacsclient
を実行するとき便利です。このコマンドには、\"like
this\"のようにクォートされた引数が含まれるかもしれません。現在のところ、クォートのエスケープはサポートされていません。
特別な例外として、commandが空文字列の場合、接続に失敗したらemacsclient
は(‘emacs
--daemon’のように)Emacsをデーモンモードで開始して、再度接続を試みます。
環境変数ALTERNATE_EDITOR
は、‘-a’オプションと同じ効果をもちます。両方が指定された場合は、後者のオプションが優先されます。
既存のEmacsフレームを使うかわりに、新しいグラフィカルなクライアントフレーム(client frame)を作成します。クライアントフレームでの、C-x C-cの特別な振る舞いについては、以下を参照してください。(Xサーバーに接続できない等で)新たにグラフィカルなフレームを作成しない場合、あたかも‘-t’オプションが指定されたかのように、テキスト端末でクライアントフレームの作成を試みます。
MS-Windowsでは、単一のEmacsセッションがグラフィカルなフレームとテキスト端末のフレームの両方を表示することはできず、複数のテキスト端末のフレームを表示することもできません。したがってEmacsサーバーがテキスト端末で実行されている場合、‘-c’オプションは‘-t’オプションのように、サーバーのカレントテキスト端末で新たなフレームを作成します。MS-WindowsでEmacsを開始する方法を参照してください。
‘-c’オプションを指定するときに、ファイル名の引数を省略した場合、新しいフレームはデフォルトで*scratch*バッファーを表示します。変数initial-buffer-choice
でこの振る舞いをカスタマイズできます(Emacsの起動を参照してください)。
新たに作成される、グラフィカルなフレームのパラメーターをセットします(フレームパラメーターを参照してください)。
与えられたファイルを、(複数のXディスプレーがあることを想定して)Xディスプレーdisplayで開くようEmacsに指示します。
ファイルをvisitするかわりに、Emacs
Lispコードを評価するようEmacsに指示します。このオプションが与えられた場合、emacsclient
は引数をvisitするファイルではなく、式のリストと解釈します。
TCPを通じてEmacsサーバーに接続するためのserverファイル(TCP Emacs serverを参照)を指定します。かわりにserverファイルを示すように、環境変数EMACS_SERVER_FILE
をセットできます(コマンドラインオプションは、環境変数をオーバーライドする)。
Emacsサーバーは通常は接続にたいしてローカルソケットをlistenしますが、TCPを通じた接続もサポートします。TCPによりEmacsサーバーに接続するためには、emacsclient
がEmacsサーバーへの接続に関する詳細を含むserverファイル(server
file)を読み込む必要があります。このオプションでserverファイル名を指定します。これは~/.emacs.d/serverからの相対ファイル名か、絶対ファイル名です。TCP Emacs serverを参照してください。
すべてのサーバーバッファーが終了するのを待つかわりに、emacsclient
が即座に終了するようにします。Emacsのサーバーバッファーで編集したいときに、このオプションを指定します。C-x
#をタイプしても、これらはkillされません。
XEmbedプロトコルを通じて、IDがidの親Xウィンドウでクライアントフレームとして、emacsclient
フレームをオープンします。現在のところ、これは主に開発者に有用なオプションです。
emacsclient
がEmacsを待つメッセージ、またはリモートのサーバーソケットに接続するメッセージを表示しないようにします。
サーバーからリターンされた結果を、emacsclient
が表示しないようにします。これは主に‘-e’と併用し、評価が結果ではなく副作用を目的としているとき有用です。
名前がserver-nameのEmacsサーバーに接続します(このオプションはMS-Windowsではサポートされない)。サーバー名は、Emacsサーバー上の変数server-name
により与えられます。このオプションが省略された場合、emacsclient
は見つかったサーバーに接続します。Emacsサーバーのserver-name
に絶対ファイル名をセットした場合は、emacsclient
がそのサーバーに接続するよう指示するために、server-nameに同じ絶対ファイル名を与えてください。Emacsをデーモンとして開始(初期化オプションを参照)して、そのデーモンにより開始されたサーバーに名前を指定した場合には、このオプションを使用する必要があります。
かわりにserverソケットを示すように、環境変数EMACS_SOCKET_NAME
をセットできます(コマンドラインオプションは環境変数をオーバーライドする)。
既存のEmacsフレームを使うかわりに、カレントテキスト端末に新たなクライアントフレームを作成します。これはテキスト端末のフレームを作成する点を除き、上記で説明した‘-c’と同じように振る舞います(非ウィンドウ端末を参照してください)。
MS-Windowsでは、Emacsサーバーがグラフィカルなディスプレーを使っている場合は‘-c’のように振る舞いますが、Emacsサーバーがテキスト端末で実行されている場合は、カレントテキスト端末に新たなフレームを作成します。
EmacsがTRAMP (The Tramp Manual in The Tramp
Manualを参照)を使用してリモートマシンにファイルを配すとき(リモートファイルを参照)、ファイル名に追加されるプレフィクスをセットします。これは主に、TCP上でのEmacsサーバーの使用と併用すると有用です(TCP Emacs serverを参照)。listenするポートをsshフォワードして、リモートマシンでserver-fileを利用可能にすることにより、リモートマシン上のプログラムはEDITOR
、および同種の環境変数にたいする値にemacsclient
を使用できますが、リモートマシンからEmacsサーバーと通信するかわりに、そのファイルはTRAMPを使用してローカルのEmacsセッションによりvisitされます。
環境変数EMACSCLIENT_TRAMP
は、‘-T’オプションと同じ効果をもちます。両方が指定された場合は、コマンドラインのオプションが優先されます。
たとえば2つのホスト‘local’および‘remote’があり、ローカルのEmacsはTCPポート12345をlistenしているとします。さらに/homeが共有ファイルシステム上にあるとすると、serverファイル~/.emacs.d/server/serverは両方のホストから読み込めることになります。
local$ ssh -R12345:localhost:12345 remote remote$ export EDITOR="emacsclient \ --server-file=server \ --tramp=/ssh:remote:" remote$ $EDITOR /tmp/foo.txt #Should open in local emacs.
オプション‘-c’または‘-t’で作成された、グラフィカルなフレームおよびテキスト端末のフレームは、クライアントフレーム(client
frames)とみなされます。クライアントフレームから作成した新たなフレームも、クライアントフレームとみなされます。クライアントフレームでC-x
C-c
(save-buffers-kill-terminal
)とタイプした場合、それが通常行なうようなEmacsセッションのkill(Emacsからのexitを参照してください)は行なわれません。かわりにEmacsはクライアントフレームを削除します。さらに、制御を取り戻すために待っているemacsclient
をクライアントフレームがもつ場合(たとえば‘-n’オプションを与えなかった場合)、Emacsは同じくクライアントの他のすべてのフレームを削除し、(それらすべてにたいしてC-x
#をタイプしたかのように)クライアントのサーバーバッファーが終了したとマークします。クライアントフレームが削除された後、残ったフレームが存在しない場合、Emacsセッションは終了します。
例外として、Emacsがデーモンとして開始された場合、すべてのフレームはクライアントフレームとみなされ、C-x C-cがEmacsをkillすることはありません。デーモンセッションを終了するには、M-x kill-emacsとタイプします。
‘-t’と‘-n’は、矛盾するオプションであることに注意してください。‘-t’はカレントテキスト端末に新たにクライアントフレームを作成して制御することを指示し、‘-n’はテキスト端末で制御を行なわないことを指示するからです。両方のオプションを与えた場合、‘-t’の効果は打ち消されて、Emacsは新たにフレームを作成せず、既存のフレームで指定されたファイルをvisitします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsは、バッファーの全体、または一部のハードコピーを印刷するコマンドを提供します。以下で詳しく述べるとおり、直接印刷コマンドを呼び出したり、メニューバーの‘File’メニューを使うことができます。
このセクションで説明するコマンドとは別に、Dired(ファイルにたいする操作を参照してください)からハードコピーを印刷したり、ダイアリー(ダイアリーの表示を参照してください)から印刷することもできます。コマンドM-x htmlfontify-bufferで、EmacsバッファーをHTMLに“印刷”することもできます。これはEmacsのフェイスをCSSベースのマークアップに置換して、カレントバッファーをHTMLに変換します。さらにOrgモード(Orgモードを参照してください)では、OrgファイルをPDFのような様々なフォーマットに印刷できます。
ファイル名を含むページヘッダーとともに、カレントバッファーのハードコピーを印刷します。
ページヘッダーなしで、カレントバッファーのハードコピーを印刷します。
print-buffer
と同様ですが、カレントリージョンだけを印刷します。
lpr-buffer
と同様ですが、カレントリージョンだけを印刷します。
ほとんどのオペレーティングシステムでは、上記のハードコピーコマンドは、lpr
プログラムを呼び出して、印刷のためにファイルをサブミットします。印刷プログラムを変更するには、変数lpr-command
をカスタマイズします。追加のスイッチを指定して、印刷プログラムにに与えるには、リスト変数lpr-switches
をカスタマイズします。この変数の値はオプション文字列のリストで、それぞれが‘-’で始まります(たとえばオプション文字列"-w80"
は1行に80列を指定します)。デフォルトは、空リストnil
です。
使用するプリンターを指定するには、変数printer-name
をセットします。デフォルトはnil
で、これはデフォルトプリンターを指定します。これにプリンター名(文字列)をセットした場合、その名前は‘-P’スイッチとともにlpr
に渡されます。lpr
コマンドを使用しない場合は、スイッチをlpr-printer-switch
で指定する必要があります。
同様に変数lpr-headers-switches
は、ページヘッダーを作成するために使用する追加のスイッチを指定します。変数lpr-add-switches
は、印刷プログラムに‘-T’および‘-J’オプション(lpr
向きのオプションです)を渡すかどうかを制御します。nil
は、これらを追加しないことを意味します(印刷プログラムがlpr
)互換でない場合は、この値を使用するべきです)。
40.1 PostScriptのハードコピー | バッファーまたはリージョンを、PostScriptとして印刷する。 | |
40.2 PostScriptハードコピーにたいする変数 | PostScript印刷コマンドのカスタマイズ。 | |
40.3 印刷のためのパッケージ | オプションの上級向け印刷インターフェース。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
これらのコマンドはバッファーの内容をPostScriptに変換して、それを印刷または別のEmacsバッファーに出力します。
PostScript形式で、カレントバッファーのハードコピーを印刷します。
PostScript形式で、カレントリージョンのハードコピーを印刷します。
PostScript形式で、カレントバッファーのハードコピーを印刷し、テキストで使用されているフェイスはPostScript機能により表示します。
PostScript形式で、カレントリージョンのハードコピーを印刷し、テキストで使用されているフェイスで表示します。
カレントバッファーのテキストにたいするPostScriptイメージを生成およびスプールします。
カレントリージョンにたいするPostScriptイメージを生成およびスプールします。
カレントバッファーにたいするPostScriptイメージを生成およびスプールし、使用されているフェイスで表示します。
カレントリージョンにたいするPostScriptイメージを生成およびスプールし、使用されているフェイスで表示します。
Send the spooled PostScript to the printer.
カレントバッファーにたいして、手書きされたようなPostScriptを生成・印刷します。
ps-print-buffer
およびps-print-region
コマンドは、バッファーの内容をPostScript形式で印刷します。一方はバッファー全体を印刷し、もう一方はリージョンだけを印刷します。コマンドps-print-buffer-with-faces
およびps-print-region-with-faces
も同様に振る舞いますが、バッファーテキストのフェイス(フォントとカラー)を表示するためにPostScript機能を使用します。
プレフィクス引数(C-u)を使用した場合、これらのコマンドは対話的にユーザーにファイル名の入力を求め、PostScriptイメージをプリンターに送るかわりに、そのファイルに保存します。
‘print’のかわりに‘spool’が名前につくコマンドは、PostScript出力をプリンターに送るかわりに、Emacsバッファーに出力することを意味します。
コマンドps-despool
を使用して、スプールされたイメージをプリンターに送ります。このコマンドは‘-spool-’コマンド(上記コマンド参照)により生成されたPostScriptをプリンターに送ります。プレフィクス引数(C-u)を指定した場合は、ファイル名の入力を求め、スプールされたPostScriptイメージをプリンターに送るかわりに、そのファイルに保存します。
M-x
handwriteはもっと他愛ない機能です。これはカレントバッファーのPostScript表現を、草書体の手書きドキュメントのように生成します。これはグループhandwrite
でカスタマイズできます。この関数はISO
8859-1文字だけサポートします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
すべての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-print-color-p
をblack-white
にセットして、モノクロプリンターで印刷する色をセットできます。
デフォルトでは、変数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
で、これは縦向き印刷モード(portrait
mode)を意味します。非nil
値は横向き印刷モード(landscape mode)を指定します。
変数は列番号を指定します。この変数は横向きモードと縦向きモードの両方で効果をもちます。デフォルトは1です。
変数ps-font-family
は、通常のテキストを印刷するために使用するフォントファミリーを指定します。妥当な値には、Courier
、Helvetica
、NewCenturySchlbk
、Palatino
、Times
が含まれます。変数ps-font-size
は、通常のテキストのためのフォントサイズを指定し、デフォルトは8.5ポイントです。ps-font-size
の値には、2つの浮動小数点によるコンスでも指定できます。その場合、1つは縦向き印刷モード、もう一方は横向き印刷モードでの指定です。
Emacsは、通常のPostScriptプリンターより多くのスクリプトと文字をサポートします。したがってバッファーのいくつかの文字は、プリンターに組み込まれたフォントを使って印刷できないかもしれません。プリンターが提供するフォントをGNU
Intlfontsパッケージのフォントで増強したり、EmacsにIntlfontsフォントだけを使うように命令できます。変数ps-multibyte-buffer
がこれを制御します。デフォルト値のnil
は、ASCIIおよびLatin-1文字を印刷するのに適しています。non-latin-printer
は、プリンターにASCII、Latin-1、Japanese、Korean文字にたいするフォントが組み込まれている場合の値です。すべての文字にたいして使用される、IntlfontsパッケージのBDFフォントのための値がbdf-font
です。最後に値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 ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ハードコピーを印刷するためのEmacsの基本的な機能は、Printingパッケージを使って拡張できます。これは何を印刷するかの選択、印刷前のPostScriptファイルのプレビュー、プリントヘッダーなどのさまざまな印刷オプションの設定、横向きモードや縦向きモード、duplexモードにたいする使いやすいインターフェースを提供します。GNU/LinuxシステムまたはUnixシステムでは、Printingパッケージは、GhostScriptプログラムの一部として配布される、gsおよびgvユーティリティーに依存しています。MS-Windowsでは、Ghostscriptのポート版のgstoolsが使用されます。
Printingパッケージを使用するには、initファイル(Emacs初期化ファイルを参照してください)に(require
'printing)
を追加して、その後に(pr-update-menus)
と記述します。この関数はメニューバーの通常の印刷コマンドを、さまざまな印刷オプションを含む‘Printing’サブメニューに置き換えます。M-x
pr-interface RETとタイプすることもできます。これはカスタマイズバッファーに似た*Printing
Interface*バッファーを作成し、そこで印刷オプションをセットできます。何をどのようにして印刷するかセットした後、‘Print’ボタン(それをmouse-2でクリックするか、その上にポイントを移動してRETをタイプします)で印刷ジョブを開始します。さまざまなオプションについての詳細は、‘Interface
Help’ボタンを使用してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsは、バッファーのテキストをソートするためのコマンドをいくつか提供しています。これらはすべて、リージョンの内容にたいして処理を行ないます。これらのコマンドはリージョンのテキストを、多数のソートレコード(sort
records)に分割し、各レコードをソートキー(sort
key)で識別した後、ソートキーにより決定される順序にレコードを並び替えます。レコードは並び替えられ、レコードのキーはアルファベット順、または数値ソートでは数値順になります。アルファベット順のソートでは、ASCII文字順にしたがい、‘A’から‘Z’のすべての大文字は、小文字の‘a’の前になります。(しかし、以下で説明するsort-fold-case
はこれを変更する)。
種々のソートコマンドは、テキストをどのようにソートレコードに分割するか、そして各レコードのどの部分がソートキーとして使用されるかという点で異なります。ほとんどのコマンドは行ごとにソートレコードを分割しますが、ソートレコードとしてパラグラフやページを使うコマンドもあります。ほとんどのソートコマンドは、ソートレコード全体をソートキーとして使用しますが、レコードの一部をソートキーとして使用するものもあります。
リージョンを行に分割して、行のテキスト全体を比較してソートします。数引数は降順でソートすることを意味します。
リージョンをパラグラフに分割して、パラグラフのテキスト全体(先頭の空行は除く)を比較してソートします。数引数は降順にソートすることを意味します。
リージョンをページに分割して、ページのテキスト全体(先頭の空行は除く)を比較してソートします。数引数は降順にソートすることを意味します。
リージョンを行に分割して、各行のあるフィールドの内容を比較することによりソートします。フィールドは空白で区切ることにより定義されるので、ある行の最初の連続する非空白文字がフィールド1を構成し、2番目のそのような文字構成がフィールド2、...となります。
どのフィールドでソートするかは数引数で指定します。1はフィールド1、2はフィールド2、...となります。デフォルトは1です。負の引数はフィールドを左からではなく右から数えることを意味します。したがって、-1は最後のフィールドでソートするという意味です。ソートされるフィールドの内容が同じ行が複数存在する場合、バッファーの元の並び順が維持されます。
M-x
sort-fieldsと同様ですが、各行の指定されたフィールドを整数に変換して、その数字を比較します。テキストとして比較したとき‘10’は‘2’の前になりますが、数字として比較すると‘2’の後になります。デフォルトでは、数字はsort-numeric-base
により解釈されますが、‘0x’または‘0’で始まる数字は16進および8進で解釈されます。
M-x sort-fieldsと同様ですが、各行で比較に使用されるテキストは固定長の列範囲です。プレフィクス引数を指定した場合は、逆順でソートします。このコマンドの詳細は以下を参照してください。
リージョンの行を逆順にソートします。フィールドでソートするコマンドは降順でソートする機能がないので、フィールドまたは列で降順にソートできるのは便利です。
たとえば、以下のようなバッファー内容のとき:
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-fieldsを使用すると、以下が得られます:
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は説明が必要でしょう。ある列にポイントを配し、別の列をマークして、ソート列を指定します。ソートしたいテキストの最初の行の先頭にポイントまたはマークを配すことはできないので、このコマンドは特殊な“リージョン”の定義を使用します。ポイントがある行はすべてリージョンの一部と判断されます。マークがある行もすべてリージョンの一部と判断されます。同様にその間にあるすべての行もリージョンの一部となります。
たとえば、10列目から15列目までの情報でテーブルをソートするには、テーブルの最初の行の10列目にマークを置き、最後の行の15列目にポイントを置いて、sort-columns
を実行します。最初の行の15列目にマークを置き、最後の行の10列目にポイントを置いても、同じように実行できます。
これはポイントとマークで指定された矩形領域をソートすると考えることができます。1つ違うのは、各行の矩形領域の左右にあるテキストも、矩形領域内のテキストとともに移動するという点です。矩形領域(Rectangles)を参照してください。
sort-fold-case
が非nil
の場合、多くのソートコマンドは比較時の大文字小文字の違いを無視します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
テキスト文字で作られたピクチャー(たとえばプログラムのコメントにあるような、レジスターをフィールドに分割したピクチャーなど)を編集するには、コマンドM-x picture-modeを使用してPictureモードに入ります。
Pictureモードでは、編集はテキストのquarter-plane(1/4平面)モデルにもとづき、テキスト文字は、右方および下方に無限に広がる領域に点在します。このモデルには、行の終端という概念は存在しません。せいぜい言えるのは、その行の空白でない最後の文字がどこにあるかぐらいです。
もちろん、実際にはEmacsはテキストを文字シーケンスとして考え、行は終端をもちます。しかしPictureモードは、もっともよく使われるコマンドを、テキストのquarter-planeモデルをシミュレートする変種に置き換えます。これらのコマンドはスペースの挿入、またはタブをスペースに置き換えることにより、これを行ないます。
Emacsのほとんどの基本的な編集コマンドは、本質的には同等なことをquarter-planeの方法で行なうように、Pictureモードにより再定義されます。それに加えてPictureモードは、C-cプレフィクスで始まる、特別なピクチャー編集コマンドを実行する、さまざまなキーを定義します。
これらのキーのうち特に重要なのはC-c
C-cです。ピクチャーが、通常は他のメジャーモードで編集する、大きなファイルの一部ということもあります。Pictureモードは以前のメジャーモードを記録するので、後でC-c
C-c (picture-mode-exit
)コマンドでそのモードに戻ることができます。C-c
C-cは数引数を与えなければ、行末のスペースの削除も行ないます。
Pictureモードの特別なコマンドのすべては、(pictureライブラリーがロードされていれば)他のモードでも機能しますが、Pictureモード以外ではキーにバインドされません。以下の説明では、“1列”移動...のような言い方をしますが、通常の同等なコマンドと同じように、Pictureモードのコマンドは数引数を扱うことができます。
Pictureモードをオンにすることにより、フックpicture-mode-hook
が実行されます。Pictureモードにたいする追加の拡張は、artist.elで見ることができます。
42.1 Pictureモードでの基本的な編集 | Pictureモードの基本概念と簡単なコマンド。 | |
42.2 挿入後の移動の制御 | 自己挿入文字の後のカーソル移動方向の制御。 | |
42.3 Pictureモードでのタブ | タブストップとインデントにたいするさまざまな機能。 | |
42.4 Pictureモードの矩形領域コマンド | 矩形領域のクリアーと重ね合わせ。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ほとんどのキーは、Pictureモードでも通常と同じことを、quarter-planeスタイルで行ないます。たとえばC-fは、picture-forward-column
を実行するようにリバインドされます。これはポイントを1列右に移動します。必要ならスペースを挿入するので実際の行末は関係ありません。C-bは、picture-backward-column
を実行するようにリバインドされます。必要ならタブを複数のスペースに変換して、常に1列ポイントを左に移動します。C-nとC-pは、picture-move-down
とpicture-move-up
を実行するようにリバインドされ、どちらもポイントが同じ列に留まるように、必要に応じてスペースの挿入とタブの変換を行ないます。C-eは、picture-end-of-line
を実行します。これは、その行の最後の非空白文字の後に移動します。C-aは、picture-beginning-of-line
を実行します(スクリーンモデルの選択は行の開始に影響を与えません。このコマンドが行なう追加事項は、カレントピクチャー列を0に更新することです)。
テキストの挿入は、Overwriteモードを通じてquarter-planeモデルに適合されます
(マイナーモードを参照してください)。
自己挿入文字は既存のテキストを右にずらすのではなく、列ごとに既存のテキストを置き換えます。RETはpicture-newline
を実行し、これは単に次の行の先頭に移動するので、新しいテキストでその行を置き換えることができます。
Pictureモードでは、通常は削除やkillを行なうコマンドは、かわりにテキストを消去(スペースで置き換え)します。DEL
(picture-backward-clear-column
)は、前の文字を削除するのではなく、スペースで置き換えます。これはポイントを後方に移動します。C-d
(picture-clear-column
)は、次の文字をスペースで置き換えますが、ポイントは移動しません(文字をクリアーして前方に移動したいときはSPCを使用します)。C-k
(picture-clear-line
)は、実際に行の内容をkillしますが、バッファーから改行は削除しません。
実際に挿入を行なうには、特別なコマンドを使わなければなりません。C-o
(picture-open-line
)は、カレント行の後に空行を作成します。行の分割はしません。PictureモードでもC-M-o
(split-line
)は意味があるので、変更されていません。C-j
(picture-duplicate-line
)は、カレント行の下に同じ内容の行を挿入します。
Pictureモードで実際の削除を行なうには、C-w、C-c
C-d(これは他のモードではC-dにバインドされているdelete-char
にバインドされています)、またはピクチャー矩形コマンドの1つを使用します(Pictureモードの矩形領域コマンドを参照してください)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Pictureモードでは、自己挿入文字(self-inserting characters)は上書きとポイント移動を行なうので、ポイントを移動する方法に、本質的に制限はありません。ポイントは通常右に移動しますが、自己挿入文字の後に移動する方向は、直行方向と対角方向の8つのうちから任意の方向を指定できます。これはバッファーに線を描くとき便利です。
挿入の後、左に移動します(picture-movement-left
)。
挿入の後、右に移動します(picture-movement-right
)。
挿入の後、上に移動します(picture-movement-up
)。
挿入の後、下に移動します(picture-movement-down
)。
挿入の後、左上(“北西”)に移動します(picture-movement-nw
)。
挿入の後、右上(“北東”)に移動します(picture-movement-ne
)。
挿入の後、左下(“南西”)に移動します(picture-movement-sw
)。
挿入の後、右下(“南東”)に移動します(picture-movement-se
)。
カレントPicture挿入方向にもとづき移動を行なうコマンドは2つです。1つはコマンドC-c C-f
(picture-motion
)で、その時点で挿入後に移動すると定められた方向と同じ方向に移動するのがC-c C-f
(picture-motion
)で、逆方向へはC-c C-b
(picture-motion-reverse
)です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Pictureモードでは、タブのような動作が2つ提供されます。コンテキストベースのタブ動作には、M-TAB
(picture-tab-search
)を使用します。引数を与えないと、前の空でない行で、空白の後の次の“意味をもつ”文字の下にポイントを移動します。ここで“次”とは、“開始した位置から水平方向に大な位置”という意味です。C-u
M-TABのようにプレフィックス引数を指定した場合、このコマンドはカレント行で次の意味のある文字に移動します。M-TABはテキストを変更せず、ポイントだけを移動します。“意味のある”文字は変数picture-tab-chars
により定義され、これは一連の文字で定義されます。この変数の構文は正規表現での‘[…]’の内側で使用される構文と似ていますが、‘[’と‘]’はありません。デフォルト値は"!-~"
です。
TABはpicture-tab
を実行し、これはカレントのタブストップの設定にもとづき動作します。Pictureモードではtab-to-tab-stop
と等価です。通常はポイントを移動するだけですが、数引数を指定した場合は、移動先までのテキストをクリアーします。
コンテキストベースとタブストップベースのタブ動作形式は、C-c TAB
(picture-set-tab-stops
)で合わせることができます。このコマンドは、カレント行にたいして、M-TABが意味をもつと判断するであろう位置に、タブストップをセットします。このコマンドの使い方としては、TABと合わせて、コンテキストベースの効果を得ることができます。しかしM-TABで充分な場合は、そちらのほうが便利です。
ピクチャー内では、実際のタブ文字を抑止するほうが便利かもしれません。たとえば、これによりC-x
TABがピクチャーをめちゃくちゃにするのを防ぐことができます。変数indent-tabs-mode
をnil
にセットすることにより、これを行なうことができます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Pictureモードは、quarter-planeモデルに適合する方法で、テキストの矩形部分に作用するコマンドを定義します。標準の矩形領域コマンドも便利でしょう 矩形領域(Rectangles)を参照してください。
矩形領域をスペースでクリアーします(picture-clear-rectangle
)。プレフィクス引数を指定した場合、テキストを削除します。
同様ですが、最初にレジスターrに矩形領域の内容を保存します(picture-clear-rectangle-to-register
)。
レジスターを参照してください。
ポイント位置を左上隅として、最後にkillされた矩形領域をバッファーに上書きコピーします。引数を指定した場合は、上書きではなく挿入します。
同様ですが、レジスターrの矩形領域を使用します(picture-yank-rectangle-from-register
)。
ピクチャー矩形領域コマンドのC-c C-k (picture-clear-rectangle
)とC-c C-w
(picture-clear-rectangle-to-register
)が、標準の矩形領域コマンドと異なる点は、通常は矩形領域を削除するかわりにクリアーすることです。これはPictureモードでC-dが変更された方法と類似しています。
しかしPictureモードで矩形領域を削除するのが便利なときもあるかもしれないので、これらのコマンドは数引数を与えたときは矩形領域を削除します。数引数の指定の有無に関わらず、C-c C-kはC-c C-yのために矩形領域を保存します。
矩形領域をyankするPictureモードのコマンドは、挿入ではなく上書きするという点で、標準の矩形領域コマンドと異なります。これはPictureモードでのテキストの挿入方法が他のモードと異なるのと同じです。C-c
C-y (picture-yank-rectangle
)は、一番最近killされた矩形領域を(上書きにより)挿入し、C-c
C-x
(picture-yank-rectangle-from-register
)は、指定されたレジスターの矩形領域で同様のことを行ないます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
バイナリーファイルを編集する特別なメジャーモードに、Hexlモードがあります。これを使用するには、ファイルをvisitするためにC-x C-fのかわりに、M-x hexl-find-fileを使用します。このコマンドはファイル内容を16進に変換して、その変換結果を編集できるようにします。ファイルを保存するときは、自動的にバイナリーに変換されます。
既存のバッファーを16進(hex)に変換するために、M-x hexl-modeを使用することもできます。これは普通にファイルをvisitしてから、それがバイナリーファイルだと気づいた場合などに便利です。
Hexlモードでは、テキスト挿入は常に上書きとなります。これは、アクシデントによりファイル内データのアラインメントを破壊する危険を軽減します。通常のテキスト文字は、それらの文字自身をを挿入(それらの文字で上書き)します。文字コードにより特殊文字を挿入するコマンドあります。Hexlモードでは、ほとんどのカーソル移動キー、同様にC-x C-sは、同じ効果を生むコマンドにバインドされています。以下は、特にHexlモードで重要なその他コマンドです:
10進でタイプされたバイトコードを挿入します。
8進でタイプされたバイトコードを挿入します。
16進でタイプされたバイトコードを挿入します。
512バイトページの先頭に移動します。
512バイトページの最後に移動します。
1Kバイトページの先頭に移動します。
1Kバイトページの最後に移動します。
16進で指定されたアドレスに移動します。
10進で指定されたアドレスに移動します。
Hexlモードを抜けて、hexl-mode
モードを呼び出す前の、このバッファーのメジャーモードに戻ります。
他のHexlコマンドには、バイナリーバイトの文字列(シーケンス)の挿入、short
、int
単位での移動などがあります。詳細については、C-h
a hexl-RETとタイプしてください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsの状態を1つのセッションから別のセッションのために保存するためには、desktopライブラリーを使用します。1度Emacsのデスクトップ(desktop)
— バッファーと、それらのファイル名、メジャーモード、バッファーでの位置など —
を保存すると、後のEmacsセッションで、保存されたデスクトップをリロードできます。デフォルトでは、デスクトップはフレームとウィンドウ設定も保存しようと試みます。これを無効にするには、desktop-restore-frames
をnil
にセットします(この振る舞いを調整するためにマスタマイズできる関連オプションについては、変数のドキュメントを参照してください)。
デフォルトでは、リモートファイルをvisitしているバッファーに関する情報は保存されません。変数desktop-files-not-to-save
をカスタマイズして、これを変更することができます。
desktopがフレームとウィンドウの設定をリストアするときは、フレームパラメーターの記録された値を使用し、initファイル(Emacs初期化ファイルを参照)でそれらのパラメーターに何をセットしていても無視されます。これは、リストアされたフレームにたいするフォントやフェイスのようなフレームパラメーターは、前のEmacsセッションを終了したときに保存されたdesktopファイルから取得され、initファイルでのそれらのパラメーターにたいするセッティングは無視されることを意味します。これを無効にするには、リストアしたくないフレームパラメーターを除外するように、frameset-filter-alist
の値をカスタマイズしてください。
コマンドM-x
desktop-saveで、デスクトップを手動で保存できます。Emacs終了時のデスクトップの自動保存を有効にすることもできます。またEmacs開始時に最後に保存されたデスクトップを自動的に復元することもできます。将来のセッションのためには、Customizationバッファー(Easy Customizationインターフェースを参照してください)を使用して、desktop-save-mode
をt
にセットするか、initファイル(Emacs初期化ファイルを参照してください)に以下の行を追加します:
(desktop-save-mode 1)
initファイルでdesktop-save-mode
をオンにした場合、Emacsはカレントディレクトリーで保存されたデスクトップを探します(より正確には、desktop-path
で指定されたディレクトリーを探して、最初に見つかったデスクトップを使用します)。したがって異なるディレクトリーに別のデスクトップを保存でき、開始ディレクトリーによりEmacsがリロードするデスクトップを決定できます。M-x
desktop-change-dirとタイプすることにより、カレントデスクトップを保存して、他のディレクトリーに保存されたデスクトップをリロードできます。M-x
desktop-revertとタイプすることにより、前にリロードされたデスクトップをリバートできます。
保存されたデスクトップをリロードしたくないときは、コマンドラインでオプション‘--no-desktop’を指定します。これはカレントセッションにたいして、desktop-save-mode
をオフにします。‘--no-init-file’オプションを指定してEmacsを開始することにより、通常desktop-save-mode
をオンにしているinitファイルをバイパスして、デスクトップのリロードを無効にすることもできます。
デフォルトでは、デスクトップのすべてのバッファーは1度に復元されます。しかし、デスクトップにたくさんのバッファーがあるときは遅くなるかもしれません。変数desktop-restore-eager
で、即座に復元するバッファーの最大数を指定できます。残りのバッファーはEmacsのアイドル時に、ゆっくり(lazily)と復元されます。
Emacsのデスクトップを空にするには、M-x
desktop-clearとタイプします。これは内部バッファーを除いてすべてのバッファーをkillし、desktop-globals-to-clear
にリストされたグローバル変数をクリアーします。特定のバッファーを残したい場合は、変数desktop-clear-preserve-buffers-regexp
をカスタマイズします。この変数の値には、killしないバッファーの名前にマッチする正規表現を指定します。
あるセッションから別のセッションへ、ミニバッファーのヒストリーを保存したい場合は、savehist
ライブラリーを使用してください。
desktop-save-mode
がオンの状態でEmacsが実行されているとき、デフォルトでは何らかの変更があった際は、常にデスクトップを自動保存します。変数desktop-auto-save-timeout
は、デスクトップ変更をEmacsがチェックする頻度を決定します。
Emacsがデスクトップを保存するファイルは、他のEmacsセッションによる不意の上書きを防ぐために、そのセッションの実行中はロックされます。このロックは、通常はEmacsのexit時に解除されますが、Emacsまたはシステムがクラッシュした場合、そのロックは残り、Emacsを再スタートする際に、デフォルトではロックされたデスクトップファイルのどちらを使用するか尋ねます。この質問は、変数desktop-load-locked-desktop
をnil
(その場合はデスクトップをロードしない)、またはt
(確認なしでデスクトップをロードする)のいずれかにカスタマイズすることにより、抑止することができます。
Emacsがデーモンモードで起動する際はユーザーに質問することができないので、ロックされたデスクトップが見つかった場合は、desktop-load-locked-desktop
がt
以外であれば、それをロードしません。デーモンモードでのデスクトップのリストアは、その他の理由により問題になりがちなことに注意してください。たとえば、デーモンはGUI機能を使用できないので、フレーム位置やサイズ、装飾のようなパラメーターはリストアできません。この理由により、デスクトップのリストアを、server-after-make-frame-hook
にフック関数desktop-read
を追加して、それが呼び出されることにより、最初のクライアントが接続するまで、遅延させたいと思うかもしれません(Creating
Frames in The Emacs Lisp Reference Manualを参照)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
再帰編集(recursive
edit)とは、あるEmacsコマンドの途中で、別のEmacsコマンドを使用して自由に編集を行なうような状況を指します。たとえばquery-replace
の途中でC-rをタイプすると、カレントバッファーを変更することができる再帰編集に入ります。再帰編集から抜けると、query-replace
に戻ります。問い合わせつき置換を参照してください。
再帰編集を抜ける(exit)とは、実行を継続中の、終了していないコマンドに戻ることを意味します。再帰編集を抜けるコマンドはC-M-c
(exit-recursive-edit
)です。
再帰編集を中断(abort)することもできます。これはexitと似ていますが、終了していないコマンドも即座に終了します。これを行なうには、コマンドC-]
(abort-recursive-edit
)を使用します。中止と中断を参照してください
モードラインで常にメジャーモードとマイナーモードの周りを囲む丸カッコ(parentheses)を、さらに角カッコ(square brackets)で囲んで表示することにより、再帰編集中であることが示されます。再帰編集は特定のウィンドウやバッファーにたいするものではなく、Emacs全体が再帰編集中であるため、すべてのウィンドウのモードラインは同じように表示されます。
再帰編集中に、さらに再帰編集に入ることも可能です。たとえばquery-replace
の途中でC-rとタイプした後、デバッガーに入るコマンドをタイプしたとします。これはC-rにたいする再帰編集レベルから、デバッガーにたいする再帰編集を開始します。モードラインには、現在進行中の再帰編集レベルが角カッコのペアで表示されます。
(デバッガーでのcコマンドのように)内側の再帰編集を抜けると、次に上のレベルのコマンドの実行が再開されます。コマンドが終了したら、他の再帰編集レベルに抜けるためにC-M-cを使用することができます。exitは最内レベルだけに適用されます。abortも1レベルの再帰編集だけを抜けて、前の再帰編集レベルのコマンドに即座に戻ります。もし望むなら次の再帰編集レベルもabortできます。
かわりにコマンドM-x top-levelは、すべてのレベルの再帰編集をabortして、即座にトップレベルのコマンドリーダーに戻ります。ミニバッファーがアクティブなときは、ミニバッファーも抜けます。
再帰編集の中で編集されるテキストは、トップレベルで編集しているテキストと同じである必要はありません。これは、何にたいしての再帰編集かに依存します。再帰編集を呼び出したコマンドが最初に別のバッファーを選択する場合、そのバッファーが再帰編集を行なうバッファーになります。どんな場合でも再帰編集中に、(バッファーを切り替えるキーがリバインドされていないかぎり)通常の方法でバッファーを切り替えることができます。再帰編集の中で、ファイルをvisitしたりその他のことを行ない、残りのすべての編集を行なうことも、おそらく可能です。しかしこれは、(スタックオーバーフローのような)驚くべき効果をもたらすことがあります。そのため必要なくなったときは、再帰編集をexitまたはabortすることを忘れないでください。
一般的に、わたしたちはGNU Emacsでは再帰編集レベルを最小限にしようと努めています。これは、特定の順 — 最内のレベルからトップレベルに向かって — で戻ることをあなたに強いるからです。可能な場合は、異なる作業には別のバッファーを供し、それらを切り替えられるようにします。いくつかのコマンドは、元のメジャーモードに戻るコマンドを提供する、新しいメジャーモードに切り替えます。これらの試みは、あなたの選択にしたがい、まだ終了していないタスクにもどる、柔軟性を与えます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下のサブセクションでは、URLや、Emacsバッファーのテキスト内にある他の種類のリンクを扱う便利な機能を説明します。
46.1 EWWによるウェブブラウズ | Emacs内のウェブブラウザ。 | |
46.2 埋め込みWebKitウィジェット | Emacsバッファー内に埋め込まれたブラウザウィジェット。 | |
46.3 URLのフォロー | URLをフォローするには。 | |
46.4 URLのアクティブ化 | URLのアクティブ化について。 | |
46.5 ポイント位置のファイルやURLを開く | ポイント位置のファイルを探す、など。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
EWW(Emacs Web
Wowser)は、Emacs用のウェブブラウザーのパッケージです。これはEmacsバッファーでURLブラウズすることを可能にします。コマンドM-x
ewwにより、URLを開いたり、ウェブを検索します。コマンドM-x
eww-open-fileを使用して、ファイルを開くことができます。browse-url
にたいするウェブブラウザーとして。EWWを使うことができます(URLのフォローを参照してください)。完全な詳細に付いては、EWW in The Emacs Web Wowser Manualを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsが適切なサポートパッケージとともにコンパイルされている場合、Emacsのバッファーにブラウザーウィジェット(browser widgets)を表示できます。コマンドM-x xwidget-webkit-browse-urlは、ブラウザーウィジェットに表示するURLを尋ねます。通常はポイント位置、またはポイント位置の前にあるURLがデフォルトのURLになります。しかしアクティブなリージョン(マークとリージョンを参照してください)がある場合は、余分な空白文字を削除してから、そのリージョンからデフォルトのURLを取得します。コマンドはその後、指定されたURLを表示するめ込みブラウザー(embedded browser)をもつ、新しいバッファーを作成します。このパッファーはXwidget-WebKitモード(Imageモードと似ています。see section イメージファイルのvisitを参照してください)で、ウィジェットのスクロール、サイズ変更、リロードを1-keyで行なうコマンドを提供します。キーバインドを確認するには、そのバッファーでC-h bとタイプしてください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ウェブブラウザーへのURLのロード。
Browse-URLパッケージは、Emacsで簡単にURLをフォロー(辿る)することを可能にします。ほとんどのURLは、ウェブブラウザーを呼び出すことによりフォローされます。‘mailto:’のURLは、指定されたアドレスにメールを送るために、Emacsコマンドのcompose-mail
でフォローされます。
コマンドM-x
browse-urlは、URLの入力を求め、それをフォローします。ポイントがURLのようなテキストの近くにある場合、そのURLがデフォルトとして提示されます。Browse-URLパッケージは、browse-url-at-point
やbrowse-url-at-mouse
のような、キーにバインドしたいと思うような、他のコマンドも提供します。
Customizeグループbrowse-url
の、さまざまなオプションを通じて、Browse-URLの振る舞いをカスタマイズできます。特に、オプションbrowse-url-mailto-function
では‘mailto:’のURL、browse-url-browser-function
ではそれ以外のタイプのURLにたいして、どのような方法でフォローするか定義することができます。詳細は、C-h
P browse-url RETとタイプすることにより表示される、パッケージのコメントを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
カレントバッファーのURLとメールアドレスをアクティブにします。
M-x
goto-address-modeとタイプすることにより、EmacsにカレントバッファーのURLを特別にマークさせることができます。このバッファーローカルなマイナーモードが有効な場合、バッファーのすべてのURLを探して、それらをハイライトするとともに、クリックできるボタンに変更します。そのようなテキストの上にポイントを移動してC-c
RET
(goto-address-at-point
)とタイプするか、mouse-2をクリック、またはmouse-1を素早くクリックすることにより(マウスで参照をフォローするを参照してください)、そのURLをフォローできます。URLのフォローは、browse-url
をサブルーチンとして呼び出すことにより行なわれます(URLのフォローを参照してください)。
モードフックや受信メッセージを表示するフック(たとえばRmailのrmail-show-message-hook
)にgoto-address-mode
を追加するのは便利かもしれません。GnusやMH-Eには独自に類似の機能があるので必要ありません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
FFAPパッケージは、C-x
C-fのようなファイルを探すためのキーにバインドされているコマンドを、より直感的なデフォルトを提供するコマンドに置き換えます。これらのコマンドにプレフィクス引数を与えたときは、通常のコマンドと同様に振る舞います。それ以外の場合、ポイント周辺のテキストからデフォルトのファイル名を取得します。バッファーから見つかったのがファイル名ではなくURLの場合、このコマンドはそれを閲覧するためにbrowse-url
を使用します(URLのフォローを参照してください)。
この機能は、メールバッファーやニュースバッファー内の参照、READMEファイル、MANIFESTファイルなどをフォローするのに便利です。詳細については、C-h P ffap RETとタイプして、パッケージのコメントを参照してください。
FFAPを有効にするには、M-x ffap-bindingsとタイプします。これにより、以下のキーバインドが作成され、Rmail、Gnus、VMアーティクルバッファーでの、追加FFAP機能にたいするフックもインストールされます。
filenameを検索します(find-file-at-point
)。デフォルトのファイル名は、ポイント周辺のテキストから推測します。
ffap-read-only
。find-file-read-only
に相当します。
ffap-alternate-file
。find-alternate-file
に相当します。
ポイント位置のディレクトリーをデフォルトとして、directoryでDiredを開始します(dired-at-point
)。
ffap-list-directory
。list-directory
に相当します。
ffap-other-window
。find-file-other-window
に相当します。
ffap-read-only-other-window
。find-file-read-only-other-window
に相当します。
ffap-dired-other-window
。dired-other-window
と同様です。
ffap-other-frame
。find-file-other-frame
に相当します。
ffap-read-only-other-frame
。find-file-read-only-other-frame
に相当します。
ffap-dired-other-frame
。dired-other-frame
に相当します。
バッファーから次のファイル名またはURLを検索して、そのファイルまたはURLを開きます。
ffap-at-mouse
は、マウスがクリックされた周辺のテキストから推測されたファイルを開きます。
カレントバッファーに記述されたファイルとURLのメニューを表示して、選択されたものを開きます(ffap-menu
)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
animate
パッケージは、テキストをダンスさせます(たとえばM-x animate-birthday-present)。
M-x blackbox、M-x mpuz、M-x
5x5はパズルです。blackbox
はボックス内のボールの位置を、トモグラフィー(断層撮影)により当てるパズルです。mpuz
は掛け算パズルを表示します。掛け算の中の英字が何の数字かを当てなければなりません。数字を入力するには、英字をタイプしてから、その数字をタイプします。5x5
の目標は、すべてのマスを埋めることです。
M-x bubblesは、より少ない回数の移動で、多くのbubble(シャボン玉)を取り除くゲームです。
M-x decipherは、単純なアルファベット置換で暗号化されたバッファーを解読するのに役立ちます。
M-x dissociated-pressは、Emacsのカレントバッファーのテキストをスクランブルします。スクランブルは単語単位または文字単位で行なわれ、*Dissociation*という名前のバッファーに出力されます。正の引数は文字単位での操作を指定し、数にはオーバーラップする文字数を指定します。負の引数は単語単位での操作を指定し、数にはオーバーラップする単語数を指定します。Dissociated Pressはマルコフ連鎖と酷似した結果を生成しますが、それとは独自のigオリジナルな創案です。手法としては、単語または文字の後ろにランダムにジャンプするマルコフ連鎖とは異なり、ランダムなジャンプの間にあるサンプルから、連続する複数の文字をコピーします。ユーザーに受け入れられ、正確でありたいなら、ドキュメントにはdissociwordsを使用しないでください。
M-x dunnetは、テキストベースのアドベンチャーゲームを開始します。
個人的な満足感を得たいなら、M-x gomokuに挑戦してみてください。これはあなたと五目並べゲームを対戦します。
少し退屈していたらM-x hanoiに挑戦してみてください。かなり退屈しているなら、数引数を指定します。とてもとても退屈なら、引数9に挑戦してみましょう。さあ、座って眺めましょう。
M-x lifeは、ConwayのLife cellular automatonを実行します。
M-x morse-regionは、リージョンのテキストをモールス信号に変換し、M-x unmorse-regionで元に戻します。M-x nato-regionは、リージョンのテキストをNATO発音記号(NATO phonetic alphabet)に変換し、M-x denato-regionで元に戻します。
M-x pong、M-x snake、M-x tetrisは、有名なPong、Snake、Tetrisの実装です。
M-x solitaireはソリティアーゲームをプレーします。これはピンを他のピンを超えてジャンプさせるゲームです。
M-x zoneは、Emacsがアイドル時にプレーするゲームです。
円盤状記憶媒体のビットのフリップにbutterflies(蝶々)を使用する“真のプログラマー”は、M-x butterflyをデプロイします。https://xkcd.com/378を参照してください。
最後に、もし不満を感じているときは、有名な精神分析医のElizaに問題の説明を試みてください。これはM-x doctorとタイプするだけです。各入力の最後には、RETを2回タイプしてください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
EmacsはEmacs Lispライブラリーであるパッケージ(packages)で追加機能を実装することにより拡張可能です。これらは自分で記述することも、他の人が提供することもあります。そのようなパッケージを将来のEmacsセッションで利用できるようにインストールしたい場合には、それらをコンパイルしてEmacsがLispライブラリーを探すディレクトリーに配置する必要があります。手動によるインストール手法の詳細はEmacsのためのLispコードによるライブラリーを参照してください。多くのパッケージにはLispファイルの先頭付近にインストールと使用方法の手順が大きくコメントされています。パッケージのインストールと使用方法の微調整にこれらの手順を使用できます。
パッケージは巨大なEmacs Lispパッケージのコレクションであるパッケージアーカイブ(package archives)から提供されることもあります。それぞれのパッケージは個別のEmacs Lispプログラムと、Infoマニュアルのような別のコンポーネントを含むこともあります。Emacsにはそのようなアーカイブから簡単にパッケージをダウンロードしてインストールする機能が含まれています。このチャプターの残りの部分ではその機能について説明します。
パッケージアーカイブからのインストールで利用可能なパッケージをリストするにはM-x list-packages RETとタイプします。M-x list-packagesにより、すべてのパッケージのリストを含む、*Packages*という名前のバッファーが表示されます。このバッファーを通じてパッケージをインストールしたりアンインストールできます。Package Menuバッファーを参照してください。
コマンドC-h P
(describe-package
)はパッケージ名の入力を求め、そのパッケージの属性や、実装する機能を説明するヘルプバッファーを表示します。
デフォルトでは、Emacsはemacs開発者により保守されGNUプロジェクトによりホスティングされるパッケージアーカイブからパッケージをダウンロードします。オプションでサードパーティーにより保守されるアーカイブから、パッケージをダウンロードすることもできます。パッケージのインストールを参照してください。
Emacs Lispのプログラムをインストール可能なパッケージに変更する情報に関しては、Packaging in The Emacs Lisp Reference Manualを参照してください。
48.1 Package Menuバッファー | パッケージを閲覧・管理するためのバッファー。 | |
48.2 パッケージのステータス | パッケージが保有できるステータス。 | |
48.3 パッケージのインストール | パッケージのインストールにたいするオプション。 | |
48.4 パッケージのファイルとディレクトリー | パッケージがインストールされる場所。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
コマンドM-x list-packagesは、パッケージメニュー(package menu)を立ち上げます。これはEmacsが把握するすべてのパッケージをリストするバッファーです。リストの各行には以下の情報が表示されます:
list-packages
は、パッケージアーカイブサーバーから利用可能なパッケージのリストを取得するために、ネットワークにアクセスします。ネットワークが利用できない場合、一番最近取得したリストにフォールバックします。
パッケージメニューでは、以下のコマンドが利用可能です:
パッケージメニューの使い方を要約した短いメッセージを表示します(package-menu-quick-help
)。
カレント行のパッケージにたいして、C-h
Pコマンド(Emacs Lispパッケージを参照してください)により表示されるヘルプウィンドウと同様の、ヘルプバッファーを表示します(package-menu-describe-package
)。
カレント行のパッケージをインストールのためにマークします(package-menu-mark-install
)。パッケージのステータスが‘available’の場合、行の先頭に文字‘I’を追加します。xとタイプすると、パッケージをダウンロードしてインストールします(以下参照)。
カレント行のパッケージを削除のためにマークします(package-menu-mark-delete
)。パッケージのステータスが‘installed’の場合、行の先頭に文字‘D’を追加します。xとタイプすると、パッケージを削除します(以下参照)。パッケージ削除の結果、何が起こるかについての情報は、パッケージのファイルとディレクトリーを参照してください。
削除のためにすべての時代遅れのパッケージobsolete
packagesをマークします(package-menu-mark-obsolete-for-deletion
)。これは状態が‘obsolete’の、すべてのパッケージを削除のためにマークします。
iやdコマンドによりカレント行に追加された、以前のインストールや削除マークを外します(package-menu-mark-unmark
)。
新たに利用可能になったすべてのパッケージを、更新のためにマークします(package-menu-mark-upgrades
)。これは新たに利用可能になったバージョンにインストールのマークをつけ、インストール済みの古いバージョン(‘obsolete’のテータスにマークされている)に削除のマークをつけます。
iでマークされたすべてのパッケージをダウンロードしてインストールするとともに、dでマークされたすべてのパッケージを削除します(package-menu-execute
)。これによりマークは削除されます。
パッケージリストを更新します(revert-buffer
)。これは再度パッケージアーカイブから利用可能なパッケージのリストを取得してパッケージリストを再表示します。
パッケージリストをキーワードでフィルターします(package-menu-filter-by-keyword
)。これはキーワード(例:
‘games’)の入力を求めてキーワードに関連するパッケージだけを表示します。完全なパッケージリストを復元するにはqをタイプします。
名前によりパッケージリストをフィルターします(package-menu-filter-by-name
)。これは文字列の入力を求めて、そのregexp値にマッチする名前のパッケージだけを表示します。
カレントで適用されたパッケージリストのフィルターをクリアします(package-menu-clear-filter
)。
名前がregexpにマッチするパッケージを非表示にします(package-menu-hide-package
)。これはregexpの入力を求めて名前がマッチするパッケージを非表示にします。regexpのデフォルト値はポイント位置の名前のパッケージだけを非表示にするので、プロンプトで単にRETを押下するとカレントパッケージだけを非表示にします。
古いバージョンのパッケージ、および優先度低のアーカイブから取得したバージョンの可視性を切り替えます(package-menu-toggle-hiding
)。
たとえばパッケージをインストールするには、そのパッケージの行でiをタイプしてから、xをタイプします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
パッケージは以下のステータスのいずれかを保有できます:
パッケージは未インストールだがパッケージアーカイブからのダウンロードとインストールが可能。
インストールするためにパッケージは利用可能だが新たなバージョンも利用可能。このステータスのパッケージはデフォルトでは非表示。
パッケージはデフォルトでEmacsに同梱されている。これはパッケージメニューからは削除できずアップグレード対象とはみなされない。
別パッケージの依存関係を満足するために自動的にインストールされたパッケージ。
パッケージはpackage-load-list
変数を使用して無効化された。
このパッケージはbuilt-inではなく、package-user-dir
で指定されたディレクトリーのものではない(パッケージのファイルとディレクトリーを参照)。外部パッケージは‘built-in’と同様に扱われて削除できない。
パッケージはheld(固定)されている。パッケージのインストールを参照のこと。
何らかの理由(たとえばインストール不可能なパッケージに依存)によりパッケージはインストール不能。
パッケージはインストール済み。
‘available’と等価だが最後にM-x list-packagesを呼び出した後にパッケージがパッケージアーカイブで新たに利用可能になった点が異なる。
パッケージはインストール済みの古いバージョン。パッケージの当該バージョンに加えて、新たなバージョンもインストール済み。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
パッケージを一番便利にインストールするのはパッケージメニューを使う方法(Package Menuバッファーを参照してください)ですが、コマンドM-x package-installを使用することもできます。これはステータスが‘available’のパッケージ名の入力を求め、それをダウンロードしてインストールします。
他のパッケージが提供する機能に依存するために、それらのパッケージがインストール済みであることを必要(require)とするパッケージもあるでしょう。Emacsがそのようなパッケージをインストールするときは、必要なパッケージがインストールされていなければ、それらのパッケージのダウンロードとインストールも自動に行ないます(必要なパッケージが何らかの理由で利用できない場合、Emacsはエラーをシグナルしてインストールを中止します)。パッケージの必要条件リスト(requirements list)は、そのパッケージのヘルプバッファーに表示されます。
デフォルトでは、パッケージはEmacs開発者により保守される単一のパッケージアーカイブからダウンロードされます。これは変数package-archives
により制御されます。この変数の値は、Emacsが認識するパッケージアーカイブのリストです。リストの各要素は(id
.
location)
という形式でなければなりません。ここで、idはパッケージアーカイブの名前、locationはパッケージアーカイブディレクトリーのURLか名前です。サードパーティーのアーカイブを使用したい場合はこのリストを変更できます
— が、自己責任で行い、信用できるサードパーティーだけを使用してください!
パッケージアーカイブのメンテナーは、パッケージにサイン(signing)を付して、信頼度を増すことができます。これらはプライベートとパブリックのペアーからなる暗号化キーにより生成されます。プライベートキーは各パッケージにたいする署名ファイル(signature
file)を作成するのに使用されます。パブリックキーにより、署名ファイルを使用してそのパッケージ作成者と、それが改ざんされていないかを確認できます。署名の検証は、EasyPGインターフェイス(EasyPG in Emacs EasyPG Assistant
Manualを参照)を通じてthe GnuPG
packageを使用します(EasyPG in Emacs EasyPG Assistant
Manualを参照)。有効な署名であっても、それが悪意がないパッケージであることを厳正に保証する訳ではなく、用心するべきです。パッケージアーカイブは、パブリックキーの入手方法について、説明を提供するべきです。http://pgp.mit.edu/のようなサーバーからキーをダウンロードするのも1つの方法です。Emacsにキーをインポートするには、M-x
package-import-keyringを使用します。Emacsは変数package-user-dir
で指定されるディレクトリー(デフォルトはpackage-gnupghome-dir
のサブディレクトリーgnupg)にパッケージキーを格納します。これにより、Emacsが署名を検証する際に、オプションgnupgでGnuPGを呼び出すようになります。package-gnupghome-dir
がnil
,の場合は、GnuPGのオプション‘--homedir’は省略します。GNUパッケージアーカイブにたいするパブリックキーはEmacsと共に配布され、etc/package-keyring.gpgにあります。Emacsはこれを自動的に使用します。
ユーザーオプションpackage-check-signature
が非nil
の場合、Emacsはパッケージのインストール時に署名の検証を試みます。このオプションが値allow-unsigned
をもち、使用可能なOpenPGP設定が見つかったらサインされたパッケージはチェックされますが、未サインのパッケージもまだインストールができます。パッケージにサインしないアーカイブを使用する場合には、それらをpackage-unsigned-archives
に追加できます(値がallow-unsigned
で使用可能なOpenPGPが見つからなければこのオプションはあたかも値がnil
であるかのように扱われる)。値がt
なら少なくとも1つの署名が有効でなければならず、all
ならすべての署名が有効でなければなりません。
暗号化キーとサインについての詳細は、GnuPG in The GNU Privacy Guard Manualを参照してください。EmacsのGNU Privacy Guardにたいするインターフェースについては、EasyPG in Emacs EasyPG Assistant Manualを参照してください。
複数のパッケージアーカイブが有効で、同じパッケージにたいして異なるバージョンを提供する場合は、オプションpackage-pinned-packages
が便利かもしれません。指定したパッケージが指定されたアーカイブだけからダウンロードされるように、このリストにパッケージとアーカイブのペアーを追加できます。
複数の有効なパッケージアーカイブがあるときに便利な他のオプションとして、package-archive-priorities
があります。これは各アーカイブにたいして、優先度(高い数字は高い優先度のアーカイブを指定します)を指定します。このオプションにより指定されない限り、アーカイブの優先度はデフォルトの0です。優先度高のアーカイブのパッケージが利用可能な場合、優先度低のアーカイブのパッケージはメニューに表示されません(これはpackage-menu-hide-low-priority
の値により制御されます)。
一度パッケージをダウンロードしてインストールすると、そのパッケージはカレントEmacsセッションで利用可能になります。
パッケージを利用可能にするにはパッケージのディレクトリーをload-path
に追加してパッケージのautoloadをロードします。パッケージのautoloadの効果はパッケージごとにさまざまです。ほとんどのパッケージは、いくつかの新たなコマンドを利用可能にするだけですが、Emacsセッションにたいして広範な影響を及ぼすものもあります。この種の情報についてはパッケージのヘルプバッファーを参照してください。
パッケージをインストール後にはその後のすべてのEmacsセッションで自動的にロードされます。これはEmacs開始時のinitファイル処理前、早期initファイル(早期初期化ファイルを参照)の処理後に行なわれます。例外として‘-q’か‘--no-init-file’オプション(初期化オプションを参照してください)で呼び出されたときは、Emacs開始時にパッケージを利用可能にしません。
スタートアップ時にEmacsが自動的にパッケージを利用可能しないようにするためには変数package-enable-at-startup
をnil
に変更してください。この変数は正規のinitファイル(regular
init file)のロード前に読み込まれるので早期initファイル(early init
file)で行うようにしてください。現在のところこの変数はCustomizeを通じてセットできません。
package-enable-at-startup
をnil
にセットしてもスタートアップ中およびスタートアップじにパッケージを利用可能にすることはできます。インストール済みパッケージをスタートアップ中に利用可能にするにはinitファイル内で関数package-activate-all
を呼び出し手ください。スタートアップ後に利用可能にするにはコマンドM-:
(package-activate-all) RETを呼び出してください。
スタートアップ時に利用可能になるようにパッケージのロードをより精密に制御するために、変数package-load-list
を使用することができます。この変数の値にはリストを指定します。(name version)
という形式のリスト要素は、nameという名前のパッケージのバージョンversionを利用可能にするように指示します。ここでversionには、(そのパッケージの特定のバージョンに対応する)バージョン文字列、t
(任意のインストール済みのバージョンを意味する)、またはnil
(バージョンを意味しない。パッケージを利用可能にすることを抑止してパッケージを無効にする)を指定します。リストの要素にはシンボルall
も指定でき、これは他のリスト要素で名前指定されていない任意のパッケージのインストール済みバージョンを利用可能にすることを意味します。デフォルト値は単に'(all)
となっています。
たとえばpackage-load-list
を'((muse "3.20")
all)
にセットするとEmacsは‘muse’のバージョン3.20のみ、および‘muse’以外のパッケージのインストール済みの任意のバージョンをロードします。‘muse’の他のバージョンがインストールされていたとしてもそれらは無視されます。‘muse’パッケージは‘held’というステータスでパッケージメニューにリストされるはずです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
各パッケージはパッケージアーカイブから単一ファイル形式 --- 1つのEmacs Lispソースファイル、または複数のEmacs Lispソースと他のファイルを含むtarファイル — でダウンロードされます。パッケージファイルは、パッケージをインストールするEmacsコマンドにより自動的に取得、処理、配置されます。パッケージを作成する(Packaging in The Emacs Lisp Reference Manualを参照してください)のでない限り、通常これらを直接扱う必要はないでしょう。パッケージファイルから直接パッケージをインストールする必要があるときは、コマンドM-x package-install-fileを使用してください。
1度インストールされると、パッケージの内容はそのサブディレクトリーに配置されます(変数package-user-dir
を変更することにより、ディレクトリーの名前を変更できます)。パッケージのサブディレクトリーはname-versionという名前で、nameはパッケージ名、versionはバージョン文字列です。
package-user-dir
に加えて、Emacsはpackage-directory-list
にリストされたディレクトリーからインストール済みパッケージを探します。これらのディレクトリーはシステム管理者のためのディレクトリーで、Emacsパッケージをシステムワイドに利用可能にするためのものです。Emacs自身がこれらのディレクトリーにパッケージをインストールすることはありません。package-directory-list
にたいするパッケージのサブディレクトリーは、package-user-dir
と同じ方法で配置されます。
パッケージの削除(Package Menuバッファーを参照してください)は、対応するパッケージのサブディレクトリーを削除します。これはpackage-user-dir
にインストールされたパッケージだけに機能します。システムワイドなパッケージディレクトリーにたいして呼び出された場合、削除コマンドはエラーをシグナルします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このチャプターでは、Emacsの振る舞いをカスタマイズするシンプルな方法をいくつか説明します。
ここで説明する方法とは別に、EmacsをカスタマイズするためにX resourcesを使用する情報についてはXのオプションとリソース、キーボードマクロの記録と再生についてはキーボードマクロを参照してください。より広範で制限のない変更を行なうには、Emacs Lispコードを記述する必要があります。 Emacs Lisp in The Emacs Lisp Reference Manualを参照してください。
49.1 Easy Customizationインターフェース | 設定を閲覧したり変更する便利な方法。 | |
49.2 変数 | 多くのEmacsコマンドは何を行なうか決定するためにEmacs変数を調べるので、変数をセットすることによりこれらの機能を制御できます。 | |
49.3 キーバインディングのカスタマイズ | keymapsは各キーがどのコマンドを実行するか指定します。これらを変更することによりキーを再定義できます。 | |
49.4 Emacs初期化ファイル | 初期化ファイルで一般的なカスタマイズを記述する方法。 | |
49.5 永続的に認証情報を保つ | ||
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsには変更できる多くのセッティング(settings)があります。ほとんどのセッティングはカスタマイズ可能な変数(customizable variables。変数を参照してください)で、これらはユーザーオプション(user options)とも呼ばれます。非常にたくさんのカスタマイズ可能な変数があり、それらはEmacsの振る舞いを数々の側面から制御します。このマニュアルにドキュメントされている変数は、Variable Indexにリストされています。セッティングの別のクラスにはフェイス(faces)があり、これはフォント、カラー、その他のテキスト属性を決定します(テキストのフェイスを参照してください)。
セッティング(変数およびフェイスの両方)を閲覧したり変更するには、M-x customizeとタイプします。これは論理的に組織化されたセッティングのリストの操作、値の編集とセット、永続的な保存を行なうことができる、カスタマイズバッファー(customization buffer)を作成します。
49.1.1 カスタマイズグループ | セッティングがクラス化される方法。 | |
49.1.2 セッティングのブラウズと検索 | セッティングのブラウズとサーチ。 | |
49.1.3 変数の変更 | オプション値の編集、およびオプションをセットする方法。 | |
49.1.4 カスタマイズの保存 | 将来のEmacsセッションのためにカスタマイズを保存する。 | |
49.1.5 フェイスのカスタマイズ | フェイスの属性を編集する方法。 | |
49.1.6 特定のアイテムのカスタマイズ | グループの特定のセッティングのカスタマイズ。 | |
49.1.7 カスタムテーマ | カスタマイズセッティングのコレクション。 | |
49.1.8 カスタムテーマの作成 | 新しいカスタムテーマを作成する方法。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
カスタマイズセッティングは、カスタマイズグループ(customization
groups)に組織化されています。これらのグループはより大きなグループに集められ、最終的にEmacs
と呼ばれるマスターグループに集約されます。
M-x
customizeは、トップレベルのEmacs
グループを表示するカスタマイズバッファーを作成します。これは、部分的には以下のようなものです:
For help using this buffer, see [Easy Customization] in the [Emacs manual]. ________________________________________ [ Search ] Operate on all settings in this buffer: [ Revert... ] [ Apply ] [ Apply and Save ] Emacs group: Customization of the One True Editor. [State]: visible group members are all at standard values. See also [Manual]. [Editing] Basic text editing facilities. [Convenience] Convenience features for faster editing. ...more second-level groups...
このバッファーも表示されている主要な部分は‘Emacs’カスタマイズグループで、これはいくつかの他のグループ(‘Editing’、‘Convenience’など)を含みます。これらのグループの内容はここではリストされず、それぞれにたいして1行のドキュメントだけが表示されています。
グループのstate(ステート、状態)には、そのグループ内のセッティングが、編集されているか(edited)、セットされているか(set)、保存されているか(saved)が示されます。変数の変更を参照してください。
カスタマイズバッファーのほとんどは読み取り専用ですが、編集できるいくつかの編集可能フィールド(editable fields)が含まれています。たとえばカスタマイズバッファーの最上部にある編集可能フィールドは、セッティングを検索するためのものです(セッティングのブラウズと検索を参照してください)。マウスでクリック、またはポイントをそこに移動してRETをタイプすることによりアクティブにできる、ボタン(buttons)やリンク(links)もあります。たとえば‘[Editing]’のようなグループ名はリンクで、これらのリンクをアクティブにすることにより、そのグループにたいするカスタマイズバッファーが立ち上がります。
カスタマイズバッファーでは、TAB
(widget-forward
)とタイプすると、次のボタンまたは編集可能フィールドに前方へ移動します。S-TAB
(widget-backward
)は、前のボタンまたは編集可能フィールドに後方へ移動します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
M-x customizeにより作成されたトップレベルのカスタマイズバッファーから、カスタマイズグループ‘Emacs’のサブグループへのリンクをフォローできます。これらのサブグループは、カスタマイズするためのセッティングを含んでいるでしょう。また、これらのサブグループには、Emacsのより特化したサブシステムを扱うサブグループが、さらに含まれているかもしれません。カスタマイズグループの階層を移動していけば、カスタマイズしたい、いくつかのセッティングが見つかるでしょう。
特定のセッティングまたはカスタマイズグループのカスタマイズに興味がある場合は、コマンドM-x customize-option、M-x customize-face、M-x customize-groupで直接移動することもできます。特定のアイテムのカスタマイズを参照してください。
どのグループまたはセッティングをカスタマイズしたいか確信がもてない場合、各カスタマイズバッファーの上部にある、編集可能なサーチフィールドを使用して、それらを検索できます。このフィールドで検索条件 — 1つの単語またはスペースで区切られた複数の単語、または正規表現(正規表現の構文を参照してください) — をタイプできます。それからそのフィールドでRETをタイプするか、となりの‘Search’ボタンをアクティブにすることにより、その条件にマッチするグループとセッティングを含むカスタマイズバッファーに切り替わります。しかし、この機能はカレントEmacsセッションにロードされたグループ、またはセッティングだけを探すことに注意してください。
カスタマイズバッファーにサーチフィールドを表示したくない場合は、変数custom-search-field
をnil
に変更してください。
コマンドM-x customize-aproposは、同じようにサーチフィールドを使用しますが、これはミニバッファーを使用して検索条件を読み取ります。特定のアイテムのカスタマイズを参照してください。
M-x customize-browseは、利用可能なセッティングをブラウズする別の方法です。このコマンドは、グループまたはセッティングの名前だけを、構造化されたレイアウトで表示する、特別なカスタマイズバッファーを作成します。グループ名のとなりの‘[+]’ボタンを呼び出すことにより、同じバッファーでグループの内容を表示できます。グループの内容が表示されている場合、ボタンは‘[-]’に変化し、それを呼び出すことにより、再びグループ内容を隠すことができます。このバッファーのグループまたはセッティングには、それぞれ‘[Group]’、‘[Option]’、‘[Face]’というリンクがあります。このリンクを呼び出すことにより、そのグループ、オプション、フェイスだけを表示する、通常のカスタマイズバッファーが作成されます。M-x customize-browseでは、この方法によりセッティングを変更します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下は変数またはユーザーオプションが、カスタマイズバッファーではどのように表示されるかの例です:
[Hide] Kill Ring Max: 60 [State]: STANDARD. Maximum length of kill ring before oldest elements are thrown away.
最初の行には、この変数の名前がkill-ring-max
であることが、見やすいよう‘Kill Ring
Max’のようにフォーマットされてに表示されています。この変数の値は‘60’です。‘[Hide]’というラベルのボタンは、アクティブにした場合は、この変数の値とステートを隠します。これは、変数がもし非常に長い値をもつ場合、カスタマイズバッファーが見にくくなるのを避けるために便利です(この理由により、非常に長い値をもつ変数は、最初は隠されています)。‘[Hide]’ボタンを使用すると、ボタンは‘[Show
Value]’に変化し、これをアクティブにすると値とステートが表示されます。グラフィカルなディスプレーでは、‘[Hide]’と‘[Show
Value]’ボタンは、下向きまたは右向きのグラフィカルな三角形で置き換えられます。
変数名の次の行は、変数のカスタマイズ状態(customization state)を示します。この例では‘STANDARD’で、これは変数を変更していないので、値はデフォルトのままだということを意味します。‘[State]’ボタンは、変数をカスタマイズするためのオペレーションメニューを提供します。
カスタマイズのステートの下は、変数のドキュメントです。これはC-h vコマンド(変数の確認とセットを参照してください)で表示されるのと同じドキュメントです。ドキュメントが複数行の場合、1行だけが表示されます。この場合、その行の最後に‘[More]’ボタンが表示されるので、これをアクティブにすれば完全なドキュメントを表示できます。
‘Kill Ring Max’に新しい値を入力するには、値にポイントを移動してそれを編集するだけです。たとえばM-dとタイプして‘60’を削除して、別の値をタイプします。テキストの変更を開始すると、‘[State]’行が変化します:
[State]: EDITED, shown value does not take effect until you set or save it.
値を編集してもすぐに変更は反映されません。変更を反映するには、‘[State]’をアクティブにして、‘Set for Current Session’を選択することにより、変数をセット(set)しなければなりません。すると変数のステートは以下のようになります:
[State]: SET for current session only.
無効な値を指定してしまうことを心配する必要はありません。‘Set for Current Session’オペレーションは正当性をチェックして、不当な値はインストールしません。
ファイル名、ディレクトリー名、Emacsコマンドのようなタイプの値を編集するときは、C-M-i
(widget-complete
)、または等価なキーM-TAB、ESC
TABで補完を行なうことができます。これはミニバッファーでの補完と同じように振る舞います(補完を参照してください)。
編集可能な値フィールドでRETとタイプすることにより、TABのように、次のフィールドまたはボタンに移動できます。したがってフィールドの編集を終えたらRETとタイプして、次のボタンまたはフィールドに移動できます。編集可能なフィールドに改行を挿入するには、C-oまたはC-q C-jを使用します。
あらかじめ決められた値しかセットできず、値を直接編集することができない変数もいくつかあります。そのような変数の値の前には、かわりに‘[Value Menu]’ボタンが表示されます。このボタンをアクティブにすると、値の選択肢が表示されます。“onかoff”のブーリーン値にたいしては、‘[Toggle]’ボタンが表示され、このボタンにより値のオンとオフを切り替えることができます。‘[Value Menu]’ボタンや‘[Toggle]’ボタンを使用した後は、変数をセットして、選択した値を反映するために、再度値をセットしなければなりません。
複雑な構造の値をもつ変数もいくつか存在します。たとえば、minibuffer-frame-alist
の値は連想配列(association
list、alist)です。これはカスタマイズバッファーでは、以下のように表示されます:
[Hide] Minibuffer Frame Alist:
[INS] [DEL] Parameter: width
Value: 80
[INS] [DEL] Parameter: height
Value: 2
[INS]
[ State ]: STANDARD.
Alist of parameters for the initial minibuffer frame. [Hide]
[…more lines of documentation…]
この場合、リストの各association要素は2つのアイテムからなり、1つは‘Parameter’というラベルがつき、もう1つは‘Value’というラベルがつき、両方とも編集可能フィールドです。となりにある‘[DEL]’ボタンでリストからassociationを削除できます。associationを追加するには、挿入したい位置の‘[INS]’ボタンを使用します。一番最後の‘[INS]’ボタンはリストの最後に挿入します。
変数をセットした場合、新しい値はカレントEmacsセッションでだけ効果があります。将来のセッションのために値を保存(save)するには、‘[State]’ボタンを使用して、‘Save for Future Sessions’オペレーションを選択します。カスタマイズの保存を参照してください。
‘[State]’ボタンを使用して‘Erase Customization’オペレーションを選択することにより、変数の値をその変数の標準値に復元することもできます。実際には4つのリセットオペレーションがあります:
値を変更したが、まだ変数をセットしていない場合は、実際の値にマッチするようにバッファーのテキストを復元します。
これは、変更された変数がある場合は、変数の値を最後に保存された値に復元し、それ以外は標準の値に復元します。テキストも復元された変数に合わせて更新します。
これは変数をその変数の標準値にセットします。保存した値も削除します。
これはこのセッションでカスタマイズバッファーでセットされる前の値に、変数をリセットします。変数をカスタマイズしてからリセットすると、これはカスタマイズした値を破棄するので、このオペレーションにより、破棄した値に戻すことができます。
特定のカスタマイズにたいして、コメントを記録できれば便利なこともあります。コメントを入力するフィールドを作成するには、‘[State]’メニューの‘Add Comment’アイテムを使用します。
カスタマイズバッファーの上部には2行のボタン行があります:
Operate on all settings in this buffer: [Revert...] [Apply] [Apply and Save]
‘[Revert...]’ボタンは、上述で説明したうち、最初の3つのリセット操作をドロップダウンします。‘[Apply]’ボタンは、カレントセッションにセッティングを適用します。‘[Apply and Save]’ボタンはセッティングを適用して、将来のセッションのためにそれらのセッティングを保存します。このボタンは、Emacsが-qまたは-Qのオプションで開始された場合は表示されません(初期化オプションを参照)。
コマンドC-c C-c (Custom-set
)は、‘[Set for Current
Session]’ボタンを使用するのと等価です。コマンドC-x C-s (Custom-save
)は、‘[Save
for Future Sessions]’ボタンを使用するのと同様です。
‘[Exit]’ボタンはカスタマイズバッファーを、バッファーリストの最後のバッファーに隠し(bury)ます。カスタマイズバッファーをkillさせるようにするには、変数custom-buffer-done-kill
をt
に変更します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
カスタマイズバッファーでは、カスタマイズしたセッティングの‘[State]’ボタンで‘Save for Future
Sessions’を選択することにより、それを保存(save)できます。C-x C-s
(Custom-save
)コマンド、またはカスタマイズバッファーのトップにある‘[Apply and
Save]’ボタンで、そのバッファー内で適用可能なすべてのセッティングが保存されます。
ファイル(通常は初期化ファイル。Emacs初期化ファイルを参照してください)にコードを書き込むことにより保存は機能します。将来のEmacsセッションは、開始時に自動的にこのファイルを読み込んで、カスタマイズを再びセットします。
初期化ファイル以外の他のファイルにカスタマイズを保存する選択もできます。これが機能するには、変数custom-file
に保存したいファイル名をセットして、そのファイルをロードするコード行を追加しなければなりません。たとえば:
(setq custom-file "~/.config/emacs-custom.el") (load custom-file)
以下のようにして、Emacsのバージョンごとに違うカスタマイズファイルを指定することさえ可能です:
(cond ((< emacs-major-version 22) ;; Emacs 21 customization. (setq custom-file "~/.config/custom-21.el")) ((and (= emacs-major-version 22) (< emacs-minor-version 3)) ;; Emacs 22 customization, before version 22.3. (setq custom-file "~/.config/custom-22.el")) (t ;; Emacs version 22.3 or later. (setq custom-file "~/.config/emacs-custom.el"))) (load custom-file)
Emacsが-qまたは--no-init-fileオプションで呼び出されたときは、カスタマイズを初期化ファイルに保存しません。なぜならそのようなセッションからカスタマイズを保存することにより、初期化ファイルに記述されていた他のすべてのカスタマイズが消されてしまうからです。
将来のセッションのために保存することを選択しなかった場合、そのカスタマイズはEmacsの終了とともに失われてしまうことに注意してください。終了時に保存されていないカスタマイズにたいするメッセージを表示させたい場合は、初期化ファイルに以下を追加してください:
(add-hook 'kill-emacs-query-functions 'custom-prompt-customize-unsaved-options)
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
フェイス(テキストのフェイスを参照してください)をカスタマイズできます。フェイスは、異なる種類のテキストをEmacsがどのように表示するか決定します。カスタマイズグループは、変数とフェイスの両方を含むことができます。
たとえばプログラミング言語のモードでは、ソースコードのコメントはフェイスfont-lock-comment-face
で表示されます(Font Lockモードを参照してください)。カスタマイズバッファーでは、‘[Show All
Attributes]’リンクをクリックした後は、このフェイスについて以下のように表示されます:
[Hide] Font Lock Comment Face:[sample] [State] : STANDARD. Font Lock mode face used to highlight comments. [ ] Font Family: -- [ ] Font Foundry: -- [ ] Width: -- [ ] Height: -- [ ] Weight: -- [ ] Slant: -- [ ] Underline: -- [ ] Overline: -- [ ] Strike-through: -- [ ] Box around text: -- [ ] Inverse-video: -- [X] Foreground: Firebrick [Choose] (sample) [ ] Background: -- [ ] Stipple: -- [ ] Inherit: -- [Hide Unused Attributes]
最初の3行にはフェイス名、‘[State]’ボタン、そのフェイスにたいするドキュメントが表示されます。その下は、フェイス属性(face attributes)のリストです。それぞれの属性の前にはチェックボックスがあります。チェックされているチェックボックスは‘[X]’と表示され、このフェイスがその属性に値を指定していることを意味します。空のチェックボックスは‘[ ]’と表示され、このフェイスがその属性に特に値を指定していないことを意味します。チェックボックスをアクティブにすることにより、その属性を指定または未指定にできます。
フェイスにすべての属性を指定する必要はありません。実際のところ、ほとんどのフェイスは少しの属性しか指定していません。上記の例では、font-lock-comment-face
はフォアグラウンドカラーだけを指定しています。未指定の属性にたいしては、すべての属性が指定された特別なフェイスdefault
の属性が使用されます。default
フェイスは、明示的にフェイスが割り当てられていない任意のテキストを表示するために使用されるフェイスです。さらに、このフェイスのバックグラウンドカラー属性には、フレームのバックグラウンドカラーが使用されます。
属性リストの最後にある‘[Hide Unused Attributes]’ボタンは、このフェイスの未指定の属性を隠します。隠された属性があるとき、ボタンは‘[Show All Attributes]’に変化し、これはすべての属性リストを表示します。カスタマイズバッファーは、インターフェースが見にくくなるのを避けるため、未指定の属性が隠された状態で開始されるでしょう。
属性を指定するときは、通常の方法で値を変更できます。
フォアグラウンドカラーとバックグラウンドカラーは、カラーネームとRGBトリプレットの両方を使用して指定できます(フェイスのカラーを参照してください)。カラーネームのリストに切り替えるために、‘[Choose]’ボタンも使用できます。そのバッファーでRETでカラーを選択すると、値フィールドにそのカラーネームが入ります。
フェイスのセット・保存。リセットは、変数にたいする操作と同様に機能します(変数の変更を参照してください)。
フェイスは、異なるタイプのディスプレーにたいして、違う外観を指定できます。たとえば、カラーディスプレーではテキストを赤にして、モノクロディスプレーでは太字フォントを使うようにフェイスを設定できます。フェイスにたいして複数の外観を指定するには、‘[State]’で呼び出されるメニューで‘For All Kinds of Displays’を選択してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
1つのユーザーオプションoptionにたいするカスタマイズバッファーをセットアップします。
1つのフェイスfaceにたいするカスタマイズバッファーをセットアップします。
1つのグループgroupにたいするカスタマイズバッファーをセットアップします。
regexpにマッチする、すべてのセッティングとグループにたいするカスタマイズバッファーをセットアップします。
Emacsのバージョンversionから意味が変更された、すべてのセッティングとグループでカスタマイズバッファーをセットアップします。
Emacsのバージョンversionから意味、またはデフォルト値が変更された、すべてのセッティングとグループのオプションでカスタマイズバッファーをセットアップします。
カスタマイズバッファーを使って保存された、すべてのセッティングを含むカスタマイズバッファーをセットアップします。
セットしたが保存していない、すべてのセッティングを含むカスタマイズバッファーをセットアップします。
特定のユーザーオプションをカスタマイズしたい場合は、M-x customize-optionとタイプします。これは変数名を読み取り、そのユーザーオプション1つだけのためのカスタマイズバッファーをセットアップします。ミニバッファーから変数名を入力するときは、補完が利用可能ですが、Emacsにロードされた変数名だけが補完されます。
同様にM-x customize-faceを使用して、特定のフェイスをカスタマイズできます。M-x customize-groupを使用して、特定のカスタマイズグループにたいするカスタマイズバッファーをセットアップできます。
M-x customize-aproposは検索条件 — 1つの単語か、スペースで区切られた複数の単語、または正規表現 — の入力を求め、名前がそれにマッチする、ロードされたすべてのセッティングとグループにたいするカスタマイズバッファーをセットアップします。これはカスタマイズバッファーのトップにあるサーチフィールドを使用するのと同様です(カスタマイズグループを参照してください)。
新しいバージョンのEmacsにアップグレードしたとき、新しいセッティングをカスタマイズしたり、意味やデフォルト値が変更されたものをセッティングしたいと思うかもしれません。これを行なうにはM-x customize-changedを使用して、ミニバッファーから以前のEmacsのバージョンを指定します。これは指定されたバージョンから変更されたすべてのセッティングとグループを表示するカスタマイズバッファーを作成し、必要ならそれらをロードします。
セッティングを変更した後、その変更が間違いだと気づいたときは、変更を戻すために2つのコマンドを使用できます。保存されたカスタマイズのセッティングには、M-x customize-savedを使用します。セットしたが保存していないカスタマイズのセッティングには、M-x customize-unsavedを使用します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
カスタムテーマ(Custom themes)は、1つの単位として有効または無効にできる、セッティングのコレクションです。カスタムテーマを使用して、さまざまなセッティングコレクション間を簡単に切り替えることができ、あるコンピューターから別のコンピューターへそのようなコレクションを持ち運ぶことができます。
カスタムテーマは、Emacs Lispソースファイルとして保存されています。カスタムテーマの名前がnameなら、そのテーマのファイル名はname-theme.elです。テーマファイルのフォーマットと、それを作成する方法については、カスタムテーマの作成を参照してください。
M-x customize-themesとタイプすると、Emacsが認識するカスタムテーマをリストする、*Custom
Themes*という名前のバッファーに切り替わります。デフォルトでは、Emacsは2つの場所からテーマファイルを探します。1つはcustom-theme-directory
により指定されるディレクトリー(デフォルトは~/.emacs.d/))で、もう1つはEmacsがインストールされた場所(変数data-directory
を参照してください)のetc/themesというディレクトリーです。後者にはEmacsと共に配布されるいくつかのカスタムテーマが含まれており、これらはさまざまなカラースキーム(color
schemes)に適合するように、Emacsフェイスをカスタマイズします(しかし、カスタムテーマの目的はこれだけに制限される必要はなく、変数をカスタマイズするのにも使用できることに注意してください)。
Emacsに他の場所からカスタムテーマを探させたい場合は、リスト変数custom-theme-load-path
にディレクトリーを追加します。この変数のデフォルト値は(custom-theme-directory
t)
です。ここでシンボルcustom-theme-directory
は、変数custom-theme-directory
の値を指定するという特別な意味をもち、t
はビルトインのテーマディレクトリーetc/themesを意味します。custom-theme-load-path
で指定されるディレクトリーにあるテーマが、*Custom
Themes*バッファーにリストされます。
*Custom
Themes*バッファーでは、カスタムテーマの隣のチェックボックスをアクティブにすることにより、カレントEmacsセッションで、そのテーマを有効または無効にできます。カスタムテーマが有効な場合、そのテーマのすべてのセッティング(変数とフェイス)がEmacsセッションで効果をもちます。選択したテーマを将来のEmacsセッションに適用するには、C-x
C-s (custom-theme-save
)とタイプするか、‘[Save Theme
Settings]’ボタンを使用してください。
最初にカスタムテーマを有効にするとき、Emacsはテーマファイルの内容を表示して、本当にロードするか確認を求めます。これはカスタムテーマのロードにより不定なLispコードが実行されるからで、テーマが安全だと判っているときだけyesと答えるべきです。この場合、Emacsは将来のセッションのために、そのテーマが安全だということを記憶するか尋ねます(これは変数custom-safe-themes
にテーマファイルのSHA-256ハッシュ値を保存することにより行なわれます)。すべてのテーマを安全なものとして扱いたい場合は、変数の値をt
)に変更します。(ディレクトリーetc/themesの)Emacsと共に配布されるテーマは、このチェックから除外されていて、常に安全だと判断されます。
カスタムテーマのセッティングと保存は、変数custom-enabled-themes
をカスタマイズすることにより機能します。この変数の値は、カスタムテーマ名(tango
のようなLispシンボル)のリストです。custom-enabled-themes
のセットに*Custom
Themes*バッファーを使用するかわりに、たとえばM-x
customize-optionのような通常のカスタマイズインターフェースを使用して、変数をカスタマイズできます。カスタムテーマ自身では、custom-enabled-themes
をセットできないことに注意してください。
カスタマイズバッファーを通じて行なう任意のカスタマイズは、テーマのセッティングより優先されます。これによりテーマのセッティングを簡単にオーバーライドできます。2つの異なるテーマのセッティングがオーバーラップする場合には、custom-enabled-themes
で先に指定されたテーマが優先されます。カスタマイズバッファーでは、カスタムテーマによりセッティングがデフォルトから変更されているときは、‘State’には‘STANDARD’ではなく‘THEMED’が表示されます。
M-x load-themeとタイプすることにより、カレントEmacsセッションで特定のカスタムテーマを有効にできます。これはテーマ名の入力を求め、テーマファイルからテーマをロードし、それを有効にします。すでにテーマファイルがロードされているときは、M-x enable-themeとタイプすることにより、ファイルをロードせずにテーマを有効にできます。カスタムテーマを無効にするには、M-x disable-themeとタイプしてください。
カスタムテーマの説明を見るには、*Custom Themes*バッファーのその行で、?とタイプするか、Emacsの任意のバッファーでM-x describe-themeとタイプしてテーマ名を入力してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
M-x customize-create-themeとタイプすることにより、カスタマイズバッファーと似たインターフェースを使用して、カスタムテーマを定義できます。これは*Custom Theme*という名前のバッファーに切り替えます。これは、一般的なEmacsフェイスをそのテーマに挿入するかも尋ねます(カスタムテーマは、フェイスをカスタマイズするのに使用される場合があるので便利です)。これにnoと答えると、そのテーマには最初は何もセッティングが含まれません。
*Custom Theme*バッファーの上部には、テーマ名と説明を入力できる、編集可能フィールドがあります。‘user’を除く任意の名前を指定できます。説明は、テーマにたいしてM-x describe-themeを呼び出したときに表示される文です。最初の行は1センテンスの概要であるべきです。M-x customize-themesにより作成されたバッファーでは、このセンテンスがテーマ名のとなりに表示されます。
テーマに新しいセッティングを追加するには、‘[Insert Additional Face]’ボタンか、‘[Insert Additional Variable]’ボタンを使用します。これらのボタンはミニバッファーを使用して、補完つきでフェイス名または変数名を読み取り、そのフェイスまたは変数にたいするカスタマイズエントリーを挿入します。通常のカスタマイズバッファーと同じ方法で、変数の値またはフェイスの属性を編集できます。テーマからフェイスまたは変数を削除するには、名前の横のチェックボックスのチェックを外してください。
カスタムテーマのフェイスや変数を指定した後は、C-x C-s
(custom-theme-write
)とタイプするか、そのバッファーの‘[Save
Theme]’ボタンを使用します。これはcustom-theme-directory
のディレクトリーに、name-theme.el(nameはテーマ名)という名前で、テーマファイルを保存します。
*Custom Theme*バッファーから、‘[Visit Theme]’ボタンをアクティブにしてテーマ名を指定することにより、既存のカスタムテーマの閲覧と編集ができます。‘[Merge Theme]’ボタンを使用して、他のテーマのセッティングをバッファーに追加することもできます。‘[Merge Theme]’ボタンを使用して、‘user’という名前の特別なテーマ名を指定することにより、非テーマセッティングをカスタムテーマにインポートできます。
テーマファイルは単なるEmacs Lispソースファイルで、カスタムテーマのロードはLispファイルをロードすることにより機能します。したがって*Custom Theme*バッファーを使用するかわりに、テーマファイルを直接編集することもできます。詳細は、Custom Themes in The Emacs Lisp Reference Manualを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
変数(variable)とは、値をもつLipシンボルです。このようなシンボルの名前は、変数名(variable name)とも呼ばれます。変数名には、ファイルに記述できる任意の文字を含めることもできますが、ほとんどの変数名は通常の単語をハイフンで区切って構成されます。
変数の名前には、その変数の役割を簡単に説明する役目があります。ほとんどの変数はドキュメント文字列(documentation
string)ももっていて、これは変数の目的、どのような種類の値をもつべきか、値がどのように使用されるかを説明します。ヘルプコマンドC-h
v (describe-variable
)を使用して、このドキュメントを閲覧できます。変数の確認とセットを参照してください。
Emacsは内部の記録維持のために多くのLisp変数を使用しますが、非プログラマーに一番興味があるのはユーザーが変更することを意図したLisp変数であり、これらはカスタマイズ可能変数(customizable variables)やユーザーオプション(user options)と呼ばれます(Easy Customizationインターフェースを参照してください)。以下のセクションでは、カスタマイズのためのインターフェース以外から変数をセットする方法など、他の観点からEmacs変数を説明します。
(少数の例外を除き)Emacs
Lispでは、任意の変数は任意のタイプの値をもつことができます。しかし多くの変数は、特定のタイプの値を割り当てられた場合だけ意味をもちます。たとえばkillリングの最大長さを指定するkill-ring-max
の値としては、数字だけが意味をもちます。kill-ring-max
の値として文字列を与えた場合、C-y
(yank
)のようなコマンドはエラーをシグナルするでしょう。一方、タイプを気にしない変数もあります。たとえば、変数の値がnil
のときはある効果をもたらし、非nil
のときは別の効果をもたらす場合、シンボルnil
以外の任意の値は、そのタイプに関わらず2番目の効果をもたらします(慣例により、非nil
値を指定するために、通常は値t
— これは“true”が由来です —
を使用します)。カスタマイズバッファーを使用して変数をセットする場合、無効なタイプを与えてしまう心配はありません。カスタマイズバッファーでは通常、意味のある値しか入力できないからです。判別がつかないときは、その変数が期待するどの種類の値かを見るために、C-h
v
(describe-variable
)を使用して、変数のドキュメント文字列をチェックしてください(変数の確認とセットを参照してください)。
49.2.1 変数の確認とセット | 変数の値の検証とセッティング。 | |
49.2.2 フック | フック変数によりEmacsの一部にたいして特定の機会に実行するプログラムを指定できます。 | |
49.2.3 ローカル変数 | 変数のバッファーごとの値。 | |
49.2.4 ファイル内のローカル変数 | ファイルが変数の値を指定する方法。 | |
49.2.5 ディレクトリーごとのローカル変数 | ディレクトリーにより変数の値を指定する方法。 | |
49.2.6 ▼接続ごとのローカル変数 | リモートのデフォルトディレクトリーをもつバッファーにたいして有効な変数。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
変数varの値とドキュメントを表示します(describe-variable
)。
変数varの値をvalueに変更します。
変数の値を調べるには、C-h v
(describe-variable
)を使用します。これはミニバッファーを使用して補完つきで変数名を読み取り、、変数の値とドキュメントの両方を表示します。たとえば、
C-h v fill-column RET
これは以下のような出力を表示します:
fill-column is a variable defined in ‘C source code’. Its value is 70 Automatically becomes buffer-local when set. This variable is safe as a file local variable if its value satisfies the predicate ‘integerp’. Probably introduced at or before Emacs version 18. Documentation: Column beyond which automatic line-wrapping should happen. Interactively, you can set the buffer local value using C-x f. You can customize this variable.
‘You can customize the variable’の行は、この変数がユーザーオプションであることを示します。C-h vはユーザーオプションだけに制限されません。これはカスタマイズ可能でない変数にも使用できます。
特定のカスタマイズ可能な変数をセットする一番簡単な方法は、M-x set-variableです。これはミニバッファーで変数名を読み取り(補完つき)、次にミニバッファーを使用して新しい値にたいするLisp式を読み取ります(M-nを使用してミニバッファーで編集するために、古い値を挿入することができます)。たとえば、
M-x set-variable RET fill-column RET 75 RET
これはfill-column
を75にセットします。
M-x set-variableはカスタマイズ可能な変数に制限されていますが、以下のようなLisp式で任意の変数をセットできます:
(setq fill-column 75)
このような式を実行するには、M-:
(eval-expression
)とタイプして、ミニバッファーで式を入力します(Emacs Lisp式の評価を参照してください)。かわりに*scratch*バッファーに移動して、式をタイプしてからC-jとタイプすることもできます(Lisp Interactionバッファーを参照してください)。
変数のセットは、Emacsのカスタマイズと同様、特に明記しない限りは、カレントEmacsセッションだけに影響します。将来のセッションのために変数を変更する唯一の方法は、初期化ファイルにそれを記述することです(Emacs初期化ファイルを参照してください)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
フック(hook)とは、Emacsをカスタマイズするための重要な仕組みです。フックは関数のリストを保持するLisp変数で、これらの関数は、ある定められたタイミングで呼び出されます(これは、フックを実行する(running
the hook))、と呼ばれます)。リストの中の個別の関数は、そのフックのフック関数(hook
functions)と呼ばれます。たとえばフックkill-emacs-hook
は、Emacsを終了する直前に実行されます(Emacsからのexitを参照してください)。
ほとんどのフックはノーマルフック(normal hooks)です。これは、Emacsがフックを実行するとき、フック関数が引数なしで順に呼び出します。わたしたちは、ほとんどのフックをノーマルフックに保つために努力しているので、あなたはこれらのフックを一貫した方法で使用することができます。変数名の最後が‘-hook’の変数は、ノーマルフックです。
多くはありませんが、アブノーマルフック(abnormal
hooks)もあります。アブノーマルフックは、名前の最後が‘-hook’ではなく‘-functions’です(古いコードの中には時代遅れのサフィックス‘-hooks’を使うものもあります)。これらのフックがアブノーマルな理由は、関数が呼び出される方法にあります
—
もしかしたら引数が与えられているかもしれず、ことによると関数が返す値が何かに使用されるかもしれません。たとえばfind-file-not-found-functions
はアブノーマルです。なぜならフック関数のうちの1つが非nil
値を返した場合、残りの関数は呼び出されないからです(ファイルのvisit(訪問)を参照してください)。アブノーマルフック変数のドキュメントには、フック関数がどのように使用されるかの説明があります。
他のLisp変数と同じように、setq
でフック変数をセットすることもできますが、フック(ノーマルとアブノーマルの両方)に関数を追加するための推奨される方法は、以下の例で示されるような、add-hook
を使う方法です。詳細は、Hooks in The Emacs Lisp Reference Manualを参照してください。
ほとんどのメジャーモードは初期化の最終ステップで、1つ以上のモードフック(mode hooks)を実行します。モードフックは個々のモードの振る舞いをカスタマイズするための便利な方法で、常にノーマルフックです。たとえば、以下はTextモードと、Textモードを基礎とする他のモードで、Auto Fillモードをオンにするフックをセットアップする方法です:
(add-hook 'text-mode-hook 'auto-fill-mode)
これは、引数を与えられない場合にマイナーモードを有効にするauto-fill-mode
を呼び出すことにより機能します(マイナーモードを参照してください)。次に、Textモードを基礎とするLaTeXモードではAuto
Fillモードをオンにしたくない場合、以下の行を追加してこれを行なうことができます:
(add-hook 'latex-mode-hook (lambda () (auto-fill-mode -1)))
ここでは、無名関数(anonymous function。Lambda Expressions in The Emacs
Lisp Reference
Manualを参照してください)を構築するために、特別なマクロlambda
を使用しており、auto-fill-mode
に-1
を与えて呼び出すことにより、マイナーモードを無効にしています。LaTeXモードは、text-mode-hook
を実行した後に、latex-mode-hook
モードを実行するので、その結果Auto
Fillモードが無効になります。
以下はもっと複雑な例で、Cコードのインデントをカスタマイズするのにフックを使う方法です:
(setq my-c-style '((c-comment-only-line-offset . 4)
(c-cleanup-list . (scope-operator empty-defun-braces defun-close-semi))))
(add-hook 'c-mode-common-hook (lambda () (c-add-style "my-style" my-c-style t)))
メジャーモードフックは、それを元のモードとして派生された(derived)他のメジャーモードにも適用されます(Derived
Modes in The Emacs Lisp Reference
Manualを参照してください)。たとえばHTMLモード(SGMLモードとHTMLモードを参照してください)はTextモードから派生しており、HTMLモードが有効になるときは、html-mode-hook
を実行する前にtext-mode-hook
が実行されます。これは1つのフックを複数の関連するモードに作用させるための便利な方法を提供します。特に任意のプログラミング言語にたいしてフック関数を適用したい場合は、それをprog-mode-hook
モードに追加します。Progモードは、それを継承する他のメジャーモードと比較すると、ほとんど何も行なわないメジャーモードで、まさにこの目的のために存在します。
実行される順番に依存しないようにフック関数をデザインするのがベストです。実行順への依存はトラブルを招きます。しかし実行順は予測可能です。フック関数はフックに登録された順に実行されます。
何度もadd-hook
を呼び出すことにより、さまざまな異なるバージョンのフック関数を追加した場合、追加されたすべてのバージョンのフック関数がフック変数に残ることを忘れないでください。remove-hook
を呼び出すことにより関数を個別にクリアーするか、(setq
hook-variable nil)
ですべてのフック関数を削除できます。
フック変数がバッファーローカルな場合、グローバル変数のかわりにバッファーローカル変数が使用されます。しかしバッファーローカル変数が要素t
を含む場合は、グローバル変数も同様に実行されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
変数varが、カレントバッファーでローカル値をもつようにします。
変数varが、カレントバッファーでグローバル値を使うようにします。
変数varがセットされた時点で、カレントバッファーにたいしてローカルになるようマークします。
ほとんどの変数は、特定のEmacsバッファーにたいしてローカル(local)にすることができます。これは、そのバッファーでの変数の値が、他のバッファーでの変数の値とは、独立していることを意味します。多くはありませんが、常にバッファーごとにローカルな変数もあります。他のすべてのEmacs変数は、バッファーで変数をローカルにしていないかぎりは、すべてのバッファーに効果を及ぼすグローバル(global)な値をもちます。
M-x make-local-variableは変数名を読み取り、それをカレントバッファーにたいしてローカルにします。その後、このバッファーで変数の値を変更しても他のバッファーには影響せず、変数のグローバル値を変更してもこのバッファーには影響しなくなります。
M-x
make-variable-buffer-localは、変数がセットされたとき自動的にローカルになるように、変数をマークします。より正確には、1度この方法で変数がマークされると、通常の方法による変数のセットは、最初に自動的にmake-local-variable
を呼び出します。このような変数をパーバッファー(per-buffer:
バッファーごと)変数と呼びます。Emacsの多くの変数は、通常はパーバッファーです。変数のドキュメント文字列には、いつこれを行なうかが記述されています。パーバッファー変数のグローバル値は、通常は任意のバッファーには影響しませんが、それでもまだ意味があります。グローバル値は、新しいバッファーにたいする、この変数の初期値として使用されます。
メジャーモード(メジャーモードを参照してください)は常に変数をセットする前に、変数をローカルにします。あるバッファーでメジャーモードを変更しても、他のバッファーに影響がないのは、これが理由です。マイナーモードは変数をセットすることにより機能します
— 通常、各マイナーモードは1つの制御変数(controlling
variable)をもっていて、この変数が非nil
の場合はモードが有効になります(マイナーモードを参照してください)。多くのマイナーモードにたいして制御変数はパーバッファーであり、したがって常にバッファーローカルです。そうでない場合、他の変数と同様に特定のバッファーで変数をローカルにできます。
多くはありませんが、バッファーでローカルにできない(かわりに各ディスプレーにたいして常にローカル。複数ディスプレーを参照してください)変数も存在します。そのような変数をバッファーローカルにしようとすると、エラーメッセージが表示されます。
M-x kill-local-variableは、指定された変数が、カレントバッファーにたいしてローカルであることを終了させます。その後は、そのバッファーにたいして、その変数のグローバル値が効力をもちます。メジャーモードのセットにより、数少ないパーマネントローカル(permanent locals: 永久にローカル)な変数を除いて、そのバッファーのすべてのローカル変数はkillされます。
変数がカレントバッファーでローカル値をもつかに関わらず、変数にグローバル値をセットするには、Lispコンストラクトsetq-default
を使用することができます。このコンストラクトはsetq
と同じように使用されますが、(もしあれば)ローカル値のかわりにグローバル値をセットします。カレントバッファーがローカル値をもつ場合、新しいグローバル値は他のバッファーに切り替えるまで見えないでしょう。以下は例です:
(setq-default fill-column 75)
setq-default
は、make-variable-buffer-local
でマークされた変数のグローバル値をセットする唯一の方法です。
Lispプログラムは変数のデフォルト値を得るために、default-value
を使用することができます。この関数はシンボルを引数として受け取り、それのデフォルト値を返します。引数は評価されるので、通常は明示的にクォートする必要があります。たとえば、以下はfill-column
のデフォルト値を得る方法です:
(default-value 'fill-column)
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ファイルに、Emacsでそのファイルを編集するときに使用するローカル変数の値を指定できます。ファイルをvisitするか、メジャーモードをセットすることにより、Emacsはローカル変数指定をチェックします。これは自動的にこれらの変数をバッファーにたいしてローカルにし、ファイルで指定された値にセットします。
あるファイルのディレクトリーにたいしてディレクトリーローカル変数(ディレクトリーごとのローカル変数を参照)が指定されている場合、ファイルローカル変数はそれをオーバーライドします。
49.2.4.1 ファイル変数の指定 | ファイルローカル変数の指定。 | |
49.2.4.2 安全なファイル変数 | ファイルローカル変数が安全であることを確認する。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ファイルローカル変数を指定するには2つの方法があります。1つは最初の行に記述する方法で、もう1つはローカル変数リストを使用する方法です。以下は最初の行でこれらを指定する方法の例です:
-*- mode: modename; var: value; … -*-
この方法により、任意の数の変数/値(variable/value)ペアーを指定できます。各ペアーはコロンとセミコロンで区切ります。特別な変数/値ペアーmode:
modename;
が与えられた場合、これはメジャーモードを指定します。valueは文字列として使用され、評価はされません。
手作業でエントリーを追加するかわりに、M-x add-file-local-variable-prop-lineを使用することができます。このコマンドは変数と値の入力を求め、適切な方法で最初の行にこれらを追加します。M-x delete-file-local-variable-prop-lineは変数の入力を求め、最初の行から変数のエントリーを削除します。コマンドM-x copy-dir-locals-to-file-locals-prop-lineは、カレントのディレクトリーローカル変数を最初の行にコピーします(ディレクトリーごとのローカル変数を参照してください)。
以下は、最初の行でLispモードを指定して、2つの変数に数値をセットする例です:
;; -*- mode: Lisp; fill-column: 75; comment-column: 50; -*-
mode
の他に、ファイル変数として特別な意味をもつキーワードはcoding
、unibyte
、eval
です。これらは以下で説明します。
シェルスクリプトでは、最初の行はスクリプトのインタープリターの識別に使用されるので、ローカル変数をそこに置くことはできません。これに対処するために、Emacsは最初の行がインタープリターを指定しているときは、2行目からローカル変数指定を探します。man pagesにも同じことが言えます。man pagesはtroffプリプロセッサーのリストを指定するマジック文字列‘'\"’で始まるからです(しかし、すべてがこれを行なう訳ではありません)。
‘-*-’行を使用するのではなく、ファイルの終端付近でローカル変数リスト(local variables list)を使用することにより、ファイルローカル変数を定義することもできます。ローカル変数リストは、ファイル終端から3000文字以内で開始され、ファイルがページに分かれているときは最後のページになければなりません。
ファイルにローカル変数リストと‘-*-’の両方がある場合、Emacsは最初に‘-*-’行のすべてを処理してから、ローカル変数リストのすべてを処理します。例外はメジャーモード指定です。Emacsはメジャーモード指定がどこにあろうと、まずそれを適用します。なぜならほとんどのメジャーモードは、初期化部分ですべてのローカル変数をkillするからです。
ローカル変数リストは、文字列‘Local Variables:’を含む行で開始され、文字列‘End:’を含む行で終了します。この間には、以下のように1行に変数名と値のペアーが記述されます:
/* Local Variables: */ /* mode: c */ /* comment-column: 0 */ /* End: */
この例では、各行はプレフィクス‘/*’で始まり、サフィックス‘*/’で終了します。Emacsは、リストの最初の行のマジック文字列‘Local Variables:’を囲む文字列から、プレフィクスとサフィックスを識別します。その後はリストの他の行で自動的にこれらを破棄します。プレフィクスおよび/またはサフィックスを使用する通常の理由は、そのファイルが意図する他のプログラムが混乱しないように、ローカル変数をコメントに埋め込むためです。上記は、コメントが‘/*’で始まり‘*/’で終わるCプログラミング言語での例です。
Emacsのローカル変数リストではないが、そのように見えるテキストがある場合は、そのテキストの後にフォームフィード文字(ページ区切りです。ページを参照してください)を挿入して、それを取り消すことができます。Emacsはファイルの最後のページ(つまり最後のページ区切りの後)にあるファイルローカル変数だけを調べます。
ローカル変数を直接タイプするかわりに、コマンドM-x add-file-local-variableを使用することができます。これは変数と値の入力を求め、それらをリストに追加し、‘Local Variables:’と、必要なら開始・終了マーカーも追加します。コマンドM-x delete-file-local-variableは、リストから変数を削除します。M-x copy-dir-locals-to-file-localsは、ディレクトリーローカル変数をリストにコピーします(ディレクトリーごとのローカル変数を参照してください)。
‘-*-’行と同じように、ローカル変数リストの変数は文字列として使用され、最初に評価されることはありません。長い文字列値をファイル内で複数行に分割したい場合、改行とバックスラッシュを使用できます(Lisp文字列定数では無視されます)。各行には、プレフィクスとサフィックスを記述するべきです。たとえ行がその文字列で開始または終了していても、それらはリストを処理するとき取り除かれます。以下は例です:
# Local Variables: # compile-command: "cc foo.c -Dfoo=bar -Dhack=whatever \ # -Dmumble=blaah" # End:
いくつかの名前は、ローカル変数リスト内で特別な意味をもちます:
mode
は、指定されたメジャーモードを有効にします。
eval
は、指定されたLisp式を評価します(式が返す値は無視されます)。
coding
は、このファイルでの文字コード変換にたいするコーディングシステムを指定します。コーディングシステムを参照してください。
unibyte
の値がt
の場合、Emacs
Lispのロードとコンパイルをunibyteモードで行ないます。Disabling
Multibyte Characters in GNU Emacs Lisp Reference Manualを参照してください。
これら4つのキーワードは、実際には変数ではありません。他のコンテキストでこれらをセットしても、特別な意味はありません。
マイナーモードにたいしてmode
キーワードを使用しないでください。ローカル変数リストでマイナーモードを有効または無効にするには、eval
でモードコマンドを実行するLisp式を指定します(マイナーモードを参照してください)。たとえば以下のローカル変数リストは、引数なし(引数に1を指定しても同じことを行ないます)でeldoc-mode
を呼び出すことにより、ElDocモード(Emacs Lispドキュメントの照会を参照してください)を有効にし、引数-1でfont-lock-mode
(Font Lockモードを参照してください)を呼び出すことにより、Font Lockモードを無効にする例です。
;; Local Variables: ;; eval: (eldoc-mode) ;; eval: (font-lock-mode -1) ;; End:
しかしこの方法でマイナーモードを指定するのは、間違っている場合もあることに注意してください。マイナーモードは個人の好みを表しており、そのファイルを編集するユーザーにあなたの好みを強制するのは、不適切かもしれません。状況に依存して自動的にマイナーモードを有効または無効にしたい場合は、たいていメジャーモードフックでこれを行なう方がよいのです(フックを参照してください)。
ローカル変数と、ファイル名とファイル内容にしたがったバッファーのメジャーモード(もしあればローカル変数リストも)をリセットするには、コマンドM-x normal-modeを使用します。ファイルのモードを選択するを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ファイルローカル変数が危険な場合もあります。他の誰かのファイルをvisitするとき、そのファイルのローカル変数リストがEmacsに何を行なうか、告げるものはありません。eval
“variable”や、その他のload-path
などにたいする不正な値は、実行する意図がないLispコードを実行するかもしれません。
したがって、安全と判っていないファイルローカル変数を発見した場合、Emacsはファイルのローカル変数リスト全体を表示して、それらをセットする前に継続するか尋ねます。yまたはSPCをタイプすると、ローカル変数リストは効果をもち、nの場合は無視します。Emacsがバッチモード(初期化オプションを参照してください)で実行されている場合、Emacsは確認することができないので、nと応えられたとみなします。
Emacsは通常、特定の変数/値ペアーが安全だと認識できます。たとえばcomment-column
やfill-column
には、任意の整数値を与えても安全です。ファイルが安全だと判っている変数/値ペアーだけを指定する場合、Emacsはそれらをセットする前に確認を求めません。そうでない場合、確認プロンプトで!とタイプすることにより、このファイル内のすべての変数/値ペアーが安全なことを記録するようEmacsに指示できます。その後、Emacsが同じファイルまたは別のファイルで、これらの変数/値ペアーに出会うと、これらを安全だとみなします。
load-path
のようないくつかの変数は、特に危険だと判断されます。これらをローカル変数として指定すべき理由はほとんどなく、それらを変更するのは危険です。ファイルに危険なローカル変数だけが含まれる場合、Emacsは確認プロンプトで!の選択肢を提示することも、それを受け入れることもしません。ファイル内のいくつかのローカル変数が危険で、いくつかの変数は潜在的に安全ではない場合は、プロンプトで!を入力できます。これはすべての変数に適用されますが、危険ではない変数だけを将来のセッションのために安全とマークします。もし危険な変数を安全な値として記録したいと本当に望むなら、‘safe-local-variable-values’をカスタマイズすることによりこれを行ないます(Easy Customizationインターフェースを参照してください)。
変数enable-local-variables
により、Emacsがローカル変数を処理する方法を変更できます。デフォルト値はt
で、これは上述の振る舞いを指定します。nil
の場合、Emacsは単にすべてのファイルローカル変数を無視します。:safe
は安全な値だけを使用して、残りは無視します。他の値の場合、安全と判っている値かどうかの決定を試みずに、ローカル変数をもつ各ファイルごとに尋ねます。
変数enable-local-eval
は、Emacsがeval
変数を処理するかどうかを制御します。enable-local-variables
のように、変数に対する可能な値は3つで、t
、nil
、およびそれ以外です。デフォルトは、t
やnil
ではないmaybe
で、通常Emacsはeval
変数を処理するときに確認を求めます。
例外として、評価する任意のeval
形式が、変数safe-local-eval-forms
で指定された形式の場合、Emacsは確認を求めません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
大きなソフトウェアプロジェクトでのディレクトリーツリーのような、特定のディレクトリーや、それのサブディレクトリーのすべてのファイルにたいして、同じローカル変数を定義したいことがあるかもしれません。これはディレクトリーローカル変数(directory-local variables)で行なうことができます。ファイルローカル変数はディレクトリーローカル変数をオーバーライドするので、あるディレクトリー内のファイルに特別なセッティングが必要な場合は、ディレクトリー変数でそのディレクトリー内の大多数にたいするセッティングを指定してから、ファイルローカル変数により、少数のファイルにたいしてオーバーライドを要する一般的なセッティングを定義できます。
ディレクトリーローカル変数を定義する通常の方法は、そのディレクトリーに.dir-locals.el22を配す方法です。そのディレクトリー、またはそれのサブディレクトリーの任意のファイルをEmacsがvisitするとき、.dir-locals.elで指定されたディレクトリーローカル変数が、あたかもそのファイルのファイルローカル変数(ファイル内のローカル変数を参照してください)として定義されたかのように、ファイルに適用されます。Emacsはvisitされたファイルのディレクトリーから、ディレクトリーツリーを上に移動しながら.dir-locals.elを検索します。スローダウンを避けるために、検索はリモートファイルをスキップします。必要なら、変数enable-remote-dir-locals
をt
にセットして、検索範囲をリモートファイルに広げることができます。
Emacsが追加でロードする.dir-locals-2.elが存在する場合は、それを使用することもできます。これは.dir-locals.elがバージョンコントロールの共有ディレクトリー配下にあり、個人的なカスタマイズに使用できないときに有用です。
.dir-locals.elは、特別な構成のリストをもちます。これはモード名(シンボルで指定)をalist(Association Lists: 連想リスト。Association Lists in The Emacs Lisp Reference Manualを参照してください)にマップします。各alistエントリーは、変数名と、指定されたメジャーモードが有効なときに、その変数に割り当てるディレクトリーローカル値からなります。モード名のかわりに‘nil’を指定でき、これはalistが任意のモードで適用されることを意味します。サブディレクトリー(文字列で指定)を指定することもできます。この場合、そのサブディレクトリーのすべてのファイルにalistが適用されます。
以下は、.dir-locals.elファイルの例です:
((nil . ((indent-tabs-mode . t) (fill-column . 80) (mode . auto-fill))) (c-mode . ((c-file-style . "BSD") (subdirs . nil))) ("src/imported" . ((nil . ((change-log-default-name . "ChangeLog.local"))))))
これはディレクトリーツリーの任意のファイルにたいして変数‘indent-tabs-mode’およびfill-column
をセットして、任意のCソースファイルにたいしてインデントスタイルをセットします。特別な要素mode
は有効にするマイナーモードを指定します。したがって(mode
.
auto-fill)え
はマイナーモードauto-fill-mode
の有効化が必要なことを指定します。特別な要素subdirs
は変数ではありません。これは特別なキーワードで、Cモードのセッティングがカレントディレクトリーだけに適用され、任意のサブディレクトリーには適用されないことを示します。最後に、これはsrc/importedサブディレクトリー内の任意のファイルにたいして、違うChangeLogファイル名を指定します。
異なるモード名やディレクトリーを使用する変数にたいして、.dir-locals.elファイル内に複数の値が含まれる場合には、汎用的なモードと比較してより特化したモードにたいする値が優先して適用されるでしょう。更にディレクトリー下に指定された値は、より高い優先度をもちます。たとえば:
((nil . ((fill-column . 40))) (c-mode . ((fill-column . 50))) (prog-mode . ((fill-column . 60))) ("narrow-files" . ((nil . ((fill-column . 20))))))
c-mode
はprog-mode
から派生しているので、c-mode
を使用するファイルはprog-mode
にもマッチします。しかしCのファイルはprog-mode
より特化したモード名なので、fill-column
に使用される値は50
になるでしょう。prog-mode
から派生する他のモードを使用するファイルは、60
を使用します。narrow-filesディレクトリー配下のファイルでは、モードエントリーよりディレクトリーエントリーが優先されるので、たとえc-mode
を使用するファイルでも、値20
が使用されることになります。
.dir-locals.el内ではmode
、eval
、unibyte
を指定できます。これらの変数は、ファイルローカル変数のときとオ同じ意味をもちます。coding
は、ディレクトリーローカル変数としては指定できません。ファイル内のローカル変数を参照してください。
.dir-locals.elファイルを手で編集するかわりに、コマンドM-x add-dir-local-variableを使用できます。これはモード名またはサブディレクトリー、および変数名と値の入力を求め、ディレクトリーローカル変数を定義するエントリーを追加します。M-x delete-dir-local-variableは、エントリーを削除します。M-x copy-file-locals-to-dir-localsは、カレントファイル内のファイルローカル変数を、.dir-locals.elにコピーします。
ディレクトリーローカル変数を指定する他の方法は、dir-locals-set-class-variables
関数を使用して、ディレクトリークラス(directory
class)の中に、変数/値ペアーのグループを定義する方法です。その後、dir-locals-set-directory-class
関数を使用して、そのクラスに対応するディレクトリーをEmacsに指示します。これらの関数呼び出しは通常、初期化ファイルで行なわれます(Emacs初期化ファイルを参照してください)。この方法は、何らかの理由でディレクトリーに.dir-locals.elを置けないときに便利です。たとえば、この方法で書き込み不可なディレクトリーにセッティングを適用できます:
(dir-locals-set-class-variables 'unwritable-directory '((nil . ((some-useful-setting . value))))) (dir-locals-set-directory-class "/usr/include/" 'unwritable-directory)
変数にたいしてディレクトリーローカル値とファイルローカル値の両方が指定された場合、ファイルローカル値が効果をもちます。安全ではないディレクトリーローカル値は、安全でないファイルローカル値と同じ方法で扱われます(安全なファイル変数を参照してください)。
ディレクトリーローカル変数は、Diredバッファー(Dired (ディレクトリーエディター)を参照してください)のような、ファイルを直接visitしていないが、ディレクトリーで処理を行なうバッファーにたいしても効果があります。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ほとんどの変数はローカルマシンの状況を反映します。リモートのデフォルトディレクトリーをもつバッファー操作時には、それらの変数が異なる値を使用しなければならないときが時折あります。shell
の呼び出し時に適用するシェルについて考えてみてください。ローカルマシンでは/bin/bashでリモートマシンでは/bin/kshかもしれません。
これは接続ローカル変数(connection-local variables)で実現することができます。ディレクトリーローカル変数とファイルローカル変数は接続ローカル変数をオーバーライドします。安全ではない接続ローカル値は、安全でないファイルローカル値と同じ方法で扱われます(安全なファイル変数を参照してください)。
接続ローカル変数はconnection-local-set-profile-variables
関数を使用して変数/値ペアのグループとしてプロファイル(profile)内に宣言されます。関数connection-local-set-profiles
はリモートマシンを識別する与えられた条件にたいしてプロファイルをアクティブにします。
(connection-local-set-profile-variables 'remote-ksh '((shell-file-name . "/bin/ksh") (shell-command-switch . "-c"))) (connection-local-set-profile-variables 'remote-bash '((shell-file-name . "/bin/bash") (shell-command-switch . "-c"))) (connection-local-set-profiles '(:application tramp :machine "remotemachine") 'remote-ksh)
このコードはremote-ksh
とremote-bash
という2つの異なるプロファイルを宣言しています。プロファイルremote-ksh
はホスト名としてregexpの"remotemachine
にマッチするリモートデフォルトディレクトリーをもつすべてのバッファーに適用されます。このような条件はプロパティ:protocol
(Trampの手法)や:user
(リモートユーザー名)も区別できます。nil
という条件はリモートデフォルトディレクトリーをもつすべてのバッファーにマッチします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このセクションでは、キーをコマンドにマップするキーバインド(key bindings)と、そのキーバインドを記録するキーマップ(keymaps)を説明します。それにinitファイルを編集して、キーバインドをカスタマイズする方法も説明します(initファイル内でのキーのリバインドを参照してください)。
ほとんどのモードは自身のキーバインディングを定義するので、モードをアクティブにすることにより、あなたのカスタムキーバインディングがオーバーライドされるかもしれません。いくつかのキーはユーザー定義バインディングのために予約されており、モードはそれらを使用してはならないので、これらのキーはこの問題にたいして安全です。予約済みのキーは、C-cと英字(大文字と小文字の両方)、修飾キーなし(修飾キーを参照)のファンクションキーのF5からF9です。
49.3.1 キーマップ | 一般的な考え方。グローバルキーマップ。 | |
49.3.2 プレフィクスキーマップ | プレフィクスキーにたいするキーマップ。 | |
49.3.3 ローカルキーマップ | キーマップをもつメジャーモードとマイナーモード。 | |
49.3.4 ミニバッファーキーマップ | ミニバッファーが使用する独自のキーマップ。 | |
49.3.5 対話的なキーバインディングの変更 | あるキーの意味を再定義する便利な方法。 | |
49.3.6 initファイル内でのキーのリバインド | 初期化ファイルでのキーのリバインド。 | |
49.3.7 修飾キー | Using modifier keys. | |
49.3.8 ファンクションキーのリバインド | 端末のファンクションキーのリバインド。 | |
49.3.9 名前のあるASCIIコントロール文字 | TABとC-iなどを区別する方法。 | |
49.3.10 マウスボタンのリバインド | Emacsでのマウスボタンのリバインド。 | |
49.3.11 コマンドの無効化 | コマンドを無効にするとは、それを実行できるようにする前に確認が要求されることを意味します。これはビギナーを戸惑わせないようにするために行なわれます。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
キーとコマンドで説明されているように、各Emacsコマンドは、対話的に使用することを条件として定義されたLisp関数です。すべてのLisp関数と同様に、コマンドは小文字とハイフンからなる関数名をもちます。
キーシーケンス(key sequence) — 短くはキー(key) — とは、1つの単位として意味をもつ、連続する入力イベント(input events)のことです。入力イベントとは文字、ファンクションキー、マウスボタン — つまりコンピューターに送ることができるすべての入力のことです。キーシーケンスは、それが何のコマンドを実行するかを指示するバインディング(binding)により、意味をもちます。
キーシーケンスとコマンド関数との間のバインディングは、keymaps(キーマップ)と呼ばれるデータ構造に記録されます。Emacsには多くのkeymapsがあり、それぞれが特別の機会に使用されます。
一番重要なキーマップは、グローバルキーマップ(global keymap)です。なぜならグローバルキーマップは常に効果があるからです。グローバルキーマップはFundamentalモードにたいしてキーを定義します(メジャーモードを参照してください)。これらの定義のほとんどは、、ほとんどすべてのメジャーモードでは一般的です。メジャーモードまたはマイナーモードは、いくつかのキーにたいするグローバル定義をオーバーライドするために、それぞれ独自のkeymapをもつことができます。
たとえばgのような自己挿入文字(self-inserting character)は、グローバルキーマップがそれをコマンドcommand
self-insert-command
にバインドするので、自己挿入を行なうのです。C-aのような標準的なEmacsの編集文字もグローバルキーマップから、それらの標準的な意味を取得します。M-x
global-set-keyのような、キーをリバインドするコマンドは、新しいバインディングをグローバルマップの適切な位置に保存することにより機能します(対話的なキーバインディングの変更を参照)。カレントのキーバインディングを閲覧するにはC-h
bコマンドを使用してください。
ほとんどの現代的なキーボードは、文字キーと同じようにファンクションキーをもちます。ファンクションキーは文字キーが行なうように入力イベントを送り、キーマップはファンクションキーにたいするバインディングをもつことができます。キーシーケンスにはファンクションキーと文字をミックスすることもできます。たとえば、キーボードにファンクションキーHomeがある場合、EmacsはC-x Homeのようなキーシーケンスを認識できます。S-down-mouse-1のように、マウスイベントとキーボードイベントをミックスすることさえ可能です。
テキスト端末では、ファンクションキーをタイプすることにより、文字シーケンスがコンピューターに送られます。シーケンスの正確な詳細は、ファンクションキーと端末タイプに依存します(シーケンスがESC [で始まることもしばしばあります)。Emacsが端末タイプを理解する場合、自動的にそのようなシーケンスを1つの入力イベントとして処理します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
内部的には、Emacsは各キーマップの1つのイベントだけを記録します。複数イベントのキーシーケンスの解釈は、キーマップの連鎖を生じます。最初のイベントにたいして最初のキーマップが定義を与え、シーケンス内の2番目のイベントを探すのに他のキーマップが使用され...と連鎖していきます。したがってC-xやESCなどのプレフィクスキーは独自のキーマップをもち、それらはプレフィクスの直後のイベントにたいする定義を保持します。
プレフィクスキーの定義は通常、それに続くイベントを探すのに使用するキーマップです。プレフィクスキーの定義として、関数定義がキーマップであるようなLispシンボルを指定することもできます。効果は同じですが、そのプレフィクスキーが何のためなのか説明するためのコマンド名を提供します。たとえば、C-xのバインディングはシンボルControl-X-prefix
で、このシンボルの関数定義は、C-xコマンドにたいするキーマップです。プレフィクスキーとしてのC-c、C-x、C-h、ESCは、グローバルキーマップに定義されているので、これらのプレフィクスキーは常に利用できます。
通常のプレフィクスキー以外に、“架空のプレフィクスキー(fictitious prefix key)”もあり、これらはメニューバーを表します。メニューバーのキーバインディングについての特別な情報は、Menu Bar in The Emacs Lisp Reference Manualを参照してください。ポップアップメニューを呼び出すマウスボタンイベントもプレフィクスキーです。詳細については、Menu Keymaps in The Emacs Lisp Reference Manualを参照してください。
いくつかのキーマップは、名前のついた変数に格納されています:
ctl-x-map
は、C-xの後の文字に使用されるマップにたいする変数名です。
help-map
は。C-hの後の文字のためのマップです。
esc-map
は、ESCの後の文字のためのマップです。したがって、すべてのメタ文字がこのマップで定義されています。
ctl-x-4-map
は、C-x 4の後の文字のためのマップです。
mode-specific-map
は、C-cの後の文字のためのマップです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ここまではグローバルマップの詳細を説明してきました。メジャーモードは、ローカルキーマップ(local keymaps)で独自のキーバインディングを提供することにより、Emacsをカスタマイズします。たとえばCモードは、C言語のためにカレント行をインデントするために、TABをオーバーライドします。マイナーモードもローカルキーマップをもつことができます。マイナーモードが効力をもつとき、マイナーモードのキーマップの定義は、メジャーモードのローカルキーマップとグローバルキーマップの両方をオーバーライドします。それに加えて、バッファーの一部のテキストに、他のすべてのキーマップをオーバーライドする独自のキーマップを指定できます。
ローカルキーマップは、あるキーをプレフィクスキーマップとして定義することにより、そのキーをプレフィクスキーとして再定義できます。そのキーがグローバルでもプレフィクスとして定義されている場合、そのキーのグローバルおよびローカルの定義(両方のキーマップ)が、相乗して効果をもちます。つまりプレフィクスキーに続くイベントを探すのに、両方の定義が使用されます。たとえばローカルキーマップがC-cをプレフィクスキーマップとして定義し、そのキーマップがC-zをコマンドとして定義する場合、これはC-c C-zにローカルな意味を提供します。これはC-cで始まる他のシーケンスには影響を与えません。これらのシーケンスが独自のローカルバインディングをもたない場合、グローバルバインディングが効果をもちます。
これを別の方法で考えると、Emacsはキーシーケンス全体のバインディングにたいして、複数のキーマップを1つずつ探して、複数イベントキーシーケンスを処理すると考えることができます。最初にマイナーモードが有効な場合はマイナーモードのキーマップをチェックして、次にメジャーモードのキーマップをチェックして、それからグローバルキーマップをチェックするのです。これはキーの照合が機能する正確な方法ではありませんが、通常の場面における結果を理解するには充分です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ミニバッファーは独自のローカルキーマップのセットをもちます。これにはさまざまな補完やexitコマンドが含まれます。
minibuffer-local-map
は、通常の入力(補完なし)に使用されます。
minibuffer-local-ns-map
は同様ですが、SPCでRETと同じようにexitします。
minibuffer-local-completion-map
は、寛大な補完(permissive
completion)のためのキーマップです。
minibuffer-local-must-match-map
は、強い補完(strict
completion)と慎重な補完(cautious completion)のためのキーマップです。
minibuffer-local-filename-completion-map
とminibuffer-local-filename-must-match-map
は、前の2つと同様ですが、特にファイル名補完のためのキーマップです。これらはSPCをバインドしません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsがキーを再定義する方法は、キーマップのそのキーのエントリーを変更する方法です。グローバルキーマップを変更できます。この場合すべてのメジャーモードで変更が効果をもちます(ただし同じキーにたいしてそれをオーバーライドする独自のローカルバインディングをもつ場合を除きます)。ローカルキーマップを変更することもできます。これは同じメジャーモードを使用するすべてのバッファーに効果があります。
このセクションでは、現在のEmacsセッションでキーをリバインドする方法を説明します。将来のEmacsセッションで効果をもつようにキーをリバインドする方法については、initファイル内でのキーのリバインドを参照してください。
cmdを実行するkeyをグローバルに定義します。
cmdを実行するkeyを、(そのとき効力をもつメジャーモードで)ローカルに定義します。
グローバルマップでkeyを未定義にします。
(そのとき効力をもつメジャーモードで)ローカルにkeyを未定義にします。
たとえば以下は、通常のC-zにたいするグローバルな定義を置き換えて、C-zをshell
コマンド(対話的なサブシェルを参照してください)にバインドします:
M-x global-set-key RET C-z shell RET
global-set-key
コマンドは、キーの後にコマンド名を読み取ります。キーを押した後、以下のようなメッセージが表示されるので、そのキーにバインドしたいコマンドを入力できます:
Set key C-z to command:
ファンクションキーとマウスイベントも同じ方法で再定義できます。リバインドするキーを指定するときに、ファンクションキーをタイプするか、マウスをクリックするだけです。
複数のイベントを含むキーも、同じ方法で再定義できます。Emacsは、(プレフィクスキーではない)完了キーまで、リバインドするキーの読み取りを続けます。したがってkeyにC-fをタイプすると、それで完了です。これによりミニバッファーに入って、すぐにcmdを読み取ります。しかしC-xをタイプした場合、これはプレフィクスなので、他の文字を読み取ります。それが4の場合、これもプレフィクス文字なので、さらに文字を読み取ります。たとえば、
M-x global-set-key RET C-x 4 $ spell-other-window RET
これは、(架空のコマンド)spell-other-window
を実行するように、C-x 4 $を再定義します。
global-unset-key
で、キーのグローバルな定義を削除できます。これはそのキーを未定義(undefined)にします。その後このキーをタイプしても、Emacsはビープ音を鳴らすだけです。同様にlocal-unset-key
は、カレントメジャーモードのキーマップでキーを未定義にして、メジャーモードにおいて、そのキーにたいするグローバル定義(またはグローバル定義に無い状態)が有効になります。
あるキーを再定義(または未定義に)してから、後でその変更を取り消したくなった場合、キーを未定義にしても上手くいきません — そのキーを標準の定義に再定義する必要があります。そのキーの標準の定義の名前を見つけるには、フレッシュなEmacsのFundamentalモードで、C-h cを使用します。このマニュアルのキーのドキュメントにも、それらのコマンド名がリストされています。
間違ってコマンドを呼び出すことから自分を守りたい場合、そのキーを未定義にするより、コマンドを無効にするほうがよいでしょう。無効にされたコマンドは、実際にそれを実行したくなったとき、少しの手間で呼び出すことができます。コマンドの無効化を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
いつでも使いたいキーバインドがある場合、初期化ファイルにLispコードを記述することにより、それらを指定できます。初期化ファイルの説明については、Emacs初期化ファイルを参照してください。
Lispを使用してキーバインディングを記述するには、いくつかの方法があります。一番簡単なのはkbd
関数を使う方法で、これはキーシーケンスのテキスト表現
— このマニュアルでキーシーケンスを記述するのと同様な方法 —
を、global-set-key
の引数として渡す形式に変換します。たとえば以下は、C-zをshell
コマンド(対話的なサブシェルを参照してください)にバインドする方法の例です:
(global-set-key (kbd "C-z") 'shell)
コマンド名shell
の前のシングルクォートは、それを変数ではなくシンボル定数としてマークします。クォートを省略した場合、Emacsはshell
を変数として評価しようとします。これはおそらくエラーを引き起こし、もちろんあなたはそれを望まないはずです。
以下に、ファンクションキーやマウスイベントなどを含めた、追加の例を示します:
(global-set-key (kbd "C-c y") 'clipboard-yank) (global-set-key (kbd "C-M-q") 'query-replace) (global-set-key (kbd "<f5>") 'flyspell-mode) (global-set-key (kbd "C-<f5>") 'display-line-numbers-mode) (global-set-key (kbd "C-<right>") 'forward-sentence) (global-set-key (kbd "<mouse-2>") 'mouse-save-then-kill)
kbd
を使うかわりに、キーシーケンスの指定にLisp文字列やベクターを使用することができます。文字列を使用するのは単純ですが、これはASCII文字とメタ修飾されたASCII文字だけで機能します。たとえば以下は、C-x
M-lをmake-symbolic-link
(ファイルのコピー、命名、リネーム。を参照)にバインドする方法の例です:
(global-set-key "\C-x\M-l" 'make-symbolic-link)
TAB、RET、ESC、DELを含むキーシーケンスにバインドするには、文字列はEmacs
Lispのエスケープシーケンス‘\t’、‘\r’、‘\e’、‘\d’を含むべきです。以下は、C-x
TABをindent-rigidly
(インデントを参照)にバインドする例です:
(global-set-key "\C-x\t" 'indent-rigidly)
キーシーケンスがファンクションキーやマウスボタンイベント、またはC-=
やH-a
のような非ASCII文字を含む場合、キーシーケンスを指定するのにベクターを使用することができます。ベクター内の各要素は入力イベントを意味します。要素はスペースで区切られ、一対の角カッコ(square
brackets)で囲まれます。ベクターの要素が文字の場合は、それをLisp文字定数、つまり‘?’の後ろにその文字を、文字列内で表記されるような方法で記述します。ファンクションキーはシンボルで表され(ファンクションキーのリバインドを参照してください)、他の区切り文字や句読点なしで、単にシンボル名を記述します。以下に例をいくつか示します:
(global-set-key [?\C-=] 'make-symbolic-link) (global-set-key [?\M-\C-=] 'make-symbolic-link) (global-set-key [?\H-a] 'make-symbolic-link) (global-set-key [f7] 'make-symbolic-link) (global-set-key [C-mouse-1] 'make-symbolic-link)
単純な場合でもベクターを使用できます:
(global-set-key [?\C-z ?\M-l] 'make-symbolic-link)
非ASCII文字にたいするキーバインディングは、言語とコーディングシステムに問題を起こすかもしれません。 initファイル内の非ASCII文字を参照してください。
ローカルキーマップで説明したように、メジャーモードとマイナーモードはローカルキーマップを定義できます。これらのキーマップは、セッションで最初にそのモードがロードされるときに構築されます。特定のキーマップで変更を行うために関数define-key
を使用できます。この関数はバインディングとしてnil
を渡すことによりキーのセット解除もできます。これらのキーマップを変更したい場合は、モードフック(mode
hook)を使用しなければなりません(フックを参照してください)。
モードのキーマップはモードがロードされるまで構築されないので、キーマップを変更するコードをモードフック(mode
hook)に配置することにより実行を遅延しなければなりません(フックを参照)。たとえばTexinfoモードは、フックtexinfo-mode-hook
を実行します。以下はTexinfoモードでC-c
nとC-c pにローカルバインディングを追加、C-c C-x
xのローカルバインディングを削除するために、どのようにフックを使用できるかの例です:
(add-hook 'texinfo-mode-hook (lambda () (define-key texinfo-mode-map "\C-cp" 'backward-paragraph) (define-key texinfo-mode-map "\C-cn" 'forward-paragraph))) (define-key texinfo-mode-map "\C-c\C-xx" nil)
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsでは、デフォルトのキーバインディングがセットアップされているので、修飾されたアルファベット文字は大文字小文字が区別されません。つまりC-AはC-aと同じことを行い、M-AはM-aと同じことを行ないます。これはアルファベット文字だけに当てはまり、他のキーのシフトキーが押された(shifted)バージョンには適用されません。たとえば、C-@はC-2と同じではありません。
Control修飾されたアルファベット文字は、一般的に大文字小文字が区別されません。Emacsは常にC-AをC-a、C-BをC-b、...として扱います。これは歴史的な理由によります。非グラフィカルな環境ではこれらのキーストロークに差異はありません。しかしGUIフレームではshiftしたControlのアルファベットキーストロークをバインドできます。
(global-set-key (kbd "C-S-n") #'previous-line)
他の修飾キーではEmacsをカスタマイズするとき修飾されたアルファベットの大文字小文字を区別するようにできます(非グラフィカルなフレームでも可)。たとえばM-aとM-Aで別のコマンドを実行できます。
一般的に使用される修飾キーはControlとMetaだけですが、Emacsは他の修飾キーもサポートします。これらはSuper、Hyper、Altと呼ばれます。これらの修飾キーを使用する方法を提供する端末の数は多くありません。ほとんどのキーボードでAltとラベルされたキーは、通常はAltではなくMeta修飾を発行します。Emacsの標準のキーバインディングにはSuperとHyperは含まれず、少数の標準キーバインディングだけがAltを使用します。これらのキーで修飾された文字は含まれません。しかしこれらの修飾を使用するキーバインディングに意味を割り当てるようにEmacsをカスタマイズできます。修飾ビットはそれぞれ‘s-’、‘H-’、‘A-’になります。
これらの追加的な修飾キーがキーボードになくても、C-x @を使用して入力できます。C-x @ hはHyperフラグ、C-x @ sはSuperフラグ、C-x @ aはAltフラグを次の文字に加えます。たとえばHyper-Control-aを入力するには、C-x @ h C-aとタイプします(残念なことに同じ文字にたいしてC-x @を使用して、2つの修飾を追加する方法はありません。なぜなら最初の1つは2回目のC-xにたいして作用するからです)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
キーシーケンスには、通常の文字と同じようにファンクションキーを含めることができます。Lisp文字(実際は整数です)がキーボードの文字を表すように、Lispシンボルはファンクションキーを表します。ファンクションキーのラベルに示された単語が、それにタイプするLispシンボルの名前になります。以下は一般的なファンクションキーにたいする、慣例的なLisp名です:
left
、up
、right
、down
カーソル矢印キーです。
begin
、end
、home
、next
、prior
その他のカーソルを再配置するキーです。
select
、print
、execute
、backtab
insert
、undo
、redo
、clearline
insertline
、deleteline
、insertchar
、deletechar
その他のファンクションキーです。
f1
、f2
、…、f35
(キーボード上部にある)番号つきのファンクションキーです。
kp-add
、kp-subtract
、kp-multiply
、kp-divide
kp-backtab
、kp-space
、kp-tab
、kp-enter
kp-separator
、kp-decimal
、kp-equal
kp-prior
、kp-next
、kp-end
、kp-home
kp-left
、kp-up
、kp-right
、kp-down
kp-insert
、kp-delete
(標準的なキーボードでは右側にある)キーパッドの名前や句読点のキーです。
kp-0
、kp-1
、…、kp-9
キーパッドの数字キーです。
kp-f1
、kp-f2
、kp-f3
、kp-f4
キーパッドのPFキーです。
これらの名前は便利ですが、いくつかのシステム(特にXを使用するシステム)では、異なる名前を使用するかもしれません。端末のファンクションキーにたいして、どのシンボルが使用されているか確認するには、C-h cとタイプして、その後にそのファンクションキーを入力してください。
ファンクションキーにバインドする例については、initファイル内でのキーのリバインドを参照してください。
多くのキーボードの右手側には、テンキーボード(numeric keypad)があります。キーパッドのテンキーは‘Num
Lock’とラベルされたキーで切り替えるにことにより、カーソル移動キーにもなります。デフォルトでは、Emacsはこれらのキーを、メインのキーボードの対応するキーに変換します。たとえば‘Num
Lock’がオンの場合、テンキーのlabeled
‘8’のラベルがついたキーはkp-8
を生成し、これは8に変換されます。また‘Num
Lock’がオフの場合、このキーはkp-up
を生成し、これはUPに変換されます。8やUPのようなキーをリバインドした場合、それはキーパッドの対応するキーにも影響します。しかし直接‘kp-’をリバインドした場合、これはメインのキーボードの等価なキーに影響を与えません。修飾されたキーは変換されないことに注意してください。たとえばMetaキーを押したまま、テンキーの‘8’を押すと、これはM-kp-8を生成します。
Emacsは変数keypad-setup
、keypad-numlock-setup
、keypad-shifted-setup
、keypad-numlock-shifted-setup
を使用することにより、テンキーのキーをバインドするための便利な方法を提供します。これらの変数は‘keyboard’カスタマイズグループで見つけることができます(Easy Customizationインターフェースを参照してください)。キーをリバインドして、数引数を発行するなど、他のタスクを行なうことができます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
当初TAB、RET、BS、LFD、ESC、DELは、特定のASCIIコントロール文字の名前として使用され、多用されるために自身の特別なキーをもつようになりました。たとえばTABはC-iの別の名前です。その後、ユーザーはEmacsでこれらのキーと、Ctrlキーと一緒にタイプするコントロール文字を区別できると便利なことに気づきました。したがってほとんどの現代的な端末では、これらは同じではありません。つまりTABはC-iと異なります。
これら2種類の入力を、キーボードが区別するなら、Emacsも区別することができます。Emacsは特別なキーをtab
、return
、backspace
、linefeed
、escape
、delete
という名前のファンクションキーとして扱います。これらのファンクションキーは、そのキー自体に何もバインドされていない場合は、対応するASCII文字に自動的に変換されます。結果として、ユーザーもLispプログラマーも、彼らがそうしたいと望まない限りは、これらの区別に注意を払う必要はありません。
(たとえば)TABとC-iを区別したくない場合は、ASCII文字のTAB(8進コード011)だけにたいしてバインディングを1つ指定します。これらを区別したいときは、ASCII文字にたいして1つのバインディング、ファンクションキーのtab
にたいして別のバインディングを指定します。
通常のASCII端末では、TABとC-i(および同じような他のペアー)を区別する方法はありません。なぜなら端末はどちらの場合も同じ文字を送るからです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsはマウスボタンを表すためにもLispシンボルを使用します。Emacsで通常のマウスイベントは、クリック(click)イベントです。これはボタンを押して、マウスを移動せずにボタンを離すと発生します。ドラッグ(drag)イベントも取得できます。これはボタンを押したままマウスを移動したとき発生します。ドラッグイベントは、最後にボタンを離したときにも発生します。
基本的なクリックイベントにたいするシンボルは、一番左のボタンがmouse-1
、次がmouse-2
、…となります。以下は、カレントウィンドウを2番目のマウスボタンで分割するように再定義する方法です:
(global-set-key [mouse-2] 'split-window-below)
ドラッグイベントにたいするシンボルも同様ですが、単語‘mouse’の前にプレフィクス‘drag-’がつきます。たとえば左ボタンでのドラッグはdrag-mouse-1
イベントを生成します。
マウスボタンが押されたときに発生するイベントにたいして、バインディングを定義することもできます。これらのイベントは‘drag-’ではなく‘down-’で始まります。このようなイベントは、それらにキーがバインドされているときだけ生成されます。ボタンダウンイベントを受け取った場合、その後に常にそれに対応するクリックまたはドラッグイベントが続きます。
もし望むならシングルクリック、ダブルクリック、トリプルクリックを区別することもできます。ダブルクリックとは、マウスボタンをほぼ同じ場所で2回クリックすることを意味します。最初のクリックは通常のクリックイベントを生成します。2回目のクリックが充分早ければ、かわりにダブルクリックイベントを生成します。ダブルクリックイベントにたいするイベントタイプは、たとえばdouble-mouse-3
のように、‘double-’で始まります。
これは同じ場所での2回目のクリックに特別な意味を与えることができることを意味しますが、それは最初のクリックを受け取ったときに実行される、通常のシングルクリックにたいする定義も実行されることを前提にしなければなりません。
これはダブルクリックで行なえることを制限しますが、ユーザーインターフェースデザイナーはこの制限は任意のケースにおいて従うべき制限だと言います。ダブルクリックは、シングルクリックで行なう何かを、よりもっと行なうためのものであるべきです。ダブルクリックイベントにたいするコマンドは、ダブルクリックにたいして追加の作業を処理するべきです。
ダブルクリックイベントにバインディングがない場合、これは対応するシングルクリックイベントに変化します。したがって、特にダブルクリックイベントを定義していない場合、これはシングルクリックコマンドを2回実行します。
Emacsはトリプルクリックイベントもサポートし、それらの名前は‘triple-’で始まります。Emacsはクワドループルクリック(quadruple clicks: 4連クリック)をイベントタイプとして区別しません。3回目以降のクリックは、追加のトリプルクリックイベントを生成します。しかしクリックされた数はすべてイベントリストに記録されるので、Emacs Lispを知っていて、本当にそれを使いたい場合はそれらを区別できます(Click Events in The Emacs Lisp Reference Manualを参照してください)。わたしたちは3連クリックを超えるクリックに明確な意味を与えるのは推奨しませんが、連続するクリックが同じ3つの意味のセットを巡回する — たとえば4連クリックは1クリックに等しく、5連クリックは2連クリックに等しく、6連クリックは3連クリックに等しい、とするのが便利なときがあるかもしれません。
Emacsはドラッグおよびボタンダウンイベントで、複数回ボタンが押されたことも記録します。たとえば、ボタンを2回押して、それからボタンを押したままマウスを移動した場合、Emacsは‘double-drag-’イベントを受け取ります。2回目にボタンを押した瞬間、Emacsは‘double-down-’イベントを受け取ります(そしてすべてのボタンダウンイベントと同様に、なにもバインドされていなければ無視されます)。
変数double-click-time
は、複数回のクリックをグループ化するのに、クリックの間にどれだけの時間経過を許すかを指定します。変数の値の単位はミリ秒です。値がnil
の場合、ダブルクリックは検知されません。値がt
の場合、時間の制限はありません。デフォルトは500です。
変数double-click-fuzz
は、複数回のクリックをグループ化するのに、クリックの間にどれだけマウスが移動できるかを指定します。変数の値はウィンドウ化されたディスプレーではピクセル単位で、テキストモード端末では文字セルの1/8を単位とし、デフォルトは3です。
マウスイベントにたいするシンボルは、修飾キーの状態も示し、‘C-’、‘M-’、‘H-’、‘s-’、‘A-’、‘S-’のプレフィクスが通常つきます。‘double-’や‘triple-’は常に‘drag-’や‘down-’の前にきますが、これらのプレフィクスは常にそれより前にきます。
フレームにはバッファーのテキストを表示しない、モードラインやスクロールバーのような領域が含まれます。スクリーンの特別な領域でマウスボタンが押されたかどうかは、ダミーのプレフィクスキーで知ることができます。たとえばモードラインでマウスをクリックした場合、通常のマウスボタンシンボルの前にプレフィクスキーmode-line
を受け取ります。したがって、以下はモードラインで左ボタンをクリックしたときにscroll-up-command
を実行する方法です:
(global-set-key [mode-line mouse-1] 'scroll-up-command)
以下はダミーのプレフィクスキーと、その意味の完全なリストです:
mode-line
マウスはウィンドウのモードラインにあります。
vertical-line
マウスは横に並んだウィンドウを分ける垂直ラインにあります(スクロールバーを使用している場合は、垂直ラインに表示されます)。
vertical-scroll-bar
マウスは垂直スクロールバーにあります(これはEmacsが現在サポートしているスクロールバーにたいしてだけです)。
menu-bar
マウスはメニューバーにあります。
tab-bar
マウスはタブバーにあります。
tab-line
マウスはタブラインにあります。
header-line
マウスはヘッダーラインにあります。
キーシーケンスにマウスボタンを複数配することもできますが、これは通常行なわれません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
コマンドを無効にするとは、そのコマンドを対話的に呼び出しユーザーに確認を求めることを意味します。コマンドを無効にする目的は、ユーザーが間違ってコマンドを実行するのを防ぐためです。わたしたちは初心者を混乱させるようなコマンドにたいして、これを行なっています。
無効なコマンドを呼び出そうとすると、Emacsはコマンド名、コマンドのドキュメント、すぐに何を行なうかの手引きを対話的に表示します。その後、Emacsはコマンドを要求されたとおり実行するか、そのコマンドを有効にしてから実行するか、キャンセルするか入力を求めます。コマンドを有効にすると決めた場合は、他の質問 — 永続的に有効にするか、それともカレントセッションでだけ有効にするか — にも応えなければなりません(永続的に有効にする場合、これは自動的に初期化ファイルを編集することにより機能します)。!とタイプして、カレントセッションだけにたいして、すべてのコマンドを有効にすることもできます。
コマンド無効化の直接的なメカニズムは、コマンドにたいするLispシンボルのdisabled
プロパティーに非nil
をputすることです。以下はこれを行なうLispプログラムです:
(put 'delete-region 'disabled t)
disabled
プロパティーの値が文字列の場合、その文字列はコマンドが使用されたときに表示されるメッセージに含まれます。
(put 'delete-region 'disabled "It's better to use `kill-region' instead.\n")
初期化ファイルを直接編集するか、初期化ファイルを編集するM-x disable-commandコマンドにより、コマンドを無効にできます。同様にM-x enable-commandはコマンドを永続的に有効にするために、初期化ファイルを編集します。Emacs初期化ファイルを参照してください。
Emacsが-qまたは--no-init-fileオプション(初期化オプションを参照してください)で呼び出された場合、これらのコマンドは初期化ファイルを編集しません。Emacsは初期化ファイルを読み込んでいないので、これを行なうと情報が失われるかもしれないからです。
コマンドが無効にされているかどうかは、それを呼び出すのに使用されるキーとは独立しています。M-xを使用してコマンドを呼び出しても、無効化は適用されます。しかしLispプログラムから関数として呼び出す場合、コマンドの無効化は効力をもちません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsを開始したとき、Emacsは通常、初期化ファイル(initialization file)、短くはinitファイルから、Lispプログラムのロードを試みます。このファイルは、もし存在する場合は、Emacsをどのように初期化するかを指定します。Emacsが~/.emacs.el、~/.emacs.d/init.el、~/.config/emacs/init.el、またはその他の場所を探すにしても、伝統的に~/.emacsはinitファイルとして扱われます。Emacsがinitファイルを探す方法を参照してください。
Emacsのすべての設定が1つのディレクトリーにあると便利だと思うかもしれません。その場合には~/.emacs.d/init.el、またはXDG互換の~/.config/emacs/init.elを使用する必要があります。
コマンドラインスイッチ‘-q’により、initファイルのロードを抑止でき、‘-u’ (または‘--user’)で、別のユーザーのinitファイルを指定できます(初期化オプションを参照してください)。
デフォルトinitファイルが存在する場合もあります。これはdefault.elという名前のライブラリーで、ライブラリーにたいする標準の検索パスから探されます。Emacsディストリビューションには、そのようなライブラリーは含まれていませんが、あなたのサイトは、ローカルなカスタマイズのためにこれを作成しているかもしれません。このライブラリーが存在する場合、Emacsを開始したときは常にこれがロードされます(ただし‘-q’を指定した場合は除きます)。しかしinitファイルがあれば、それが最初にロードされるので、そこでinhibit-default-init
に非nil
をセットすれば、デフォルトinitファイルはロードされません。
あなたのサイトにはサイトスタートアップファイル(site startup file)もあるかもしれません。もし存在する場合、これはsite-start.elという名前です。default.elと同様に、Emacsはこのファイルを、Lispライブラリーにたいする標準の検索パスから探します。Emacsはこのライブラリーをinitファイルの前にロードします。このライブラリーのロードを抑止するには、オプション‘--no-site-file’を使用します。初期化オプションを参照してください。わたしたちは何かを変更する場合、site-start.elの使用を推奨しません。これを好まないユーザーもいるからです。変更をdefault.elに記述すれば、ユーザーはもっと簡単にそれをオーバーライドできます。
default.elやsite-start.elは、EmacsがLispライブラリーを検索する任意のディレクトリーに配置できます。変数load-path
(EmacsのためのLispコードによるライブラリーを参照してください)は、これらのディレクトリーを指定します。多くのサイトはこれらのファイルを、Emacsのインストールディレクトリーの中の、site-lisp(たとえば/usr/local/share/emacs/site-lisp)に配置します。
initファイルにたいするバイトコンパイル(Byte Compilation in the Emacs Lisp Reference Manualを参照してください)は推奨されていません。一般的にこれは開始時のスピードの大幅な改善はせず、ファイルをリコンパイルするのを忘れたときに問題を起こすことが多いのです。よりよい解決策は、Emacsサーバー(サーバーとしてのEmacsの使用を参照してください)を使用して、Emacsを開始する回数を減らすことです。initファイルで多くの関数を定義している場合、これらを(バイトコンパイルされた)別のファイルに移動して、それをinitファイルでロードします。
マイナーなカスタマイズを超えるような、実際のEmacs Lispプログラムを記述するつもりなら、Emacs Lisp Reference Manualを読むべきでしょう。 Emacs Lisp in the Emacs Lisp Reference Manualを参照してください。
49.4.1 initファイルの構文 | Emacs Lispでの定数の構文。 | |
49.4.2 initファイルの例 | initファイルで何かを行なう方法。 | |
49.4.3 端末固有の初期化 | 端末タイプごとのinitファイル。 | |
49.4.4 Emacsがinitファイルを探す方法 | Emacsがinitファイルを探す方法について。 | |
49.4.5 initファイル内の非ASCII文字 | initファイルでの非ASCII文字の使用。 | |
49.4.6 早期初期化ファイル | 早期に読み込まれる別のinitファイル。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
initファイルには、1つ以上のLisp式が含まれています。式のそれぞれは引数をともなう関数名で、それらはすべてカッコで括られています。たとえば(setq
fill-column
60)
は、変数fill-column
(テキストのフィルを参照してください)を60にセットするために、関数setq
を呼び出します。
setq
で任意のLisp変数をセットできますが、initファイルの特定の変数にたいして、setq
は多分あなたの望むとおりには動作しないでしょう。いくつかの変数はsetq
でセットしたとき、自動的にバッファーローカルになります。あなたが望むのは、initファイルでデフォルト値をセットすることなので、setq-default
を使用します。マイナーモードのカスタマイズ可能な変数のいくつかは、それをCustomizeでセットすると、そのモードを有効にするために特別なことを行ないますが、通常のsetq
ではそれを行ないません。initファイルでモードを有効にするには、マイナーモードコマンドを呼び出します。以下のセクションには、これらの両方の方法の例があります。
setq
の2番目の引数は、変数にたいする新しい値の式です。これには、定数、変数、関数呼び出し式を指定できます。initファイルでは、定数が使用される場合がほとんどです。これは以下のとおりです:
数字は10進で記述され、オプションで最初にマイナス記号がある場合があります。
Lispの文字列構文は、少数の例外を除き、Cの文字列構文と同じです。文字列定数の開始と終了にはダブルクォートを使用します。
文字列には改行を含む、特別なリテラル文字を含めることができます。しかし、それらにたいして、バックスラッシュシーケンスを使う方が明確になる場合が多くあります。改行は‘\n’、バックスペースは‘\b’、キャリッジリターンは‘\r’、タブは‘\t’、フォームフィード(control-L)は‘\f’、エスケープは‘\e’、バックスラッシュは‘\\’、ダブルクォートは‘\"’、そして8進コードがoooの文字は‘\ooo’です。バックスラッシュとダブルクォートだけは、バックスラッシュシーケンスが必須な文字です。
‘\C-’はコントロール文字のプレフィクスとして使用でき、‘\C-s’はASCIIのcontrol-Sです。‘\M-’はメタ文字のプレフィクスとして使用でき、‘\M-a’はMeta-Aで、‘\M-\C-a’はCtrl-Meta-Aです。
initファイルに非ASCII文字を含めるための情報は、initファイル内の非ASCII文字を参照してください。
Lispの文字定数の構文は、たとえば?x
、?\n
、?\"
、?\)
のように、文字‘?’と、その後ろに文字または‘\’で始まるエスケープシーケンスからなります。Lispでは、文字列と文字は置き換え可能ではないことに注意してください。あるコンテキストでは一方が、他のコンテキストでは他方が要求されます。
非ASCII文字を送るキーにコマンドをバインドする情報については、initファイル内の非ASCII文字を参照してください。
t
は“true(真)”という意味です。
nil
は“false(偽)”という意味です。
シングルクォートに続けてLispオブジェクトを記述します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下はLisp式で一般的に行ないたいような事柄の例です:
load-path
にディレクトリーを追加します。その後、Emacsに含まれていないLispライブラリーをそのディレクトリーに配置すれば、M-x
load-libraryでそれらをロードすることができます。EmacsのためのLispコードによるライブラリーを参照してください。
(add-to-list 'load-path "/path/to/lisp/libraries")
(setq c-tab-always-indent nil)
個の例では、変数の通常の値がt
、つまり“true”の変数の値を、nil
つまり“false”にしています。
(setq-default case-fold-search nil)
これはデフォルト値をセットし、この変数にたいするローカル値(ローカル変数を参照してください)をもたないすべてのバッファーに効果を及ぼします。case-fold-search
をsetq
でセットした場合は、カレントバッファーだけに効果があり、それは多分あなたがinitファイルで行ないたいことではないはずです。
(setq user-mail-address "cheney@torture.gov")
Messageモードのような、さまざまなEmacsパッケージは、メールアドレスを知る必要がある場合に、user-mail-address
を参照します。メールヘッダーフィールドを参照してください。
(setq-default major-mode 'text-mode)
Textモードに入るコマンドにtext-mode
が使用されていることに注意してください。前のシングルクォートはシンボルを定数にしています。そうしない場合、text-mode
は変数名として扱われます。
(set-language-environment "Latin-1")
(line-number-mode 0)
(add-hook 'text-mode-hook 'auto-fill-mode)
(load "foo")
load
の引数が、‘/’や‘~’で始まらない相対ファイル名の場合、load
はload-path
のディレクトリーを検索します(EmacsのためのLispコードによるライブラリーを参照してください)。
(load "~/foo.elc")
ここでは完全なファイル名が使用されているので、検索は行なわれません。
myfunction
の定義を探すようEmacsに指示します。
(autoload 'myfunction "mypackage" "Do what I say." t)
ここで文字列"Do what I
say."
は、この関数のドキュメント文字列です。これをautoload
定義の中で指定することにより、そのパッケージがロードされていなくてもヘルプコマンドで利用可能になります。最後の引数t
は、この関数がinteractive(対話的)であることを示します。つまり、この関数はM-x
myfunction
RETとタイプするか、キーにバインドすることにより、対話的に呼び出すことができます。関数がinteractiveでない場合は、t
を省略するか、nil
を使用します。
make-symbolic-link
を実行するように、キーC-x lをリバインドします(initファイル内でのキーのリバインドを参照してください)。
(global-set-key "\C-xl" 'make-symbolic-link)
または
(define-key global-map "\C-xl" 'make-symbolic-link)
繰り返しになりますが、シングルクォートはmake-symbolic-link
を変数として値を参照するのではなく、シンボルとして参照するために使用されることに注意してください。
(define-key lisp-mode-map "\C-xl" 'make-symbolic-link)
next-line
を実行するすべてのキーにたいして、かわりにforward-line
を実行するように再定義します。
(substitute-key-definition 'next-line 'forward-line global-map)
(global-unset-key "\C-x\C-v")
キーを未定義にする1つの理由は、それをプレフィクスにできることです。単にC-x C-v anythingを定義すると、C-x C-vはプレフィクスになりますが、最初に通常のC-x C-vにたいする非プレフィクス定義を開放しなければなりません。
(modify-syntax-entry ?\$ "." text-mode-syntax-table)
narrow-to-region
の使用を有効にします。
(put 'narrow-to-region 'disabled nil)
ユーザーは通常、すべてのシステムでEmacsが同じように振る舞うことを期待するので、すべてのプラットフォームで同じinitファイルを使用するのが妥当です。しかしEmacsをカスタマイズするのに使用する関数が、他のプラットフォームやEmacsバージョンで利用できないということも発生します。この状況に対処するには、以下のように、ある関数または機能が利用可能かテストする条件文の内部に、カスタマイズを配置します:
(if (fboundp 'blink-cursor-mode) (blink-cursor-mode 0)) (if (boundp 'coding-category-utf-8) (set-coding-priority '(coding-category-utf-8)))
関数が定義されていない場合に発生するエラーを、単に無視することもできます。
(ignore-errors (set-face-background 'region "grey75"))
存在しない変数へのsetq
は一般的に無害なので、これらを条件文の中に置く必要はありません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
各端末タイプは、Emacsをその端末タイプで実行するときEmacsにロードされるLispライブラリーをもつことができます。termtypeという名前の端末タイプにたいして、そのライブラリーはterm/termtypeと呼ばれます(term-file-aliases
の連想配列(association
list)の中に(termtype
.
alias)
という形式のエントリーがある場合、Emacsはtermtypeのところにaliasを使用します)。このライブラリーは通常のようにディレクトリーload-path
を検索することにより見つけられ、サフィックスは‘.elc’と‘.el’です。通常はほとんどのEmacsライブラリーがあるディレクトリーの、サブディレクトリーtermにあります。
端末固有ライブラリーの通常の目的は、input-decode-map
を使用して、その端末のファンクションキーで使用されるエスケープシーケンスを、より意味のある名前にマップすることです。これがどのように行なわれるかの例は、ファイルterm/lk201.elを参照してください。多くのファンクションキーは、Termcapデータベースの情報にしたがい、自動的にマップされます。端末固有ライブラリーは、Termcapが指定しないファンクションキーだけをマップすればよいのです。
端末タイプがハイフンを含む場合、最初のハイフンの前の部分だけが、ライブラリーの選択で意味をもちます。したがって端末タイプ‘aaa-48’と‘aaa-30-rv’は、両方ともライブラリーterm/aaaを使用します。ライブラリー内のコードは、(getenv
"TERM")
を使用して、完全なタイプ名を取得できます。
ライブラリーの名前は、変数term-file-prefix
の値と、端末タイプを結合することにより構築されます。.emacsでterm-file-prefix
をnil
にセットすることにより、端末固有ライブラリーのロードを抑止できます。
Emacsは初期化の最後、.emacsと端末固有ライブラリーの両方が読み込まれた後に、フックtty-setup-hook
を実行します。端末固有ライブラリーの任意の部分をオーバーライドしたい場合や、ライブラリーをもたない端末の初期化を定義したい場合は、このフックにフック関数を追加します。フックを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsは通常はホームディレクトリー配下でinitファイルを探します。Emacs初期化ファイルを参照してください。
Emacsは~/.emacs.el、~/.emacs、~/.emacs.d/init.elというファイル名で、この順序でinitファイルを探します。これらの名前のどれを使用するか選択できます(ホームディレクトリー直下の場所だけが場所のベース名として先頭にドットをもつことに注意)。
EmacsはXDG互換の場所でもinit.elを探します。デフォルトはディレクトリー~/.config/emacsです。これは環境変数XDG_CONFIG_HOME
をセットしてオーバーライドできます。この値はデフォルトのXDG
initファイルの名前の~/.configを置き換えます。しかし~/.emacs.d、~/.emacs、~/.emacs.elが存在する場合には常に優先されます。これはXDGロケーションを使用するためには、それらの削除やリネームを行わなければならないことを意味します。
XDGロケーションと~/.emacs.dがいずれも存在しなければEmacsが~/.emacs.dを作成(したがって以降の呼び出しの間もそれが使用される)することにも注意してください。
Emacsは使用を決定したディレクトリーをuser-emacs-directory
んセットします。
これがたとえ古いバージョンのEmacsにたいする後方互換性のためだとしても、モダンなPOSIXプラットフォームは初期化ファイルを~/.configの配下に配置することを優先するので、誤ったinitファイルに起因する問題のトラブルシューティングやinitファイルコレクションのアーカイブはそのディレクトリーのリネームにより行うことができます。古いバージョンのEmacsがそれらのカレントのデフォルト位置で設定ファイルを見つけるのを助けるために、以下のEmacs Lispコードを実行することができます:
(make-symbolic-link ".config/emacs" "~/.emacs.d")
しかしsu
で開始されたシェルからEmacsを実行して環境変数XDG_CONFIG_HOME
が未セットなら、Emacsは現在の見かけのユーザーではなく、あなた自身の初期化ファイルを探すことを試みます。このアイデアは、たとえスーパーユーザーとして実行しているときでも、自分のエディターカスタマイズを取得するべきだという考えです。
より正確には、最初にEmacsはどのユーザーのinitファイルを使用するか決定します。Emacsは環境変数LOGNAME
とUSER
からユーザー名を取得します。どちらも存在しない場合、実効ユーザーIDを使用します。ユーザー名が実ユーザーIDとマッチしたとき、EmacsはHOME
を使用します。そうでない場合、Emacsはシステムのユーザーデータベースの、そのユーザー名に対応するホームディレクトリーを探します。
簡略化のためにEmacsドキュエントの残りの部分では、一般的にはinitファイルにたいして単にカレントデフォルト位置~/.emacs.d/init.elを使用します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
initファイルの文字列やキーバインディングに、アクセントつき文字などの非ASCII文字が含まれる場合、それは言語やコーディングシステムに問題を起こすかもしれません。
initファイルで非ASCII文字を使用したい場合、initファイルの最初の行に‘-*-coding: coding-system-*-’タグを配して、問題となる文字をサポートするコーディングシステムを指定するべきです。コーディングシステムの認識を参照してください。なぜなら、非ASCIIテキストのでコーディングにたいするにたいするデフォルトのコーディングシステムは、Emacsがinitファイルでそのような文字列を使用する個所を読み込むまでに、セットアップされていないかもしれないので、Emacsがその文字列を間違ってデコードする可能性があるからです。‘-*-coding: coding-system-*-’を記述した場合、set-language-environment
を呼び出す等、他の方法でコーディングシステムを変更するEmacs
Lispコードの追加は避けるべきです。
非ASCIIキーをバインドするには、ベクターを使用しなければなりません(initファイル内でのキーのリバインドを参照してください)。非ASCII文字はメタキーとして解釈されるので、文字列構文は使用できません。たとえば:
(global-set-key [?char] 'some-function)
charを挿入するには、C-qとタイプしてからバインドしたいキーをタイプします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsのほとんどのカスタマイズは通常のinitファイルに配置するべきです。Emacs初期化ファイルを参照してください。しかしEmacsのスタートアップで通常のinitファイルを処理するより早い段階で効果をもつカスタマイズが望ましい場合があります。そのようなカスタマイゼーションは早期initファイル~/.config/emacs/early-init.elまたは~/.emacs.d/early-init.elに配置することができます。このファイルはパッケージシステムとGUIの初期化前にロードされるので、フレームの外見やpackage-enable-at-startup
、package-load-list
、package-user-dir
のようなパッケージ初期化プロセスに影響を与える変数をカスタマイズできます。新たなパッケージのインストールだけに影響があるpackage-archives
のような変数やインストール済みパッケージを利用可能にするプロセス以外は正規のinitファイルでカスタマイズできます。パッケージのインストールを参照してください。
通常のinitファイルに残すことができるカスタマイゼーションをearly-init.elに移動することは推奨できません。早期initファイルはGUIの初期化前に読み込まれるので。GUI機能に関連するカスタマイゼーションはearly-init.elでは信頼性をもって機能しないからです。対照的に通常のinitファイルはGUIの初期化後に読み込まれます。GUI機能に依存するカスタマイズを早期initファイルで行わなければならない場合には、Emacsがスタートアップ時に提供するwindow-setup-hook
やtty-setup-hook
のようなフックを外して実行してください。フックを参照してください。
早期initファイルの詳細な情報はInit File in The Emacs Lisp Reference Manualを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
他のサービスに接続するEmacsパッケージには、たとえばGnus in The Gnus ManualやTramp in The Tramp Manualで見られるように、認証(パスワードの入力を参照)を要求するものがいくつかあります。同じユーザー名とパスワードを何度も提供するのは煩わしいかもしれないので、Emacsはauth-sourceライブラリーを通じて、認証情報を永続的に保つことを提案します。
デフォルトでは、認証情報はファイル~/.authinfo、~/.authinfo.gpg、または~/.netrcから取得されます。これらのファイルは以下のような、ftpプログラム由来として知られる、netrcファイルと同様の構文をもちます:
machine mymachine login myloginname password mypassword port myport
同様にauth-sourceライブラリーは現在のところ、クラシックなnetrcバックエンド、JSONファイル、Secret Service API、および標準的なUnixパスワードマネージャーのpassという、複数のストレージバックエンドをサポートしています。
これらの選択肢はすべて、ユーザーオプションauth-sources
を通じてカスタマイズできます。Emacs auth-source in Emacs auth-sourceを参照してください。
設定されたバックエンドで見つからないようなパスワードがインタラクティブに入力された場合、いくつかのバックエンドはそれの永続的な保存を提案します。これはユーザーオプションauth-source-save-behavior
をカスタマイズして、変更することができます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
quit(中止): コマンドの実行、または途中までタイプしたコマンドをキャンセルします。
最内の再帰編集レベル(recursive editing
level)をabort(中断)して、それを呼び出したコマンドをキャンセルします(abort-recursive-edit
)。
quitまたはabortのどちらか、意味のあるほうを行ないます(keyboard-escape-quit
)。
現在実行中のすべての再帰編集レベルをabortします。
バッファー内容にたいする直前の変更をキャンセルします(undo
)。
完了する前のコマンドをキャンセルする方法は2つあります。それはC-gによるquitと、C-]やM-x top-levelによるabortです。quitは途中までタイプしたコマンド、または実行中のコマンドをキャンセルします。abortは再帰編集レベルを抜けて、再帰編集を呼び出したコマンドをキャンセルします(再帰編集レベルを参照してください)。
C-gによるquitは、途中までタイプしたコマンドから抜けたり、望まない数引数から抜け出す方法です。さらに、あるコマンドが実行中の場合、C-gは比較的安全にコマンドを停止します。たとえば、長い時間がかかるkillコマンドをquitした場合、すべてのテキストがバッファーに残るか、またはすべてのテキストがkillリングに残るか、もしかしたらその両方かもしれません。リージョンがアクティブの場合、Transient Markモードがオフでなければ、C-gはマークを非アクティブにします(Transient Markモードを無効にするを参照してください)。インクリメンタル検索の途中では、C-gは特別に振る舞います。検索を抜けるには2回連続してC-gをタイプします。詳細は、インクリメンタル検索を参照してください。
MS-DOSでは、文字C-BreakがC-gのような文字の役割をします。MS-DOSではユーザーとの相互作用を行なうとき以外に、実行中のコマンドでC-gを認識できないのが理由です。それとは対照的に、C-Breakは常に認識できます。 MS-DOSでのキーボードの使用方法を参照してください。
C-gをタイプした瞬間に変数quit-flag
をt
にセットすることにより、C-gは機能します。Emacs
Lispはこの変数を頻繁にチェックして、これが非nil
のときはquitします。Emacsが入力待ちのときにタイプしたときだけ、C-gは実際にコマンドとして実行されます。この場合に実行されるコマンドは、keyboard-quit
です。
テキスト端末では、最初のC-gが認識される前に2回目のC-gでquitした場合は、emergency escape(緊急エスケープ)機能がアクティブになり、シェルに戻ります。緊急エスケープを参照してください。
quitできない状況もいくつか存在します。Emacsがオペレーティングシステムが何か行なうのを待つような場合、待ちが発生する箇所で特定のシステムコールにたいして、Emacsが特別な対処をしない場合、quitは不可能です。ユーザーがquitしたいと望むようなシステムコールにたいして、わたしたちはこれを行なっていなすが、それでも処理できないケースに出会う場合もあります。とても一般的なケースの1つは、NFSを使用したファイルへの入出力待ちです。Emacs自体はquitする方法を知っていますが、多くのNFS実装は、NFSサーバーがハングしたとき、ユーザープログラムがNFSを待つのを止めることを、単に許していません。
C-]
(abort-recursive-edit
)によるabortは、再帰編集レベルを抜けて、それを呼び出したコマンドをキャンセルするのに使用されます。C-gによるquitはこれを行なわず、行なうこともできません。なぜならこれは再帰編集レベルの中で、途中までタイプされたコマンドをキャンセルするからです。どちらの操作も有用です。たとえば再帰編集中に、数引数を入力するためにC-u
8とタイプした場合、C-gでその引数をキャンセルして、その再帰編集レベルに留まることができます。
シーケンスESC ESC ESC
(keyboard-escape-quit
)は、quitかabortのどちらかを呼び出します(多くのPCプログラムでESCは“抜け出す”ことを意味するので、このような定義にしました)。これはC-gのように、プレフィクス引数のキャンセル、選択されたリージョンのクリアー、また問い合わせつき置換から抜け出すこともできます。またC-]のように、ミニバッファーから抜け出したり、再帰編集から抜け出すこともできます。これはC-x
1のように、フレームの複数ウィンドウ分割から抜け出すこともできます。これが行なうことができないのは、実行中のコマンドの停止です。これは通常のコマンドとして実行されるので、Emacsが次のコマンドのために準備ができるまで、これを認識しないからです。
コマンドM-x top-levelは、現在の再帰編集レベルからすべての再帰編集レベルを抜けるための、充分な回数のC-]コマンドと等価です。ミニバッファーがアクティブなときは、ミニバッファーも抜けます。C-]は、1度に1レベル再帰編集レベルを抜けますが、M-x top-levelは、1度ですべての再帰編集レベルを抜けます。C-]とM-x top-levelの両方とも、他のすべてのコマンドと同様(そしてC-gとは異なり)、Emacsがコマンドにたいして準備ができているときだけ効果があります。C-]は通常のキーで、このキーが意味をもつのは、それがキーマップでバインドされているときだけです。再帰編集レベルを参照してください。
厳密に言えばC-/
(undo
)はキャンセルコマンドではありませんが、すでに実行を終えたコマンドをキャンセルすると考えることができます。undo機能についての詳細は、Undo(取り消し)を参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このセクションでは、キーボードコードのミクスアップ(mixup)、文字化け、メモリー不足、クラッシュやハングなど、Emacsが期待したとおりに動作しない状況の認識と対処法について説明します。
Emacsでバグを見つけたと思ったら何をすればよいかについては、バグの報告を参照してください。
51.1 DELで削除できない場合 | DELで削除できないとき、何を行なうべきか。 | |
51.2 再帰編集レベル | モードラインのカッコの周囲の’[...]’。 | |
51.3 スクリーン上のゴミ | 画面上のゴミ。 | |
51.4 テキスト内のゴミ | テキストの中のゴミ。 | |
51.5 メモリー不足 | メモリー不足に対処する方法。 | |
51.6 Emacsがクラッシュしたとき | クラッシュ時にEmacsが何を行なうか。 | |
51.7 クラッシュ後のリカバリー | クラッシュしたEmacsセッションでの編集をリカバリーする。 | |
51.8 緊急エスケープ | Emacsが応答しなくなったとき、何を行なうべきか。 | |
51.9 長い行 | 非常に長い行による低速化の緩和。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
すべてのキーボードには多くのキーがありますが、通常BACKSPACEとラベルされたキーは、最後にタイプした文字を削除するのに使用されます。Emacsでは、このキーはDELに等しいと想定されています。
グラフィカルなディスプレーでEmacsを開始したとき、EmacsはどのキーがDELなのか自動的に決定します。いくつかの特殊なケースでは、Emacsがシステムから間違った情報を取得して、BACKSPACEが後方ではなく前方に削除する場合があります。
Deleteというキーをもつキーボードもあります。これは通常、前方に削除するために使用されます。Emacsでこのキーが後方に削除を行なう場合も、Emacsが間違った情報 — ただし反対の意味の — を受け取ったことを意味します。
テキスト端末で、BACKSPACEが文字を削除するかわりに、Control-hのようなヘルプコマンドのプロンプトを表示する場合、それはこのキーが実際は‘BS’文字を送っていることを意味します。EmacsはBSをDELと扱うべきですが、そうしていないのです。
これらのケースのすべてにおいて、直ちに改善できることは同じでで、それはコマンドM-x normal-erase-is-backspace-modeを使用する方法です。これはEmacsがDELの処理をサポートする2つのモードを切り替えるので、もしEmacsが間違ったモードで開始された場合、正しいモードに切り替えることができます。テキスト端末では、BSがDELとして扱われる場合にヘルプを見たいときは、C-hのかわりにF1を使用します。C-?が文字コード127を送る場合は、このキーも機能するでしょう。
すべてのEmacsセッションで問題を解決するには、初期化ファイル(Emacs初期化ファイルを参照してください)に以下の行の1つを記述します。上記の最初のケースでは、BACKSPACEが後方ではなく前方に削除を行なうので、BACKSPACEがDELとして動作するように、以下の行を使用します:
(normal-erase-is-backspace-mode 0)
他の2つのケースでは、以下の行を使用します:
(normal-erase-is-backspace-mode 1)
すべてのEmacsセッションで問題を解決する別の方法は、変数normal-erase-is-backspace
をカスタマイズする方法です。BSまたはBACKSPACEがDELとなるようにモードを指定するには値t
、他のモードにたいしてはnil
を指定します。Easy Customizationインターフェースを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
再帰編集レベルは、Emacsの重要かつ便利な機能ですが、それを理解していない場合は、うまく機能していないように見えるかもしれません。
モードラインの、メジャーモードやマイナーモードを囲む丸カッコ(parentheses)の周囲に、角カッコ(square brackets)‘[…]’がある場合、それは再帰編集レベルにいることを意味します。もしこれが目的でない場合、またはその意味を理解していない場合は、すぐに再帰編集レベルを抜けるべきです。これを行なうには、M-x top-levelとタイプします。再帰編集レベルを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
テキスト端末でテキストが間違って見える場合、まず行なうことはバッファーのテキストが間違っていないか確かめることです。画面全体を再描画するために、C-l
(recenter-top-bottom
)とタイプしてください。この後でスクリーンが正常に表示される場合、問題は前のスクリーンの更新にあります(そうでない場合は、以下のセクションを参照してください)。
ディスプレー更新の問題は、使用している端末にたいする間違ったterminfoエントリーの結果であることがしばしばあります。Emacsディストリビューションのファイルetc/TERMSは、この種の既知の問題にたいする解決を与えます。INSTALLのセクションの中の1つは、これらの問題にたいする一般的なアドバイスを含みます。正しいterminfoエントリーを使用しているようなら、それはterminfoエントリーにバグがあるか、特定の端末タイプで発生するEmacsのバグである可能性があります。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
C-lがそのテキストが間違っていることを示す場合、最初に実際の結果を生成するのに何のコマンドをタイプしたか見るために、C-h l
(view-lossage
)とタイプします。それからC-x u
(undo
)を使用して、正しいと思える状態まで、1つずつ変更をundoします。
バッファーの先頭または最後の大量のテキストが失われているように見える場合は、モードラインに単語‘Narrow’が表示されていないかチェックします。もしこれが表示されている場合、表示されていないテキストはまだ存在しますが、一時的に制限されています。これに再びアクセスできるようにするには、C-x
n w (widen
)とタイプします。ナローイングを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
‘Virtual memory exceeded’というエラーメッセージが表示された場合は、C-x s
(save-some-buffers
)で変更されたバッファーを保存してください。この方法は、バッファーを保存するのに最小限の追加メモリーを必要とします。Emacsはこのエラーが発生したときでも利用可能な予備メモリーを保持しており、それはC-x
sが処理を完了するのに充分なはずです。予備メモリーを使用したとき、モードラインの先頭に‘!MEM
FULL!’が表示された場合、それは予備メモリーも使い切ったことを意味します。
変更されたバッファーを変更したら、このEmacsセッションを終了して別のセッションを開始するか、M-x kill-some-buffersを使用して、カレントEmacsジョブのスペースを開放できます。これにより充分なスペースが開放された場合、予備メモリーは再充填され、モードラインから‘!MEM FULL!’の表示が消えます。これは同じEmacsセッションで、安全に編集を継続できることを意味します。
メモリー不足のときは、バッファーの保存やkillにM-x buffer-menuを使用しないでください。Buffer Menuはかなりの量のメモリーを必要とするので、予備メモリーの供給では不充分でしょう。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsはクラッシュを前提としていませんが、もしクラッシュした場合、exitする前にクラッシュレポート(crash report)を生成します。クラッシュレポートは標準エラーストリームにプリントされます。EmacsがGNUシステムまたはUnixシステムでグラフィカルなデスクトップから開始された場合、標準エラーストリームは一般的に~/.xsession-errorsのようなファイルにリダイレクトされるので、そこでクラッシュレポートを探すことができます。MS-Windowsでは、クラッシュレポートは標準エラーストリームに加え、Emacsプロセスのカレントとディレクトリーの、emacs_backtrace.txtという名前のファイルに書き込まれます。
クラッシュレポートのフォーマットは、プラットフォームに依存します。GNU Cライブラリーを使用するいくつかのプラットフォームでは、クラッシュレポートには、クラッシュ前の実行状態を説明するbacktraceが含まれ、これはクラッシュをデバッグする助けとなります。以下はGNUシステムの例です:
Fatal error 11: Segmentation fault Backtrace: emacs[0x5094e4] emacs[0x4ed3e6] emacs[0x4ed504] /lib64/libpthread.so.0[0x375220efe0] /lib64/libpthread.so.0(read+0xe)[0x375220e08e] emacs[0x509af6] emacs[0x5acc26] …
数字‘11’ はクラッシュにたいするシステムのシグナル番号 — このケースではsegmentation fault —
です。16進数字はプログラムのアドレスで、これによりデバッグツールを使用して、ソースコード行に関連付けることができます。たとえばGDBコマンド‘list
*0x509af6’は、‘emacs[0x509af6]’エントリーにたいするソースコード行をプリントします。システムにaddr2line
ユーティリティーがある場合、以下のシェルコマンドはソースコードの行番号とともに、backtraceを出力します:
sed -n 's/.*\[\(.*\)]$/\1/p' backtrace | addr2line -C -f -i -p -e bindir/emacs-binary
ここで、backtraceはbacktraceのコピーを含むテキストファイル名、bindirはEmacs実行可能ファイルを含むディレクトリー名、emacs-binaryはEmacs実行可能ファイル(GNUおよびUnixシステムでは通常はemacs、MS-WindowsおよびMS-DOSではemacs.exe)です。-pオプションがない古いバージョンのaddr2line
では、このオプションを省略してください。
coreファイルをサポートするシステムでは、Emacsはオプションでコアダンプ(core dump)を生成します。コアダンプはクラッシュ前のプログラムの状態に関する多くのデータを含むファイルで、通常GDBのようなデバッガーにロードして調べられます。多くのプラットフォームでは、コアダンプはデフォルトで無効になっているので、(たとえばシェルのスタートアップスクリプトで)シェルコマンド‘ulimit -c unlimited’を実行して、明示的に有効にしなければなりません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacs、またはコンピューターがクラッシュした場合、クラッシュしたとき編集していたファイルを、自動保存ファイルからリカバリーすることができます。これを行なうには、再びEmacsを開始して、コマンドM-x recover-sessionとタイプしてください。
このコマンドはm最初に中断されたセッションのファイルを、ファイルの日付とともにリストするバッファーを表示します。そこからリカバリーするファイルを、選択しなければなりません。通常リカバリーしたいファイルは、一番最近のセッションでしょう。選択したファイルにポイントを移動して、C-c C-cとタイプしてください。
その後recover-session
は、そのセッション中に編集していた各ファイルについて、検討を行ないます。そのようなファイルそれぞれについて、そのファイルをリカバリーするか尋ねるのです。あるファイルにたいしてyと応えると、コマンドはファイルとファイルの自動保存ファイルの日付を表示して、再度そのファイルをリカバリーするか尋ねます。この2回目の質問にたいして同意するには、yesと応えなければなりません。yesと応えた場合、Emacsはそのファイルをvisitしますが、テキストは自動保存ファイルから取得します。
recover-session
が終了すると、リカバリーを選択したファイルがEmacsバッファーに表示されます。そこでファイルを保存する必要があります。それらを保存することだけが、そのファイル自身を更新するのです。
ファイルに関連付けられていないバッファーをリカバリーしたいときや、自動保存が重要な更新を記録するほど最新でなかった場合、最後の手段として — コアダンプが保存されていて、Emacsの実行ファイルからデバッグシンボルがストリップされていないという条件の元に — コアダンプからそれらを取得するために、GDB(GNUデバッガー)でetc/emacs-buffer.gdbスクリプトを使用することができます。
コアダンプを入手したら、すぐにcore.emacsのような別の名前にリネームします。これにより、他のクラッシュによるコアダンプの上書きを防ぎます。
このスクリプトを使用するには、Emacs実行ファイル名とコアダンプのファイル名を、‘gdb /usr/bin/emacs
core.emacs’のように指定します。(gdb)
プロンプトで、‘source
/usr/src/emacs/etc/emacs-buffer.gdb’としてリカバリースクリプトをロードします。それから利用可能なバッファーを見るために、コマンドybuffer-list
とタイプします。これは各バッファーにたいして、バッファー番号をリストします。バッファーを保存するには、ysave-buffer
を使用します。ここでバッファー番号とそのバッファーを書き込むファイル名を指定します。すでに存在するファイル名を使用するべきではありません。ファイルがすでに存在する場合、このスクリプトはそのファイルの古い内容のバックアップを作成しません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
テキスト端末では、1回目のC-gにたいしてEmacsが実際に反応してquitする前に、2回目のC-gをタイプすると、緊急エスケープ(emergency escape)が、Emacsを即座にサスペンドします。これにより、どんなにひどくハングしていても、常にGNU Emacsを抜け出すことができます。物事が正しく処理されている場合、Emacsは最初のC-gを素早く認識・処理するので。2回目のC-gは緊急エスケープを引き起こしません。しかし何らかの問題が、Emacsが最初のC-gを処理するのを妨げる場合、2回目のC-gでシェルに戻ります。
緊急エスケープによるサスペンドからEmacsを再開する場合、サスペンド前に行なっていた何かに戻る前に、Emacsは回復の報告と、以下の2つの質問をします:
Emacs is resuming after an emergency escape. Auto-save? (y or n) Abort (and dump core)? (y or n)
質問に応えるには、それぞれにたいしてyまたはnの後に、RETをタイプします。
‘Auto-save?’にたいしてyと応えると、自動保存が有効なすべての編集されたバッファーの自動保存を、即座に行ないます。nと応えると、これをスキップします。この質問は、Emacsが安全に自動保存を行えないような、何らかの状況にある場合は省略されます。
‘Abort (and dump core)?’にたいしてyと応えると、Emacsはクラッシュしてコアダンプします。これは専門家(wizard)が、なぜEmacsが最初のC-gでquitしなかったかを見つけ出すことを可能にします。コアダンプの後、実行は継続されません。
この質問にnと応えた場合、Emacsは実行を再開します。運がよければ、Emacsは最終的にquit要求を行なうでしょう。そうでない場合、連続してC-gをタイプして、緊急エスケープを再度呼び出します。
実際はEmacsがハングしているのではなく、遅いだけの場合、本当に意味するところを意図せずに、2連C-gの機能を呼び出してしまうかもしれません。この場合は、2つの質問の両方にnを応えれば、前の状態に戻ることができます。やがて要求したquitが行なわれるでしょう。
緊急エスケープはテキスト端末だけでアクティブになっています。グラフィカルなディスプレーでは、マウスを使用してEmacsをkillしたり、他のプログラムに切り替えることができます。
MS-DOSでは緊急エスケープを発生させるために、C-Breakを2回タイプしなければなりません — しかしシステムコールがハングしたり、EmacsがCコードのタイトなループにハマっているときは機能しないケースがあります。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
種々の理由(いくつかはEmacsの再表示コードと処理する可能性がある複雑な範囲が根本にあり、それ以外は稀な状況では同様に調整されないモードと機能にある)により、非常に長い行が存在するとEmacsのパフォーマンスは貧弱になり得ます(“非常に長い”とは通常は少なくとも数千文字を意味する)。
特に問題となるのは非常に長い行のファイルをvisitした時点でEmacsが長時間“hang”するかもしれないことです。これはso-longライブラリーを有効にして緩和される可能性があります。このライブラリーは異常に長い行を含むファイルのvisit時に検知して、その状況下で低速化をもたらす原因となる機能を無効化するステップを実行します。このライブラリーを有効にするにはM-x
global-so-long-mode
RETとタイプするか、initファイルでglobal-so-long-mode
をオンにしたり(Emacs初期化ファイルを参照)、global-so-long-mode
オプションをカスタマイズしてください。変数so-long-action
をカスタマイズすることによって、このモードの操作を調整できます。
so-longライブラリーは長い行をもつバッファーでの移動や編集の際にもパフォーマンスを有意に改善できます。依然として行が長くなるほどパフォーマンスはおそらく劣化するでしょうが、それにも関わらずライブラリーの使用によって実質的に改善される可能性があります。
このライブラリーのドキュメントの閲覧と、有効化と設定の方法に関する詳細はM-x so-long-commentaryを使用してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsでバグを見つけたと思ったときは、それを報告してください。それをfixすることは約束できませんし、それがバグであると常に認める訳ではありませんが、もちろんそれについて知りたいのです。追加したいと考える機能についても、同じことが言えます。以下のセクションは、有効なバグレポートを作成する助けとなるでしょう。
52.1 既存のバグレポートの既知の問題を読む | 既知の問題とバグについて読む方法。 | |
52.2 バグがあったとき | 本当にバグを見つけたのか? | |
52.3 バグレポートの理解 | バグを報告する効果的な方法。 | |
52.4 バグレポートのためのチェックリスト | 良いバグレポートのために従うべきステップ。 | |
52.5 GNU Emacsへのパッチの送付 | GNU Emacsにパッチを送る方法。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
バグを報告する前に、少しでも可能なら、それが既知のものか確認してください。実際には、それがもっと後のEmacsリリースや、Emacsの開発バージョンですでにfixされているかもしれません。以下は、既知の問題について読むことができる、主な場所のリストです:
ウェブページでバグトラッカーを閲覧するかわりに、debbugs
パッケージを使用して、それをEmacsから閲覧できます。このパッケージはパッケージメニュー(Emacs Lispパッケージを参照してください)を通じてダウンロードできます。このパッケージは、バグをリストするコマンドM-x
debbugs-gnu、特定のバグを検索するM-x
debbugs-gnu-searchを提供します。Emacsメンテナーにより適用されるユーザータグは、M-x
debbugs-gnu-usertagsで表示されます。
もし望むなら、メーリングリストに登録できます。このリストの目的はEmacsメンテナーにバグと機能リクエストの情報を提供するためのもので、報告には大量のデータが含まれるかもしれないことに注意してください。購読者はこれについて不満を言うべきではありません。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsが不正なメモリー位置にアクセスする場合(“segmentation fault”と呼ばれます)、または(“disk full”のようなメッセージではなく)プログラムに問題があることを示す、オペレーティングシステムのエラーメッセージとともに終了する場合、それは確実にバグです。
Emacsがバッファーの内容を正しく対応して表示しないとき、それはバグです。しかしバッファーのナローイング(ナローイングを参照してください)チェックするべきです。これはバッファーの一部を隠して、表示される方法を変更できるので、バグではありません。
コマンドが永久に完了しないなら、それはバグですが、本当にEmacsのせいか確認しなくてはなりません。コマンドの中には単に長時間かかるものがいくつかあります。C-g (MS-DOSではC-Break)をタイプしてから、C-h lで、Emacsが受け取った入力が、あなたがタイプしようと意図したものなのか確認します。その入力が、あなたが素早く処理されるべきだとわかっているものだった場合は、バグを報告してください。そのコマンドが長時間かかるものか判らない場合は、マニュアルを調べるか、協力してくれる人に尋ねてください。
あなたの親しんでいるコマンドが、コマンドの通常の定義が正当なのに、Emacsのエラーメッセージを表示する場合、それはおそらくバグです。
コマンドが間違ったことを行なうなら、それはバグです。しかしそのコマンドが何を行なうべきか確実に知っているか確認してください。そのコマンドに詳しくない場合、コマンドは実際は正しく動いているのでしょう。疑うなら、コマンドのドキュメント(コマンドと変数名のヘルプを参照してください)を参照してください。
あるコマンドの意図された定義が、それを編集するための最良の定義ではないこともあります。これはとても重要な問題の一種ですが、判断の問題でもあります。いくつかの既存の機能にたいする無知から、そのような決定を行なうのは簡単でもあります。通常の方法でドキュメントをチェックして、それを理解したと確信し、あなたがやりたいことが不可能だと確実に判るまでは、そのような問題にたいして不満を言わないのが、おそらく最良です。他のEmacsユーザーにも尋ねてみましょう。マニュアルを注意深く読んだ後でも、そのコマンドが何を想定しているか確信がもてないときは、不明解な単語をindex(索引)やglossary(用語集)でチェックしましょう。
注意深くマニュアルを読んだ後でも、そのコマンドが何を行なうべきか判らないとき、それは報告すべきマニュアルのバグであることを示します。Emacsのエクスパートでない人 — あなたを含めて — にたいして、すべてを明解にするのがマニュアルの役目です。プログラムのバグと同様に、ドキュメントのバグレポートは重要です。
関数や変数のビルトインドキュメントがマニュアルと異なる場合、どちらか一方が間違っていなければならないので、これはバグです。
Emacsの一部ではないパッケージについての問題は、そのパッケージの開発者にそれらを報告することにより開始したほうが良いでしょう。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
バグがあると判断したときは、それを報告すること、そして有用な方法で報告することが重要です。もっとも有用なのは、Emacsを起動するシェルコマンドから、問題が発生するまでに、何のコマンドをタイプしたかの正確な記述です。
バグレポートのもっとも重要な原理は、事実を報告することです。仮定や口頭の説明は、詳細な生データの代替にはなりません。事実の報告は簡単ですが、多くの人は事実のかわりに仮定の説明をしようと懸命に努め、それを報告するのです。その説明がEmacsが実装されている方法にたいする仮定にもとづく場合、それらは使い道がありません。その一方で事実の欠落により、わたしたちはバグについての実際の情報を得られないでしょう。実際に問題をデバッグして、推定を超える説明を報告したい場合、それは有用です — しかし、どうか生の事実も同様に含めてください。
たとえば、C-x C-f /glorp/baz.ugh RETとタイプして、ファイルをvisitしたとき、そのファイルが偶然大きい(とあなたは知っている)ファイルで、Emacsが‘I feel pretty today’と表示したとします。バグレポートにはすべての情報が必要になります。あなたは問題がファイルのサイズにあると仮定して、“大きなファイルをvisitしたら、Emacsが‘I feel pretty today’と表示します”、などと報告すべきではありません。これはわたしたちが“推測説明(guessing explanations)”と呼ぶものです。ファイル名に‘z’があるという事実が、問題の原因かもしれません。もしそうなら、あなたの報告を受け取ったとき、わたしたちは大きなファイルで問題の再現を試み、それらのファイル名にはおそらく‘z’が含まれておらず、問題を確認できないでしょう。名前に‘z’が含まれるファイルをvisitしてみるべきだと、推測できる方法はありません。
C-x C-fのではなく、“ファイルをvisit”とさえ言うべきではありません。同様にテキストを入力する方法では、“その行に3文字あるとき”ではなく、“RET A B C RET C-pとタイプした後”と書いてください。
可能なら、すぐにバグを再現するためにemacs -Q
(Emacsは初期のカスタマイズなしで開始されます。初期化オプションを参照してください)でEmacsを呼び出して、バグを発生させるステップを繰り返してみてください。この方法でバグを再現できたら、あなたの個人的なカスタマイズをバグから除外できます。バグレポートは、Emacsをemacs
-Q
で開始したことから始まり、バグを再現させる正確な一連のステップを続けるべきです。可能ならバグを再現するのに必要な、正確なファイル内容を報告してください。
emacs
-Q
では再現できないバグもいくつかあります。結局は再現するのが難しいバグもあります。そのような場合、何を行なったかを報告すべきです —
が、前述したように、どうか最初にバグを発生させた生の事実を固持してください。
報告したい複数の問題がある場合は、どうかそれらを個別のバグとしてそれぞれ報告してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
バグを報告する前に、まずその問題がすでに報告されていないか、確認を試みてください(既存のバグレポートの既知の問題を読むを参照してください)。
もし可能なら、その問題がすでにfixされていないか、最新リリース版のEmacsも試してみてください。同様に、最新の開発版を試してみるのもよいでしょう。これがある人にとっては簡単でないことは認識しているので、バグを報告する前に、絶対にこれを行なわなければならないと思わないでください。
Emacsでバグレポートを書くベストな方法は、コマンドM-x report-emacs-bugを使用する方法です。これはメールバッファー(メールの送信を参照してください)をセットアップして、自動的にいくつかの重要な情報を挿入します。しかし、すべての必要な情報は提供できません。だから以下のガイドラインを読んで、それに従うべきです。そうすればメッセージを送る前に、他の重大な情報を手で入力できます。M-x report-emacs-bugによって挿入されたいくつかの情報は、適切ではないと感じるかもしれませんが、完全に確信があるのでなければそれを残してください。そうすれば開発者たちがそれを判断できます。
レポートを記述し終えたら、C-c C-cとタイプすると、それはEmacsメンテナー bug-gnu-emacsに送られます (新しい機能や改善を提案したいときも、同じアドレスを使用します)。Emacsの中からメールを送れない場合、バグレポートのテキストを通常使用しているメールクライアントにコピーして(システムがサポートしている場合は、C-c M-iでEmacsにそれを行なわせることができます)、そのアドレスに送信できます。または、そのアドレスに問題を説明する簡単なメールを送ることもできます。
レポートは‘bug-gnu-emacs’メーリングリストに送られ、https://debbugs.gnu.orgのGNU Bug Trackerに保管されます。報告について、より詳細な情報を尋ねる必要がある場合のために、どうか有効な返信用アドレスを含めてください。提出されたレポートは調停されるので、レポートが見られるようになるまで遅れが生じることもあります。
バグを報告するためにGNU Bug Trackerがどのように機能するか知る必要はありませんが、もし望むなら、トラッカーのオンラインドキュメントで、使用できるさまざま機能を見ることができます。
‘bug-gnu-emacs’メーリングリストに送られたすべてのメールは、‘gnu.emacs.bug’ニュースグループにもゲートウェイされます。この逆も真ですが、バグレポート(または返信)をニュースグループにポストしないでください。これにより、さらに情報を尋ねるためにあなたに連絡するのが困難になるのと、それがバグトラッカーと充分に統合されていないからです。
データが500,000バイトを超える場合は、どうかそれを直接レポートに含めないでください。要求されたら送るという提案に留めるか、データをオンラインで利用可能にしてその場所を知らせてください。
GNU Bug Trackerはあなたの報告にたいしてバグ番号を付与するでしょう。以下のディスカッションでは、その番号を使用するようお願いいたします。
メンテナーがバグを詳細に調べられるように、レポートには以下の事項を含めるべきです:
この情報は、M-x report-emacs-bugにより自動的にレポートに含まれますが、レポートでこのコマンドを使用しない場合は、M-x emacs-version RETとタイプして、バージョン番号を取得できます。このコマンドが機能しない場合、たぶんあなたはGNU Emacsではない他の何かを使っているので、どこか他のところにそのバグを報告する必要があるでしょう。
configure
に与えたオプション(M-x
report-emacs-bugにより自動的にレポートに含まれます)。
これらの変更について正確に記述してください。英語による説明では充分ではありません。それらにたいする統一コンテキストdiff(unified context diff)も送ってください。
独自のファイル追加や、他の機種へのポートも、ソースの変更です。
ファイルをvisitせずに問題を発生させる方法を説明できるなら、ぜひそうしてください。これによりデバッグがとても簡単になります。ファイルが必要な場合、わたしたちがファイルの正確な内容を見られるよう確実にしてください。たとえば、行末にスペースがあるか、バッファーの最終行の後に改行があるかが問題となる場合があります(最終行が終端されているかどうかを心配すべき理由はないかもしれませんが、それがバグだと報告することを試みてください)。
Emacsへの入力を正確に記録する方法の1つとして、それをdribbleファイルに書き込む方法があります。このファイルを開始するには、M-x open-dribble-fileコマンドを使用します。このコマンドからそのEmacsプロセスがkillされるまで、Emacsはすべての入力を指定されたdribbleファイルにコピーします。機密情報(パスワードなど)は、dribbleファイルへの記録を終了させることに注意してください。
TERM
の値)、その端末にたいする/etc/termcapの完全なtermcapエントリー(このファイルはすべての機種で同じではありません)、Emacsが実際に端末に送った出力。
端末出力を収集する方法は、以下のLisp式
(open-termscript "~/termscript")
を、Emacs開始直後に、M-:を使用するか、*scratch*バッファーで実行します。その後Emacsプロセスがkillされるまで、Emacsはすべての端末出力を、指定されたtermscriptファイルにもコピーします。Emacs開始時にその問題が発生する場合は、この式をEmacs初期化ファイルに記述すれば、Emacsが最初にスクリーンを表示するときに、termscriptファイルもオープンされます。
警告: バグをシミュレートする端末タイプへのアクセスなしに、端末依存バグをfixするのは、しばしば困難で、不可能なときもあります。
echo LC_ALL=$LC_ALL LC_COLLATE=$LC_COLLATE LC_CTYPE=$LC_CTYPE \ LC_MESSAGES=$LC_MESSAGES LC_TIME=$LC_TIME LANG=$LANG
別の方法として、システムにそれがある場合は、GNU/LinuxおよびUnixコマンドを使用して、localeセッティングを表示できます。
M-!コマンドを使用してEmacsからこれらのコマンドを実行して、*Messages*バッファーからコマンドの出力をバグレポートにコピーできます。かわりにM-x
getenv RET LC_ALL
RETとタイプすると、LC_ALL
の値をエコーエリアに表示するので、*Messages*バッファーからこの出力をコピーすることもできます。
もちろん、Emacsが致命的なシグナルを受け取るというバグなら、見逃すことはないでしょう。しかし、そのバグが正しくないテキストの場合、メンテナーは何が間違っているか気づかないかもしれません。なぜそのような危険を放置するのですか?
あなたが遭遇した問題が致命的なシグナルの場合でも、明示的にそれを告げるべきです。何か奇妙なこと — たとえばあなたのソースコピーの同期がとれていない、またはあなたのシステムのCライブラリーにバグがある(これはあり得ます) — が起こっているとしましょう。あなたのコピーはクラッシュするかもしれませんが、私たちのコピーはクラッシュしないでしょう。あなたがクラッシュすることを告げていれば、わたしたちのEmacsはクラッシュしないので、バグはなかったとわたしたちは言うことができます。クラッシュすることを告げていない場合、わたしたちはバグがあるかどうか知ることができません — わたしたちの観察から、なんらかの結論を描くことも不可能です。
エラーメッセージを正確に取得するには、それを*Messages*バッファーからバグレポートにコピーします。一部だけではなく、すべてをコピーしてください。
エラーにたいするbacktraceを作成するには、エラーが発生する前にM-x toggle-debug-on-errorを使用します(つまり、このコマンドを与えた後で、バグを発生させなければなりません)。これはエラーによりbacktraceを表示するLispデバッガーを開始します。デバッガーのbacktraceをバグレポートにコピーしてください。EdebugパッケージでEmacs Lispプログラムをデバッグする情報については、Edebug in the Emacs Lisp Reference Manualを参照してください。
このデバッガーの使用は、バグを再現する方法を知っているときだけ利用可能です。バグを再現できなければ、最低でもエラーメッセージ全体をコピーしてください。
Emacsが無限ループや、とても長い処理にハマっているように見えるとき、(変数debug-on-quit
が非nil
の場合は)C-gとタイプするとLispデバッガーを開始して、backtraceを表示します。このbacktraceは、そのような長いloopのデバッグにたいして有用なので、backtraceを生成できたら、バグレポートにコピーしてください。
(inhibit-quit
がセットされている等で)、C-gにEmacsが応答しない場合、Emacsの外からdebug-on-event
で指定されたシグナル(デフォルトはSIGUSR2)を送ることにより、デバッガーに入ることができます。
-Q
スイッチでEmacsを開始することによりinitファイルのロードを抑止できます)。それで問題が発生しなかったら、問題を発生させるためにLispの世界にロードしなければならないプログラムの、正確な内容を報告しなければなりません。
開発ソースの行番号と、あなたのソースの行番号は一致しません。行番号だけでは、あなたのバージョンでその行番号がどのコードをさすのか、メンテナーが判断するのに余分な作業を要しますし、それに確信をもつこともできません。
しかし、何がバグを引き起こしたかを示すような追加の情報を収集するときは、考える必要があります。
たとえば、多くの人はCレベルのbacktraceだけを送って着ますが、これだけではとても有用とは言えません。引数つきのシンプルなbacktraceは、GNU Emacsの中で何が起こっているかを少ししか伝えないことがしばしばです。なぜならbacktraceにリストされたほとんどの引数は、Lispオブジェクトへのポインターだからです。これらのポインターの数値は、何であれ意味をもちません。問題となるのはポインターが指すオブジェクトの内容(そして、その内容自身もポインターの場合がほとんどです)なのです。
有用な情報を提供するためには、Lispオブジェクトの値をLisp表記で示す必要があります。基底スタックの近傍のスタックフレームのいくつかで、Lispオブジェクト変数それぞれにたいしてこれを行ないます。どの変数がLispオブジェクトであるかはソースを調べます。なぜならデバッガーはそれらを整数と判断するからです。
Lisp構文で変数の値を表示するには、最初にその値をプリントして、それからLispオブジェクトをLisp構文でプリントするために、ユーザー定義のGDBコマンドpr
を使用します(他のデバッガーを使用しなければならない場合、そのオブジェクトを引数として、関数debug_print
を呼び出します)。pr
コマンドはファイル.gdbinitで定義されていて、(コアダンプではなく)実行中のプロセスにたいしてデバッグするときだけ機能します。
LispエラーでEmacsを停止させてGDBに戻るには、Fsignal
にブレークポイントを置きます。
実行中のLisp関数の短いリストのためには、GDBコマンドxbacktrace
をタイプします。
ファイル.gdbinitでは、データ型やLispオブジェクトの内容を調べるための、他のコマンドも定義されています。これらのコマンドの名前は‘x’で始まります。これらのコマンドはpr
より低いレベルで動作するので、少し不便になりますが、コアダンプをデバッグしていたり、Emacsが致命的なシグナルを受け取ったときなど、pr
が機能しないようなときでも、機能するでしょう。
Emacsのデバッグにたいする、より詳細なアドバイスと、他の有用なテクニックは、Emacsディストリビューションの、ファイルetc/DEBUGで利用可能です。そのファイルには、Emacsが応答しない問題を詳しく調べる手順も含まれています(多くの人はこれをEmacsが“ハング”したとみなしますが、実際はおそらく無限ループにハマっているのでしょう)。
インストールしたEmacsのファイルetc/DEBUGを探すには、変数data-directory
に保管されたディレクトリー名を使用します。
以下はバグレポートには不要な事柄です:
バグに遭遇したとき人は、入力ファイルを変えてバグが発生しなくなるか、影響がないかなどを詳しく調べるのに、多くの時間を費やすことがしばしばです。
これは大抵多くの時間がかかる割に、とても有用とは言えません。なぜならわたしたちがバグを探す方法は、ブレークポイントを設定したデバッガーの元で1つの例を実行することであり、一連の例から得られる推論ではないからです。追加の例を探すのを止めることにより、あなたも時間を節約できるでしょう。すぐにバグレポートを送って、編集作業に戻り、報告すべき他のバグを探す法がよいでしょう。
もちろんオリジナルのかわりに、簡単な例を見つけることができたら、そちらのほうが便利です。出力中のエラーは簡単に見分けられますし、デバッガーでの実行も時間が短くなります
しかし単純化は必須ではありません、これを行なうことができなかったり、試す時間がない場合は、どうかオリジナルのテストケースでバグを報告してください。
コアダンプによるデバッグは有用ですが、それはあなたのEmacs実行ファイルと、あなたのマシンだけで行なうことができます。したがってEmacsメンテナーにコアダンプを送るのは、有益ではないでしょう。何よりも、コアダンプをメールのバグレポートに含めないでください! そのような巨大なメッセージは、すこぶる迷惑です。
システムコールトレースは、ある特別な種類のデバッグにはとても有用ですが、有用な情報が少ない場合がほとんどです。したがって、クラッシュに関する情報を報告する一番の方法は、システムコールトレースを送ることだと考えているように思える人が多いのは奇妙です。おそらくソースコードやデバッグシンボルがないプログラムをデバッグする経験がもたらす、習慣的なやり方なのでしょう。
ほとんどのプログラムでは、システムコールトレースより、backtraceのほうが、通常はずっとずっと参考になります。完全な情報を得るには、変数の値を表示して、それらをpr
でLispオブジェクトとしてプリントすることによりbacktraceを補完すべきであるとはいえ、シンプルなbacktraceのほうが一般的により参考になります(上記参照)。
バグにたいするパッチは、それが良いものなら有用です。しかし、そのパッチで充分だと思い込んで、テストケースのような、バグレポートに必要な他の情報を省略しないでください。わたしたちはそのパッチに問題を見つけて別の方法でfixすると判断するかもしれないし、結局はそれを理解できないかもしれません。わたしたちが、あなたがfixしようと試みているバグを理解できなければ、そしてなぜそのパッチが改善なのかを理解できなければ、私たちはそれを採用できません。
わたしたちにパッチを理解させて、採用を簡単にするためのガイドラインについては、GNU Emacsへのパッチの送付を参照してください。
そのような推測は通常間違っています。エキスパートでさえ、事実を見つけるために最初にデバッガーを使用しなければ、そのような事柄を正しく推測できないのです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
GNU Emacsを改善するためにバグfixを書きたいなら、それはとても助けになります。変更を送るとき、メンテナーがそれらを使うのが簡単になるように、どうか以下のガイドラインにしたがってください。これらのガイドラインにしたがわない場合でも、あなたの情報はまだ有用でしょうが、それを使用するのに余分な作業が必要になります。GNU Emacsの保守は最良の状況でも多くの作業を要すので、わたしたちを助けるのにあなたがベストをすくさなければ、わたしたちはそれを維持できないのです。
各パッチは、わたしたちがそれを正しく評価するために、簡単な情報をもたなければなりません。
そのような情報がすべてあるなら、それらをメールメッセージにまとめて、開発者に送ってください。推奨される送信先は、bug-gnu-emacs@gnu.orgです(これはバグおよび機能のためのリストです)。なぜなら、このリストにはパッチを簡単に確認するための追跡システム(tracking system)があるからです。そのパッチが完全ではなく、さらに議論が必要だと思うときは、かわりにそれをemacs-devel@gnu.orgに送りたいと思うかもしれません。パッチを改訂したら、それを最初のトピックにたいするfollowupとして送ってください。
わたしたちはそのパッチをプレーンテキストとして受けとるのを好みます。それはインライン(メールクライアントが行ブレークを変更しないように注意してください)、またはMIMEアタッチメントのどちらでも構いません。
異なる理由にたいして2つの変更を行なった場合、わたしたちをそれを一緒に採用したいとは思わないでしょう。1つだけを採用したいと思うかもしれません。それらを合わせて1つのdiffにして送った場合、それらを区別するために — 変更のどの部分がどの目的のためかを理解するために — 余計な作業を行なう必要があります。これを行なう時間がない場合、わたしたちは変更全体を無視する必要があるかもしれません。
1つの変更を記述したら、その変更の説明と一緒にそれをすぐに送れば、2つの変更は混ざることはなくなり、それらを区別する余計な作業なしに、わたしたちはそれぞれを正しく判断することができます。
変更は個別に送るべきなので、すぐに送ることができるでしょう。これは、その変更が重要なものなら、それをすぐに採用するオプションをわたしたちに与えます。
diffを作成するために、‘diff -u’を使用してください。コンテキストなしのdiffは確実に採用が困難です。それ以上に調べるのが難しくなります。わたしたちは変更の採用を望ましいか判断するために、つねにパッチを調べなければなりません。Contextフォーマットはコンテキストなしのdiffより優れていますが、好ましいのはUnifiedフォーマットです。
GNU diffがある場合、Cコードのdiffの作成には‘diff -u -F'^[_a-zA-Z0-9$]\+ *('’を使用してください。これは変更のある関数名を表示します。
Emacsリポジトリーを使用している場合、あなたのコピーが(たとえばgit
pull
などにより)最新であることを確認してください。あなたの変更をプライベートのブランチにコミットして、git format-patch
master
を使用することにより、マスターバージョンからパッチを生成できます。または変更をコミットせずに、git
diff
を使用することもできます。
変更された場所を示すのが、コミットログの目的です。したがって変更した関数について、具体的である必要があります。大きな関数では、関数のどこを変更したか示すのが、助けになる場合が多々あります。
それとは逆に、変更箇所を示せば、変更ログで変更目的の説明をする必要はありません。したがって、新しい関数を追加した場合、必要なのはそれが新しいということを示すだけです。変更目的の説明が必要だと感じたら、多分その通りなのでしょう、がコードのコメントにその説明を記述してください。変更目的はそこに記述されているほうが、より有用です。
どのような種類の情報を記述するかを見るために、最近のコミットにたいするコミットログエントリーを見て、わたしたちが使用しているスタイルを学んでください。他のプロジェクトとは異なり、たとえばTexinfoファイルのような、ドキュメントにたいするコミットログも必要です。変更ログ、および Change Log Concepts in GNU Coding Standardsを参照してください。
一般的には改善となるかもしれないが、そう確信するのは難しいようなfixを送る人が、ときどきいます。そのような変更を採用するのは、わたしたちがそれをとても慎重に調べなければならないので、難しくなります。もちろん、その変更が正しい理由の説明は、わたしたちを納得させる助けになります。
一番安全な変更は、特定の機種の設定ファイルにたいする変更です。これらの変更は、新しいバグを他の機種に作成しないので、安全です。
インストールの安全性が明確な形式でパッチをデザインして、わたしたちの作業量を、良い状態に保つ助けとなってください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsは共同制作によるプロジェクトであり、わたしたちは誰でも貢献できことを励行します。
Emacsに貢献する多くの方法があります:
Emacsを改善する作業をしたい場合は、 emacs-develメーリングリストのメンテナーに連絡してください。 提案されたプロジェクトを尋ねたり、あなたのアイデアを提案することができます。
Emacsにたいする機能の要望や改善方法についての提案を送る場合には、 bug-gnu-emacsが最善の場所です。 どのような変更を望むのか、そしてなぜ、どのようにすればそれがEmacsを改善すると思うかを、可能なかぎり明快に説明するようにお願いします。
すでに改善を記述したことがある場合は、それについて教えてください。まだ作業を開始していなければ、作業を開始する前に、 emacs-devel に連絡をとるのが有益です。Emacsの他の部分にたいして、あなたの拡張がより適合する方法を提案することが可能かもしれません。
機能を実装するときは、Emacs coding standardsに従ってください。コーディング規約を参照してください。くわえて、些細とは言えないような貢献にたいしてはFSFへの著作権の譲渡が必要になります。著作権の割り当てを参照してください。
Emacsの開発バージョンは、開発者グループにより活発にメンテされている、レポジトリーからダウンロードできます。アクセスの詳細についてはEmacsプロジェクトのページhttps://savannah.gnu.org/projects/emacs/を参照してください。
カレントワーキングバージョンにたいしてパッチを記述することは重要です。古いバージョンから開始した場合、パッチは時代遅れかもしれず(そのためメンテナーはそれを適用するのが難しくなります)、Emacsの変更によりあなたのパッチを不必要になっているかもしれません。リポジトリーソースからダウンロードした後は、ビルド手順についてファイルINSTALL.REPOを読むべきです(ビルド手順が通常のビルドとは異なります)。
より広範な貢献をしたい場合は、Emacs開発者になる方法についての情報を得るために、EmacsディストリビューションのCONTRIBUTEファイルを参照してください。
(望む変更を実装する方法を理解するために)、以下のEmacsドキュメントを参照してください:
53.1 コーディング規約 | GNU Emacsコーディング規約 | |
53.2 著作権の割り当て | FSFへの著作権の譲渡 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
貢献されたコードはGNUコーディング規約(GNU Coding Standards: https://www.gnu.org/prep/standards/)にしたがうべきです。これはシステムのinfoでも利用可能かもしれません。
これにしたがっていない場合、わたしたちがそれを使えるように、そのコードをfixする誰かを探す必要があるでしょう。
Emacsには追加のスタイルとコーディング規約があります:
defadvice
とwith-eval-after-load
の使用を避けてください。
?
のかわりに?\s
を使用してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
FSF(Free Software Foundation)は、GNU Emacsの著作権所有者です。FSFはコンピューターユーザーの自由の促進、およびすべてのフリーソフトウェアーユーザーの権利を守るという、世界的な使命をもつ、非営利団体です。一般的な情報については、ウェブサイトhttps://www.fsf.org/を参照してください。
一般的には、GNU Emacs、およびGNU ELPAに格納されているパッケージにたいする些細とは言えない貢献にたいして、わたしたちは著作権をFSFに譲渡することを求めます。この背景にある理由については、http://www.gnu.org/licenses/why-assign.htmlを参照してください。
著作権譲渡はシンプルなプロセスです。いくつかの国の住民は、これを完全にコンピューター上で行なうことができます。わたしたちはemacs-devel@gnu.orgメーリングリストにおいて、著作権譲渡を満足するために必要なフォームを送ったり、あなたがもつであろうさまざまな疑問にたいして回答(または回答をもつ人物を掲示)することで、あなたの着手を助けることができます。
(どうか注意してください: なぜいくつかのGNUプロジェクトは版権譲渡を求めるかについての一般的な議論は、emacs-develではoff-topicです。かわりにgnu-misc-discussを参照してください)
著作権放棄も可能ですが、好ましいのは譲渡です。著作権放棄者は、著作権譲渡者と同様に、FSFにサインされた書類を送ることが必要になります(単に“this is in the public domain”というだけでは充分ではありません)。著作権放棄は将来の作業には適用できないので、新しい何かを送りたいときは、毎回これを繰り返す必要があります。
わたしたちは、譲渡なしで小さな変更(大雑把に言うと15行以下)を受けとることができます。これはあなたの貢献全体にたいする蓄積的な制限です(たとえば5行パッチを3つ)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
インストール、使用方法、またはGNU Emacsの変更について助言を必要とする場合は、それを探す2つの方法があります:
gnu.emacs.help
にポストしてください(このメーリングリストとニュースグループは相互接続しているので、どちらを使っても問題ありません)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Copyright © 2007 Free Software Foundation, Inc. https://fsf.org/ Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
The GNU General Public License is a free, copyleft license for software and other kinds of works.
The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program—to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.
For the developers’ and authors’ protection, the GPL clearly explains that there is no warranty for this free software. For both users’ and authors’ sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.
Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users’ freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and modification follow.
“This License” refers to version 3 of the GNU General Public License.
“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.
To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.
A “covered work” means either the unmodified Program or a work based on the Program.
To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.
A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work’s System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
The Corresponding Source for a work in source code form is that same work.
All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work’s users, your or third parties’ legal rights to forbid circumvention of technological measures.
You may convey verbatim copies of the Program’s source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.
You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation’s users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.
You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party’s predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor’s “contributor version”.
A contributor’s “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor’s essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient’s use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy’s public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.
one line to give the program's name and a brief idea of what it does. Copyright (C) year name of author This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
program Copyright (C) year name of author This program comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’. This is free software, and you are welcome to redistribute it under certain conditions; type ‘show c’ for details.
The hypothetical commands ‘show w’ and ‘show c’ should show the appropriate parts of the General Public License. Of course, your program’s commands might be different; for a GUI interface, you would use an “about box”.
You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see https://www.gnu.org/licenses/.
The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read https://www.gnu.org/licenses/why-not-lgpl.html.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. https://fsf.org/ Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
The purpose of this License is to make a manual, textbook, or other functional and useful document free in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
This License is a kind of “copyleft”, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.
We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The “Document”, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as “you”. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.
A “Modified Version” of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.
A “Secondary Section” is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.
The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.
A “Transparent” copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not “Transparent” is called “Opaque”.
Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.
The “Title Page” means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, “Title Page” means the text near the most prominent appearance of the work’s title, preceding the beginning of the body of the text.
The “publisher” means any person or entity that distributes copies of the Document to the public.
A section “Entitled XYZ” means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.) To “Preserve the Title” of such a section when you modify the Document means that it remains a section “Entitled XYZ” according to this definition.
The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.
You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
You may also lend copies, under the same conditions stated above, and you may publicly display copies.
If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document’s license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct from any other section titles.
You may add a section Entitled “Endorsements”, provided it contains nothing but endorsements of your Modified Version by various parties—for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.
You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.
The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
In the combination, you must combine any sections Entitled “History” in the various original documents, forming one section Entitled “History”; likewise combine any sections Entitled “Acknowledgements”, and any sections Entitled “Dedications”. You must delete all sections Entitled “Endorsements.”
You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.
You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an “aggregate” if the copyright resulting from the compilation is not used to limit the legal rights of the compilation’s users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.
If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document’s Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.
Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.
If a section in the Document is Entitled “Acknowledgements”, “Dedications”, or “History”, the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.
You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License.
However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it.
The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See https://www.gnu.org/licenses/.
Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License “or any later version” applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy’s public statement of acceptance of a version permanently authorizes you to choose that version for the Document.
“Massive Multiauthor Collaboration Site” (or “MMC Site”) means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A “Massive Multiauthor Collaboration” (or “MMC”) contained in the site means any set of copyrightable works thus published on the MMC site.
“CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization.
“Incorporate” means to publish or republish a Document, in whole or in part, as part of another Document.
An MMC is “eligible for relicensing” if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008.
The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing.
To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
Copyright (C) year your name. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''.
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “with…Texts.” line with this:
with the Invariant Sections being list their titles, with the Front-Cover Texts being list, and with the Back-Cover Texts being list.
If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.
If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsは、Emacsを開始するとき、様々な動作を要求するための、コマンドライン引数をサポートします。これらのコマンド引数の中には、他のエディターとの互換性のためのものや、高度な動作を指定するものがあります。通常の編集にこれらを使用することはお勧めしません(コマンドラインから既存のEmacsジョブにアクセスする方法は、サーバーとしてのEmacsの使用を参照してください)。
‘-’で始まる引数はオプションで、‘+linenum’もオプションです。Emacsは、スタートアップ時に指定されたファイルをvisitします。コマンドラインで最後に指定されたファイルがカレントバッファーになり、それ以外のファイルも別のバッファーでvisitされます。ほとんどのプログラムと同様に、特別な引数‘--’は、それ以降のすべての引数が、(名前が‘-’で始まっていても)オプションではなくファイル名であることを指定します。
Emacsのコマンドオプションは、XウィンドウでEmacsが使用するウィンドウのサイズや位置、カラーなど、多くのことを指定できます。多くはありませんが、ファイルのLisp関数をバッチモードで実行するなど、高度な使い方をサポートするためのオプションもあります。このチャプターの各セクションでは、利用可能なオプションを、その目的に合わせて整理して説明します。
オプションを記述するには2つの方法があります。それは1つの‘-’で始まる短い形式と、‘--’で始まる長い形式です。たとえば、短い形式が‘-d’で、それに対応する長い形式は‘--display’です。
‘--’の長い形式は、覚えるのが簡単ですが、多くタイプしなければなりません。しかしオプション名全体を綴る必要はありません。あいまいさのない省略形で充分です。長いオプションが引数を要求する場合に、オプション名とそのオプションにたいする引数を区切るには、スペースとイコール記号の両方を使用することができます。したがって‘--display’オプションにたいしては、‘--display sugar-bombs:0.0’と‘--display=sugar-bombs:0.0’の、どちらでも記述することができます。関連性が明確になるのでイコール記号を推奨します。以下の表では、常にイコール記号で記すことにします。
ほとんどのオプションは、Emacsを初期化する方法や、Emacsセッションのパラメーターを指定します。これらを初期化オプション(initial
options)と呼びます。多くはありませんが、ライブラリーのロードや、Lisp関数の呼び出しなど、動作を指定するオプションもあります。これらを動作オプション(action
options)と呼びます。これらとファイル名を合わせたものを、動作引数(action
arguments)と呼びます。動作引数は、変数command-line-args
に、文字列のリストとして保管されます(実際のところ、Emacsスタートアップ時には、コマンドラインで渡されたすべての引数が、command-line-args
に含まれていますが、初期化を行なう間に、初期化引数は処理されるごとにこのリストから削除され、動作引数だけが残ります)。
C.1 動作引数 | ファイルのvisit、ライブラリーのロード、関数を呼び出す引数。 | |
C.2 初期化オプション | Emacsの開始に影響する引数。 | |
C.3 コマンド引数の例 | コマンドライン引数の使用例。 | |
C.4 環境変数 | Emacsが使用する環境変数。 | |
C.5 ディスプレー名の指定 | デフォルトディスプレーの変更と、リモートログインの使用。 | |
C.6 フォント指定オプション | Xでのテキストのフォント選択。 | |
C.7 ウィンドウカラーオプション | ディスプレーカラーの選択。 | |
C.8 ウィンドウのサイズと位置にたいするオプション | Xでのスタートアップウィンドウのサイズ。 | |
C.9 内枠ボーダーと外枠ボーダー | Xでの内枠ボーダーと外枠ボーダー。 | |
C.10 フレームタイトル | 初期フレームのタイトルの指定。 | |
C.11 アイコン | Xで使用するアイコンの選択。 | |
C.12 その他のディスプレーオプション |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下は動作引数の表です:
指定されたfileをvisitします。ファイルのvisit(訪問)を参照してください。
Emacsスタートアップ時、1つのウィンドウでスタートアップバッファーを表示し、fileをvisitするバッファーを別のウィンドウで表示します(複数ウィンドウを参照してください)。複数のファイル引数を与えた場合、コマンドラインの最後に指定されたファイルが表示され、他のファイルもvisitされますが、表示はされません。
スタートアップバッファーが無効(Emacsの起動を参照)の場合、ファイル引数が1つのときは1つのウィンドウでfileをvisitするバッファーを表示し、ファイル引数が2つのときは、Emacsはファイルを2つの別のウィンドウに表示します。ファイル引数が3つ以上の場合、Emacsは最後に指定されたファイルを1つのウィンドウに表示して、別のウィンドウにその他すべてのファイルを表示するバッファーメニュー(複数バッファーにたいする操作を参照)を表示します。このバッファーメニューの使用を抑制するには、変数inhibit-startup-buffer-menu
をt
に変更してください。
指定されたfileをvisitし、行番号linenumに移動します。
指定されたfileをvisitし、行番号linenumに移動して、列番号columnnumにポイントを置きます。
関数load
で、fileという名前のLispライブラリーをロードします。fileが絶対ファイル名でない場合、Emacsは最初にカレントディレクトリーを探して、次にload-path
(EmacsのためのLispコードによるライブラリーを参照してください)にリストされたディレクトリーを探します。
警告: 前のコマンドライン引数にvisitされたファイルがある場合、カレントディレクトリーは最後にvisitされたファイルのディレクトリーになります。
変数load-path
にリストされたディレクトリーの前に、ディレクトリーdirを追加します。複数の‘-L’オプションを指定した場合、Emacsはその順番を保持します。たとえば‘-L
/foo -L /bar’を使用すると、load-path
は("/foo" "/bar"
…)
となります。dirが‘:’で始まる場合、Emacsは‘:’を削除した残りを、load-path
にリストされたディレクトリーの(前ではなく)後ろに追加します(MS
Windowsでは‘:’のかわりに、path-separator
の値‘;’を使用します)。
Lisp関数functionを呼び出します。それがインタラクティブな関数(コマンド)の場合、同じ関数をキーシーケンスで呼び出したときのように、引数を対話的に読み取ります。そうでない場合は、その関数を引数なしで呼び出します。
Lisp式expressionを評価します。
fileの内容を、コマンドライン引数が処理されるときにカレントのバッファーに挿入します。これは通常、*scratch*バッファー(Lisp Interactionバッファーを参照してください)ですが、コマンドラインの前の引数がファイルをvisitしたりバッファーを切り替えるときは、別のバッファーになるでしょう。このコマンドライン引数の効果は、M-x insert-fileが行なうのと同様です(その他のファイル操作を参照してください)。
確認なしでEmacsを終了します。
利用可能なすべてのオプションがリストされたUsageメッセージをプリントしてから、正常終了します。
Emacsのバージョンをプリントしてから、正常終了します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
初期化オプションは、Emacsセッションにたいするパラメーターを指定します。このセクションでは、より一般的な初期化オプションを説明します。いくつかのオプションは、厳密には以降のセクションで説明するXウィンドウシステムに関連したオプションです。
いくつかの初期化オプションは、初期化ファイルのロードに影響します。Emacsは通常、site-start.elが存在する場合は最初にそれをロードし、ユーザーの初期化ファイルが存在すれば次にそれをロードして、デフォルト初期化ファイルdefault.elが存在すれば最後にそれをロードします(Emacs初期化ファイルを参照してください)。それらのファイルのロードを抑制したり、それらのファイルを別のファイルで置き換えるオプションもあります。
他のことを行なう前にまず、カレントディレクトリーをdirectoryに変更します。これはEmacsが停止したのと同じディレクトリーで開始されるように、主にXでのセッション管理に使用されます。これによりデスクトップの保存と復元が簡単になります。
端末の入出力にdeviceをデバイスとして使用します。このオプションは暗に‘--no-window-system’を含みます。
Emacs初期フレームを開くために、Xウィンドウシステムとdisplayという名前のディスプレーを使用します。詳細は、ディスプレー名の指定を参照してください。
環境変数DISPLAY
がセットされていても、ウィンドウシステムと直接やりとりしません。これはEmacsが、Emacsのすべての表示と出力のために、開始された端末を使用することを意味します。
Emacsをバッチモード(batch mode)で実行します。バッチモードは、シェルスクリプトやmakeファイルから、Emacs Lispで記述されたプログラムを実行するために使用されます。Lispプログラムを呼び出すには、‘-batch’オプションと併せて、1つ以上の‘-l’、‘-f’、‘--eval’を使用します(動作引数を参照してください)。使用例は、コマンド引数の例を参照してください。
バッチモードでは、Emacsは編集されるテキストを表示せず、C-zやC-cのような、標準の端末割り込みが通常の効果をもちます。通常はエコーエリアにメッセージをプリントするEmacs関数は、かわりに標準出力ストリーム(stdout
)、または標準エラーストリーム(stderr
)にメッセージをプリントします(正確に言うと、prin1
、princ
、print
のような関数はstdout
にプリントし、message
やerror
はstderr
にプリントします)。通常はミニバッファーからキーボード入力を読み取る関数は、かわりに端末の標準入力ストリーム(stdin
)から入力を受け取ります。
‘--batch’は暗に‘-q’(初期化ファイルをロードしません)を含みますが、それでもsite-start.elはロードされます。これはすべてのコマンドオプションを処理した後に、Emacsを終了します。それに加えて、自動保存が明示的に要求された場合を除き、自動保存を無効にします。また自動保存が要求されていない場合は、ファイルの保存でのfsync
システムコールを省略します。
‘--batch’と同様に、Emacsをバッチモードで実行してから、fileのLispコードを読み込み実行します。
このオプションは通常、Emacsを実行する実行可能スクリプトの中で使用します。これは以下のテキストを最初の行に記述します:
#!/usr/bin/emacs --script
これは‘--script’でEmacsを呼び出し、スクリプトファイル名はfileです。それからEmacs Lispは最初の行の‘#!’をコメント区切りとして扱います。
Emacs実行可能形式からシステム名やビルド日時などの詳細を取り除き、そのビルドがより決定論的になります。このスイッチによりsystem-name
のようなコマンドはnil
をリターンするようになるので、これは通常(またはインタラクティブ)の使用を意図していません。
初期化ファイルをロードしません(Emacs初期化ファイルを参照してください)。Emacsがこのオプションで呼び出された場合、Customize機能は、保存のオプションを受け付けません(Easy Customizationインターフェースを参照してください)。このオプションはsite-start.elのロードは無効にしません。
site-start.elをロードしません(Emacs初期化ファイルを参照してください)。‘-Q’オプションもこれを行ないますが、‘-q’のような他のオプションはこれを行ないません。
load-path
にsite-lispディレクトリーを含めません(Emacs初期化ファイルを参照してください)。‘-Q’オプションもこれを行ないます。
スタートアップ画面を表示しません。初期化ファイルで変数inhibit-startup-screen
を非nil
にセットしても、この効果を得ることができます(Emacsの起動を参照してください)。
Xリソースをロードしません。初期化ファイルで変数inhibit-x-resources
をt
にセットしても、この効果を得ることができます(Xリソースを参照してください)。
最小のカスタマイズでEmacsを開始します。これは‘-q’、‘--no-site-file’、‘--no-site-lisp’、‘--no-x-resources’、‘--no-splash’を一緒に使用したのと同様です。
Emacsをデーモンとして開始します。これはフレームをオープンせずに、Emacsサーバーを開始します。その後にemacsclient
コマンドを使用して、編集のためにEmacsに接続できます(オプションでサーバーに明示的にnameを指定できる。これを行った際には、emacsclient
呼び出し時に--socket-nameオプションで、同じnameを指定する必要があるだろう。emacsclient
のオプションを参照されたい)。デーモンとしてのEmacsの使用についての情報は、サーバーとしてのEmacsの使用を参照してください。“バックグラウンド”のデーモンは端末から切り離され、バックグラウンドで実行されます(‘--daemon’は‘--bg-daemon’のエイリアス)。
保存されたデスクトップをリロードしません。Emacsセッションの保存を参照してください。
あなたの初期化ファイルのかわりに、userの初期化ファイルをロードします。23
initファイルのエラーにたいして、Emacs Lispデバッガーを有効にします。Entering the Debugger on an Error in The GNU Emacs Lisp Reference Manualを参照してください。
動的ロードモジュールを処理する際に、高価な正当性チェックを有効にします。これは、作成したモジュールがモジュールAPI仕様に従っているか検証したいモジュール作者を意図したものです。モジュール関連のassertが発生した場合、Emacsはabortします。Writing Dynamically-Loaded Modules in The GNU Emacs Lisp Reference Manualを参照してください。
fileという名前のファイルからダンプされたEmacs状態をロードします。デフォルトではインストールされたEmacsはダンプ状態を、Emacsのインストールがアーキテクチャー依存のファイルを配置するディレクトリー内でemacs.pdmpという名前のファイルから探します。変数exec-directory
はそのディレクトリーの名前を保持します。emacsはEmacs実行可能ファイルの名前であり、通常は単なるemacsです(インストールせずにビルドしたディレクトリーsrcからEmacsを呼び出す際には実行可能形式のディレクトリーでダンプファイルを探す)。違う場所にダンプファイルのリネームや移動を行なった場合には、ファイルを探す場所をEmacsに指示するために、このオプションを使用できます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下は、引数とオプションを指定してEmacsを使用する例です。ここでは、ロードすることにより、Cプログラムをvisitしたカレントバッファーにたいして、何か便利な操作を行なう、hack-c.elという名前のLispプログラムファイルがあるとしましょう。
emacs --batch foo.c -l hack-c -f save-buffer >& log
これはfoo.cをvisitしてから、hack-c.el(これはvisitされたファイルに何らかの変更を行ないます)をロードし、foo.cを保存(save-buffer
はC-x
C-sにバインドされた関数であることに注意してください)した後に、(‘--batch’オプションなので)Emacsを終了してシェルに戻ります。‘--batch’は、出力をlogにリダイレクトしても問題がないことが保証されます。なぜならEmacsは作業するためのディスプレー端末をもたないと想定されるからです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
環境(environment)とは、オペレーティングシステムの機能です。これは値と名前をもつ変数のコレクションからなります。それぞれの変数は環境変数(environment variable)と呼ばれます。環境変数名は大文字小文字を区別し、慣習では大文字だけを使用します。値はすべてテキスト文字列です。
何が環境を便利にしているかというと、それはサブプロセスが親プロセスから自動的に環境を継承できることです。これはログインシェルで環境変数をセットして、実行するすべて(Emacsを含む)のプログラムが、それを参照できることを意味します。Emacsのサブプロセス(シェル、コンパイラー、バージョンコントロールシステムなど)も、Emacsから環境を継承します。
Emacsの中では、コマンドM-x getenvは環境変数の名前を読み取って、その値をエコーエリアにプリントします。M-x
setenvはEmacs環境で変数をセットし、C-u M-x
setenvは変数を削除します(‘$’による環境変数の置き換えは、ファイル名にたいする値と同様に機能します。File Names with $を参照してください)。変数initial-environment
は、Emacsにより継承された初期環境を保管します。
Emacsの外で環境変数をセットする方法は、オペレーティングシステム、特に使用しているシェルに依存します。たとえば以下はBashを使用して、環境変数ORGANIZATION
に‘not
very much’をセットする例です:
export ORGANIZATION="not very much"
以下はcshまたはtcshでこれを行なう方法の例です:
setenv ORGANIZATION "not very much"
EmacsがXウィンドウシステムを使用している場合、Xを制御するさまざまな環境変数は、Emacsも同様に制御します。詳細は、Xのドキュメントを参照してください。
C.4.1 一般的な変数 | すべてのバージョンのEmacsが使用する環境変数。 | |
C.4.2 その他の変数 | システム固有の変数。 | |
C.4.3 MS-Windowsのシステムレジストリー | MS-Windowsでの環境の代用。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下は、Emacsで特別な意味をもつ環境変数の、アルファベット順のリストです。これらの変数のほとんどは、他のプログラムでも使用されます。Emacsはこれらの環境変数がセットされていることを要求しませんが、セットされている場合はその値を使用します。
CDPATH
相対ディレクトリーを指定したときに、指定したディレクトリーを検索するために、cd
コマンドにより使用されます。
DBUS_SESSION_BUS_ADDRESS
D-BusサポートつきでEmacsがコンパイルされている場合、D-Busにより使用されます。通常これを変更する必要はありません。‘unix:path=/dev/null’のようなダミーアドレスをセットすることにより、D-Busセッションバスとの接続を抑止し、同様にD-Busセッションバスがまだ実行されていないときは自動的に開始します。
EMACSDATA
Emacsに含まれるアーキテクチャーに独立なファイルのディレクトリーです。これは変数data-directory
の初期化に使用されます。
EMACSDOC
ドキュメント文字列ファイル(documentation string
file)にたいするディレクトリーで、Lisp変数doc-directory
の初期化に使用されます。
EMACSLOADPATH
Emacs
Lispファイルを検索する、コロンで区切られたディレクトリーのリスト24です。セットされている場合は、変数load-path
の初期値です(EmacsのためのLispコードによるライブラリーを参照してください)。空の要素は、load-path
のデフォルト値を意味します。たとえば‘EMACSLOADPATH="/tmp:"’を使用すると、デフォルトのload-path
の前に/tmpを追加します。リストの中間に空の要素を指定するには、‘EMACSLOADPATH="/tmp::/foo"’のように、2つのコロンを続けます。
EMACSPATH
実行可能ファイルを検索するための、コロンで区切られたディレクトリーのリストです。セットされている場合、Emacsは変数exec-path
(Emacsからのシェルコマンドの実行を参照してください)を初期化するときに、PATH
(以下参照)に加えてこれをを使用します。
EMAIL
メールアドレスです。Lisp変数user-mail-address
を初期化するために使用されます。Emacsのメールインターフェースは、送信メッセージの‘From’ヘッダーにこれを使用します(メールヘッダーフィールドを参照してください)。
ESHELL
シェルモードで、環境変数SHELL
をオーバーライドするために使用されます(対話的なサブシェルを参照してください)。
HISTFILE
ログインしている間のシェルコマンドが保存されるファイルの名前です。この変数のデフォルトは、Bashを使用している場合は~/.bash_history、kshのときは~/.sh_history、それ以外では~/.historyです。
HOME
ディレクトリーツリー上で、あなたのファイルがある場所です。チルダ(~)で始まるファイル名の展開に使用されます。セットする場合には絶対ファイル名をセットする必要があります(相対ファイル名をセットするとEmacsはEmacsが開始されたディレクトリーから相対的なディレクトリーと解釈するが、この機能の使用は推奨しない)。未セットならHOME
のデフォルトはLOGNAME
、USER
、またはユーザーIDにより与えられるユーザーのホームディレクトリー、いずれも失敗したら/になります。MS-DOSでは、この変数のデフォルトはEmacsが開始されたディレクトリーで、そのディレクトリー名が‘/bin’で終わる場合、‘/bin’は取り除かれます。Windowsでは、HOME
のデフォルト値は、ユーザープロファイルディレクトリーのApplication
Dataサブディレクトリー(つまり通常はC:/Documents and
Settings/username/Application
Data。usernameはユーザー名)ですが、後方互換のため、C:/に.emacsがある場合は、かわりにC:/がデフォルト値になります。
HOSTNAME
Emacsが実行されているホストの名前です。
INFOPATH
コロンで区切られた、Infoファイルを検索するディレクトリーのリストです。
LC_ALL
LC_COLLATE
LC_CTYPE
LC_MESSAGES
LC_MONETARY
LC_NUMERIC
LC_TIME
LANG
そのユーザーの優先されるlocaleです。localeには6つのカテゴリーがあり、それぞれ環境変数で指定されます。ソートはLC_COLLATE
、文字エンコーディングはLC_CTYPE
、システムメッセージはLC_MESSAGES
、通貨形式はLC_MONETARY
、数字はLC_NUMERIC
、日時はLC_TIME
でlocaleを指定します。これらの変数の1つがセットされていない場合、そのカテゴリーのデフォルトは環境変数LANG
の値、LANG
がセットされていない場合は‘C’
localeになります。しかしLC_ALL
が指定された場合、これは他のすべてのlocale環境変数のセッティングをオーバーライドします。
MS-WindowsとmacOSでは、環境でLANG
がまだセットされていない場合、Emacsはシステムワイドなデフォルト言語にもとづき、LANG
をセットします。MS-Windowsのいくつかのバージョンでは、これはコントロールパネルの‘Regional
Settings’でセットでき、macOSではSystem Preferenceの“Language and Region”でセットできます。
LC_CTYPE
カテゴリーの値は、デフォルトの言語環境(language environment)とコーディングシステム(coding
system)を選択するために、locale-language-names
、locale-charset-language-names
、locale-preferred-coding-systems
のエントリーにたいしてマッチされます。言語環境を参照してください。
LOGNAME
ユーザーのログイン名です。USER
も参照してください。
MAIL
システムのメールinbox名です。
MH
mhシステムのセットアップファイル名です。MH-E in The Emacs Interface to MHを参照してください。
NAME
あなたの現実世界での名前です。これは変数user-full-name
を初期化するために使用されます(メールヘッダーフィールドを参照してください)。
NNTPSERVER
ニュースサーバーの名前です。Gnusパッケージで使用されます。
ORGANIZATION
あなたが属する組織の名前です。Gnusパッケージで、ポストの‘Organization:’ヘッダーをセットするために使用されます。
PATH
コロンで区切られた、実行可能ファイルを含むディレクトリーのリストです。これは変数exec-path
を初期化するために使用されます(Emacsからのシェルコマンドの実行を参照してください)。
PWD
セットされている場合、これはEmacsが開始されたときのデフォルトディレクトリーになるはずです。
REPLYTO
セットされている場合は、変数mail-default-reply-to
の初期値になります(メールヘッダーフィールドを参照してください)。
SAVEDIR
新しいアーティクルがデフォルトで保存されるディレクトリーの名前です。Gnusパッケージにより使用されます。
SHELL
Emacsの中からプログラムのパースや実行に使用されるインタープリターの名前です。
SMTPSERVER
送信メールサーバーの名前です。これは変数smtpmail-smtp-server
を初期化するために使用されます(メールの送信を参照してください)。
TERM
Emacsが使用する端末タイプです。Emacsがバッチモードで実行されていないとき、この変数はセットされていなければなりません。MS-DOSでは、デフォルトは‘internal’で、これはその機種固有のディスプレーを扱う、ビルトインの端末エミュレーションを指定します。
TERMCAP
TERM
で指定された端末をどのようにプログラムするかを記述する、termcapライブラリーファイルの名前です。デフォルトは/etc/termcapです。
TMPDIR
TMP
TEMP
これらの環境変数は、変数temporary-file-directory
を初期化するために使用されます。これは一時ファイルを置く場所を指定します(バックアップファイルを参照してください)。Emacsは最初にTMPDIR
の使用を試みます。これがセットされていない場合、通常Emacsは/tmpにフォールバックします。しかしMS-WindowsとMS-DOSでは、かわりにTMP
、次にTEMP
、最後にc:/tempにフォールバックします。
TZ
これはデフォルトのタイムゾーン(もしかしたらサマータイムの情報も)を指定します。Time Zone Rules in The
GNU Emacs Lisp Reference
Manualを参照してください。MS-DOSでは、Emacsを開始したときの環境でTZ
がセットされていない場合、EmacsはDOSが返す国コードにたいして、適切なデフォルト値を定義します。MS-Windowsでは、EmacsはTZ
を使用しません。
USER
ユーザーのログイン名です。LOGNAME
も参照してください。MS-DOSでは、デフォルトは‘root’です。
VERSION_CONTROL
変数version-control
の初期化に使用されます(単一または番号つきバックアップを参照してください)。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
これらの変数は、特定の設定だけにたいして使用されます:
COMSPEC
MS-DOSとMS-Windowsで、バッチファイルとシェルの内部コマンドを呼び出すときに使用する、コマンドインタープリターの名前です。MS-DOSでは、環境変数SHELL
のデフォルト値のためにも使用されます。
NAME
MS-DOSで、この変数は変数USER
のデフォルト値として使用されます。
EMACSTEST
MS-DOSで、内部端末エミュレーターの操作ログに使用するファイルを指定します。この機能はバグレポートを送るときに便利です。
EMACSCOLORS
MS-DOSで、スクリーンカラーを指定します。Emacsは開始時の数瞬、デフォルトカラーを表示するので、それらの指定にこの方法が便利です。
この変数の値は2文字のエンコーディングで指定し、それぞれデフォルトフェイスにたいして、1文字目はフォアグラウンドカラー、2文字目はバックグラウンドカラーを指定します。それぞれの文字は、標準のPCテキストモードディスプレーのカラーを記述する、16進コードを指定します。たとえばlight grayの背景色でblueのテキストを得たい場合は、‘EMACSCOLORS=17’を指定します。ここで1はカラーblue、7はカラーlight grayを指定しています。
PCディスプレーは通常、8色のバックグラウンドカラーだけをサポートします。しかしバックグラウンドカラーにたいして、16色すべてを使用できるDOSディスプレーにモードを切り替えるので、実際には4ビットのバックグラウンドカラーすべてが使用されます。
PRELOAD_WINSOCK
MS-Windowsでこの変数をセットしている場合、Emacsは開始時に、最初に要求されたときまで待たずに、ネットワークライブラリーのロードと初期化を行ないます。
emacs_dir
MS-Windowsでは、emacs_dir
は特別な環境変数で、これはEmacsがインストールされたディレクトリーのフルパスを指します。Emacsが標準的なディレクトリー構造にインストールされた場合、この変数の値は自動的に計算されます。他の環境変数とは異なり、これは開始時にEmacsによりオーバーライドされるので、標準的なインストールをした場合には、あなた自身がこの変数のセッティングを使用することは、あまりないでしょう。EMACSLOADPATH
のような他の環境変数をセットするとき、絶対パスをハードコーディングするより、emacs_dir
を使う法が便利だと気づくでしょう。これにより複数バージョンのEmacsが、同じ環境変数のセッティングを共有することが可能になり、環境やレジストリーのセッティングを変更せずに、Emacsのインストールディレクトリーを変更できるようになります。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
MS-Windowsでは、インストールプログラムaddpm.exe
が、システムレジストリーのHKEY_LOCAL_MACHINEセクションの、/Software/GNU/Emacsの下のemacs_dir
、EMACSLOADPATH
、EMACSDATA
、EMACSPATH
、EMACSDOC
、SHELL
、TERM
の値を追加します。これを行なうのは、異なるバージョンのWindowsにたいして環境変数をセットする、標準的な場所がないからです。最近のバージョンのEmacsでは、addpm.exe
の実行は絶対に必要ではなくなりましたが、古いバージョンからアップグレードする場合、addpm.exe
は以前のインストールから、(おそらく最新のEmacsと互換性がない)古いレジストリーエントリーを取得しないことを保証します。
Emacsを開始したときは、環境のチェックと同様に、システムレジストリーの、これらの変数とHOME
、LANG
、PRELOAD_WINSOCK
もチェックします。
これらの変数の値を決定するために、Emacsは次の手順にしたがいます。最初に環境がチェックされます。そこで変数が見つからない場合、Emacsは/Software/GNU/Emacsのレジストリーキーを名前で探します。最初にレジストリーのHKEY_CURRENT_USERセクション、そこで見つからなければ、HKEY_LOCAL_MACHINEセクションを探します。それでもなおEmacsが値を決定できない場合、コンパイルされたときのデフォルトが使用されます。
上記の環境変数に加えて、Xリソース(Xのオプションとリソースを参照)を指定するために/Software/GNU/Emacsのレジストリーキーにセッティングを追加することもできます。.Xdefaultsファイル内で指定可能なほとんどのセッティングを、そのレジストリキーからセットできます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
環境変数DISPLAY
は、Emacsを含むすべてのXクライアントに、ウィンドウをどこに表示するかを指定します。通常の状況では、この変数の値は、Xサーバーを開始してローカルでジョブを実行したとき、デフォルトにセットされます。ディスプレーを自分で指定することもできます。これを行なう理由の1つは、他のシステムにログインして、そこでEmacsを実行し、ウィンドウはローカル端末のウィンドウに表示させたい場合です。
DISPLAY
は、‘host:display.screen’という構文をもちます。ここでhostはXウィンドウシステムのサーバー機のホスト名、displayは、あなたのサーバー(Xサーバー)を、同一機種上の他のサーバーと区別するために任意に割り当てられる数字、そしてscreenフィールドは、Xサーバーが複数の端末スクリーンを制御することを可能にします。ピリオドとscreenフィールドはオプションです。screenが含まれる場合、通常は0です。
たとえば、あなたのホスト名が‘glasperle’で、あなたのサーバーが設定にリストされた最初の(もしかしたら唯一の)サーバーの場合、DISPLAY
は‘glasperle:0.0’になります。
Emacsを実行するとき、変数DISPLAY
を変更するか、オプション‘-d
display’または‘--display=display’で、明示的にディスプレーを指定できます。以下は例です:
emacs --display=glasperle:0 &
‘-nw’オプションで、Xウィンドウシステムの使用を抑止できます。その場合、Emacsはディスプレーとして制御テキスト端末を使用します。初期化オプションを参照してください。
セキュリティーの規制により、リモートシステムのプログラムが、ローカルシステムで表示を行なうのを禁ずることがあります。この場合、Emacsは以下のようなメッセージを出力します:
Xlib: connection to "glasperle:0.0" refused by server
ローカル機でxhost
コマンドを使用することにより、リモート機からアクセスする権限を与えれば、この問題を解決できるでしょう。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
デフォルトのフォントを指定するために、コマンドラインオプション‘-fn font’(または‘--font’。これは‘-fn’のエイリアスです)を使用できます。
fontをデフォルトフォントとして使用します。
コマンドラインでフォント名をEmacsに渡す場合、フォント名にシェルが特別に扱う文字(たとえばスペース)が含まれる場合は、クォーテーションマークで囲んでクォートする必要があるでしょう。たとえば:
emacs -fn "DejaVu Sans Mono-12"
フォント名やデフォルトフォントを指定する別の方法についての詳細は、フォントを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsディスプレーのさまざまな場所で使用するカラーを指定するために、以下のコマンドラインオプションを使用できます。カラーは、カラーネーム(color names)か、RGBトリプレット(RGB triplets)のどちらかを使用して、指定します。
フォアグラウンドカラーを指定します。default
フェイス(テキストのフェイスを参照してください)で指定されたカラーをオーバーライドします。
バックグラウンドカラーを指定します。default
フェイスで指定されたカラーをオーバーライドします。
Xウィンドウのボーダーカラーを指定します。EmacsがGTK+サポートつきでンパイルされいてる場合、効果はありません。
ポイントがある位置を示すEmacsのカーソルカラーを指定します。
Emacsウィンドウにマウスがあるときの、マウスカーソルカラーを指定します。
フォアグラウンドカラーとバックグラウンドカラーを入れ替えて、反転表示します。
Emacsをテキスト端末で実行するときの、カラーサポートモード(color support
mode)をセットします。その文字端末のterminfo
データベースまたはtermcap
で示される、いくつかのサポートされたカラーをオーバーライドします。パラメーターmodeには、以下の1つを指定できます:
端末の能力がカラーをサポートすると指定していても、カラーを使用しません。
--colorを指定しないときと同じです。Emacsは開始時に端末がカラーをサポートするか検知して、もしサポートされていれば、カラーディスプレーをオンに切り替えます。
無条件にカラーサポートをオンに切り替えて、標準的な8カラーにたいするANSIエスケープシーケンスによるカラーコマンドを使用します。
num個のカラーにたいするカラーモードを使用します。numが-1の場合、カラーサポートをオフに切り替えます(‘never’と同じです)。0の場合、この端末にたいするデフォルトのカラーサポートを使用します(‘auto’と同じです)。そうでない場合、num個のカラーにたいする適切な標準モードを使用します。端末の能力により、numの値に応じて、Emacsは8色、16色、88色、256色のカラーモードに切り替えることができるでしょう。numカラーをサポートするモードが存在しない場合、Emacsはあたかもnumに0が指定された場合のように、その端末のデフォルトのカラーサポートを使用します。
modeが省略された場合のデフォルトは、ansi8です。
たとえばcoralのマウスカーソルと、slate blueのテキストカーソルを使用するには、以下のように入力します:
emacs -ms coral -cr 'slate blue' &
‘-rv’オプションを指定するか、Xリソースの‘reverseVideo’で、フォアグラウンドとバックグラウンドのカラーを反転できます。
‘-fg’、‘-bg’、‘-rv’オプションの機能は、テキスト端末でも、グラフィカルなディスプレーと同様です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下は、Emacsの初期フレームのサイズと位置を指定する、コマンドラインオプションのリストです:
サイズwidthとheight(文字の列数と行数)、および位置xoffsetとyoffset(ピクセル)を指定します。パラメーターwidthとheightはすべてのフレームに適用されますが、xoffsetとyoffsetは初期フレームだけに適用されます。
スクリーンのサイズになるように、幅と高さを指定します。通常は、ウィンドウマネージャーによる装飾は表示されません(Emacsを起動した後に、F11
toggle-frame-fullscreen
を使用して、この状態を切り替えることができます)。
Emacsのフレームが最大化されるよう指定します。これは通常、そのフレームがウィンドウマネージャーによる装飾をもつことを意味します(Emacsを起動した後に、M-F10
toggle-frame-maximized
を使用して、この状態を切り替えることができます)。
高さがスクリーンの高さになるように指定します。
幅がスクリーンと同じ幅になるように指定します。
‘--geometry’オプションでは、{+-}
は、プラス記号かマイナス記号のどちらかを意味します。xoffsetの前のプラス記号はスクリーンの左端からの距離、マイナス記号は右端からの距離を意味します。yoffsetの前のプラス記号はスクリーンの上端からの距離、マイナス記号は下端からの距離を意味します。xoffsetとyoffsetの値自体に正または負の値を指定できますが、それはこれらの意味を変更するものではなく、方向だけを変更します。
Emacsは、xterm
がジオメトリーを解釈するのと同じ単位を使用します。widthとheightは文字で数えられるので、大きなフォントは、小さなフォントより大きなフレームを作成します(プロポーショナルフォントを指定した場合、Emacsは幅の単位として、そのプロポーショナルフォントの最大幅を使用します)。xoffsetとyoffsetはピクセルで数えます。
ジオメトリー指定で、すべてのフィールドを指定する必要はありません。xoffsetとyoffsetの両方を省略した場合、ウィンドウマネージャーがEmacsフレームをどこに配置するかを決定するか、もしかしたらマウスでその場所を指定できるかもしれません。たとえば‘164x55’は、ウィンドウの幅が164(通常のウィンドウを横に2つ並べられる幅)で、55行分の高さを指定します。
デフォルトのフレーム幅は80文字、デフォルトの高さは35行から40行です。幅と高さの、どちらか一方、または両方を省略できます。ジオメトリーが整数で開始される場合、Emacsはそれを幅と解釈します。ジオメトリーの開始が‘x’でその後に整数が続く場合、Emacsはそれを高さと解釈します。したがって‘81’は幅だけを指定し、‘x45’は高さだけを指定します。
ジオメトリーを‘+’か‘-’で開始した場合、それはオフセットを示し、幅と高さの両方のサイズが省略されたことを意味します。したがって‘-3’はxoffsetだけを指定します(オフセットを1つだけ与えたとき、それは常にxoffsetになります)。‘+3-3’はxoffsetとyoffsetの両方を指定し、フレームをスクリーンの左下に配置します。
Xリソースファイル(Xリソースを参照してください)で、任意またはすべてのフィールドにたいするデフォルトを指定できます。それらにたいしてフィールドを選択して、‘--geometry’オプションでオーバーライドできます。
モードラインとエコーエリアはフレームの2行を占めるので、初期のテキストウィンドウの高さは、ジオメトリーで指定した高さより、2つ少なくなります。非X-toolkitバージョンのEmacsでは、指定した数から、メニューバーの占める1行が引かれます。しかしX-toolkitバージョンでは、メニューバーは付加的で、指定された高さにたいして数えられません。ツールバーがある場合も、それは付加的です。
メニューバーやツールバーを有効または無効にすることにより、通常のテキストが利用できるスペースが変わります。したがって、Emacsがツールバーつき(デフォルト)で開始しされ、ツールバーがあることを前提にジオメトリー指定を処理して、それを初期化ファイルでツールバーを無効にしていた場合、あなたが指定したのと異なるフレームジオメトリーになるでしょう。ツールバーがないサイズを得るには、Xリソースで“no tool bar”を指定します(EmacsにたいするXリソースの表を参照してください)。そうすれば、Emacsは指定されたジオメトリーを処理するときに、ツールバーがないことを知ることができます。
‘--fullscreen’、‘--maximized’、‘--fullwidth’、‘--fullheight’のどれか1つを使用するとき、フレームが本当に最大化またはフルスクリーンに見えるようにするために、変数frame-resize-pixelwise
を非nil
値にすることを要求するウィンドウマネージャーがいくつかあります。
位置にたいする、プログラム指定とユーザー指定の両方を無視するようにできるオプションをもつウィンドウマネージャーがいくつかあります。これらのオプションがセットされている場合、Emacsはウィンドウを正しく配置するのに失敗します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
1つのEmacsフレームは内枠ボーダー(internal border)と、外枠ボーダー(outer border)をもちます。内枠ボーダーはフレームのテキスト部分の周囲にある、バックグラウンドカラーによる追加の縁取り(extra strip)です。内枠ボーダーはEmacs自身が描画します。外枠ボーダーはフレームのツールバーとメニューバーの外側にあり、Xにより描画されます。ウィンドウマネージャーにより描画される外部ボーダー(external border)も存在します。外部ボーダーのサイズは、Emacs内からセットすることはできません。
内枠ボーダー(フレームのテキストエリア周辺)の幅に、ピクセル単位でwidthを指定します。
外枠ボーダーの幅に、ピクセル単位でwidthを指定します。
フレームのサイズを指定するとき、ボーダーは含まれません。フレームの位置は、外枠ボーダーの縁端から測られます。
ピクセル幅nの内枠ボーダーを指定するには、‘-ib n’オプションを使用します。デフォルトは1です。外枠ボーダーの幅を指定するには、‘-bw n’を使用します(ウィンドウマネージャーはその指定に注意を払わないかもしれませんが)。外枠ボーダーのデフォルト幅は2です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacshフレームは常に指定されたタイトルをもち、それはウィンドウ装飾とアイコンに、フレームの名前として表示されます。デフォルトのタイトルは‘invocation-name@machine’という形式(フレームが1つだけのとき)か、選択されたウィンドウのバッファー名(複数のフレームがある場合)になります。
コマンドラインオプションで、Emacsの初期フレームにデフォルト以外のタイトルを指定できます:
Emacs初期フレームのタイトルとしてtitleを指定します。
‘--name’オプション(Xリソースを参照してください)でも、Emacs初期フレームのタイトルを指定できます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsをアイコン化した状態で開始します。
Emacsアイコンの使用を無効にします。
ほとんどのウィンドウマネージャーでは、Emacsフレームをアイコン化(または“最小化”)して、見えなくすることができます。いくつかのウィンドウマネージャーでは、他のウィンドウマネージャーがアイコン化されたウィンドウを完全に見えなくするのにたいして、アイコン化されたウィンドウを小さなアイコンでおきかえるものもあります。‘-iconic’オプションは、フレームをすぐに表示するのではなく、アイコン化された状態で実行を開始するよう、Emacsに指示します。テキストフレームはアイコン化の解除(または“最小化の解除”)をするまで表示されません。
デフォルトでは、EmacsはEmacsロゴを含むアイコンを使用します。Gnomeのようなデスクトップ環境では、このアイコンは他のコンテキスト、たとえばEmacsフレームに切り替えるときにも表示されます。‘-nbi’または‘--no-bitmap-icon’オプションは、使用するアイコンの種類をウィンドウマネージャーに選択させるよう、Emacsに指示します。通常これはフレームのタイトルを含んだ、ただの矩形です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
XEmbedプロトコルを通じて、idを親XウィンドウIDとする、クライアントXウィンドウとして、Emacsを開始します。現在のところ、このオプションは開発者にとって有用です。
垂直スクロールバーを有効にします。
行間の追加のスペースpixelsを、ピクセルで指定します。
グラフィカルなディスプレーで、点滅カーソルを無効にします。
メニューバー、ツールバー、スクロールバー、ツールチップを無効、font-lock-modeと点滅カーソルをオフに切り替えます。これは表示問題のデバッグするテストケースを簡単にするのに有用です。
‘--xrm’オプション(Xリソースを参照してください)は、追加のXリソース値を指定します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Xを使用するプログラムにたいして通常行なうように、Xリソースを使用してEmacsのXに関連する外観をカスタマイズできます。
EmacsがGTK+サポートつきでコンパイルされている場合、メニューバー、スクロールバー、ダイアログボックスなどの、さまざまなグラフィカルウィジェットの外観は GTK+リソースで決定されるので、これについても説明します。 EmacsがGTK+のサポートなしでビルドされた場合、これらのウィジェットの外観は追加のXリソースにより決定されます。
MS-Windowsでは、システムレジストリー(MS-Windowsのシステムレジストリーを参照してください)を使用して、いくつかの外観を同じようにカスタマイズできます。
D.1 Xリソース | EmacsでXリソースを使用する(概説)。 | |
D.2 EmacsにたいするXリソースの表 | Emacsに影響する特定のXリソースの表。 | |
D.3 Lucidのメニューとダイアログ | LucidメニューにたいするXリソース。 | |
D.4 MotifメニューのXリソース | MotifおよびLessTifメニューにたいするXリソース。 | |
D.5 GTK+リソース | GTK+ウィジェットにたいするリソース。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Xウィンドウシステムの下で実行されているプログラムは、クラスとリソースの階層の下にユーザーオプションを組織化します。これらのオプションにたいして、Xリソースファイル(X
resource
file)でデフォルト値を指定できます。Xリソースファイルは、通常~/.Xdefaultsまたは~/.Xresourcesという名前です。このファイルの内容を変更しても、変更は即座に効果をもちません。これはXサーバーが独自にリソースのリストを保持しているからです。これを更新するには、たとえば‘xrdb
~/.Xdefaults’のように、コマンドxrdb
を使用します。
一般的にXリソースを通じて指定されたセッティングは、特に初期フレームのパラメーター(フレームパラメーターを参照)に関して、Emacsのinitファイル(Emacs初期化ファイルを参照)のセッティングをオーバーライドします。
(MS-WindowsシステムはXリソースファイルをサポートしません。そのようなシステムでは、EmacsはWindowsレジストリーの中からXリソースを探します。最初にキー‘HKEY_CURRENT_USER\SOFTWARE\GNU\Emacs’の下を探します。これはカレントユーザーだけに影響し、システムワイドなセッティングをオーバーライドします。次にキー‘HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs’の下を探します。これはシステムのすべてのユーザーに影響します。メニューとスクロールバーは、MS-Windowsのネイティブなウィジェットなので、Display Control Panelのシステムワイドなセッティングからしかカスタマイズできません。以下で説明するように、コマンドラインオプション‘-xrm’を使用して、リソースをセットすることもできます。)
Xリソースファイルの各行は、1つのオプション、または関連するオプションのコレクションにたいして値を指定します。ファイル内で行が出現する順番に意味はありません。各リソース指定は、プログラム名(program name)とリソース名(resource name)から構成されます。これらの名前の大文字小文字は区別されます。以下は例です:
emacs.cursorColor: dark green
プログラム名は、そのリソースが適用される実行可能ファイルの名前です。Emacsでは通常、‘emacs’です。Emacsの実行可能ファイル名の如何にかかわらずに、Emacsのすべてのインスタンスに適用される定義を指定するには、‘Emacs’を使用します。
リソース名はプログラムセッティングの名前です。たとえばEmacsは、‘cursorColor’リソースを、テキストカーソルのカラーを制御するリソースと認識します。
リソースは、名前のついたクラスにグループ化されます。たとえば‘Foreground’クラスには、リソース‘cursorColor’、‘foreground’、‘pointerColor’が含まれます(EmacsにたいするXリソースの表を参照してください)。以下のように、リソース名を使用するかわりに、クラス内のすべてのリソースにたいしてデフォルト値を指定するのに、クラス名を使用できます:
emacs.Foreground: dark green
変数inhibit-x-resources
を非nil
値にセットした場合、EmacsはXリソースを処理しません。コマンドラインオプション‘-Q’
(または‘--quick’)でEmacsを呼び出した場合、inhibit-x-resources
は自動的にt
にセットされます(初期化オプションを参照してください)。
これに加えて、Xリソースファイルをオーバーライドするために、以下のコマンドラインオプションが使用できます:
このオプションは初期Emacsフレームのプログラム名をnameにセットします。これは初期フレームのタイトルもnameにセットします。このオプションは、それ以降のフレームには影響しません。
このオプションを指定しない場合、プログラム名としてEmacs実行可能ファイル名をデフォルトとして使用されます。
整合性のため、‘-name’は、特定のフレームに属さない、他のリソース値にたいして使用する名前も指定します。
Emacs呼び出しの名前がつくリソースは、‘Emacs’という名前のクラスにも所属します。‘emacs’のかわりに‘Emacs’と記述した場合、実行可能ファイル名にかかわらず、そのリソースは、すべてのEmacsジョブのすべてのフレームに適用されます。
このオプションは、現在のEmacsジョブにたいして、Xリソース値を指定します。
resource-valueは、Xリソースファイルの内部で使用するのと同じ形式をもつ必要があります。複数のリソース指定を含めるために、複数の‘-xrm’オプションを利用可能です。‘#include \"filename\"’を使用して、ファイルのリソース指定をすべてインクルードすることもできます。‘-xrm’で指定されたリソース値は、他のすべてのリソース指定に優先します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下のテーブルは、Emacsが認識するXリソース名です。いくつかのリソースは、Emacsが種々のXツールキット(GTK+、Lucid、...等)とともにコンパイルされていなければ効果がないことに注意してください(以下ではそのような場合は個々にを示す)。
background
(class Background
)バックグラウンドカラーです(フェイスのカラーを参照してください)。
bitmapIcon
(class BitmapIcon
)‘on’のときはEmacsアイコンを表示し、‘off’のときは表示しないように、ウィンドウマネージャーに指示します。アイコンの説明は、アイコンを参照してください。
borderColor
(class BorderColor
)フレームの外枠ボーダーのカラーです。EmacsがGTK+サポートつきでコンパイルされている場合、効果はありません。
borderWidth
(class BorderWidth
)フレームの外枠ボーダーの幅(ピクセル)です。EmacsがGTK+サポートつきでコンパイルされている場合、効果はありません。
cursorBlink
(class CursorBlink
)開始時に、このリソースの値が‘off’、‘false’、‘0’の場合、EmacsはBlink Cursorモードを無効にします(カーソルの表示を参照してください)。
cursorColor
(class Foreground
)テキストカーソルのカラーです。Emacs開始時にこのリソースが指定されている場合、Emacsはその値をcursor
フェイス(テキストのフェイスを参照してください)のバックグラウンドカラーとしてセットします。
font
(class Font
)default
フェイスにたいするフォント名です(フォントを参照してください)。フォントセット名(フォントセットを参照してください)を指定することもできます。
fontBackend
(class FontBackend
)フォントの描画に使用するバックエンドを、優先順にカンマ区切りで記述したリストです。たとえば値‘x,xft’は、EmacsにXコアフォントドライバー(X core font driver)を使用してフォントを描画し、それに失敗したときはXftフォントドライバー(Xft font driver)にフォールバックするよう指示します。このリソースは通常、セットしないでおくべきです。その場合、Emacsは利用可能なすべてのバックエンドの使用を試みます。
foreground
(class Foreground
)テキストにたいするデフォルトのフォアグラウンドカラーです。
fullscreen
(class Fullscreen
)望ましいフルスクリーンサイズを指定します。値はfullboth
、maximized
、fullwidth
、fullheight
のうちどれか1つを指定でき、これらはコマンドラインオプションの‘-fs’、‘-mm’、‘-fw’、‘-fh’に相当します(ウィンドウのサイズと位置にたいするオプションを参照してください)。これは初期フレームだけに適用されることに注意してください。
geometry
(class Geometry
)ウィンドウのサイズと位置です。値にはコマンドラインオプション‘-g’または‘--geometry’と同じ形式で、サイズと位置を指定します。
サイズはEmacsセッションのすべてのフレームに適用されますが、位置は初期フレーム(特定のフレームにたいするリソースの場合は、そのフレーム)だけに適用されます。
このリソースを、‘emacs*geometry’のように指定しないように気をつけてください。これはEmacsのメインのフレームと同じように、個別のメニューにも影響します。
horizontalScrollBars
(class ScrollBars
)このリソースの値が‘off’、‘false’、‘0’の場合、Emacsは開始時にHorizontal Scroll Barモードを無効にします(スクロールバーを参照)。
iconName
(class Title
)アイコンに表示する名前です。
internalBorder
(class BorderWidth
)フレームの内枠ボーダーの幅(ピクセル)です。
lineSpacing
(class LineSpacing
)行間の追加のスペース(ピクセル)です。
menuBackground
(class Background
)ツールキット版でないEmacsの、メニューのバックグラウンドカラーです(ツールキット版の場合はMotifメニューのXリソースとGTK+リソースを参照してください)。
menuBar
(class MenuBar
)このリソースの値が‘off’、‘false’、‘0’の場合、Emacsは開始時にMenu Barモードを無効にします(メニューバーを参照してください)。
minibuffer
(class Minibuffer
)‘none’の場合、Emacsはこのフレームにミニバッファーを作成しません。かわりに別のミニバッファーフレームを使用します。
paneFont
(class Font
)ツールキット版でないEmacsの、メニューペインタイトルのフォント名です(ツールキット版の場合はLucidのメニューとダイアログ、MotifメニューのXリソース、GTK+リソースを参照)。
paneForeground
(class Foreground
)ツールキット版でないEmacsの、メニューペインタイトルのフォント名です(ツールキット版の場合はLucidのメニューとダイアログ、MotifメニューのXリソース、GTK+リソースを参照)。
pointerColor
(class Foreground
)マウスカーソルのカラーです。多くのグラフィカルなデスクトップ環境では、この方法でEmacsがマウスカーソルを変更するのを許さないので、効果はありません。
privateColormap
(class PrivateColormap
)‘on’の場合、Emacsが使用するクラスPseudoColorのdefault visualが使用されている場所で、プライベートなカラーマップを使用します。
reverseVideo
(class ReverseVideo
)‘on’の場合はデフォルトのフォア九ラウンドカラーとバックグラウンドカラーを切り替え、‘off’の場合は指定されたカラーを使用します。
screenGamma
(class ScreenGamma
)カラーのガンマ補正で、フレームパラメーターのscreen-gamma
と等価です。
scrollBar
(class ScrollBar
)このリソースの値が‘off’、‘false’、‘0’の場合、Emacsは開始時にScroll Barモードを無効にします(スクロールバーを参照してください)。
scrollBarWidth
(class ScrollBarWidth
)スクロールバーの幅(ピクセル)で、フレームパラメーターのscroll-bar-width
と等価です。EmacsがGTK+サポートつきでコンパイルされている場合は、このリソースをセットしないでください。
selectionFont
(class SelectionFont
)ツールキット版でないEmacsの、ポップアップメニューアイテムのフォント名です(ツールキット版の場合はLucidのメニューとダイアログ、MotifメニューのXリソース、GTK+リソースを参照)。
selectionForeground
(class SelectionForeground
)ツールキット版でないEmacsの、ポップアップメニューアイテムのフォアグラウンドカラーです(ツールキット版の場合はLucidのメニューとダイアログ、MotifメニューのXリソース、GTK+リソースを参照してください)。
selectionTimeout
(class SelectionTimeout
)選択にたいする応答を待つ時間(ミリ秒)です。選択したオーナーが、この時間内に応答しない場合は諦めます。値0は必要なだけ待つことを意味します。
synchronous
(class Synchronous
)‘on’の場合、Emacsを同期モード(synchronous mode)で実行します。同期モードはXに関する問題のデバッグに有用です。
title
(class Title
)初期Emacsフレームのタイトルバーに表示する名前です。
toolBar
(class ToolBar
)このリソースの値が‘off’、‘false’、‘0’の場合、Emacsは開始時にTool Barモードを無効にします(ツールバーを参照してください)。
tabBar
(class TabBar
)このリソースの値が‘on’、‘yes’、‘1’なら、Emacsは開始時にTab Barモードを無効にします(タブバーを参照してください)。
useXIM
(class UseXIM
)‘false’または‘off’の場合、X入力メソッド(XIM: X input methods)の使用を無効にします。これはEmacsがXIMサポートつきでビルドされた場合だけ関係があります。Xのクライアント/サーバーのリンクが遅いときは、XIMをオフにするのが便利かもしれません。
verticalScrollBars
(class ScrollBars
)‘left’の場合はフレームの左側、‘right’の場合は右側、‘off’のときはスクロールバーをもちません(スクロールバーを参照)。
visualClass
(class VisualClass
)Xカラーディスプレーのvisual classです。指定する場合、値は‘TrueColor’、‘PseudoColor’、‘DirectColor’、‘StaticColor’、‘GrayScale’、‘StaticGray’で始まり、その後に‘-depth’が続きます。ここでdepthは色平面の数です。
特定のEmacsフェイスのカスタマイズに、Xリソースを使用することもできます(テキストのフェイスを参照してください)。たとえば‘face.attributeForeground’をセットするのは、フェイスfaceの‘foreground’属性をカスタマイズするのと等価です。しかし、わたしたちはXリソースを使用してフェイスのカスタマイズするかわりに、Emacs内でフェイスをカスタマイズする方法を推奨します。フェイスのカスタマイズを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
EmacsがLucidウィジェットを使用したXツールキットサポートつきでコンパイルされた場合、メニューバー(メニューバーを参照)、ポップアップメニュー、ダイアログボックス(ダイアログボックスの使用を参照)の外観をカスタマイズするために、Xリソースを使用できます。メニューバーにたいするリソースは、‘pane.menubar’クラスの中に集められています(例のごとくEmacs実行可能ファイル名または、すべてのEmacs呼び出しに対応する‘Emacs’の後に続けて記述します)。ポップアップメニューにたいするリソースは、‘menu*’クラスの中です。ダイアログボックスにたいするリソースは、‘dialog*’クラスの中です。
たとえばメニューバーエントリーを‘Courier-12’フォントで表示するには、以下のように記述します:
Emacs.pane.menubar.font: Courier-12
Lucidウィジェットは、あなたのlocaleで他国語テキストを表示できます。これを有効にするには、font
リソースのかわりに、fontSet
リソースを指定します。font
とfontSet
の両方のリソースが指定された場合は、fontSet
リソースが使用されます。
以下はメニューバー、ポップアップメニュー、ダイアログにたいするリソースのリストです:
font
メニューアイテムのテキストにたいするフォントです。
fontSet
メニューアイテムのテキストにたいするフォントセットです。
background
バックグラウンドカラーです。
buttonForeground
選択されたアイテムのフォアグラウンドカラーです。
foreground
フォアグラウンドカラーです。
horizontalSpacing
アイテム間の水平間隔(ピクセル)です。デフォルトは3です。
verticalSpacing
アイテム間の垂直間隔(ピクセル)です。デフォルトは2です。
arrowSpacing
(サブメニューを示す)矢印と、それに付随するテキストの間の水平間隔です。デフォルトは10です。
shadowThickness
3Dのボタン、矢印、その他グラフィカルな要素の陰線(shadow lines)の厚さです。デフォルトは1です。
margin
メニューバーの余白(文字数)です。デフォルトは1です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
EmacsがMotifまたはLessTifのウィジェットを使用するXツールキットサポートつきでコンパイルされた場合、メニューバー(メニューバーを参照)、ポップアップメニュー、ダイアログボックス(ダイアログボックスの使用を参照)の外観をカスタマイズするために、Xリソースを使用できます。しかし、これらのリソースは、Lucidウィジェットとは組織方法が異なります。
メニューバーにたいするリソース名は‘pane.menubar’クラスの中にあり、それらは以下の形式で指定しなければなりません:
Emacs.pane.menubar.subwidget.resource: value
ポップアップメニューにたいするリソースは、‘pane.menubar’ではなく、‘menu*’クラスの中にあります。ダイアログボックスにたいするリソースは‘dialog’クラスの中です。どの場合でも、それぞれのメニュー文字列がサブウィジェットです。サブウィジェットの名前は、メニューアイテム文字列と同じです。たとえば、メニューバーの中の‘File’メニューは、‘emacs.pane.menubar.File’という名前のサブウィジェットです。
通常は、メニューバー全体に同じリソースを指定したいでしょう。これを行なうには、特定のウィジェット名のかわりに‘*’を使用します。たとえば、サブメニューを含むすべてのメニューバーアイテムに、フォント‘8x16’を指定するには、以下のように記述します:
Emacs.pane.menubar.*.fontList: 8x16
サブメニューの中の各アイテムは、Xリソースにたいする独自の名前をもちます。たとえば‘File’サブメニューは、‘Save (current buffer)’という名前のアイテムをもちます。サブメニューアイテムにたいするリソース指定は以下のようになります:
Emacs.pane.menubar.popup_*.menu.item.resource: value
たとえば、以下は‘Save (current buffer)’アイテムにフォントを指定する方法です:
Emacs.pane.menubar.popup_*.File.Save (current buffer).fontList: 8x16
‘Tools’の下の、‘Spell Checking’の下の‘Complete Word’のような、第2レベルのアイテムには、以下のテンプレートが当てはまります:
Emacs.pane.menubar.popup_*.popup_*.menu.resource: value
たとえば、
Emacs.pane.menubar.popup_*.popup_*.Spell Checking.Complete Word: value
(これは長い1行で記述する必要があります。)
サブメニューアイテムにメニューバー自体とは異なる外観を与えたい場合、最初にすべてにたいしてリソースを指定してから、そのサブメニューにたいする値をオーバーライドしなければなりません。以下は例です:
Emacs.pane.menubar.*.fontList: 9x18 Emacs.pane.menubar.popup_*.fontList: 8x16
LessTifのファイル選択ボックスにたいしてリソースを指定するには、以下のように‘fsb*’を使用します:
Emacs.fsb*.fontList: 8x16
以下はLessTifのメニューバーとポップアップメニューにたいするリソースのリストです:
armColor
アームドボタン(armed button: 押されてまだ離されていないボタン)を表示するカラーです。
fontList
使用するフォントです。
marginBottom
marginHeight
marginLeft
marginRight
marginTop
marginWidth
アイテムの周囲に残すスペースの量を、ボーダーも含めて指定します。
borderWidth
メニューアイテムの各辺のボーダーの幅です。
shadowThickness
ボーダーの影の幅です。
bottomShadowColor
ボーダーの影の底辺と右辺のカラーです。
topShadowColor
ボーダーの影の上辺と左辺のカラーです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
EmacsがGTK+サポートつきでコンパイルされた場合、EmacsのGTK+ウィジェット(例: メニュー、ダイアログ、ツールバー、スクロールバー)をカスタマイズする一番簡単な方法は、たとえばGNOME theme selectorなどで適切なGTK+テーマを選択する方法です。
GTK+バージョン2では、Emacsで使用されるGTK+ウィジェットの外観をカスタマイズするために、GTK+リソースも使用できます。これらのリソースは、ファイル~/.emacs.d/gtkrc(Emacs固有のGTK+リソース用)、またはファイル~/.gtkrc-2.0(一般的なGTK+リソース用)のどちらかで指定されます。GTK+は、GNOMEでGConfを実行するとき~/.gtkrc-2.0を無視するように思われるため、わたしたちは~/.emacs.d/gtkrcの使用を推奨します。しかし~/.emacs.d/gtkrcによるカスタマイズをオーバーライドするGTK+テーマがあることに注意してください。これにたいして、わたしたちができることはありません。GTK+リソースは、EmacsのGTK+ウィジェットと関係のない側面、たとえばEmacsのメインウィンドウのフォントやカラーにたいしては影響しません。これらは通常のXリソースに管理されます(Xリソースを参照してください)。
以下のセクションでは、EmacsにたいしてGTK+リソースをカスタマイズする方法を説明します。GTK+リソースについての詳細は、https://developer.gnome.org/gtk2/stable/gtk2-Resource-Files.htmlのGTK+ APIドキュメントを参照してください。
GTK+バージョン3では、GTK+リソースは完全に異なるシステムに置き換えられました。GTK+ウィジェットの外観は、今やCSS-likeなスタイルのファイル、すなわちGTK+をインストールしたディレクトリーのgtk-3.0/gtk.css、およびローカルなスタイルセッティングにたいしては~/.themes/theme/gtk-3.0/gtk.cssで決定されます(themeはカレントGTK+テーマの名前です)。したがってこのセクションのGTK+リソースの説明は、GTK+3に適合しません。GTK+3スタイリングシステムについての詳細は、https://developer.gnome.org/gtk3/3.0/GtkCssProvider.htmlを参照してください。
D.5.1 GTK+ Resource Basics | GTK+リソースの基本的な使い方。 | |
D.5.2 GTK+ウィジェット名 | GTK+ウィジェットの命名方法。 | |
D.5.3 EmacsでのGTK+ウィジェット名 | Emacsが使用するGTK+ウィジェット。 | |
D.5.4 GTK+スタイル | GTK+ウィジェットの何がカスタマイズできるか。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
GTK+2リソースファイル(通常は~/.emacs.d/gtkrc)で、リソースをセットする一番簡単な方法は、単に変数に値を割り当てる方法です。たとえば以下の行を利ソースファイルに置くことにより、すべてのGTK+ウィジェットのフォントが‘courier-12’に変更されます:
gtk-font-name = "courier 12"
この場合、フォント名はFontconfigスタイルのフォント名やXLFDではなく、GTKフォントパターン(Pangoフォント名とも呼ばれます)で記述しなければなりません。フォントを参照してください。
ウィジェットをカスタマイズするには、最初にスタイルを定義して、そのスタイルをウィジェットに適用します。以下はメニューにたいしてフォントをセットする例です(文字‘#’はコメントを示します):
# Define the style ‘my_style’. style "my_style" { font_name = "helvetica bold 14" } # Specify that widget type ‘*emacs-menuitem*’ uses ‘my_style’. widget "*emacs-menuitem*" style "my_style"
この例のウィジェット名にはワイルドカードが含まれるので、このスタイルは‘*emacs-menuitem*’にマッチするすべてのウィジェットに適用されます。ウィジェットは、外側のウィジェットから内側のウィジェットへと、それが含まれる方法により、名前がつけられます。以下はEmacsメニューバーに‘my_style’を指定して適用する例です:
widget "Emacs.pane.menubar.*" style "my_style"
以下はスクロールバーを部分的に変更する方法を示す、より複雑な例です:
style "scroll" { fg[NORMAL] = "red" # Arrow color. bg[NORMAL] = "yellow" # Thumb and background around arrow. bg[ACTIVE] = "blue" # Trough color. bg[PRELIGHT] = "white" # Thumb color when the mouse is over it. } widget "*verticalScrollBar*" style "scroll"
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
GTK+ウィジェットはウィジェット名(widget name)とウィジェットクラス(widget class)により指定されます。ウィジェット名は特定のウィジェット(たとえば‘emacs-menuitem’)を参照し、ウィジェットクラスは似通ったウィジェット(たとえば‘GtkMenuItem’)のコレクションを参照します。ウィジェットは常にクラスをもちますが、名前をもつ必要はありません。
絶対名(absolute
names)とは、一連のウィジェット名またはウィジェットクラスで、他のウィジェットに埋め込まれたウィジェットの階層に対応します。たとえば、top
という名前のGtkWindow
が、box
という名前のGtkVBox
を含み、それがさらにmenubar
という名前のGtkMenuBar
を含む場合、メニューバーウィジェットの完全クラス名はGtkWindow.GtkVBox.GtkMenuBar
で、完全ウィジェット名はtop.box.menubar
になります。
GTK+リソースファイルには、ウィジェットの外観を指定する2種類のコマンドを含めることができます:
widget
クラス名または単にクラスにもとづいてウィジェットのスタイルを指定します。
widget_class
クラス名にもとづいてウィジェットのスタイルを指定します。
widget
コマンドを使用する例は、前のセクションを参照してください。widget_class
コマンドも同じように使用されます。ウィジェット名/ウィジェットクラスとスタイルはダブルクォートで囲わなければならないこと、そしてこれらのコマンドはGTK+リソースファイルのトップレベルに記述しなければならないことに注意してください。
前に記したように、ウィジェット名とウィジェットクラスはシェルのワイルドカード構文で指定することができます。‘*’は0文字以上にマッチし、‘?’は1文字にマッチします。以下はすべてのウィジェットにスタイルを割り当てる例です:
widget "*" style "my_style"
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsフレームが使用するGTK+ウィジェットを以下にリストします:
Emacs
(class GtkWindow
)pane
(class GtkVBox
)menubar
(class GtkMenuBar
)GtkHandleBox
)emacs-toolbar
(class GtkToolbar
)emacs
(class GtkFixed
)verticalScrollBar
(class GtkVScrollbar
)Emacsウィンドウの内容は、emacs
ウィジェットにより描画されます。複数のEmacsウィンドウがある場合でも、それぞれのスクロールバーウィジェットの名前はverticalScrollBar
であることに注意してください。
たとえば、以下はメニューバーのスタイルをセットする、2つの異なる方法の例です:
widget "Emacs.pane.menubar.*" style "my_style" widget_class "GtkWindow.GtkVBox.GtkMenuBar.*" style "my_style"
GTK+ダイアログにたいしては、EmacsはクラスGtkDialog
の、emacs-dialog
という名前のウィジェットを使用します。ファイル選択にたいしては、EmacsはクラスGtkFileSelection
の、emacs-filedialog
という名前のウィジェットを使用します。
ポップアップメニューとダイアログのウィジェットは独立したウィンドウであり、Emacs
ウィジェットに含まれていないので、それらのGTK+完全名は‘Emacs’で始まりません。これらのウィジェットをカスタマイズするには、以下のようにワイルドカードを使用します:
widget "*emacs-dialog*" style "my_dialog_style" widget "*emacs-filedialog* style "my_file_style" widget "*emacs-menuitem* style "my_menu_style"
Emacsのすべてのメニューにスタイルを適用したい場合は、以下を使用します:
widget_class "*Menu*" style "my_menu_style"
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下は2つのGTK+スタイル宣言の例です:
pixmap_path "/usr/share/pixmaps:/usr/include/X11/pixmaps" style "default" { font_name = "helvetica 12" bg[NORMAL] = { 0.83, 0.80, 0.73 } bg[SELECTED] = { 0.0, 0.55, 0.55 } bg[INSENSITIVE] = { 0.77, 0.77, 0.66 } bg[ACTIVE] = { 0.0, 0.55, 0.55 } bg[PRELIGHT] = { 0.0, 0.55, 0.55 } fg[NORMAL] = "black" fg[SELECTED] = { 0.9, 0.9, 0.9 } fg[ACTIVE] = "black" fg[PRELIGHT] = { 0.9, 0.9, 0.9 } base[INSENSITIVE] = "#777766" text[INSENSITIVE] = { 0.60, 0.65, 0.57 } bg_pixmap[NORMAL] = "background.xpm" bg_pixmap[INSENSITIVE] = "background.xpm" bg_pixmap[ACTIVE] = "background.xpm" bg_pixmap[PRELIGHT] = "<none>" } style "ruler" = "default" { font_name = "helvetica 8" }
スタイル‘ruler’は‘default’を継承します。この方法により、既存のスタイルを元にすることができます。フォントとカラーの構文は以下に記述されています。
この例が示すように、ウィジェットの状態にもとづいてフォアグラウンドとバックグラウンドのカラーに複数の値を指定することが可能です。以下の状態が利用できます:
NORMAL
ウィジェットのフォルトの状態です。
ACTIVE
ウィジェットが何かを行なう準備ができた状態です。これはスクロールバーの溝(trough)にも適用できます。たとえばbg[ACTIVE] =
"red"
はスクロールバーの溝を赤にセットします。ボタンのarmed(ボタンが押されてまだ離されていない状態)も、この状態です。
PRELIGHT
マウスポインターがその上にきたとき、ウィジェットが操作可能な状態です — たとえばマウスがスクロールバーのハンドルの上やメニューアイテムの上にきたときの状態です。押されていないボタンの上にマウスがくると、そのボタンはこの状態になります。
SELECTED
ユーザーにより選択されたデータにたいする状態です。それは選択されたテキストやリストの選択されたアイテムの場合もあります。この状態はEmacsでは使用されません。
INSENSITIVE
ウィジェットが可視だが通常の方法では操作できない状態 —
たとえば押せないボタンや、無効なメニューアイテムなどです。無効なメニューアイテムを黄色で表示するには、fg[INSENSITIVE] =
"yellow"
を使用します。
以下をスタイル宣言に記述できます:
bg[state] = color
ウィジェットのバックグラウンドカラーを指定します。編集可能なテキストはbg
ではなくbase
を使用することに注意してください。
base[state] = color
編集可能なテキストのバックグラウンドカラーを指定します。Emacsでは、ファイルダイアログのテキストフィールドのバックグラウンドに、このカラーが使用されます。
bg_pixmap[state] = "pixmap"
(バックグラウンドカラーのかわりに)バックグラウンドイメージを指定します。pixmapはイメージファイル名です。GTK+はXPM、XBM、GIF、JPEG、PNGヲ含む、いくつかのイメージファイルを使用することができます。親ウィジェットと同じイメージをウィジェットに使用したい場合は、‘<parent>’を使用します。イメージを使わない場合は、‘<none>’を使用します。‘<none>’で、親スタイルから継承されたバックグラウンドイメージをキャンセルできます。
ファイル名は絶対ファイル名で指定できません。GTK+はpixmap_path
で指定されたディレクトリーのpixmapファイルを探します。pixmap_path
は、ダブルクォートされたファイルをコロンで区切ったリストで、gtkrcファイルのトップレベルで指定します(スタイル定義の中ではありません。上記の例を参照してください)。
pixmap_path "/usr/share/pixmaps:/usr/include/X11/pixmaps"
fg[state] = color
使用するウィジェットのフォアグラウンドカラーを指定します。これはメニューやボタンのテキストのカラー、スクロールバーの矢印のカラーです。編集可能なテキストにたいしては、text
を使用します。
text[state] = color
編集可能なテキストのカラーです。Emacsでは、ファイルダイアログのテキストフィールドに使用されるカラーです。
font_name = "font"
ウィジェット内のテキストのフォントを指定します。fontは、‘Sans Italic 10’のような、GTK(Pango)スタイルのフォント名です。フォントを参照してください。名前は大文字小文字を区別しません。
カラーを指定する3つの方法があります。それはカラーネーム、RGBトリプレット、GTKスタイルRGBトリプレットです。カラーネームとRGBトリプレットについては、フェイスのカラーを参照してください。カラーネームは‘"red"’のように、ダブルクォートで囲む必要があります。RGBトリプレットは‘#ff0000’のように、ダブルクォートで囲う必要がありません。GTKスタイルRGBトリプレットは{ r, g, b }
という形式をもち、r、g、bは、0から65535の整数か、0.0から1.0の浮動小数点数です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
時代に逆らって生きるユーザーのために、以下はEmacsバージョン26.3へのダウングレードに関する情報です。Emacs 27.1機能の不在による結果としての偉大なる単純さを、ぜひ堪能してください。
most-positive-fixnum
より大またはmost-negative-fixnum
より小なLisp整数をサポートしません。これでただ1種類のLisp整数をもつことになります。これは整数を使用する多くのLispプログラムを簡略化して、整数演算を常に高速にします。より大きい値を望む場合には当初からEmacsが行っていたようにLisp浮動小数を使用してください。
同じ理由でJSONRPCアプリケーションをサポートするためのライブラリーを削除しました。
XDG_CONFIG_HOME
のサポートをなくしました。Emacsがinitファイルを探す場所は、再びフォールバックとして~/.emacsをもつ~/.emacs.dディレクトリーになりました。これは何らかの理由によりXDG_CONFIG_HOME
をセットしたためにinitファイルが2箇所にランダムに分散されるリスクにさらされるユーザーの混乱を防ぐための長い道程となるでしょう。Emacsの過去のバージョンでは~/.emacs.dの場所を削除して~/.emacsだけを残す予定です。乞うご期待。
同じような理由により“早期init(early
init)”ファイルを削除しました。これでパッケージロードのタイミングでpackage-user-dir
やpackage-load-list
のような変数を初期化するために、あなたが望むすべてのトリックを再び使用できます。
emacsclient
もXDGスタイルのディレクトリーツリーをサポートしなくなりました。
server-after-make-frame-hook
フックを削除しました。セッションでGUIのカスタマイゼーションのセットアップが、今までのように再び簡単にafter-make-frame-functions
を使用するだけになったことを知ってあなたは喜ぶでしょう。
flex
を削除しました。これはEmacsのユーザーエクスペリエンスを不必要に複雑にすると感じており、それ故数十年前にEmacsが開拓した単一のオリジナルスタイルを手にするEmacsの過去のバージョンに至るまで、その他のトリッキーな補完スタイルの削除を継続していきます。単純化万歳、複雑化撲滅!
so-long
モードも提供しなくなりました。時を遡るにつれて非常に巨大なファイルの処理は希少になるという一般的な傾向から、この簡略化には価値があると判断しました。
main-thread
変数とlist-threads
を削除して、thread-join
が完了したスレッドの結果をリターンしなくなりました。Emacsの過去のバージョンでLispスレッドにたいするサポートの削除を予定しているので、時の逆行とともに関連する複雑性と機能の削除を継続していきます。
linum-mode
モードのようなアドオンを使用したときだけ可能になります。これらの機能を用いた行番号表示は低速でもあり、第一そのような機能はEmacsっぽくなく、Emacsに含まれるべきではないと、わたしたちは確信しています。その結果、display-line-numbers-mode
は削除されました。
make-empty-file
、font-lock-refontify
、xref-find-definitions-at-mouse
、make-frame-on-monitor
、diff-buffers
が含まれます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このセクションでは、GNU/Linuxまたはその他のオペレーティングシステムでGNUstepライブラリーとともにビルドされたEmacs、またはmacOSでネイティブウィンドウシステムのサポートつきでビルドされたEmacsを使用する際の特性を説明します。macOSでは、Emacsはウィンドウシステムサポートなし/あり、X11、Cocoaインターフェースのいずれかでビルドできます。このセクションはCocoaビルドだけに適合します。バージョン10.6より前のmacOSはサポートしません。
GNUstepはフリーソフトウェアであり、macOSはそうではありません。非フリーなオペレーティングシステムのため、macOSはすべてのコンピューターユーザーが享受すべき自由を、ユーザーに与えません。これは不当です。あなたの自由のために、わたしたちはフリーなオペレーティングシステムへの切り替えを強く推奨します。
わたしたちは、商業オペレーティングシステム上のGNU Emacsをサポートします。なぜならそれは、この自由の経験が、商業オペレーティングシステムから脱却するよう、ユーザーを奮起するだろうからです。
さまざまな歴史的、技術的な理由により、Emacsは内部的に“Cocoa”や“macOS”ではなく、‘Nextstep’という用語を使用します。たとえばこのセクションで説明するほとんどのコマンドや変数は‘ns-’で始まりますが、これは‘Nextstep’を短縮したものです。NeXTstepは1980年代にNeXT Inc.からリリースされたアプリケーションインターフェースで、Cocoaはそれの直系の子孫です。Cocoaとは別に、他にもNeXTstepスタイルのシステムのGNUstepがあり、これはフリーソフトウェアです。これを記述している時点で、EmacsのGNUstepサポートはアルファ状態(GNUstepにたいするサポートを参照してください)ですが、わたしたちは、将来これを改善したいと望んでいます。
F.1 macOSおよびGNUstepでのEmacsの基本的な使い方 | GNUstepまたはmacOSでのEmacsの基本的な使用方法。 | |
F.2 Mac/GNUstepでのカスタマイズ | GNUstepまたはmacOSでのカスタマイズ。 | |
F.3 macOSおよびGNUstepでのウィンドウシステムイベント | ウィンドウシステムイベントが処理される方法。 | |
F.4 GNUstepにたいするサポート | GNUstepサポート状態の詳細。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
デフォルトでは、キーAltとOptionは、Metaと同じです。MacのCmdキーはSuperと同じで、Emacsは他のMac/GNUstepアプリケーション(macOSおよびGNUstepでのウィンドウシステムイベントを参照してください)を模倣するこれらの修飾キーを使用した、一連のキーバインドを提供します。これらのキーバインドは通常の方法で変更できます(キーバインディングのカスタマイズを参照)。修飾キー自体はカスタマイズできます。Mac/GNUstepでのカスタマイズを参照してください。
S-mouse-1はmouse-3と同様に、クリックした位置にリージョンを調整します(mouse-save-then-kill
)。S-mouse-1が通常行なうように、デフォルトフェイスを変更するためのポップアップメニュー(テキストのスケールを参照してください)は表示しません。この変更は、Emacsが他のMac/GNUstepアプリケーションと同じように動作させるためです。
メニューを使用してファイルを開いたり保存するときや、Cmd-oやCmd-Sといったキーバインドを使用する場合、Emacsはファイル名の読み取りにグラフィカルなファイルダイアログを使用します。しかしC-x C-fのような標準のEmacsのキーシーケンスを使用する場合、Emacsはミニバッファーを使用してファイル名を読み取ります。
GNUstepでは、X-windows環境においてテキストをXのプライマリー選択(primary selection)に転送するために、C-wやM-wのかわりに、Cmd-cを使用する必要があります。そうでない場合、Emacsはクリップボード選択を使用します。同様に(C-yのかわりに)Cmd-yは、killリングやクリップボードではなく、Xのプライマリー選択からyankします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
latexやmanのような、Emacsの下で実行される多くのプログラムは、環境変数のセッティングに依存します。Emacsがシェルから起動された場合、自動的にこれらの環境変数を継承し、Emacsのサブプロセスもそれらを継承します。しかしEmacsがFinderから起動された場合は、シェルの子プロセスではないので、環境変数はセットされません。これによりサブプロセスの振る舞いが、シェルから実行したときと異なることが起こり得ます。
変数PATHおよびMANPATHにたいしては、macOSではPATHをセットするシステムワイドな手法は、/etc/pathsファイルと/etc/paths.dディレクトリーを使用することが推奨されています。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
多くはありませんが、Nextstepポートに特有のカスタマイズオプションがいくつかあります。たとえば修飾キーやフルスクリーン動作に影響するオプションです。そのようなオプションをすべて閲覧するには、M-x customize-group RET ns RETを使用します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下の変数は実際の修飾キーの挙動を制御します:
ns-alternate-modifier
ns-right-alternate-modifier
左および右のOptionキーまたはAltキー。
ns-command-modifier
ns-right-command-modifier
左および右のCommandキー。
ns-control-modifier
ns-right-control-modifier
左および右のControlキー。
ns-function-modifier
Functionキー(fnキー)。
各変数の値は目的にたいしてキーを記述するシンボル、通常のキーとともに使用された際の修飾を記述する(:ordinary
symbol :function symbol :mouse
symbol)
という形式のリスト、ファンクションキー(矢印キーのように文字を生成しない)、マウスクリックのいずれかです。
symbolがcontrol
、meta
、alt
、super
、hyper
のいずれかなら、それを表すEmacs修飾を記述すします。symbolがnone
ならEmacsはそのキーを使用せず標準的な挙動のままとなります。たとえばmacOSのOptionキーなら追加の文字の合成に使用されます。
ns-right-alternate-modifier
のような右手側のキーにたいする変数は、対応する左手側のキーと同じ振る舞いの使用を意味するleft
にもセットできます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ns-use-proxy-icon
この変数はtitlebarにproxyアイコンを表示するかどうかを指定します。
ns-confirm-quit
この変数はquit時にグラフィカルなconfirmationダイアログを表示するかどうかを指定します。
ns-auto-hide-menu-bar
この変数はEmacsフレーム選択時にmacOSのメニューバーを隠すかどうかを指定します。非nilならマウスポインターがスクリーン上端近傍に移動するまでメニューバーは表示されません。
ns-use-native-fullscreen
この変数はネィティブフルスクリーンか非ネイティブフルスクリーンを使用するかどうかを制御します。ネイティブフルスクリーンはmacOS 10.7以降でのみ利用可能です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
これらの変数はmacOS 10.7(Lion)以降にのみ適用されます。
ns-use-mwheel-acceleration
この変数はEmacsがシステムのマウスホイールアクセラレーションを無視するかどうかを制御します。nilならマウスホイールの‘クリック’はそれぞれ正確に1つのマウスホイールイベントに対応します。非nil(デフォルト)ならマウスホイールの‘クリック’はそれぞれユーザー入力に依存して1つ以上のマウスホイールイベントに対応するかもしれません。
ns-use-mwheel-momentum
この変数はトラックパッドを使用したスクロール時にEmacsがシステムの‘momentum’を無視するかどうかを制御します。非nil(デフォルト)なら高速にスクロールするとユーザーがトラックパッドから指を離した後も少しの間バッファーがスクロールを継続するかもしれません。
ns-mwheel-line-height
この変数はトラックパッドによるスクロールの感度を制御します。Appleのトラックパッドは行単位ではなくピクセル単位でスクロールするので、Emacsがシステムのピクセル値を行に変換します。数値をセットすると、この変数はそれをEmacsが1行とみなすピクセル数としてセットします。nilか非数値ならデフォルトの行高さを使用します。
低い数値をセットするとトラックパッドはより高感度に、高い数値では低感度になります。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
標準のMac/GNUstepのフォントパネルにアクセスするには、M-x ns-popup-font-panelを使用します。これは一番最近使用された、またはクリックされたフレームの、デフォルトフォントをセットします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Nextstepアプリケーションは、Xでは同等なものがない、特別なイベントを受け取ります。これらは、対応するキーストロークのシーケンスとしてではなく、特別に定義されたキーイベントとして送られます。Emacsでは、これらのキーイベントを、通常のキーストロークのように、関数にバインドできます。以下はこのようなイベントのリストです。
このイベントは、他のNextstepアプリケーションがEmacsにファイルを開くよう要求したときに発生します。これの典型的な理由としては、ユーザーがFinderアプリケーションでファイルをダブルクリックしたときなどです。デフォルトでは、Emacsはこのイベントにたいして、新しいフレームを開いて、そのフレームでファイルをvisitして応答します(ns-find-file
)。例外として、選択されたバッファーが*scratch*バッファーの場合、Emacsは選択されたフレームでファイルをvisitします。
Emacsがns-open-file
イベントにたいしてどのように応答するかは、ns-pop-up-frames
を変更することにより、変えることができます。デフォルト値は‘fresh’で、これは上で説明したとおりの動作を行ないます。値t
は、ファイルを常に新しいフレームでvisitすることを意味します。値nil
は、ファイルを常に選択されたフレームでvisitすることを意味します。
このイベントは、他のアプリケーションがEmacsに一時ファイルを開くように要求したとき発生します。デフォルトでは、単にns-open-file
イベントを生成することにより処理され、結果は上で説明したとおりになります。
ProjectBuilderやgdbのようないくつかのアプリケーションは、特定のファイルだけではなく、そのファイルの特定の行、または一連の行を要求します。Emacsはそのファイルをvisitして要求された行をハイライトすることにより、これを処理します(ns-open-file-select-line
)。
このイベントは、ユーザーが他のアプリケーションから、Emacsフレームにファイルをドラッグしたとき発生します。デフォルトの動作は、マウスの下にあるウィンドウでファイルをオープンするか、マウスの下にあるウィンドウのポイント位置にテキストを挿入します。
送信オブジェクトをEmacsが処理する方法を送信アプリケーションが判断する能力にはいくつかの制限がありますが、ユーザーは1つ以上の修飾キーを押し続けることによりデフォルトの挙動をオーバーライドできます。
テキストとしてカレントバッファーに挿入します。オブジェクトがファイルならファイル名を挿入します。
オブジェクトがファイルかURLであるかのようにオープンを試みます。
そのタイプにたいするデフォルトのアクションを行います。これはアプリケーションがデフォルトの挙動をオーバーライドしている場合に有用かもしれません。
上記にリストした修飾キーはmacOSが定義したもので、ユーザーによるEmacs内での修飾の変更は影響を受けません。
このイベントは、ユーザーがNextstep font
panel(これはCmd-tで開くことができます)でフォントを選択したとき発生します。デフォルトの動作は、選択されたフレームのフォントを変更します(ns-respond-to-changefont
)。選択されたフォントの名前とサイズは、変数ns-input-font
とns-input-fontsize
に格納されます。
このイベントは、ユーザーがEmacsを実行中にログアウトしたとき、またはアプリケーションメニューから“Quit Emacs”を選択したとき発生します。デフォルトの動作は、ファイルをvisitしているすべてのバッファーを保存します。
Emacsはユーザーに、‘ns-service-’で始まりサービス名で終わるコマンドを通じて、Nextstepサービスを使用することも可能にします。M-x
ns-service-TABとタイプして、これらのコマンドをリストを見ることができます。これらの関数は、マークされたテキストを処理(結果でそれを置き換える)したり、文字列を引数として結果を文字列で返します。Lisp関数ns-perform-service
を使用して、任意の文字列を任意のサービスに渡して、結果を受けとることもできます。新たに利用可能になったサービスにアクセスするには、Emacsの再起動が必要なことに注意してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
EmacsはGNUstepの下でビルドして実行することができますが、解決すべき問題が残っています。興味のある開発者は、 emacs-develメーリングリストに連絡してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このセクションでは、Microsoft WindowsでEmacsを使用する際の特性を説明します。これらの特性の中には、Microsoft’sの古いMS-DOSオペレーティングシステムに関連するものもあります。しかしMS-DOSだけに関連するEmacs機能については、別の セクション(EmacsとMS-DOSを参照してください)で説明します。
フリーなオペレーティングシステムのため、MS-Windowsはすべてのコンピューターユーザーが享受すべき自由を、ユーザーに与えません。これは不当です。あなたの自由のために、わたしたちはフリーなオペレーティングシステムへの切り替えを強く推奨します。
わたしたちは、商業オペレーティングシステム上のGNU Emacsをサポートします。なぜならそれは、この自由の経験が、商業オペレーティングシステムから脱却するよう、ユーザーを奮起するだろうからです。
MS-WindowsでのEmacsの振る舞いは、ロングファイル名のサポート、複数フレーム、スクロールバー、マウスメニュー、サブプロセスを含めて、このマニュアルの他の部分でドキュメントされているのと、だいたい同じです。しかし多くはありませんが、特別に考慮すべきこともあるので、それらについてはここで説明します。
G.1 MS-WindowsでEmacsを開始する方法 | WindowsでEmacsを開始する方法。 | |
G.2 テキストファイルとバイナリーファイル | 行末にCRLFを使用するテキストファイル。 | |
G.3 MS-Windowsのファイル名 | Windowsのファイル名の慣習。 | |
G.4 MS-Windowsでのls のエミュレーション | Diredにたいするls のエミュレーション。
| |
G.5 MS-WindowsでのHOMEディレクトリーと開始ディレクトリー | 開始時にEmacsが.emacsを探す場所。 | |
G.6 MS-Windowsでのキーボードの使用方法 | Windows特有のキーボード機能。 | |
G.7 MS-Windowsでのマウスの使用方法 | Windows特有のマウス機能。 | |
G.8 Windows 9X/MEおよびWindows NT/2000/XP/Vista/7/8/10でのサブプロセス | Windowsでのサブプロセスの実行。 | |
G.9 MS-Windowsでの印刷 | MS-Windowsでプリンターを指定する方法。 | |
G.10 MS-Windowsでのフォント指定 | MS-Windowsでのフォントの指定。 | |
G.11 その他のWindows固有の機能 | その他のWindowsの機能。 | |
G.12 EmacsとMS-DOS | MS-DOSでのEmacsの使用。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
MS-WindowsでEmacsを開始するには、いくつかの方法があります:
Run
ダイアログ(通常はStart
ボタンをクリックしてアクセスできる)を使用します。そのダイアログ内でrunemacs
RETとタイプすれば、WindowsでのユーザーのHOME
ディレクトリーの親ディレクトリーで、Emacsが起動するでしょう。MS-WindowsでのHOMEディレクトリーと開始ディレクトリーを参照してください。
emacsclient
を呼び出すときにEmacsが実行中でない(またはサーバーとして実行されていない)場合は、‘--alternate-editor=’または‘-a’オプションを使用します。このオプションは常にエディターを与えます。emacsclient
を通じて呼び出された場合、Emacsはemacsclient
を呼び出したプログラムのカレントディレクトリーで開始されます。
MS-Windowsの制限により、Emacsは同一セッションでGUIとテキストモードのフレームをもつことはできないことに注意してください。また複数のコマンドプロンプトウィンドウでテキストモードのフレームを開くこともできません。なぜならWindowsのプログラムは、それぞれ1度に1つのコンソールしかもつことができないからです。これらの理由により、emacsclient
を-cオプションで呼び出したとき、Emacsサーバーがテキストモードセッションで実行されている場合、Emacsは常にそれが開始されたのと同じコマンドプロンプトウィンドウに、テキストモードのフレームを開きます。GUIフレームはサーバーがGUIセッションで実行されているときだけ作成されます。同様に、emacsclient
を-tオプションで呼び出したとき、サーバーがGUIセッションで実行されている場合はGUIフレームを作成し、サーバーセッションがコマンドプロンプトウィンドウのテキストモードで実行されている場合はテキストモードのフレームを作成します。emacsclient
のオプションを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
GNU Emacsはテキスト行を分けるのに改行文字を使用します。これはGNU、Unixmその他のPOSIX準拠システムで使用されている慣習です。
対照的にMS-DOSとMS-Windowsは、テキスト行を分けるのに、通常はCR(carriage-return: キャリッジリターン)とその後にLF(linefeed: ラインフィード)の、2文字からなるシーケンスを使用します(LFは改行と同じ文字です)。したがってこれらのファイルを便利に編集するために、Emacsはこれらの行末(EOL: end-of-line)文字を変換する必要があります。そしてこれはEmacsが通常行なっていることです。Emacsはファイルを読み込むときCRLFを改行に変換して、ファイルに書き込むときは改行をCRLFに変換します。国際化文字コードの変換を処理するのと同じ仕組みが、この変換でも行なわれます(コーディングシステムを参照してください)。
ほとんどのファイルにおいて、この特別なフォーマット変換の重要な問題は、Emacsが報告する文字の位置(カーソル位置の情報を参照してください)が、オペレーティングシステムが認識するファイルサイズの情報と一致しないことです。
それに加えて、ファイル内容から行の区切りにCRLFではなく改行(LF)が使用されているとEmacsが認識した場合、Emacsはファイルの読み書きでEOL変換を行ないません。したがって特別に何かを行なわなくても、GNUおよびUnixシステムのファイルをMS-DOSで読み書きでき、編集した後でも、それらのファイルのEOLはUnixスタイルの慣習にしたがいます。
カレントバッファーにたいして、どのEOL変換が使用されているかは、モードラインに表示されます。そのバッファーにたいしてMS-DOSのEOL変換が使用されている場合、MS-WindowsでビルドされたEmacsでは、モードラインの先頭付近の、コーディングシステムニーモニックの後ろにバックスラッシュ‘\’が表示されます。なんのEOL変換も処理されていない場合、そのファイルのEOLフォーマットが通常のCRLFではないことを警告するために、バックスラッシュのかわりに文字列‘(Unix)’が表示されます。
ファイルをvisitして、DOSスタイルとUnixスタイルのどちらを使用するか指定するには、コーディングシステムを指定します(ファイルのテキストにたいするコーディングシステムの指定を参照してください)。たとえばC-x RET c unix RET C-x C-f
foobar.txtは、EOL変換をせずに、ファイルfoobar.txtをvisitします。CRLFで終わる行がある場合、Emacsは行末に‘^M’を表示します。同様に、C-x
RET
fコマンドで、そのバッファーを指定したEOLフォーマットで保存するよう指示できます。たとえばバッファーをUnixのEOLフォーマットで保存するには、C-x
RET f unix RET C-x
C-sとタイプします。DOSのEOL変換でファイルをvisitしていて、それをUnixのEOLフォーマットで保存すると、dos2unix
コマンドのように、そのファイルをUnixのEOLスタイルに変換できます。
NFS、Samba、または他の類似した方法により、GNUおよびUnixシステムを使用しているコンピューターのファイルシステムにアクセスする場合、Emacsはそれらのファイルシステム上のファイル
—
たとえファイルを新たに作成する場合でも、EOL変換を行なうべきではありません。EOL変換を行なわないようにするには、関数add-untranslated-filesystem
を呼び出して、それらのファイルシステムがuntranslated(変換なし)だと指定します。この関数は、ドライブ文字とオプションでディレクトリーを含む、ファイルシステム名を引数にとります。たとえば、
(add-untranslated-filesystem "Z:")
これはZドライブが変換なしのファイルシステムであると指定し、
(add-untranslated-filesystem "Z:\\foo")
これはドライブZのディレクトリー\fooは、変換なしのファイルシステムだと指定します。
.emacsやinit.elなどのinitファイル、またはsite-start.elの中でadd-untranslated-filesystem
を使用するのが、ほとんどでしょう。site-start.elに記述しておけば、そのサイトのすべてのユーザーが恩恵にあずかることができます。
add-untranslated-filesystem
の効果を取り消すには、関数remove-untranslated-filesystem
を使用します。この関数は、前にadd-untranslated-filesystem
で使用された文字列と同様の文字列を引数にとります。
ファイルシステムを変換なしと指定しても、影響があるのはEOL変換だけで、文字セットの変換に影響はありません。原則的として、行末に改行を使用するUnixスタイルをデフォルトとして、新たにファイルを作成するようEmacsに指示します。コーディングシステムを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
MS-WindowsとMS-DOSでは通常、ファイル名の名前単位の区切りにバックスラッシュを使用します(他のシステムではスラッシュを使用します)。MS-DOSおよびMS-WindowsのEmacsは、スラッシュとバックスラッシュのどちらも使用でき、ファイル名に含まれるドライブ文字も識別できます。
MS-DOSおよびMS-Windowsでは、ファイル名は大文字小文字を区別せず、Emacsもデフォルトではファイル名の補完で大文字小文字の違いを無視します。これを行うために、MS-DOS/MS-Windowsではread-file-name-completion-ignore-case
のデフォルト値は非nil
です。補完オプションを参照してください。
変数w32-get-true-file-attributes
は、file-attributes
やdirectory-files-and-attributes
のように、より正確にプリミティブなファイル属性を判断するために、Emacsが追加のシステムコールを呼び出すべきかを制御します。これらの追加のシステムコールは、ファイルの正しい所有者、リンクカウントと、パイプのような特殊ファイルのファイルタイプを取得するのに必要となります。システムコールを使用しない場合、ファイルの所有者はカレントユーザーとなり、リンクカウントは常に1に、そして特殊ファイルは通常ファイルとなるでしょう。
この変数の値がlocal
(デフォルト)の場合、Emacsはローカルの固定ドライブのファイルにたいしてのみ、システムコールを呼び出します。他の非nil
値は、ファイルがリムーバブルメディアやリモートボリュームにある場合も、システムコールを呼び出すことを意味し、これはDiredやその他の関連する機能の速度低下を招く恐れがあります。値nil
はシステムコールを呼び出さないことを意味します。非nil
値は、FAT、FAT32、exFATのようなボリュームより、ハードリンクやファイルセキュリティーをサポートするNTFSのボリュームの場合のほうが有用です。
Unixとは異なり、MS-Windowsのファイルシステムでは、ファイル名に使用されるかもしれない複数の文字にたいして制限があります。以下の文字は使用できません:
これらに加えて、ファイル名拡張子の有無に関わらず、NUL、LPT1、PRN、CONのようなDOSの文字デバイスに名前がマッチする任意のファイルは、どのディレクトリーにあっても、文字デバイスとして解釈されます。したがってその文字デバイスを使用したいときだけ、そのようなファイル名を使用します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ls
のエミュレーションDiredは通常、Diredバッファーで表示するディレクトリーリストを生成するために、外部プログラムのls
を使用します。しかしMS-WindowsとMS-DOSには、GNU
ls
のいくつかのポートは存在するものの、システムにはそのようなプログラムがありません。したがって、そのようなシステム上のEmacsは、ls-lisp.elパッケージを使用することにより、Lispでls
をエミュレートします。ls-lisp.elは、ls
のほぼ完全なエミュレーションを提供し、エミュレーションに特化したオプションと機能もあります。
それらについては、このセクションで説明します。
ls
エミュレーションは、ls
スイッチの多くをサポートしますが、すべてをサポートする訳ではありません。サポートされているオプションは、-A、-a、-B、-C、-c、-G、-g、-h、-i、-n、-R、-r、-S、-s、-t、-U、-u、-v、-Xです。-Fオプションは、部分的にサポートされています(ファイルをクラス化する文字を追加しますが、シンボリックリンクのフォローを抑止しません)。
MS-WindowsとMS-DOSでは、ls-lisp.elはEmacsが構築されるとき事前ロードされるので、それらの環境では常にls
のLispエミュレーションが使用されます。ポートされたls
がある場合、ls-lisp-use-insert-directory-program
を非nil
値にセットすることにより、変数insert-directory-program
にセットされた名前の外部プログラムを使用するように戻すことができます。
ls-lisp.elがファイルをソートする順序は、以下で説明するいくつかのカスタマイズ可能なオプションに依存します。
デフォルトのソート順は、システムlocaleから派生したlocale固有ルールにしたがいます。ls-lisp-use-string-collate
をnil
値にカスタマイズすることにより、localeから独立したソート順にすることができます。
GNUおよびUnixシステムでは、localeのエンコーディングがUTF-8のときの照合順はUCA(Unicode
Collation Algorithm:
Unicode照合順序アルゴリズム )にしたがいます。MS-Windowsで同様の効果を得るには、変数ls-lisp-UCA-like-collation
が非nil
値をもつべきです(これがデフォルトです)。結果となるソート順は句読点、シンボル文字、空白文字を無視するので、.foobar、foobar、foo barは別々ではなく一緒に表示されるでしょう。
デフォルトでは、ls-lisp.elはディレクトリーのリストを生成するのに、大文字小文字を区別するソート順を使用します。これは他のプラットフォームと同じような見映えにリストするためです。大文字小文字を区別せずにファイルをソートしたい場合は、変数ls-lisp-ignore-case
に非nil
値をセットしてください。
デフォルトでは、ls
の動作をエミュレートするために、ファイルとサブディレクトリーは一緒にソートされます。しかしネイティブのMS-WindowsとMS-DOSのファイルマネージャーでは、ファイルの前にディレクトリーがリストされます。このように動作させたい場合は、オプションls-lisp-dirs-first
を非nil
値にカスタマイズしてください。
変数ls-lisp-verbosity
は、ls-lisp.elが表示するファイル属性を制御します。値にはnil
、またはシンボルlinks
、uid
、gid
を1つ以上含むリストを指定します。links
は、そのファイルデータに関連付けられている(links
toとも言います)別のファイルの数を表示することを意味し、これはNTFSボリュームでのみ有用です。uid
はそのファイルを所有するユーザーの、数字による識別子を表示することを意味します。gid
はそのファイルの所有者のグループの、数字による識別子を表示することを意味します。デフォルト値は(links
uid gid)
で、3つのすべてのオプション属性が表示されます。値nil
はこれらの属性を何も表示しないことを意味します。
変数ls-lisp-emulation
は、上記で説明した3つのオプションls-lisp-ignore-case
、ls-lisp-dirs-first
、ls-lisp-verbosity
でデフォルトをセットすることにより、ls
エミュレーションの風合いを制御します。このオプションの値には、以下のシンボルを指定できます:
GNU
nil
GNUシステムをエミュレートします(デフォルト)。これはls-lisp-ignore-case
とls-lisp-dirs-first
をnil
に、ls-lisp-verbosity
を(links
uid gid)
にセットします。
UNIX
Unixシステムをエミュレートします。GNU
と同様ですが、ls-lisp-verbosity
は(links
uid)
にセットします。
MacOS
macOSをエミュレートします。ls-lisp-ignore-case
をt
に、ls-lisp-dirs-first
とls-lisp-verbosity
をnil
にセットします。
MS-Windows
MS-Windowsをエミュレートします。ls-lisp-ignore-case
とls-lisp-dirs-first
をt
にセットし、ls-lisp-verbosity
を、Windows
9Xではnil
、Windowsのモダンなバージョンではt
にセットします。これらのプラットフォームのEmacsユーザーの多くがデフォルトとしてGNUを好むため、たとえWindowsにおいても、デフォルトのエミュレーションはMS-Windows
ではないことに注意してください。
これ以外の値をls-lisp-emulation
にセットするのは、GNU
をセットするのと同じです。このオプションをカスタマイズすることにより、必要に応じて3つの従属オプションを更新するために、関数ls-lisp-set-options
が呼び出されます。ls-lisp.elがロードされた後(MS-WindowsとMS-DOSでは事前ロードされることに注意してください)に、customizeを使用せずにこの変数の値を変更した場合、この関数を手動で呼び出して、同じ結果を得ることができます。
変数ls-lisp-support-shell-wildcards
は、ファイル名パターンがサポートされる方法を制御します。非nil
(デフォルト)の場合、ファイル名パターンはシェルスタイルのワイルドカードとして扱われ、nil
の場合はEmacsの正規表現として扱われます。
変数ls-lisp-format-time-list
は、ファイルの日付と時刻の書式をフォーマットする方法を定義します。Emacsがカレントlocaleを判断できる場合、この変数の値は無視されます(しかしls-lisp-use-localized-time-format
の値が非nil
の場合、Emacsはカレントlocaleが利用できるときでもls-lisp-format-time-list
にしたがいます。以下を参照してください)。
ls-lisp-format-time-list
の値は、2つの文字列からなるリストです。最初の文字列は、そのファイルがその年に変更されている場合に使用され、2番目の文字列はそれより古いファイルに使用されます。2つの文字列では、日時の一部を置換するために‘%’シーケンスを使用できます。たとえば:
("%b %e %H:%M" "%b %e %Y")
これらの‘%’シーケンスにたいする文字列の置換は、カレントlocaleに依存することに注意してください。日時のフォーマットの仕様については、Time Parsing in The Emacs Lisp Reference Manualを参照してください。
Emacsは通常、ファイルのタイムスタンプの日時フォーマットに、慣習にしたがったフォーマット、またはISOスタイルのフォーマットを使用します。しかし変数ls-lisp-use-localized-time-format
の値が非nil
の場合、Emacsはファイルのタイムスタンプを、ls-lisp-format-time-list
の指定にしたがってフォーマットします。ls-lisp-format-time-list
の‘%’シーケンスは、localeにしたがった月の名前と曜日名を生成し、それによりDiredの列表示がずれるかもしれません。ls-lisp-use-localized-time-format
のデフォルト値はnil
です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
WindowsでHOME
に相当するのは、ユーザー固有のアプリケーションデータディレクトリーで、それの実際の位置はWindowsのバージョンに依存します。典型的な値は、Windows
2000からXPではC:\Documents and Settings\username\Application
Data、Windows
Vista以降ではC:\\Users\\username\\AppData\\Roaming、そしてWindows
9X/MEではC:\WINDOWS\Application
DataかC:\WINDOWS\Profiles\username\Application
Dataのいずれかです。このディレクトリーが存在しない、またはアクセスできない場合、EmacsはHOME
のデフォルト値をC:\にフォールバックします。
環境変数HOME
をシステムの他のディレクトリーを指すように明示的にセットすることにより、HOME
のデフォルト値をオーバーライドできます。HOME
はコマンドシェルプロンプト、または‘My
Computer’の‘Properties’ダイアログからセットできます。HOME
はシステムレジストリーからもセットできます。MS-Windowsのシステムレジストリーを参照してください。
古いバージョンのEmacs25との互換性のため、ドライブC:のルートディレクトリーC:\に.emacsという名前のファイルが存在する場合、そしてHOME
が環境とレジストリーのどちらでもセットされていない場合、EmacsはC:\をデフォルトのHOME
の場所として扱い、たとえアプリケーションデータディレクトリーが存在する場合でも、そこを探しません。古い名前の_emacs(以下参照)ではなく、C:\の.emacsだけが探されることに注意してください。C:\.emacsを使用してHOME
を定義する方法は、推奨されていません。Emacsはスタートアップ時にそれが使用されていることに関して、警告を表示するでしょう。
最終的な場所がどこであれ、Emacsはその場所を指すように環境変数HOME
の内部値をセットし、通常ホームディレクトリーで探したり作成するファイルとディレクトリーのために、その場所を使用します。
Emacsがホームディレクトリーをどこだと認識しているかは、C-x d ~/ RETとタイプして常に確認できます。これはホームディレクトリーのファイルのリストを表示し、最初の行にホームディレクトリーの完全な名前を表示します。同様にinitファイルをvisitするには、(initファイルの名前が.emacsの場合)C-x C-f ~/.emacs RETとタイプしてください。
Emacs初期化ファイルで述べられるとおり、initファイルは任意の名前をもつことができます。
MS-DOSはドットで始まるファイル名を使用できず、古いWindowsシステムではそのような名前のファイルを作成するのが困難だったので、EmacsのWindowsポートは、ホームディレクトリーに_emacsが存在して、.emacsが存在しない場合、_emacsという名前のinitファイルをサポートします。この名前は時代遅れと考えられおり、使用した場合、Emacsは警告を表示するでしょう。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このセクションでは、Emacsでのキーボード入力に関するWindows固有の機能について説明します。
MS-Windowsプログラムで慣習的に使用されるキー組み合わせ(“キーボードショートカット”として知られる)の多くが、伝統的なEmacsのキーバインドと衝突します(これらEmacsのキーバインドは、Microsoftが設立される数年前には確立されていました)。衝突の例にはC-c、C-x、C-z、C-a、W-SPCが含まれます。CUAモード(CUAバインドを参照してください)を有効にすることにより、これらのいくつかの意味をMS-Windowsでの意味に近づけるよう再定義できます。他のWindowsのようにEmacsを振る舞わせる他のオプション機能として、Delete Selectionモード(リージョンを操作するを参照)があります。
デフォルトでは、Altとラベルされたキーは、Metaキーにマップされます。かわりにAlt
修飾を生成したい場合は、変数w32-alt-is-meta
にnil
をセットしてください。
MS-Windowsでは、Alt-TAB、およびWindowsキーと組み合わされたいくつかのキーのような特定のキー組み合わせは、Windowsが使用するために予約済みです。これらのキー組み合わせは、Emacsがそれを読み取る前に、システムにより解釈されます。さらにWindows
10では、たとえその時点で特定のキー組み合せがホットキーとして定義されていなくても、すべてのWindowsキーと組み合わされたキーは、アプリケーションに決して渡されないように、システムにより予約済みです。関数w32-register-hot-key
を使用して、Windowsに横取りされることなく、Emacsがキーシーケンスを取得できます。ホットキー(hot
key)として登録した場合、そのキー組み合せはWindowsが処理する前にシステムの入力キューから取り出され、そのシーケンスがもつWindowsにたいする特別な意味を、効果的にオーバーライドします。これはEmacsがアクティブなときだけオーバーライドされ、他のアプリケーションがフォアグラウンドのときには、そのキーは通常どおり振る舞います。
w32-register-hot-key
に指定する引数は、1つの修飾キー、1つのキーを指定しなければなりません。control修飾とshift修飾は、引数に影響を与えません。w32-alt-is-meta
がt
(デフォルト)の場合、meta修飾はAltキーと解釈され、super修飾とhyper修飾はそれぞれ、w32-lwindow-modifier
とw32-rwindow-modifier
のバインディングに解釈されます。さらにキーがなく末尾がダッシュの修飾は、Emacs用にその修飾にたいしてるWindowsが定義するすべてのホットキーをオーバーライドすることを示します。
たとえば(w32-register-hot-key
[M-tab])
により、(たとえばトップレベルのポイント位置の単語やシンボルを補完したり、インクリメンタル検索において以前に検索した文字列で現在の検索文字列を補完したり等)、Emacsで通常使用するようにM-TABを使用できます。(w32-register-hot-key
[s-])
とw32-lwindow-modifier
を併用すると、WindowsキーにもとづくWindowsのすべてのショートカットを無効にします。26
w32-register-hot-key
は、関数呼び出し時にw32-[lr]window-modifier
の値をチェックすることに注意してください。したがって、w32-lwindow-modifier
をsuper
としてセットしてから(w32-register-hot-key
[s-r])
を呼び出し、最後に同じようにw32-rwindow-modifier
をsuper
としてセットできます。その結果、左WindowsキーとRの組み合せは、その組み合せにたいしてEmacsでバインドした関数を呼び出し、右WindowsキーとRの組み合せはWindowsのRun
ダイアログをオープンします。
ホットキーの登録には常に、与えられたホットキーにたいするshift修飾とcontrol修飾による組み合せのすべてが含まれます。つまり、s-aをホットキーとして登録すると、同様にS-s-a、C-s-a、C-S-s-aが登録されます。
Windows 98、およびWindows
MEではホットキーの登録はより制限されます。ホットキーが常に完全指定されねばなりません。望む結果を得るために、w32-phantom-key-code
をカスタマイズできます。
関数w32-unregister-hot-key
は、引数となるキーシーケンスにたいして、w32-register-hot-key
と逆のことを行ないます。
デフォルトでは、CapsLockキー(このキーは小文字を大文字に変換します)は通常の文字キーだけに効果をもちます。しかし変数w32-capslock-is-shiftlock
を非nil
値にセットした場合、CapsLockは非文字キーにも同様に効果をもつようになり、その非文字キーをタイプするとき、あたかもSHIFTキーが押されたかのようになります。
変数w32-enable-caps-lock
にnil
値をセットした場合、CapsLockキーは、タイプされた文字にたいするシフトが押されたバージョンのキーではなく、かわりにシンボルcapslock
を生成します。デフォルト値はt
です。
同様にw32-enable-num-lock
がnil
の場合、NumLockキーはシンボルkp-numlock
を生成します。デフォルトはt
で、これはNumLockに期待された動作、すなわちテンキー上のキーのもつ意味の切り替えを行ないます。
変数w32-apps-modifier
は、Appsキー(通常は右Altキーと右Ctrlキーの間にあります)の効果を制御します。変数の値には、対応する修飾キーを示すシンボルhyper
、super
、meta
、alt
、control
、shift
のどれか1つを指定するか、nil
を指定してそれをキーapps
として扱います。デフォルトはnil
です。
変数w32-lwindow-modifier
は、左Windowsキー(通常はstartとWindowsのロゴのラベル)の効果を決定します。この変数の値がnil
(デフォルト)の場合、このキーはシンボルlwindow
を生成します。シンボルhyper
、super
、meta
、alt
、control
、shift
のうち、どれか1つをセットした場合は、対応する修飾が生成されます。これと似た変数w32-rwindow-modifier
は、右Windowsキーの効果を制御し、w32-scroll-lock-modifier
はScrLockと同様のことを行います。これらの変数がnil
にセットされている場合、右Windowsキーがシンボルrwindow
、ScrLockがシンボルscroll
を生成します。たとえばキーボード上のScroll
Lock
LED標示を切り替える等、他のアプリケーションのときと同様の効果をScrLockに生成させたい場合は、w32-scroll-lock-modifier
の値に上記の修飾シンボルではなくt
か、任意の非nil
をセットしてください。
EmacsがネイティブのWindowsアプリケーションとしてコンパイルされていると、Windowsメニューを呼び出すAltをタップ(tapping: 覗き見)するWindows機能をオフに切り替えます。これはEmacsではMetaとして用いられるからです。Emacsを使用するとき、ユーザーが1度Metaキーを押して、後で気が変わることがあります。もしこのキーがWindowsメニューを立ち上げる効果をもつ場合、それに続くコマンドの意味が変更されてしまいます。多くのユーザーは、これにイライラするでしょう。
w32-pass-alt-to-system
を非nil
値にセットすることにより、Altキーの覗き見にたいするWindowsのデフォルトの処理を再び有効にできます。
変数w32-pass-lwindow-to-system
とw32-pass-rwindow-to-system
は、左Windowsキーと右Windowsキーが、Windowsに渡されるか、Emacsに渡されるかを決定します。値がnil
の場合、これらのキーはEmacsに渡され、それ以外の場合はWindowsに渡されます。両方の変数のデフォルトはt
です。これらのキーをWindowsに渡すことにより、たとえばLwindowはStart
メニューを開くなどの、通常の効果が生成されます。
変数w32-recognize-altgr
は、(もしそれがキーボードにあれば)AltGrキー(またはそれと同種のキー)が右Altと左Ctrlキーを一緒に押したときの組み合わせとするか、それともそれをAltGrキーとして認識するかを制御します。デフォルトはt
で、これはそれらのキーがAltGr
を生成することを意味します。これをnil
にセットすることにより、AltGrキー(またはそれと同種のキー)との組み合わせは、Ctrl修飾とMeta修飾の組み合わせとして解釈されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このセクションでは、マウスに関連したWindows固有の変数について説明します。
変数w32-mouse-button-tolerance
は、2ボタンマウスで、マウス中央ボタンを模倣する際の時間間隔を、ミリ秒で指定します。左ボタンと右ボタンの両方のボタンが、この時間間隔のうちに離された場合、Emacsはそれらどちらかのボタンのダブルクリックイベントのかわりに、マウス中央ボタンのクリックイベントを生成します。
変数w32-pass-extra-mouse-buttons-to-system
が非nil
の場合、EmacsはWindowsに第4、第5マウスボタンを渡します。
変数w32-swap-mouse-buttons
、は3ボタンマウスがmouse-2イベントを生成するかを制御します。これがnil
(デフォルト)の場合、中央のボタンはmouse-2を生成し、右ボタンはmouse-3を生成します。この変数が非nil
の場合、これら2つのボタンの役割は逆になります。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
WindowsのネイティブアプリケーションとしてコンパイルされたEmacsには、(DOSバージョンとは対照的に)非同期サブプロセスにたいする完全なサポートが含まれます。Windowsバージョンでは、同期および非同期サブプロセスは、すべてのバージョンのWindowsで32ビット、または64bitのWindowsアプリケーションを実行する限りうまく動作します。しかしサブプロセスでDOSアプリケーションを実行する場合は、問題に遭遇したり、そのアプリケーションを実行できないかもしれません。また、2つのサブプロセスで2つのDOSアプリケーションを実行する場合は、システムを再起動する必要があるかもしれません。
Windows9X標準のコマンドインプリターはDOSアプリケーションなので、そのようなシステムを使用する場合に、これらの問題が重要になります。しかしこれらの問題についてわたしたちができることはありません。Microsoftだけがこれをfixできるのです。
サブプロセスで1つのDOSアプリケーションを実行する場合、それが“様式に従って(well-behaved)”いる限り、そしてスクリーンへの直接アクセスや、その他の異例なことを行なわない限り、そのサブプロセスは期待されたとおりに動作すべきです。CPUモニターアプリケーションがある場合、そのDOSアプリケーションがアイドル状態でも、CPUは100%ビジーに見えるかもしれませんが、これは単にCPUモニターがプロセッサー負荷を計測する方法によるものです。
他のDOSアプリケーションを別のサブプロセスで開始する前に、DOSアプリケーションを終了しなければなりません。EmacsはDOSサブプロセスに割り込み、または終了させることができません。プログラムの終了コマンドを与えることだけが、そのようなサブプロセスを終了できる唯一の方法です。
同時に別のサブプロセスで2つのDOSアプリケーションの実行を試みた場合、それらの一方、または両方が非同期であっても、最初のサブプロセスが終了するまで、2番目に開始されたサブプロセスはサスペンドされます。
もし最初のサブプロセスと対話することができ、終了を指示できたら2番目のプロセスは通常どおり実行を継続するはずです。しかし2番目のサブプロセスが同期実行されている場合、Emacsは最初のサブプロセスが終了するまでハングするでしょう。最初のプロセスがユーザーによる入力なしには終了しない場合、Windows9Xでは再起動する以外に選択肢はありません。Windows NT以降で実行している場合、プロセスビューアーアプリケーションを使用して、適切なNTVDMのインスタンスをkillすることができます(これにより、両方のDOSサブプロセスが終了します)。
このような状況でWindows9Xを再起動する場合、Start
メニューのShutdown
コマンドを使用しないでください。これは通常システムをハングさせます。かわりにCtrl-Alt-DELとタイプしてShutdown
を選択します。これは処理を行なうのに数分かかるかもしれませんが、通常どおり機能します。
変数w32-quote-process-args
は、Emacsがプロセス引数をクォートする方法を制御します。非nil
は文字"
でクォートすることを意味します。変数の値が文字の場合、Emacsは任意のクォート文字をエスケープするのに、その文字を使用します。それ以外の場合、プログラムのタイプにもとづいて、適切なエスケープ文字を選択します。
変数w32-pipe-buffer-size
は、サブプロセスとの通信のためにパイプを作成するときに、Emacsがシステムに要求するバッファーサイズを制御します。デフォルト値は0で、この場合はOSがサイズを選択します。有効な正の値を指定した場合は、そのサイズ(byte)のバッファーを要求します。これは、サブプロセスと、バッファーされたパイプ入出力にたいして通常とは異なる動作を見せるプログラムとの通信を調整するのに使用できます。
EmacsサブプロセスとしてMS-DOSプログラムの呼び出しが必要な場合には、そのようなプログラムからのデータ読み取りレートが低いことを目にするかもしれません。変数w32-pipe-read-delay
を非0にセットすることにより、そのような場合のスループットを向上できます。そのような状況では値に50を推奨します。デフォルトは0です。
関数w32-shell-execute
は、特定のタイプのファイルやドキュメントにたいして、ある種の標準的なWindows操作を処理するために登録された、MS-Windowsアプリケーションを実行するカスタマイズコマンドを記述するのに有用かもしれません。この関数はWindows
APIのShellExecute
にたいするラッパーです。詳細は、MS-WindowsのAPIドキュメントを参照してください。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
POSIXスタイルのlpr
プログラムが利用できない場合、MS-DOSとMS-Windowsでは、lpr-buffer
(ハードコピーの印刷を参照してください)やps-print-buffer
(PostScriptのハードコピーを参照してください)のような印刷コマンドは、プリンターポートの1つに出力を送ります。同じEmacs変数がすべてのシステムでの印刷を制御しますが、MS-DOSとMS-Windowsでは、それらの変数が異なるデフォルト値をもつ場合があります。
MS
WindowsのEmacsは、(関数default-printer-name
を使用して)デフォルトプリンターの自動検出を試みます。しかし、これはある稀なケースでは失敗することがあり、Emacsから別のプリンターを使用したいと思うときがあるかもしれません。このセクションの残りの部分では、Emacsに使用するプリンターを指示する方法を説明します。
ローカルプリンターを使用したい場合、Lisp変数lpr-command
に""
(これはWindowsではデフォルトです)をセットして、printer-name
にプリンターポート、たとえば通常のローカルプリンターポート"PRN"
、または"LPT2"
、またはシリアルプリンターにたいする"COM1"
などをセットします。printer-name
にファイル名をセットすることもできます。この場合、“印刷”された出力は、そのファイルに追加されます。printer-name
を"NUL"
にセットした場合、印刷された出力は破棄されます(システムのnullデバイスに送られます)。
printer-name
にそのプリンターのUNC共有名 — たとえば"//joes_pc/hp4si"
のような —
をセットすることにより、他のマシンで共有されているプリンターを使用することもできます(ここではスラッシュを使用するか、バックスラッシュを使用するかは問題ではありません)。共有プリンターの名前を探すには、サーバーのリストを取得するために、コマンドプロンプトでコマンド‘net
view’を実行して、‘net view
server-name’でそのサーバーで共有されているプリンター(とディレクトリー)の名前を確認します。かわりにデスクトップの‘Network
Neighborhood’アイコンをクリックして、ネットワークを通じてプリンターを共有しているマシンを確認することもできます。
プリンターが‘net
view’で出力されない場合、またはprinter-name
にUNC共有名をセットしても、そのプリンターからハードコピーが出力されない場合、‘net
use’コマンドを使用して、"LPT2"
のようなローカルプリンターポートを、ネットワークプリンターに接続できます。たとえばnet
use LPT2:
\\joes_pc\hp4si27により、WindowsにLPT2
ポートをキャプチャーさせて、印刷物をマシンjoes_pc
に接続されているプリンターにリダイレクトします。このコマンド後は、printer-name
に"LPT2"
をセットすることにより、そのネットワークプリンターでハードコピーが印刷されます。
あるWindowsネットワークソフトウェアーでは、"LPT2"
のような特定のプリンターポートをキャプチャーして、‘net
use’のかわりにControl Panel->Printers
を通じてネットワークプリンターにリダイレクトするよう、Windowsに指示できます。
printer-name
にファイル名をセットする場合、絶対ファイル名を使用するのが最良です。Emacsはカレントバッファーのデフォルトディレクトリーに合わせて作業ディレクトリーを変更するので、printer-name
のファイル名が相対ファイル名の場合、結果として印刷が行なわれたバッファーのディレクトリーごとに、複数のファイルができてしまいます。
変数printer-name
の値が正しいのに、印刷してもそのプリンターからハードコピーが印刷されない場合、そのプリンターがプレーンテキストの印刷をサポートしない可能性があります(安価なプリンターのいくつかでは、この機能が省略されています)。そのような場合、以下で説明するPostScriptプリントコマンドを試してみてください。
コマンドprint-buffer
およびprint-region
は、印刷された各ページにヘッダーを生成するために、pr
プログラムを呼び出すか、lpr
プログラムの特別なスイッチを使用します。通常MS-DOSとMS-Windowsにはこれらのプログラムがないので、デフォルトでは印刷ページのヘッダーの印刷リクエストは単に無視されるように、lpr-headers-switches
がセットされています。したがってprint-buffer
とprint-region
は、lpr-buffer
およびlpr-region
と同じ出力を生成します。適切なpr
プログラム(たとえばGNU
Coreutilsのもの)がある場合は、lpr-headers-switches
にnil
をセットします。するとEmacsはページヘッダーを生成するためにpr
を呼び出し、その結果をprinter-name
で指定されたプリンターで印刷します。
最後に、もしlpr
によく似たものがある場合、変数lpr-command
を"lpr"
にセットします。するとEmacsは他のシステムと同じように、印刷にlpr
を使用します(そのプログラムの名前がlpr
でない場合は、lpr-command
に適切な値をセットします)。lpr-command
が""
でないときに、変数lpr-switches
は、その標準的な意味をもちます。変数printer-name
の値が文字列のとき、Unixの場合のように、lpr
の-P
オプションの値としてその文字列が使用されます。
類似の変数ps-lpr-command
、ps-lpr-switches
、ps-printer-name
(PostScriptハードコピーにたいする変数を参照してください)は、PostScriptファイルがどのように印刷されるかを定義します。これらの変数は、上記で説明した非PostScript印刷にたいする変数と同じ方法で使用されます。したがって非PostScript印刷にたいしてprinter-name
が使用される方法と同様に、ps-printer-name
の値はPostScript出力が送られるデバイス(またはファイル)の名前として使用されます(2つの異なるポートに接続された2つのプリンターがあり、それらの1つだけがPostScriptプリンターの場合、2つの個別の変数セットをもつことができます)。
変数ps-lpr-command
のデフォルト値は""
で、これはPostScript出力をps-printer-name
で指定されたプリンターポートに送りますが、ps-lpr-command
にはPostScriptファイルを受け付けるプログラム名をセットすることもできます。したがって非PostScriptプリンターがある場合、この変数に(Ghostscriptのような)PostScriptのインタープリタープログラムをセットできます。インタープリタープログラムに渡す必要があるスイッチを指定するには、ps-lpr-switches
を使用します(ps-printer-name
の値が文字列の場合、-P
オプションにたいする値として、スイッチのリストが追加されます。これはおそらくlpr
を使用する場合だけ有用なので、インタープリターを使用するときはps-printer-name
に文字列以外の何かをセットすれば、無視させることができます)。
たとえばシステムのデフォルトプリンターで、Ghostscriptを使用して印刷するには、以下を.emacsに記述します:
(setq ps-printer-name t) (setq ps-lpr-command "D:/gs6.01/bin/gswin32c.exe") (setq ps-lpr-switches '("-q" "-dNOPAUSE" "-dBATCH" "-sDEVICE=mswinpr2" "-sPAPERSIZE=a4"))
(GhostscriptがディレクトリーD:/gs6.01にインストールされていると仮定します。)
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacs23からは、フォントはフォント名、サイズ、オプションのプロパティーにより指定されるようになりました。フォントを指定するフォーマットは、モダンなフリーデスクトップで使用されているfontconfigライブラリーから由来しています。
[Family[-PointSize]][:Option1=Value1[:Option2=Value2[...]]]
後方互換のため、古いXLFDベースのフォーマットもサポートされます。
Emacs on
MS-Windowsでは、いくつかのフォントバックエンドがサポートされています。Windowsでは現在のところバックエンドとしてgdi
、uniscribe
、およびharfbuzz
が利用可能です。gdi
フォントバックエンドは、すべてのバージョンのWindowsで利用でき、Windowsでネイティブにサポートされるすべてのフォントをサポートします。uniscribe
フォントバックエンドはWindows
2000以降で利用できTrueTypeフォント、OpenTypeフォントをサポートします。harfbuzz
フォントバックエンドはEmacsがHarfBuzzサポートつきでビルドされた場合に利用可能で、システムにHarfBuzz
DLLがインストールされていれば、このバックエンドはuniscribe
のようにTrueTypeフォントとOpenTypeフォントをサポートします。複雑なレイアウトを要求するいくつかの言語は、UniscribeバックエンドかHarfBuzzバックエンドだけが正しくサポートできます。デフォルトではgdi
、およびharfbuzz
かuniscribe
のいずれかのバックエンドはすべてのフレームで有効であり、どれが有効かは利用可能なバックエンドに依存します(両方が利用可能ならデフォルトではharfbuzz
だけが有効)。Emacsが適切なフォントを探す際には、gdi
よりharfbuzz
およびuniscribe
のバックエンドが優先されます。これをオーバーライドして、Uniscribeが利用できる場合もGDIバックエンドを使用するには、コマンドライン引数-xrm
Emacs.fontBackend:gdiを指定してEmacsを呼び出すか、レジストリーのキー‘HKEY_CURRENT_USER\SOFTWARE\GNU\Emacs’または‘HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs’のいずれかの下に、リソースEmacs.fontBackend
を追加して値をgdi
にセットします(Xリソースを参照)。同様にHarfBuzzが利用可能であってもUniscribeバックエンドを使用するには、Emacsを呼び出すコマンドラインで-xrm
Emacs.fontBackend:uniscribeを使用してください。フレームパラメーターを通じて3つのバックエンドすべてを要求することもできますが、その場合にはシステムに利用可能なフォントがない文字にたいするフォント検索には時間を要すると警告されます。
かわりにmodify-frame-parameters
を使用してfont-backend
フレームパラメーターを通じてフレームにたいするフォントバックエンドを指定できます(Parameter
Access in The Emacs Lisp Reference
Manualを参照)。default-frame-alist
とinitial-frame-alist
を通じてすべてのフレームにたいするフォントバックエンド(複数可)も要求できます(フレームパラメーターを参照)。font-backend
パラメーターの値は(uniscribe)
や(harfbuzz uniscribe gdi)
のようにシンボルのリストであることに注意してください。
MS-Windowsでサポートされるオプションのフォントプロパティーです:
weight
フォントのweightを指定します。特別な値light
、medium
、demibold
、bold
、black
は、weight=
を使わずに指定できます(例:
Courier
New-12:bold)。それ以外の場合、weightは100から900の数字か、font-weight-table
の中の名前のついたweightを指定します。指定されない場合は、regularフォントが指定されたとみなします。
slant
フォントがitalicかどうかを指定します。特別な値roman
、italic
、oblique
は、slant=
を使わずに指定できます(例:
Courier
New-12:italic)。それ以外の場合は、数字か、font-slant-table
内のなまえつきのslantの1つを指定します。Windowsでは、150を越える任意のslantはitalicとして扱われ、150以下のものはすべてromanとして扱われます。
family
フォントファミリーを指定しますが、通常はフォント名の最初でファミリーを指定します。
pixelsize
フォントサイズをピクセルで指定します。これはファミリー名の後のポイントサイズ指定のかわりに使用することができます。
adstyle
そのフォントにたいする、追加のスタイル情報を指定します。MS-Windowsでは、値mono
、sans
、serif
、script
、decorative
が認識されます。これはフォントファミリーが指定されていない場合のフォールバックとして、もっとも有用です。
registry
そのフォントがカバーすることを期待される、文字セットregistryを指定します。ほとんどのTrueTypeフォントとOpenTypeフォントは、複数の国際化文字セット(national
character
sets)をカバーするUnicodeフォントですが、ここでw32-charset-info-alist
から、特定の文字セットをサポートするregistry指定を使用することにより、選択されるフォントを絞り込むことができます。
spacing
フォントがspacingされる方法を指定します。p
はプロポーショナルフォントを指定し、m
およびc
はモノスペースフォントを指定します。
foundry
Windowsでは使用されませんが、情報的な目的のために、そしてこれをセットしようとするコードによる問題を防ぐため、ビットマップフォントではraster
、スケーラブルフォントではoutline
、どちらともタイプが特定できなかった場合はunknown
が、内部的にセットされます。
script
そのフォントがサポートすべきUnicodeの部分範囲(subrange)を指定します。
Emacsが知るすべてのスクリプト(一般的にはもっとも最近のUnicode標準で定義されたすべてのスクリプトを意味する)はMS-Windowsで認識されます。しかしGDI
フォントは既知のスクリプトのサブセットgreek
、hangul
、kana
、kanbun
、bopomofo
、tibetan
、yi
、mongolian
、hebrew
、arabic
、thai
だけをサポートします。
antialias
アンチエイリアシング(antialiasing)の方法を指定します。値none
は、アンチエイリアシングを行なわないことを意味します。standard
は、標準のアンチエイリアシングを使用することを意味します。subpixel
は、subpixelアンチエイリアシング(WindowsではCleartypeとして知られる)を使用することを意味します。natural
は、文字間のspacing調整つきでsubpixelアンチエイリアシングを使用することを意味します。指定されない場合、そのフォントはシステムのデフォルトのアンチエイリアシングを使用します。
Emacs on
MS-Windowsが与えられた非ASCII文字の表示に適切なフォントを探すために使用する手法はいくつかの希少なスクリプト、特に比較的最近Unicodeに追加されたスクリプトは、たとえそのスクリプトをサポートするフォントをインストールしていても失敗するかもしれません。これはEmacs
on MS-Windowsがフォントを探すために使用する情報内でそれらのスクリプトがスクリプトにたいして定義されたUnicode Subrange
Bits
(USB)をもたないからです。この問題を克服するためにw32-find-non-USB-fonts
関数を使用できます。これはEmacsセッションの開始に一度実行して、新たにフォントをインストールしたら再度実行する必要があります。Emacs開始時に毎回この関数を実行するためにinitファイルに以下の行を追加できます:
(w32-find-non-USB-fonts)
かわりに任意のタイミングでM-: (Emacs Lisp式の評価を参照)からこの関数を実行できます。多くのフォントがインストールされたシステムではw32-find-non-USB-fonts
の実行に数秒かかるかもしれません。スタートアップ中に実行するには長すぎると思い、かつフォントを新たにインストールすることが稀なら、M-:からこの関数を一度実行してからリターン値が非nil
ならinitファイルで変数w32-non-USB-fonts
にそれを割り当ててください(関数がnil
をリターンしたらこの機能を必要とするスクリプトから表示できるインストール済みのフォントはない)。
変数w32-use-w32-font-dialog
はS-mouse-1を通じてフォントを選択する方法を制御します(mouse-appearance-menu
)。値がt
(デフォルト)ならEmacsは標準的なWindowsのフォント選択ダイアログを使用します。nil
ならEmacsはかわりにフォントの固定セットのメニューをポップアップします。メニューに表示されるフォントはw32-fixed-font-alist
により決定されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このセクションでは、他のどれにも当てはまらないWindows固有の機能について説明します。
変数w32-use-visible-system-caret
は、システムカレット(system
caret)を可視にするか決定するフラグです。スクリーンリーダーソフトウェアーが使用されていないときのデフォルトはnil
で、これはEmacsがポイント位置を示すために自分でカーソルを描画することを意味します。非nil
値は、Emacsがシステムカレットでポイント位置を示すことを意味します。これはスクリーンリーダーソフトウェアーの使用を容易にし、そのようなソフトウェアーがEmacsの実行を検知したときのデフォルトになります。この変数が非nil
の場合、カーソル表示に影響を与える他の変数は効果がなくなります。
変数w32-grab-focus-on-raise
が非nil
値にセットされている場合、フレームがraiseされるときフォーカスを奪います。デフォルトはt
で、これはWindowsのデフォルトのclick-to-focusポリシーに適合します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このセクションでは、EmacsをMS-DOSで使用する際の特質を、簡単に説明します。 MS-DOSとMicrosoftの現在のオペレーティングシステムのWindowsについての情報は、EmacsとMicrosoft Windows/MS-DOSの中にあります。
EmacsをMS-DOSにたいしてビルドした場合、そのバイナリーはWindows 3.X、Windows NT、Windows 9X/ME、Windows 2000/XPでもDOSアプリケーションとして実行されます。MS-DOSにたいしてビルドされたEmacsを使用する場合、このチャプターの内容は、それらすべてのシステムに適用されます。
MS-DOS(およびWindows)でのテキストファイルにたいするEmacsの特別な処理については、テキストファイルとバイナリーファイルを参照してください 。
G.12.1 MS-DOSでのキーボードの使用方法 | MS-DOSでのキーボードの慣習。 | |
G.12.2 MS-DOSでびマウスの使用方法 | MS-DOSでのマウスの慣習。 | |
G.12.3 MS-DOSでの表示 | MS-DOSでのフォント、フレーム、ディスプレーのサイズ。 | |
G.12.4 MS-DOSでのファイル名 | MS-DOSでのファイル名の慣習。 | |
G.12.5 印刷とMS-DOS | MS-DOSでの印刷の特性。 | |
G.12.6 MS-DOSでの国際化サポート | MS-DOSでの国際化のサポート。 | |
G.12.7 MS-DOSでのサブプロセス | MS-DOSでのサブプロセスの実行。 |
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
EmacsでDELと呼ばれるキー(ほとんどのワークステーションでそれが指定されているのが由来です)は、PCではBS(バックスペース)として知られています。PC固有の端末の初期化で、BSがDELとして動作するよう再マップされるのは、これが理由です。同じ理由により、DeleteキーはC-dとして動作するように、再マップされます。
MS-DOSにたいしてビルドされたEmacsは、C-BreakをC-gのような、中止(quit)文字として認識します。新たな入力にたいして準備ができるまで、C-gをタイプしてもEmacsが検知できないのは、これが理由です。そのため、実行中のコマンドを停止させるために、C-gを使用することはできません (中止と中断を参照してください)。 対照的にC-Breakは、(他のシステムでのC-gのように)、タイプされるとすぐに検知されるので、実行中のコマンドを停止したり、緊急エスケープのために使用されます (緊急エスケープを参照してください)。
PCのキーボードマップは、左AltキーをMetaキーとして使用します。SUPERキーとHyperキーをエミュレートするために、2つの選択肢があります。変数dos-hyper-key
およびdos-super-key
に、1または2をセットすることにより、右Ctrlキーと右Altキーのどちらかを選択します。dos-super-key
とdos-hyper-key
がどちらも1以外の場合、デフォルトにより右AltキーもMetaキーにマップされます。しかしMSーDOSの国際化キーボードサポートプログラムKEYB.COMがインストールされている場合、非US配列のキーボードでは右Altは~や@のような文字を入力するために使用されるので、Emacsは右AltをMetaにマップしません。この場合、左AltキーだけをMetaキーとして使用することになるでしょう。
変数dos-keypad-mode
は、テンキーにより返されるキーコードを制御するフラグ変数です。以下の行を_emacsファイルに記述して、テンキーのENTERキーを、C-jのように定義することもできます:
;; Make the ENTER key from the numeric keypad act as C-j.
(define-key function-key-map [kp-enter] [?\C-j])
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
MS-DOSのEmacsはマウスをサポートします(デフォルト端末のみ)。メニューやメニューバーの使用を含めて、マウスコマンドはドキュメントされているように機能します (メニューバーを参照してください)。 MS-DOSのEmacsではスクロールバーは機能しません。PCマウスには通常2つしかボタンがありません。これらはmouse-1、mouse-2として機能しますが、これらのボタンを一緒に押すと、mouse-3の効果をもちます。マウスにボタンが3つある場合、Emacsは開始時にそれを検知し、Xのようにすべての3ボタンは通常のように機能します。
メニューアイテムの上にマウスポインターが移動すると、メニューバーとポップアップメニューにたいするヘルプ文字列が、エコーエリアに表示されます。マウスに反応するテキストはハイライト (マウスで参照をフォローするを参照してください) もサポートされます。
マウスドライバーのいくつかのバージョンは、マウスのボタン数を正しく報告しません。たとえばホイールつきのマウスは3つボタンがあると報告されますが、Emacsに渡されるのはそのうち2つだけです。真ん中のボタンとして使用されるホイールのクリックも渡されません。このような場合、マウスボタンがいくつあるかEmacsに指示するために、M-x msdos-set-mouse-buttonsコマンドを使用できます。initファイル_emacsに以下の行を追加することにより、そのようなセッティングを永続化できます:
;; Treat the mouse like a 2-button mouse.
(msdos-set-mouse-buttons 2)
MS-DOSにたいしてビルドされたEmacsは、Windows上で実行されているときは、クリップボード操作をサポートします。killリングにテキストを置くコマンド、またはkillリングからテキストをyankするコマンドは、EmacsがXウィンドウシステムで行なうように、最初にWindowsのクリップボードをチェックします (編集のためのマウスコマンドを参照してください)。 Windows上でのMS-DOS版のEmacsは、プライマリー選択とカットバッファーだけをサポートします。セカンダリー選択は常に空になります。
クリップボードに対するアクセス方法はWindowsにより実装されているため、クリップボードに置くことができるテキストの長さは、Emacsが利用可能なDOSメモリー量により制限されます。通常はクリップボードに最大620KBのテキストを置くことができますが、この制限はシステム設定に依存し、Emacsを他のプログラムのサブプロセスとして実行している場合は、もっと少なくなります。killしたテキストが一致しない場合、Emacsはその旨を告げるメッセージを出力して、クリップボードにテキストを置きません。
ヌル文字をWindowsクリップボードに置くこともできません。killされたテキストにヌル文字が含まれる場合、Emacsはそのようなテキストをクリップボードに置かず、その結果にたいするメッセージをエコーエリアに表示します。
変数dos-display-scancodes
が非nil
の場合、Emacsは各キーストロークのASCII値とキーボードのスキャンコードを表示します。この機能は、デバッグのためのview-lossage
コマンドを補足するためのものです。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
MS-DOSのディスプレーでは、boldやitalicのようなフォントの変種が使用できませんが、複数のフェイスをサポートしており、それぞれのフェイスでフォアグラウンドとバックグラウンドのカラーを指定できます。したがってm異なるカラーを使用するために関連するフェイスを定義することにより、フォントを使用するEmacsパッケージ(font-lock
やEnriched
Textモードなそ)の完全な機能を使用することができます。利用できるカラーとフェイスと、それらの外観を確認するには、list-colors-display
コマンド
(フェイスのカラーを参照してください)
、およびlist-faces-display
(テキストのフェイスを参照してください)
を使用してください。
DOSディスプレーでネイティブにサポートされていないグリフと文字をEmacsが表示する方法については、このチャプターの後のほうの、MS-DOSでの国際化サポートを参照してください。
Emacsを開始したとき、Emacsはカーソルの形状を塗りつぶしたボックスに変更します。他のシステムではボックスカーソルがEmacsのデフォルトなので、これは互換性のためです。デフォルトのカーソル形状は、変数default-frame-alist
の中のcursor-type
パラメーターでbarを指定することにより変更できます
(フレームの作成を参照してください)。
MS-DOS端末は垂直バーのカーソルをサポートしないので、カーソルは水平バーになり、フレームのパラメターでwidth
パラメーターが指定された場合、それは実際には水平バーの高さになります。この理由により、MS-DOSではカーソルタイプbar
とhbar
は同じ効果を生みます。拡張として、以下のようにして、バーカーソル指定にはwidthと同様に、カーソルが行を読み取る開始位置を含めることができます:
'(cursor-type bar width . start)
これに加えて、widthパラメーターが負の場合、カーソルバーはその文字セルの最上部から開始されます。
MS-DOS端末は1度に1つのフレームだけを表示できます。MS-DOSで動作するEmacsのフレーム機能は、Emacsがテキスト端末で動作する場合と同じように機能します (フレームとグラフィカルなディスプレーを参照してください)。 MS-WindowsでDOS窓からEmacsを実行した場合、フルスクリーンより小さい可視フレームを作成できますが、それでもEmacsは1度に1つのフレームしか表示できません。
dos-mode4350
コマンドはディスプレーを43行または50行に切り替え、それはハードウェアーに依存します。dos-mode25
コマンドはスクリーンサイズをデフォルトの80x25に切り替えます。
デフォルトではEmacsが理解するするスクリーンサイズは、列を80列、行を25、28、35、40、43、50行にセットする方法だけです。しかしビデオアダプターが、ディスプレーを他のサイズに切り替える特別なビデオモードをもつ場合、Emacsもそれをサポートするようにできます。Emacsにフレームをn行m列のサイズに切り替えるように指示した場合、Emacsはscreen-dimensions-nxm
という名前があるかチェックして、もしあれば切り替えるビデオモードの値(整数でなければなりません)としてそれを使用します(EmacsはAL
レジスターにscreen-dimensions-nxm
の値をセットして、BIOS関数のSet
Video
Mode
を呼び出すことによりそのビデオモードに切り替えます)。たとえばビデオアダプターがビデオモードを85にしたとき、サイズ66x80に切り替わるとしましょう。その場合、以下を_emacsファイルに記述して、Emacsにそれをサポートさせることができます:
(setq screen-dimensions-66x80 85)
MS-DOSのEmacsは特定のサポートされたフレームサイズだけしかセットできないので、可能性のあるすべてのフレームのサイズ変更要求に従うことはできません。サポートされていないサイズが要求された場合、Emacsは指定されたサイズを越える、次に大きなサポートされたサイズを選択します。この場合、たとえば36x80フレームを要求して、かわりに40x80を得ることになります。
変数screen-dimensions-nxm
は、指定されたサイズに正確にマッチするときだけ使用され、サポートされた次に大きなサイズを検索するときには、無視されます。上記の例ではVGAは38x80のサイズをサポートし、screen-dimensions-38x80
を適切な値で定義していても、36x80フレームを要求すると40x80のスクリーンになります。この場合サイズを38x80にするには、screen-dimensions-36x80
という名前の変数に、screen-dimensions-38x80
と同じビデオもーどの値をセットして、これを行なうことができます。
MS-DOSでフレームサイズを変更すると、他のすべてのフレームも新しいサイズに変更されます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
MS-DOSでは、ファイル名は大文字小文字を区別せず8文字に制限され、それに加えてオプションでピリオドと追加の3文字を使用できます。Emacsは他のオペレーティングシステムで、ファイル名を処理するためのこれらの制限を充分認識しています。たとえばファイル名の前のドット‘.’はMS-DOSでは無効なので、Emacsはそれらを透過的にアンダースコアー‘_’に変換します。したがって、MS-DOSではデフォルトのinitファイル (Emacs初期化ファイルを参照してください) は_emacsと呼ばれます。ピリオドの前後の余分な文字は、一般的にMS-DOS自身により無視されます。したがってファイルLongFileName.EvenLongerExtensionをvisitした場合、それは暗黙にlongfile.eveとなりますが、それでもEmacsはモードラインに長いファイル名を表示し続けます。それ以外ではMS-DOSで有効なファイル名を指定するのはユーザーの責任です。上記の透過的な変換は、Emacsに組み込まれたファイル名だけにたいして機能します。
MS-DOSでのファイル名にたいする上記の制限は、オリジナルのファイル名の文字を失うことなしにバックアップファイルの名前を構築するのを、ほとんど不可能にします (単一または番号つきバックアップを参照してください)。 たとえばdocs.txtというファイルにたいするバックアップファイルの名前は、単一のバックアップを使用しているときでさえdocs.tx~になります。
Windows 9X、Windows ME、Windows
2000/XPでEmacsをDOSアプリケーションとして実行する場合、長いファイル名のサポートをオンに切り替えることができます。これを行なうと、Emacsはファイル名を切り詰めたり、ファイル名を小文字に変換するかわりに、指定された文字通りのファイル名を使用します。長いファイル名のサポートを有効にするには、Emacsを開始する前に、環境変数LFN
を‘y’にセットします。残念なことにWindows
NTはDOSプログラムが長いファイル名にアクセスすることを許さないので、MS-DOSにたいしてビルドされたEmacsは、短い8+3のエイリアスだけを見ることになります。
MS-DOSにはホームディレクトリーという概念がないので、MS-DOS上のEmacsはEmacsがインストールされた場所が、環境変数HOME
の値であるかのように振る舞います。つまりEmacsのバイナリーemacs.exeがディレクトリーc:/utils/emacs/binにある場合、EmacsはHOME
が‘c:/utils/emacs’にセットされているかのように動作します。この場所は特に、Emacsがinitファイル_emacsを探す場所でもあります。これを念頭におけば、GNUやUnixのように、ファイル名の中で‘~’をホームディレクトリーのエイリアスとして使用できます。Emacsを開始する前に、その環境でHOME
変数をセットすることもできます。この変数の値は、上記のデフォルトの振る舞いをオーバーライドします。
MS-DOSのEmacsは、/devという名前を特別に使います。なぜならGJGPPのエミュレーターライブラリーの機能は、I/Oデバイスの名前がそのディレクトリーにあるかのように振る舞うからです。わたしたちは任意のディスクにたいして、/devという名前のディレクトリーの使用を避けることを推奨します。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
lpr-buffer
(ハードコピーの印刷を参照してください)や、ps-print-buffer
(PostScriptのハードコピーを参照してください)
のようなコマンドは、POSIXスタイルのlpr
プログラムが利用できない場合、出力を1つのプリンターポートに送ることにより、MS-DOSで機能します。同じEmacs変数がすべてのシステムでの印刷を制御しますが、MS-DOSでは異なるデフォルト値をもつ場合もあります。
ネットワークプリンターでの印刷のセットアップに関する詳細は、MS-Windowsでの印刷を参照してください 。
プリンターが同じlocaleにたいして異なるエンコーディングを使用するWindows機に接続されている場合にも、非ASCIIテキストのDOSコードページによるエンコーディングを期待するプリンターがいくつかあります。たとえばlocaleがLatin-1のとき、Windowsはコードページ1252を使用しますが、DOSはコードページ850を使用します。MS-DOSでの国際化サポートを参照してください。Windowsからそのようなプリンターで印刷する場合、M-x
lpr-bufferの前に、C-x RET c
(universal-coding-system-argument
)を使用することができます。その場合、Emacsは指定したDOSコードページにテキストを変換します。たとえばC-x
RET c cp850-dos RET M-x lpr-region
RETは、リージョンをコードページ850のエンコーディングに変換して印刷します。
MS-DOSでは後方互換のため、dos-printer
(dos-ps-printer
)に値がセットされている場合、printer-name
(ps-printer-name
)の値をオーバーライドします。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
MS-DOSのEmacsは、異なる文字セット同士を変換するためのコーディングシステムを含む、GNU、Unix、その他のプラットフォームでサポートされているのと同じ国際化文字セットをサポートします (国際化文字セットのサポートを参照してください)。 しかしMS-DOSと、MS-Windowsや他のシステムとの間の非互換により、このサポートには知っておくべきいくつかのDOS特有の状況があります。このセクションではこれらの状況について説明します。
以下の説明では、主にEmacsのMS-DOSポートについて、特に経験豊富なEmacsユーザーにとって密接に関係する部分について説明します。
カレントDOSコードページにたいして、適切なEmacsディスプレーとコーディングシステムをセットアップします。
MS-DOSは常に256文字の文字セットをサポートするようにデザインされていますが、それからさまざまな文字セットを選択できます。選択できる文字セットはDOSコードページとして知られます。各コードページはすべて128文字のASCII文字を含みますが、それ以外の128文字(コード128から255)は、コードページごとに異なります。各コードページは850、862のように3桁の数字で識別されます。
同時に複数のフォントを使用できるXとは対照的に、通常MS-DOSは1つのセッションで複数のコードページを使用できません。MS-DOSはシステムの開始時に1つのコードページをロードするようにデザインされており、それを変更するには再起動が必要です28。MS-Windowsのような他のシステムでDOSの実行可能ファイルを実行するときも、ほぼ同じ制限が適用されます。
MS-DOSでのマルチバイト処理にたいして、Emacsは選択されたDOSコードページで表示できる文字を知る必要があります。そのため起動後に、選択されたコードページ番号を得るためにシステムに問い合わせを行い、その番号を変数dos-codepage
に格納します。実際のコードページは異なっていても、カレントコードページにたいしてデフォルト値437を返すシステムがいくつかあります(通常これはディスプレーハードウェアーに組み込まれているコードページを使用しているとき発生します)。initファイルで変数dos-codepage
をセットすることにより、Emacsに別のコードページを指定できます。
マルチバイトのEmacsは特定のDOSコードページ — 日本語コードページ932のような極東アジアのスクリプトを表示できるものや、1つのISO 8859文字セットをエンコードするものがあります。
極東アジアのコードページは、それらの国々にたいするMULE文字セットの1つを直接表示できるので、Emacsはそのコードページでサポートされる適切な端末コーディングシステムを使用するためにセットアップを行なうだけです。このセクションの残りの部分で説明する特別な機能は、主にISO 8859文字セットをエンコードするコードページに関するものです。
ISO文字セットの1つに対応するコードページにたいして、Emacsはそのコードページ番号にもとづいた文字セットを認識します。Emacsは、カレントコードページを使用したファイルの読み書きをサポートするためのコーディングシステムを自動的に作成して、そのコーディングシステムをデフォルトとして使用します。このコーディングシステムの名前はcpnnn
で、nnnはコードページ番号です。29
cpnnn
というコーディングシステムはすべて、モードラインのニーモニックに文字‘D’
(“DOS”)を使用します。端末のコーディングシステムと、ファイルI/Oにたいするデフォルトのコーディングシステムは、開始時に適切なcpnnn
コーディングシステムにセットされているので、普通はMS-DOSのモードラインは‘-DD\-’で始まります。
モードラインを参照してください。
極東アジアのDOS端末はcpnnn
コーディングシステムを使用しないので、Emacsデフォルトのモードラインが初期表示されます。
コードページ番号は使用しているスクリプトも示すので、Emacsはそのスクリプトにたいする言語環境を選択するために、自動的にset-language-environment
を実行します
(言語環境を参照してください)。
バッファーにISO 8859文字セット以外の文字が含まれていて、それが選択されたDOSコードページでサポートされていない場合、EmacsはASCII文字のシーケンスを使用して、それを表示します。たとえばカレントコードページが文字‘ò’(grave accentつきの小文字の‘o’)にたいするグリフをもたない場合、その文字は‘{`o}’と表示されます。ここで中カッコ(braces)はそれが1つの文字であることを示す指標です(これはギリシャ文字やヘブライのアルファベットのような非ラテン文字にたいして不格好に見えるかもしれませんが、その言語を知る人はこれを読むことができます)。その文字がスクリーンの複数列を占めていても、それは単なる1つの文字であり、Emacsコマンドは、それを1文字として扱います。
MS-Windowsは独自のコードページを提供し、同じロケールにたいするDOSコードページとは異なります。たとえばDOSコードページと同じ文字をサポートするWindowsコードページは1252で、DOSコードページ855と同じ文字をサポートするWindowsコードページは1252、などです。EmacsのMS-Windowsバージョンを‘-nw’オプションで呼び出したとき、Emacsはカレントコードページを使用して表示を行ないます。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
MS-DOSは単一プロセスの“オペレーティングシステム”なので、非同期サブプロセスは利用できません。特にShellモードと、その変種は機能しません。非同期サブプロセスを使用するEmacs機能のほとんどは、ShellモードやGUDを含めて、MS-DOSでは動作しません。疑わしいときは、コマンドを実行してみれば、機能しない場合は非同期プロセスがサポートされない旨を告げるメッセージが出力されます。
M-x compileによるEmacsでのコンパイル、M-x grepによるファイル検索、M-x diffによるファイル間の相違の表示は、同期的に内部プロセスを実行することにより機能します。これはその内部プロセスが終了するまで、編集を行なうことができないことを意味します。
ispell
プログラムの同期呼び出しにたいする特別なサポートにより、スペルチェックも機能します。これは他のプラットフォームでの非同期呼び出しより遅くなります。
MS-DOSでは、機能しないShellモードのかわりに、M-x eshellコマンドを使用することができます。これはPOSIX-likeなシェルを、Emacs Lispで実装したEshellパッケージを呼び出します。
対照的に、ネイティブなWindowsアプリケーションとしてコンパイルされたEmacsは、非同期サブプロセスをサポートします Windows 9X/MEおよびWindows NT/2000/XP/Vista/7/8/10でのサブプロセスを参照してください。
lpr-buffer
(ハードコピーの印刷を参照)と、ps-print-buffer
(PostScriptのハードコピーを参照)は、プリンターポートの1つに出力を送ることにより、MS-DOSでも機能します。印刷とMS-DOSを参照してください。
MS-DOSでサブプロセスを同期実行する場合は、そのプログラムが終了することと、そのプログラムがキーボード入力の読み取りを試みないことを確認してください。プログラムが自分で終了しない場合、それを終了させることはできません。なぜならMS-DOSはプロセスを終了させる一般的な方法を提供しないからです。このような場合、C-cやC-Breakを押すことが助けになる場合もあります。
MS-DOSでは、他のマシンにあるファイルへのアクセスもサポートされません。何らかのネットワークリダイレクト処理により、MS-DOSにネットワークアクセス機能が組み込まれていない限り、メール送信、ウェブ閲覧、リモートログインなどのようなネットワーク指向のコマンドは機能しません。
MS-DOSのDiredはls-lisp
パッケージを使用します
(MS-Windowsでのls
のエミュレーションを参照してください)。
したがってMS-DOSのDiredは、変数dired-listing-switches
に記述できる、利用可能なオプションは限られます。機能するオプションは‘-A’、‘-a’、‘-c’、‘-i’、‘-r’、‘-S’、‘-s’、‘-t’、‘-u’です。
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The GNU Manifesto which appears below was written by Richard Stallman at the beginning of the GNU project, to ask for participation and support. For the first few years, it was updated in minor ways to account for developments, but now it seems best to leave it unchanged as most people have seen it.
Since that time, we have learned about certain common misunderstandings that different wording could help avoid. Footnotes added in 1993 help clarify these points.
For up-to-date information about available GNU software, please see our web site, https://www.gnu.org. For software tasks and other ways to contribute, see https://www.gnu.org/help.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
GNU, which stands for Gnu’s Not Unix, is the name for the complete Unix-compatible software system which I am writing so that I can give it away free to everyone who can use it.30 Several other volunteers are helping me. Contributions of time, money, programs and equipment are greatly needed.
So far we have an Emacs text editor with Lisp for writing editor commands, a source level debugger, a yacc-compatible parser generator, a linker, and around 35 utilities. A shell (command interpreter) is nearly completed. A new portable optimizing C compiler has compiled itself and may be released this year. An initial kernel exists but many more features are needed to emulate Unix. When the kernel and compiler are finished, it will be possible to distribute a GNU system suitable for program development. We will use TeX as our text formatter, but an nroff is being worked on. We will use the free, portable X window system as well. After this we will add a portable Common Lisp, an Empire game, a spreadsheet, and hundreds of other things, plus on-line documentation. We hope to supply, eventually, everything useful that normally comes with a Unix system, and more.
GNU will be able to run Unix programs, but will not be identical to Unix. We will make all improvements that are convenient, based on our experience with other operating systems. In particular, we plan to have longer file names, file version numbers, a crashproof file system, file name completion perhaps, terminal-independent display support, and perhaps eventually a Lisp-based window system through which several Lisp programs and ordinary Unix programs can share a screen. Both C and Lisp will be available as system programming languages. We will try to support UUCP, MIT Chaosnet, and Internet protocols for communication.
GNU is aimed initially at machines in the 68000/16000 class with virtual memory, because they are the easiest machines to make it run on. The extra effort to make it run on smaller machines will be left to someone who wants to use it on them.
To avoid horrible confusion, please pronounce the “G” in the word “GNU” when it is the name of this project.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
I consider that the golden rule requires that if I like a program I must share it with other people who like it. Software sellers want to divide the users and conquer them, making each user agree not to share with others. I refuse to break solidarity with other users in this way. I cannot in good conscience sign a nondisclosure agreement or a software license agreement. For years I worked within the Artificial Intelligence Lab to resist such tendencies and other inhospitalities, but eventually they had gone too far: I could not remain in an institution where such things are done for me against my will.
So that I can continue to use computers without dishonor, I have decided to put together a sufficient body of free software so that I will be able to get along without any software that is not free. I have resigned from the AI lab to deny MIT any legal excuse to prevent me from giving GNU away.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Unix is not my ideal system, but it is not too bad. The essential features of Unix seem to be good ones, and I think I can fill in what Unix lacks without spoiling them. And a system compatible with Unix would be convenient for many other people to adopt.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
GNU is not in the public domain. Everyone will be permitted to modify and redistribute GNU, but no distributor will be allowed to restrict its further redistribution. That is to say, proprietary modifications will not be allowed. I want to make sure that all versions of GNU remain free.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
I have found many other programmers who are excited about GNU and want to help.
Many programmers are unhappy about the commercialization of system software. It may enable them to make more money, but it requires them to feel in conflict with other programmers in general rather than feel as comrades. The fundamental act of friendship among programmers is the sharing of programs; marketing arrangements now typically used essentially forbid programmers to treat others as friends. The purchaser of software must choose between friendship and obeying the law. Naturally, many decide that friendship is more important. But those who believe in law often do not feel at ease with either choice. They become cynical and think that programming is just a way of making money.
By working on and using GNU rather than proprietary programs, we can be hospitable to everyone and obey the law. In addition, GNU serves as an example to inspire and a banner to rally others to join us in sharing. This can give us a feeling of harmony which is impossible if we use software that is not free. For about half the programmers I talk to, this is an important happiness that money cannot replace.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
I am asking computer manufacturers for donations of machines and money. I’m asking individuals for donations of programs and work.
One consequence you can expect if you donate machines is that GNU will run on them at an early date. The machines should be complete, ready to use systems, approved for use in a residential area, and not in need of sophisticated cooling or power.
I have found very many programmers eager to contribute part-time work for GNU. For most projects, such part-time distributed work would be very hard to coordinate; the independently-written parts would not work together. But for the particular task of replacing Unix, this problem is absent. A complete Unix system contains hundreds of utility programs, each of which is documented separately. Most interface specifications are fixed by Unix compatibility. If each contributor can write a compatible replacement for a single Unix utility, and make it work properly in place of the original on a Unix system, then these utilities will work right when put together. Even allowing for Murphy to create a few unexpected problems, assembling these components will be a feasible task. (The kernel will require closer communication and will be worked on by a small, tight group.)
If I get donations of money, I may be able to hire a few people full or part time. The salary won’t be high by programmers’ standards, but I’m looking for people for whom building community spirit is as important as making money. I view this as a way of enabling dedicated people to devote their full energies to working on GNU by sparing them the need to make a living in another way.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Once GNU is written, everyone will be able to obtain good system software free, just like air.31
This means much more than just saving everyone the price of a Unix license. It means that much wasteful duplication of system programming effort will be avoided. This effort can go instead into advancing the state of the art.
Complete system sources will be available to everyone. As a result, a user who needs changes in the system will always be free to make them himself, or hire any available programmer or company to make them for him. Users will no longer be at the mercy of one programmer or company which owns the sources and is in sole position to make changes.
Schools will be able to provide a much more educational environment by encouraging all students to study and improve the system code. Harvard’s computer lab used to have the policy that no program could be installed on the system if its sources were not on public display, and upheld it by actually refusing to install certain programs. I was very much inspired by this.
Finally, the overhead of considering who owns the system software and what one is or is not entitled to do with it will be lifted.
Arrangements to make people pay for using a program, including licensing of copies, always incur a tremendous cost to society through the cumbersome mechanisms necessary to figure out how much (that is, which programs) a person must pay for. And only a police state can force everyone to obey them. Consider a space station where air must be manufactured at great cost: charging each breather per liter of air may be fair, but wearing the metered gas mask all day and all night is intolerable even if everyone can afford to pay the air bill. And the TV cameras everywhere to see if you ever take the mask off are outrageous. It’s better to support the air plant with a head tax and chuck the masks.
Copying all or parts of a program is as natural to a programmer as breathing, and as productive. It ought to be as free.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
“Nobody will use it if it is free, because that means they can’t rely on any support.”
“You have to charge for the program to pay for providing the support.”
If people would rather pay for GNU plus service than get GNU free without service, a company to provide just service to people who have obtained GNU free ought to be profitable.32
We must distinguish between support in the form of real programming work and mere handholding. The former is something one cannot rely on from a software vendor. If your problem is not shared by enough people, the vendor will tell you to get lost.
If your business needs to be able to rely on support, the only way is to have all the necessary sources and tools. Then you can hire any available person to fix your problem; you are not at the mercy of any individual. With Unix, the price of sources puts this out of consideration for most businesses. With GNU this will be easy. It is still possible for there to be no available competent person, but this problem cannot be blamed on distribution arrangements. GNU does not eliminate all the world’s problems, only some of them.
Meanwhile, the users who know nothing about computers need handholding: doing things for them which they could easily do themselves but don’t know how.
Such services could be provided by companies that sell just hand-holding and repair service. If it is true that users would rather spend money and get a product with service, they will also be willing to buy the service having got the product free. The service companies will compete in quality and price; users will not be tied to any particular one. Meanwhile, those of us who don’t need the service should be able to use the program without paying for the service.
“You cannot reach many people without advertising, and you must charge for the program to support that.”
“It’s no use advertising a program people can get free.”
There are various forms of free or very cheap publicity that can be used to inform numbers of computer users about something like GNU. But it may be true that one can reach more microcomputer users with advertising. If this is really so, a business which advertises the service of copying and mailing GNU for a fee ought to be successful enough to pay for its advertising and more. This way, only the users who benefit from the advertising pay for it.
On the other hand, if many people get GNU from their friends, and such companies don’t succeed, this will show that advertising was not really necessary to spread GNU. Why is it that free market advocates don’t want to let the free market decide this?33
“My company needs a proprietary operating system to get a competitive edge.”
GNU will remove operating system software from the realm of competition. You will not be able to get an edge in this area, but neither will your competitors be able to get an edge over you. You and they will compete in other areas, while benefiting mutually in this one. If your business is selling an operating system, you will not like GNU, but that’s tough on you. If your business is something else, GNU can save you from being pushed into the expensive business of selling operating systems.
I would like to see GNU development supported by gifts from many manufacturers and users, reducing the cost to each.34
“Don’t programmers deserve a reward for their creativity?”
If anything deserves a reward, it is social contribution. Creativity can be a social contribution, but only in so far as society is free to use the results. If programmers deserve to be rewarded for creating innovative programs, by the same token they deserve to be punished if they restrict the use of these programs.
“Shouldn’t a programmer be able to ask for a reward for his creativity?”
There is nothing wrong with wanting pay for work, or seeking to maximize one’s income, as long as one does not use means that are destructive. But the means customary in the field of software today are based on destruction.
Extracting money from users of a program by restricting their use of it is destructive because the restrictions reduce the amount and the ways that the program can be used. This reduces the amount of wealth that humanity derives from the program. When there is a deliberate choice to restrict, the harmful consequences are deliberate destruction.
The reason a good citizen does not use such destructive means to become wealthier is that, if everyone did so, we would all become poorer from the mutual destructiveness. This is Kantian ethics; or, the Golden Rule. Since I do not like the consequences that result if everyone hoards information, I am required to consider it wrong for one to do so. Specifically, the desire to be rewarded for one’s creativity does not justify depriving the world in general of all or part of that creativity.
“Won’t programmers starve?”
I could answer that nobody is forced to be a programmer. Most of us cannot manage to get any money for standing on the street and making faces. But we are not, as a result, condemned to spend our lives standing on the street making faces, and starving. We do something else.
But that is the wrong answer because it accepts the questioner’s implicit assumption: that without ownership of software, programmers cannot possibly be paid a cent. Supposedly it is all or nothing.
The real reason programmers will not starve is that it will still be possible for them to get paid for programming; just not paid as much as now.
Restricting copying is not the only basis for business in software. It is the most common basis because it brings in the most money. If it were prohibited, or rejected by the customer, software business would move to other bases of organization which are now used less often. There are always numerous ways to organize any kind of business.
Probably programming will not be as lucrative on the new basis as it is now. But that is not an argument against the change. It is not considered an injustice that sales clerks make the salaries that they now do. If programmers made the same, that would not be an injustice either. (In practice they would still make considerably more than that.)
“Don’t people have a right to control how their creativity is used?”
“Control over the use of one’s ideas” really constitutes control over other people’s lives; and it is usually used to make their lives more difficult.
People who have studied the issue of intellectual property rights35 carefully (such as lawyers) say that there is no intrinsic right to intellectual property. The kinds of supposed intellectual property rights that the government recognizes were created by specific acts of legislation for specific purposes.
For example, the patent system was established to encourage inventors to disclose the details of their inventions. Its purpose was to help society rather than to help inventors. At the time, the life span of 17 years for a patent was short compared with the rate of advance of the state of the art. Since patents are an issue only among manufacturers, for whom the cost and effort of a license agreement are small compared with setting up production, the patents often do not do much harm. They do not obstruct most individuals who use patented products.
The idea of copyright did not exist in ancient times, when authors frequently copied other authors at length in works of non-fiction. This practice was useful, and is the only way many authors’ works have survived even in part. The copyright system was created expressly for the purpose of encouraging authorship. In the domain for which it was invented—books, which could be copied economically only on a printing press—it did little harm, and did not obstruct most of the individuals who read the books.
All intellectual property rights are just licenses granted by society because it was thought, rightly or wrongly, that society as a whole would benefit by granting them. But in any particular situation, we have to ask: are we really better off granting such license? What kind of act are we licensing a person to do?
The case of programs today is very different from that of books a hundred years ago. The fact that the easiest way to copy a program is from one neighbor to another, the fact that a program has both source code and object code which are distinct, and the fact that a program is used rather than read and enjoyed, combine to create a situation in which a person who enforces a copyright is harming society as a whole both materially and spiritually; in which a person should not do so regardless of whether the law enables him to.
“Competition makes things get done better.”
The paradigm of competition is a race: by rewarding the winner, we encourage everyone to run faster. When capitalism really works this way, it does a good job; but its defenders are wrong in assuming it always works this way. If the runners forget why the reward is offered and become intent on winning, no matter how, they may find other strategies—such as, attacking other runners. If the runners get into a fist fight, they will all finish late.
Proprietary and secret software is the moral equivalent of runners in a fist fight. Sad to say, the only referee we’ve got does not seem to object to fights; he just regulates them (“For every ten yards you run, you can fire one shot”). He really ought to break them up, and penalize runners for even trying to fight.
“Won’t everyone stop programming without a monetary incentive?”
Actually, many people will program with absolutely no monetary incentive. Programming has an irresistible fascination for some people, usually the people who are best at it. There is no shortage of professional musicians who keep at it even though they have no hope of making a living that way.
But really this question, though commonly asked, is not appropriate to the situation. Pay for programmers will not disappear, only become less. So the right question is, will anyone program with a reduced monetary incentive? My experience shows that they will.
For more than ten years, many of the world’s best programmers worked at the Artificial Intelligence Lab for far less money than they could have had anywhere else. They got many kinds of non-monetary rewards: fame and appreciation, for example. And creativity is also fun, a reward in itself.
Then most of them left when offered a chance to do the same interesting work for a lot of money.
What the facts show is that people will program for reasons other than riches; but if given a chance to make a lot of money as well, they will come to expect and demand it. Low-paying organizations do poorly in competition with high-paying ones, but they do not have to do badly if the high-paying ones are banned.
“We need the programmers desperately. If they demand that we stop helping our neighbors, we have to obey.”
You’re never so desperate that you have to obey this sort of demand. Remember: millions for defense, but not a cent for tribute!
“Programmers need to make a living somehow.”
In the short run, this is true. However, there are plenty of ways that programmers could make a living without selling the right to use a program. This way is customary now because it brings programmers and businessmen the most money, not because it is the only way to make a living. It is easy to find other ways if you want to find them. Here are a number of examples.
A manufacturer introducing a new computer will pay for the porting of operating systems onto the new hardware.
The sale of teaching, hand-holding and maintenance services could also employ programmers.
People with new ideas could distribute programs as freeware36, asking for donations from satisfied users, or selling hand-holding services. I have met people who are already working this way successfully.
Users with related needs can form users’ groups, and pay dues. A group would contract with programming companies to write programs that the group’s members would like to use.
All sorts of development can be funded with a Software Tax:
Suppose everyone who buys a computer has to pay x percent of the price as a software tax. The government gives this to an agency like the NSF to spend on software development.
But if the computer buyer makes a donation to software development himself, he can take a credit against the tax. He can donate to the project of his own choosing—often, chosen because he hopes to use the results when it is done. He can take a credit for any amount of donation up to the total tax he had to pay.
The total tax rate could be decided by a vote of the payers of the tax, weighted according to the amount they will be taxed on.
The consequences:
- The computer-using community supports software development.
- This community decides what level of support is needed.
- Users who care which projects their share is spent on can choose this for themselves.
In the long run, making programs free is a step toward the post-scarcity world, where nobody will have to work very hard just to make a living. People will be free to devote themselves to activities that are fun, such as programming, after spending the necessary ten hours a week on required tasks such as legislation, family counseling, robot repair and asteroid prospecting. There will be no need to be able to make a living from programming.
We have already greatly reduced the amount of work that the whole society must do for its actual productivity, but only a little of this has translated itself into leisure for workers because much nonproductive activity is required to accompany productive activity. The main causes of this are bureaucracy and isometric struggles against competition. Free software will greatly reduce these drains in the area of software production. We must do this, in order for technical gains in productivity to translate into less work for us.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
An abbrev is a text string that expands into a different text string when present in the buffer. For example, you might define a few letters as an abbrev for a long phrase that you want to insert frequently. See section abbrev(略語).
Aborting means getting out of a recursive edit (q.v.). The commands C-] and M-x top-level are used for this. See section 中止と中断.
Setting the mark (q.v.) at a position in the text also activates it. When the mark is active, we call the region an active region. See section マークとリージョン.
Alt is the name of a modifier bit that a keyboard input character may have. To make a character Alt, type it while holding down the Alt key. Such characters are given names that start with Alt- (usually written A- for short). (Note that many terminals have a key labeled Alt that is really a Meta key.) See section Alt.
An ASCII character is either an ASCII control character or an ASCII printing character. See section ユーザー入力の種類.
An ASCII control character is the Control version of an upper-case letter, or the Control version of one of the characters ‘@[\]^_?’.
ASCII letters, digits, space, and the following punctuation characters: ‘!@#$%^&*()_-+=|\~`{}[]:;"'<>,.?/’.
Auto Fill mode is a minor mode (q.v.) in which text that you insert is automatically broken into lines of a given maximum width. See section テキストのフィル.
Auto saving is the practice of periodically saving the contents of an Emacs buffer in a specially-named file, so that the information will be preserved if the buffer is lost due to a system error or user error. See section 自動保存-災害にたいする防御.
Emacs can automatically load Lisp libraries when a Lisp program requests a function from those libraries. This is called “autoloading”. See section EmacsのためのLispコードによるライブラリー.
A backtrace is a trace of a series of function calls showing how a program arrived at a certain point. It is used mainly for finding and correcting bugs (q.v.). Emacs can display a backtrace when it signals an error or when you type C-g (see Glossary---Quitting). See section バグレポートのためのチェックリスト.
A backup file records the contents that a file had before the current editing session. Emacs makes backup files automatically to help you track down or cancel changes you later regret making. See section バックアップファイル.
Emacs can balance parentheses (or other matching delimiters) either manually or automatically. You do manual balancing with the commands to move over parenthetical groupings (see section カッコ構造の移動). Automatic balancing works by blinking or highlighting the delimiter that matches the one you just inserted, or inserting the matching delimiter for you (see section Matching Parens).
A balanced expression is a syntactically recognizable expression, such as a symbol, number, string constant, block, or parenthesized expression in C. See section Balanced Expressions.
See Glossary---Tooltips.
A base buffer is a buffer whose text is shared by an indirect buffer (q.v.).
Some human languages, such as English, are written from left to right. Others, such as Arabic, are written from right to left. Emacs supports both of these forms, as well as any mixture of them—this is “bidirectional text”. See section 双方向の編集.
To bind a key sequence means to give it a binding (q.v.). See section 対話的なキーバインディングの変更.
A key sequence gets its meaning in Emacs by having a binding, which is a command (q.v.)—a Lisp function that is run when you type that sequence. See section Binding. Customization often involves rebinding a character to a different command function. The bindings of all key sequences are recorded in the keymaps (q.v.). See section キーマップ.
Blank lines are lines that contain only whitespace. Emacs has several commands for operating on the blank lines in the buffer. See section 空行.
Bookmarks are akin to registers (q.v.) in that they record positions in buffers to which you can return later. Unlike registers, bookmarks persist between Emacs sessions. See section ブックマーク.
A border is a thin space along the edge of the frame, used just for spacing, not for displaying anything. An Emacs frame has an ordinary external border, outside of everything including the menu bar, plus an internal border that surrounds the text windows, their scroll bars and fringes, and separates them from the menu bar and tool bar. You can customize both borders with options and resources (see section 内枠ボーダーと外枠ボーダー). Borders are not the same as fringes (q.v.).
The buffer is the basic editing unit; one buffer corresponds to one text being edited. You normally have several buffers, but at any time you are editing only one, the current buffer, though several can be visible when you are using multiple windows or frames (q.v.). Most buffers are visiting (q.v.) some file. See section 複数バッファーの使用.
Emacs keeps a buffer selection history that records how recently each Emacs buffer has been selected. This is used for choosing which buffer to select. See section 複数バッファーの使用.
A bug is an incorrect or unreasonable behavior of a program, or inaccurate or confusing documentation. Emacs developers treat bug reports, both in Emacs code and its documentation, very seriously and ask you to report any bugs you find. See section バグの報告.
A button down event is the kind of input event (q.v.) generated right away when you press down on a mouse button. See section マウスボタンのリバインド.
See Glossary---Default.
Short for “confer” in Latin, which means “compare with” or “compare to”. The second variant, “c.f.”, is a widespread misspelling.
C- in the name of a character is an abbreviation for Control. See section C-.
C-M- in the name of a character is an abbreviation for Control-Meta. If your terminal lacks a real Meta key, you type a Control-Meta character by typing ESC and then typing the corresponding Control character. See section C-M-.
Case conversion means changing text from upper case to lower case or vice versa. See section 大文字小文字変換コマンド.
Case folding means ignoring the differences between case variants of the same letter: upper-case, lower-case, and title-case. Emacs performs case folding by default in text search. See section 検索中のLaxマッチング.
Characters form the contents of an Emacs buffer. Also, key sequences (q.v.) are usually made up of characters (though they may include other input events as well). See section ユーザー入力の種類.
Character folding means ignoring differences between similarly looking
characters, such as between a
, and ä
and á
.
Emacs performs character folding by default in text search. See section 検索中のLaxマッチング.
Emacs supports a number of character sets, each of which represents a particular alphabet or script. See section 国際化文字セットのサポート.
A click event is the kind of input event (q.v.) generated when you press a mouse button and release it without moving the mouse. See section マウスボタンのリバインド.
See Glossary---Server.
A clipboard is a buffer provided by the window system for transferring text between applications. On the X Window System, the clipboard is provided in addition to the primary selection (q.v.); on MS-Windows and Mac, the clipboard is used instead of the primary selection. See section クリップボードを使う.
A coding system is a way to encode text characters in a file or in a stream of information. Emacs has the ability to convert text to or from a variety of coding systems when reading or writing it. See section コーディングシステム.
A command is a Lisp function specially defined to be able to serve as a key binding in Emacs or to be invoked by its name (see Glossary---Command Name). When you type a key sequence (q.v.), its binding (q.v.) is looked up in the relevant keymaps (q.v.) to find the command to run. See section キーとコマンド.
A command name is the name of a Lisp symbol that is a command (see section キーとコマンド). You can invoke any command by its name using M-x (see section Running Commands by Name).
A comment is text in a program which is intended only for humans reading the program, and which is specially marked so that it will be ignored when the program is loaded or compiled. Emacs offers special commands for creating, aligning and killing comments. See section コメントの操作.
Common Lisp is a dialect of Lisp (q.v.) much larger and more powerful than Emacs Lisp. Emacs provides a subset of Common Lisp in the CL package. See Overview in Common Lisp Extensions.
Compilation is the process of creating an executable program from source code. Emacs has commands for compiling files of Emacs Lisp code (see Byte Compilation in the Emacs Lisp Reference Manual) and programs in C and other languages (see section Emacs下でのコンパイルの実行). Byte-compiled Emacs Lisp code loads and executes faster.
A complete key is a key sequence that fully specifies one action to be performed by Emacs. For example, X and C-f and C-x m are complete keys. Complete keys derive their meanings from being bound (see Glossary---Bind) to commands (q.v.). Thus, X is conventionally bound to a command to insert ‘X’ in the buffer; C-x m is conventionally bound to a command to begin composing a mail message. See section キー.
Completion is what Emacs does when it automatically expands an abbreviation for a name into the entire name. Completion is done for minibuffer (q.v.) arguments when the set of possible valid inputs is known; for example, on command names, buffer names, and file names. Completion usually occurs when TAB, SPC or RET is typed. See section 補完.
When a line of text is longer than the width of the window, it normally takes up more than one screen line when displayed (but see Glossary---Truncation). We say that the text line is continued, and all screen lines used for it after the first are called continuation lines. See section 継続行. A related Emacs feature is filling (q.v.).
A control character is a character that you type by holding down the Ctrl key. Some control characters also have their own keys, so that you can type them without using Ctrl. For example, RET, TAB, ESC and DEL are all control characters. See section ユーザー入力の種類.
A copyleft is a notice giving the public legal permission to redistribute and modify a program or other work of art, but requiring modified versions to carry similar permission. Copyright is normally used to keep users divided and helpless; with copyleft we turn that around to empower users and encourage them to cooperate.
The particular form of copyleft used by the GNU project is called the GNU General Public License. See section GNU GENERAL PUBLIC LICENSE.
The Ctrl or control key is what you hold down in order to enter a control character (q.v.). See Glossary---C-.
The current buffer in Emacs is the Emacs buffer on which most editing commands operate. You can select any Emacs buffer as the current one. See section 複数バッファーの使用.
The current line is the line that point is on (see section ポイント).
The current paragraph is the paragraph that point is in. If point is between two paragraphs, the current paragraph is the one that follows point. See section パラグラフ.
The current defun is the defun (q.v.) that point is in. If point is between defuns, the current defun is the one that follows point. See section トップレベルの定義、またはdefun.
The cursor is the rectangle on the screen which indicates the position (called point; q.v.) at which insertion and deletion takes place. The cursor is on or under the character that follows point. Often people speak of “the cursor” when, strictly speaking, they mean “point”. See section Cursor.
Customization is making minor changes in the way Emacs works, to reflect your preferences or needs. It is often done by setting variables (see section 変数) or faces (see section フェイスのカスタマイズ), or by rebinding key sequences (see section キーマップ).
See Glossary---Killing, and Glossary---Yanking.
A daemon is a standard term for a system-level process that runs in the
background. Daemons are often started when the system first starts up.
When Emacs runs in daemon-mode, it does not
open a display. You connect to it with the
emacsclient
program. See section サーバーとしてのEmacsの使用.
The default for an argument is the value that will be assumed if you do not specify one. When the minibuffer is used to read an argument, the default argument is used if you just type RET. See section ミニバッファー.
A default is the value that is used for a certain purpose when you do not explicitly specify a value to use.
When you specify a file name that does not start with ‘/’ or ‘~’, it is interpreted relative to the current buffer’s default directory. (On MS systems, file names that start with a drive letter ‘x:’ are treated as absolute, not relative.) See section Default Directory.
A defun is a major definition at the top level in a program. The name
“defun” comes from Lisp, where most such definitions use the construct
defun
. See section トップレベルの定義、またはdefun.
DEL is a character that runs the command to delete one character of text before the cursor. It is typically either the Delete key or the BACKSPACE key, whichever one is easy to type. See section DEL.
Deletion means erasing text without copying it into the kill ring (q.v.). The alternative is killing (q.v.). See section Deletion.
Deleting a file means erasing it from the file system. (Note that some systems use the concept of a trash can, or recycle bin, to allow you to undelete files.) See section Miscellaneous File Operations.
Deleting a message (in Rmail, and other mail clients) means flagging it to be eliminated from your mail file. Until you expunge (q.v.) the Rmail file, you can still undelete the messages you have deleted. See section メッセージの削除.
Deleting a window means eliminating it from the screen. Other windows expand to use up the space. The text that was in the window is not lost, and you can create a new window with the same dimensions as the old if you wish. See section 複数ウィンドウ.
File directories are named collections in the file system, within which you can place individual files or subdirectories. They are sometimes referred to as “folders”. See section ファイルディレクトリー.
A directory local variable is a local variable (q.v.) that applies to all the files within a certain directory. See section ディレクトリーごとのローカル変数.
On GNU and other Unix-like systems, directory names are strings that end in ‘/’. For example, /no-such-dir/ is a directory name whereas /tmp is not, even though /tmp names a file that happens to be a directory. On MS-Windows the relationship is more complicated. See Directory Names in the Emacs Lisp Reference Manual.
Dired is the Emacs facility that displays the contents of a file directory and allows you to “edit the directory”, performing operations on the files in the directory. See section Dired (ディレクトリーエディター).
A disabled command is one that you may not run without special confirmation. The usual reason for disabling a command is that it is confusing for beginning users. See section コマンドの無効化.
Short for “button down event” (q.v.).
A drag event is the kind of input event (q.v.) generated when you press a mouse button, move the mouse, and then release the button. See section マウスボタンのリバインド.
A dribble file is a file into which Emacs writes all the characters that you type on the keyboard. Dribble files can be used to make a record for debugging Emacs bugs. Emacs does not make a dribble file unless you tell it to. See section バグの報告.
Short for “exempli gratia” in Latin, which means “for example”.
The echo area is the bottom line of the screen, used for echoing the arguments to commands, for asking questions, and showing brief messages (including error messages). The messages are stored in the buffer *Messages* so you can review them later. See section エコーエリア.
Echoing is acknowledging the receipt of input events by displaying them (in the echo area). Emacs never echoes single-character key sequences; longer key sequences echo only if you pause while typing them.
We say that a character is electric if it is normally self-inserting (q.v.), but the current major mode (q.v.) redefines it to do something else as well. For example, some programming language major modes define particular delimiter characters to reindent the line, or insert one or more newlines in addition to self-insertion.
End of line is a character or a sequence of characters that indicate the end of a text line. On GNU and Unix systems, this is a newline (q.v.), but other systems have other conventions. See section end-of-line. Emacs can recognize several end-of-line conventions in files and convert between them.
An environment variable is one of a collection of variables stored by the operating system, each one having a name and a value. Emacs can access environment variables set by its parent shell, and it can set variables in the environment it passes to programs it invokes. See section 環境変数.
An error occurs when an Emacs command cannot execute in the current circumstances. When an error occurs, execution of the command stops (unless the command has been programmed to do otherwise) and Emacs reports the error by displaying an error message (q.v.).
An error message is output displayed by Emacs when you ask it to do something impossible (such as, killing text forward when point is at the end of the buffer), or when a command malfunctions in some way. Such messages appear in the echo area, accompanied by a beep.
ESC is a character used as a prefix for typing Meta characters on keyboards lacking a Meta key. Unlike the Meta key (which, like the SHIFT key, is held down while another character is typed), you press the ESC key as you would press a letter key, and it applies to the next character you type.
Short for “et cetera” in Latin, which means “and so on”.
Expunging an Rmail, Gnus newsgroup, or Dired buffer is an operation that truly discards the messages or files you have previously flagged for deletion.
A face is a style of displaying characters. It specifies attributes such as font family and size, foreground and background colors, underline and strike-through, background stipple, etc. Emacs provides features to associate specific faces with portions of buffer text, in order to display that text as specified by the face attributes. See section テキストのフェイス.
A file local variable is a local variable (q.v.) specified in a given file. See section ファイル内のローカル変数, and Glossary---Directory Local Variable.
Emacs uses file locking to notice when two different users start to edit one file at the same time. See section 同時編集からの保護.
A file name is a name that refers to a file. File names may be relative or absolute; the meaning of a relative file name depends on the current directory, but an absolute file name refers to the same file regardless of which directory is current. On GNU and Unix systems, an absolute file name starts with a slash (the root directory) or with ‘~/’ or ‘~user/’ (a home directory). On MS-Windows/MS-DOS, an absolute file name can also start with a drive letter and a colon, e.g., ‘d:’.
Some people use the term “pathname” for file names, but we do not; we use the word “path” only in the term “search path” (q.v.).
A file-name component names a file directly within a particular directory. On GNU and Unix systems, a file name is a sequence of file-name components, separated by slashes. For example, foo/bar is a file name containing two components, ‘foo’ and ‘bar’; it refers to the file named ‘bar’ in the directory named ‘foo’ in the current directory. MS-DOS/MS-Windows file names can also use backslashes to separate components, as in foo\bar.
The fill prefix is a string that should be expected at the beginning of each line when filling is done. It is not regarded as part of the text to be filled. See section テキストのフィル.
Filling text means adjusting the position of line-breaks to shift text between consecutive lines, so that all the lines are approximately the same length. See section テキストのフィル. Some other editors call this feature “line wrapping”.
Font Lock is a mode that highlights parts of buffer text in different faces, according to the syntax. Some other editors refer to this as “syntax highlighting”. For example, all comments (q.v.) might be colored red. See section Font Lockモード.
A fontset is a named collection of fonts. A fontset specification lists character sets and which font to use to display each of them. Fontsets make it easy to change several fonts at once by specifying the name of a fontset, rather than changing each font separately. See section フォントセット.
See Glossary---Page.
A frame is a rectangular cluster of Emacs windows. Emacs starts out with one frame, but you can create more. You can subdivide each frame into Emacs windows (q.v.). When you are using a window system (q.v.), more than one frame can be visible at the same time. See section フレームとグラフィカルなディスプレー. Some other editors use the term “window” for this, but in Emacs a window means something else.
Free software is software that gives you the freedom to share, study and modify it. Emacs is free software, part of the GNU project (q.v.), and distributed under a copyleft (q.v.) license called the GNU General Public License. See section GNU GENERAL PUBLIC LICENSE.
The Free Software Foundation (FSF) is a charitable foundation dedicated to promoting the development of free software (q.v.). For more information, see the FSF website.
On a graphical display (q.v.), there’s a narrow portion of the frame
(q.v.) between the text area and the window’s border. These
“fringes” are used to display symbols that provide information about
the buffer text (see section ウィンドウのフリンジ). Emacs displays the fringe using a
special face (q.v.) called fringe
. See section fringe.
FTP is an acronym for File Transfer Protocol. This is one standard method for retrieving remote files (q.v.).
A function key is a key on the keyboard that sends input but does not correspond to any character. See section ファンクションキーのリバインド.
Global means “independent of the current environment; in effect throughout Emacs”. It is the opposite of local (q.v.). Particular examples of the use of “global” appear below.
A global definition of an abbrev (q.v.) is effective in all major modes that do not have local (q.v.) definitions for the same abbrev. See section abbrev(略語).
The global keymap (q.v.) contains key bindings that are in effect everywhere, except when overridden by local key bindings in a major mode’s local keymap (q.v.). See section キーマップ.
The global mark ring records the series of buffers you have recently set a mark (q.v.) in. In many cases you can use this to backtrack through buffers you have been editing, or in which you have found tags (see Glossary---Tags Table). See section グローバルマークリング.
Global substitution means replacing each occurrence of one string by another string throughout a large amount of text. See section 置換コマンド.
The global value of a variable (q.v.) takes effect in all buffers that do not have their own local (q.v.) values for the variable. See section 変数.
GNU is a recursive acronym for GNU’s Not Unix, and it refers to a Unix-compatible operating system which is free software (q.v.). See section The GNU Manifesto. GNU is normally used with Linux as the kernel since Linux works better than the GNU kernel. For more information, see the GNU website.
Graphic characters are those assigned pictorial images rather than just names. All the non-Meta (q.v.) characters except for the Control (q.v.) characters are graphic characters. These include letters, digits, punctuation, and spaces; they do not include RET or ESC. In Emacs, typing a graphic character inserts that character (in ordinary editing modes). See section テキストの挿入.
A graphical display is one that can display images and multiple fonts. Usually it also has a window system (q.v.).
Highlighting text means displaying it with a different foreground and/or background color to make it stand out from the rest of the text in the buffer.
Emacs uses highlighting in several ways. It highlights the region whenever it is active (see section マークとリージョン). Incremental search also highlights matches (see section インクリメンタル検索). See Glossary---Font Lock.
Hardcopy means printed output. Emacs has various commands for printing the contents of Emacs buffers. See section ハードコピーの印刷.
HELP is the Emacs name for C-h or F1. You can type HELP at any time to ask what options you have, or to ask what a command does. See section ヘルプ.
Help echo is a short message displayed in the echo area (q.v.) when the mouse pointer is located on portions of display that require some explanations. Emacs displays help echo for menu items, parts of the mode line, tool-bar buttons, etc. On graphical displays, the messages can be displayed as tooltips (q.v.). See section ツールチップ.
Your home directory contains your personal files. On a multi-user GNU or Unix system, each user has his or her own home directory. When you start a new login session, your home directory is the default directory in which to start. A standard shorthand for your home directory is ‘~’. Similarly, ‘~user’ represents the home directory of some other user.
A hook is a list of functions to be called on specific occasions, such as saving a buffer in a file, major mode activation, etc. By customizing the various hooks, you can modify Emacs’s behavior without changing any of its code. See section フック.
Hyper is the name of a modifier bit that a keyboard input character may have. To make a character Hyper, type it while holding down the Hyper key. Such characters are given names that start with Hyper- (usually written H- for short). See section 修飾キー.
Short for “id est” in Latin, which means “that is”.
“Iff” means “if and only if”. This terminology comes from mathematics. Try to avoid using this term in documentation, since many are unfamiliar with it and mistake it for a typo.
An inbox is a file in which mail is delivered by the operating system. Rmail transfers mail from inboxes to Rmail files in which the mail is then stored permanently or until explicitly deleted. See section Rmailファイルとinbox.
Emacs provides an incremental search facility, whereby Emacs begins searching for a string as soon as you type the first character. As you type more characters, it refines the search. See section インクリメンタル検索.
Indentation means blank space at the beginning of a line. Most programming languages have conventions for using indentation to illuminate the structure of the program, and Emacs has special commands to adjust indentation. See section インデント.
An indirect buffer is a buffer that shares the text of another buffer, called its base buffer (q.v.). See section インダイレクトバッファー.
Info is the hypertext format used by the GNU project for writing documentation.
An input event represents, within Emacs, one action taken by the user on the terminal. Input events include typing characters, typing function keys, pressing or releasing mouse buttons, and switching between Emacs frames. See section ユーザー入力の種類.
An input method is a system for entering non-ASCII text characters by typing sequences of ASCII characters (q.v.). See section インプットメソッド.
Insertion means adding text into the buffer, either from the keyboard or from some other place in Emacs.
Justification means adding extra spaces within lines of text in order to adjust the position of the text edges. See section 明示的なフィルコマンド.
See Glossary---Binding.
Keyboard macros are a way of defining new Emacs commands from sequences of existing ones, with no need to write a Lisp program. You can use a macro to record a sequence of commands, then play them back as many times as you like. See section キーボードマクロ.
A keyboard shortcut is a key sequence (q.v.) that invokes a command. What some programs call “assigning a keyboard shortcut”, Emacs calls “binding a key sequence”. See Glossary---Binding.
A key sequence (key, for short) is a sequence of input events (q.v.) that are meaningful as a single unit. If the key sequence is enough to specify one action, it is a complete key (q.v.); if it is not enough, it is a prefix key (q.v.). See section キー.
The keymap is the data structure that records the bindings (q.v.) of
key sequences to the commands that they run. For example, the global
keymap binds the character C-n to the command function
next-line
. See section キーマップ.
The keyboard translation table is an array that translates the character codes that come from the terminal into the character codes that make up key sequences.
The kill ring is where all text you have killed (see Glossary---Killing) recently is saved. You can reinsert any of the killed text still in the ring; this is called yanking (q.v.). See section yank.
Killing means erasing text and saving it on the kill ring so it can be yanked (q.v.) later. Some other systems call this “cutting”. Most Emacs commands that erase text perform killing, as opposed to deletion (q.v.). See section テキストのkillと移動.
Killing a job (such as, an invocation of Emacs) means making it cease to exist. Any data within it, if not saved in a file, is lost. See section Emacsからのexit.
Your choice of language environment specifies defaults for the input method (q.v.) and coding system (q.v.). See section 言語環境. These defaults are relevant if you edit non-ASCII text (see section 国際化文字セットのサポート).
See Glossary---Filling.
Lisp is a programming language. Most of Emacs is written in a dialect of Lisp, called Emacs Lisp, which is extended with special features that make it especially suitable for text editing tasks.
A list is, approximately, a text string beginning with an open parenthesis and ending with the matching close parenthesis. In C mode and other non-Lisp modes, groupings surrounded by other kinds of matched delimiters appropriate to the language, such as braces, are also considered lists. Emacs has special commands for many operations on lists. See section カッコ構造の移動.
Local means “in effect only in a particular context”; the relevant kind of context is a particular function execution, a particular buffer, or a particular major mode. It is the opposite of “global” (q.v.). Specific uses of “local” in Emacs terminology appear below.
A local abbrev definition is effective only if a particular major mode is selected. In that major mode, it overrides any global definition for the same abbrev. See section abbrev(略語).
A local keymap is used in a particular major mode; the key bindings (q.v.) in the current local keymap override global bindings of the same key sequences. See section キーマップ.
A local value of a variable (q.v.) applies to only one buffer. See section ローカル変数.
M- in the name of a character is an abbreviation for Meta, one of the modifier keys that can accompany any character. See section M-.
M-C- in the name of a character is an abbreviation for Control-Meta; it means the same thing as C-M- (q.v.).
M-x is the key sequence that is used to call an Emacs command by name. This is how you run commands that are not bound to key sequences. See section Running Commands by Name.
Mail means messages sent from one user to another through the computer system, to be read at the recipient’s convenience. Emacs has commands for composing and sending mail, and for reading and editing the mail you have received. See section メールの送信. See section Rmailでメールを読む, for one way to read mail with Emacs.
A mail composition method is a program runnable within Emacs for editing and sending a mail message. Emacs lets you select from several alternative mail composition methods. See section メール作成方法.
The Emacs major modes are a mutually exclusive set of options, each of which configures Emacs for editing a certain sort of text. Ideally, each programming language has its own major mode. See section メジャーモード.
The space between the usable part of a window (including the fringe) and the window edge.
The mark points to a position in the text. It specifies one end of the region (q.v.), point being the other end. Many commands operate on all the text from point to the mark. Each buffer has its own mark. See section マークとリージョン.
The mark ring is used to hold several recent previous locations of the mark, in case you want to move back to them. Each buffer has its own mark ring; in addition, there is a single global mark ring (q.v.). See section マークリング.
The menu bar is a line at the top of an Emacs frame. It contains words you can click on with the mouse to bring up menus, or you can use a keyboard interface to navigate it. See section メニューバー.
See Glossary---Mail.
Meta is the name of a modifier bit which you can use in a command character. To enter a meta character, you hold down the Meta key while typing the character. We refer to such characters with names that start with Meta- (usually written M- for short). For example, M-< is typed by holding down Meta and at the same time typing < (which itself is done, on most terminals, by holding down SHIFT and typing ,). See section Meta.
On some terminals, the Meta key is actually labeled Alt or Edit.
A Meta character is one whose character code includes the Meta bit.
The minibuffer is the window that appears when necessary inside the echo area (q.v.), used for reading arguments to commands. See section ミニバッファー.
The minibuffer history records the text you have specified in the past for minibuffer arguments, so you can conveniently use the same text again. See section ミニバッファーヒストリー.
A minor mode is an optional feature of Emacs, which can be switched on or off independently of all other features. Each minor mode has a command to turn it on or off. Some minor modes are global (q.v.), and some are local (q.v.). See section マイナーモード.
A minor mode keymap is a keymap that belongs to a minor mode and is active when that mode is enabled. Minor mode keymaps take precedence over the buffer’s local keymap, just as the local keymap takes precedence over the global keymap. See section キーマップ.
The mode line is the line at the bottom of each window (q.v.), giving status information on the buffer displayed in that window. See section モードライン.
A buffer (q.v.) is modified if its text has been changed since the last time the buffer was saved (or since it was created, if it has never been saved). See section ファイルの保存.
Moving text means erasing it from one place and inserting it in another. The usual way to move text is by killing (q.v.) it and then yanking (q.v.) it. See section テキストのkillと移動.
Prior to Emacs 23, MULE was the name of a software package which provided a MULtilingual Enhancement to Emacs, by adding support for multiple character sets (q.v.). MULE was later integrated into Emacs, and much of it was replaced when Emacs gained internal Unicode support in version 23.
Some parts of Emacs that deal with character set support still use the MULE name. See section 国際化文字セットのサポート.
A multibyte character is a character that takes up several bytes in a buffer. Emacs uses multibyte characters to represent non-ASCII text, since the number of non-ASCII characters is much more than 256. See section International Characters.
A named mark is a register (q.v.), in its role of recording a location in text so that you can move point to that location. See section レジスター.
Narrowing means creating a restriction (q.v.) that limits editing in the current buffer to only a part of the text. Text outside that part is inaccessible for editing (or viewing) until the boundaries are widened again, but it is still there, and saving the file saves it all. See section ナローイング.
Control-J characters in the buffer terminate lines of text and are therefore also called newlines. See Glossary---End Of Line.
nil
nil
is a value usually interpreted as a logical “false”. Its
opposite is t
, interpreted as “true”.
A numeric argument is a number, specified before a command, to change the effect of the command. Often the numeric argument serves as a repeat count. See section 数引数.
Overwrite mode is a minor mode. When it is enabled, ordinary text characters replace the existing text after point rather than pushing it to one side. See section マイナーモード.
A package is a collection of Lisp code that you download and automatically install from within Emacs. Packages provide a convenient way to add new features. See section Emacs Lispパッケージ.
A page is a unit of text, delimited by formfeed characters (ASCII control-L, code 014) at the beginning of a line. Some Emacs commands are provided for moving over and operating on pages. See section ページ.
Paragraphs are the medium-size unit of human-language text. There are special Emacs commands for moving over and operating on paragraphs. See section パラグラフ.
We say that certain Emacs commands parse words or expressions in the text being edited. Really, all they know how to do is find the other end of a word or expression.
Point is the place in the buffer at which insertion and deletion occur. Point is considered to be between two characters, not at one character. The terminal’s cursor (q.v.) indicates the location of point. See section ポイント.
A prefix key is a key sequence (q.v.) whose sole function is to introduce a set of longer key sequences. C-x is an example of prefix key; any two-character sequence starting with C-x is therefore a legitimate key sequence. See section キー.
The primary selection is one particular X selection (q.v.); it is the selection that most X applications use for transferring text to and from other applications.
The Emacs commands that mark or select text set the primary selection, and clicking the mouse inserts text from the primary selection when appropriate. See section シフト選択.
A prompt is text used to ask you for input. Displaying a prompt is called prompting. Emacs prompts always appear in the echo area (q.v.). One kind of prompting happens when the minibuffer is used to read an argument (see section ミニバッファー); the echoing that happens when you pause in the middle of typing a multi-character key sequence is also a kind of prompting (see section エコーエリア).
Short for “quod vide” in Latin, which means “which see”.
Query-replace is an interactive string replacement feature provided by Emacs. See section 問い合わせつき置換.
Quitting means canceling a partially typed command or a running command, using C-g (or C-BREAK on MS-DOS). See section 中止と中断.
Quoting means depriving a character of its usual special significance. The most common kind of quoting in Emacs is with C-q. What constitutes special significance depends on the context and on convention. For example, an ordinary character as an Emacs command inserts itself; so in this context, a special character is any character that does not normally insert itself (such as DEL, for example), and quoting it makes it insert itself as if it were not special. Not all contexts allow quoting. See section Quoting.
Quoting a file name turns off the special significance of constructs such as ‘$’, ‘~’ and ‘:’. See section ファイル名のクォート.
A read-only buffer is one whose text you are not allowed to change. Normally Emacs makes buffers read-only when they contain text which has a special significance to Emacs; for example, Dired buffers. Visiting a file that is write-protected also makes a read-only buffer. See section 複数バッファーの使用.
A rectangle consists of the text in a given range of columns on a given range of lines. Normally you specify a rectangle by putting point at one corner and putting the mark at the diagonally opposite corner. See section 矩形領域(Rectangles).
A recursive editing level is a state in which part of the execution of a command involves asking you to edit some text. This text may or may not be the same as the text to which the command was applied. The mode line (q.v.) indicates recursive editing levels with square brackets (‘[’ and ‘]’). See section 再帰編集レベル.
Redisplay is the process of correcting the image on the screen to correspond to changes that have been made in the text being edited. See section Redisplay.
The region is the text between point (q.v.) and the mark (q.v.). Many commands operate on the text of the region. See section Region.
Registers are named slots in which text, buffer positions, or rectangles can be saved for later use. See section レジスター. A related Emacs feature is bookmarks (q.v.).
A regular expression is a pattern that can match various text strings; for example, ‘a[0-9]+’ matches ‘a’ followed by one or more digits. See section 正規表現の構文.
A remote file is a file that is stored on a system other than your own. Emacs can access files on other computers provided that they are reachable from your machine over the network, and (obviously) that you have a supported method to gain access to those files. See section リモートファイル.
A buffer’s restriction is the amount of text, at the beginning or the end of the buffer, that is temporarily inaccessible. Giving a buffer a nonzero amount of restriction is called narrowing (q.v.); removing a restriction is called widening (q.v.). See section ナローイング.
RET is a character that in Emacs runs the command to insert a newline into the text. It is also used to terminate most arguments read in the minibuffer (q.v.). See section Return.
Reverting means returning to the original state. For example, Emacs lets you revert a buffer by re-reading its file from disk. See section バッファーのリバート.
Saving a buffer means copying its text into the file that was visited (q.v.) in that buffer. This is the way text in files actually gets changed by your Emacs editing. See section ファイルの保存.
A scroll bar is a tall thin hollow box that appears at the side of a window. You can use mouse commands in the scroll bar to scroll the window. The scroll bar feature is supported only under windowing systems. See section スクロールバー.
Scrolling means shifting the text in the Emacs window so as to see a different part of the buffer. See section スクロール.
Searching means moving point to the next occurrence of a specified string or the next match for a specified regular expression. See section 検索と置換.
A search path is a list of directories, to be used for searching for
files for certain purposes. For example, the variable load-path
holds a search path for finding Lisp library files. See section EmacsのためのLispコードによるライブラリー.
The secondary selection is one particular X selection (q.v.); some X applications can use it for transferring text to and from other applications. Emacs has special mouse commands for transferring text using the secondary selection. See section セカンダリー選択.
The selected frame is the one your input currently operates on. See section フレームとグラフィカルなディスプレー.
The selected window is the one your input currently operates on. See section Emacsウィンドウの概念.
Selecting a buffer means making it the current (q.v.) buffer. See section バッファーの作成と選択.
Windowing systems allow an application program to specify selections whose values are text. A program can also read the selections that other programs have set up. This is the principal way of transferring text between window applications. Emacs has commands to work with the primary (q.v.) selection and the secondary (q.v.) selection, and also with the clipboard (q.v.).
Self-documentation is the feature of Emacs that can tell you what any command does, or give you a list of all commands related to a topic you specify. You ask for self-documentation with the help character, C-h. See section ヘルプ.
A character is self-inserting if typing that character inserts that character in the buffer. Ordinary printing and whitespace characters are self-inserting in Emacs, except in certain special major modes.
Emacs has commands for moving by or killing by sentences. See section センテンス.
Within Emacs, you can start a “server” process, which listens for connections from “clients”. This offers a faster alternative to starting several Emacs instances. See section サーバーとしてのEmacsの使用, and Glossary---Daemon.
A sexp (short for “s-expression”) is the basic syntactic unit of Lisp in its textual form: either a list, or Lisp atom. Sexps are also the balanced expressions (q.v.) of the Lisp language; this is why the commands for editing balanced expressions have ‘sexp’ in their name. See section Sexps.
Simultaneous editing means two users modifying the same file at once. Simultaneous editing, if not detected, can cause one user to lose his or her work. Emacs detects all cases of simultaneous editing, and warns one of the users to investigate. See section Simultaneous Editing.
SPC is the space character, which you enter by pressing the space bar.
The speedbar is a special tall frame that provides fast access to Emacs buffers, functions within those buffers, Info nodes, and other interesting parts of text within Emacs. See section スピードバーフレーム.
Spell checking means checking correctness of the written form of each one of the words in a text. Emacs can use various external spelling-checker programs to check the spelling of parts of a buffer via a convenient user interface. See section スペルのチェックと訂正.
A string is a kind of Lisp data object that contains a sequence of characters. Many Emacs variables are intended to have strings as values. The Lisp syntax for a string consists of the characters in the string with a ‘"’ before and another ‘"’ after. A ‘"’ that is part of the string must be written as ‘\"’ and a ‘\’ that is part of the string must be written as ‘\\’. All other characters, including newline, can be included just by writing them inside the string; however, backslash sequences as in C, such as ‘\n’ for newline or ‘\241’ using an octal character code, are allowed as well.
See Glossary---Font Lock.
The syntax table tells Emacs which characters are part of a word, which characters balance each other like parentheses, etc. See Syntax Tables in The Emacs Lisp Reference Manual.
Super is the name of a modifier bit that a keyboard input character may have. To make a character Super, type it while holding down the SUPER key. Such characters are given names that start with Super- (usually written s- for short). See section 修飾キー.
Suspending Emacs means stopping it temporarily and returning control to its parent process, which is usually a shell. Unlike killing a job (q.v.), you can later resume the suspended Emacs job without losing your buffers, unsaved edits, undo history, etc. See section Emacsからのexit.
TAB is the tab character. In Emacs it is typically used for indentation or completion.
The tab bar is a row of tabs at the top of an Emacs frame. Clicking on one of these tabs switches named persistent window configurations. See section タブバー.
The tab line is a line of tabs at the top of an Emacs window. Clicking on one of these tabs switches window buffers. See section ウィンドウのタブライン.
A tags table is a file that serves as an index to the function definitions in one or more other files. See section tagsテーブル.
A termscript file contains a record of all characters sent by Emacs to the terminal. It is used for tracking down bugs in Emacs redisplay. Emacs does not make a termscript file unless you tell it to. See section バグの報告.
“Text” has two meanings (see section 人間の言語のためのコマンド):
A text terminal, or character terminal, is a display that is limited to displaying text in character units. Such a terminal cannot control individual pixels it displays. Emacs supports a subset of display features on text terminals.
Text properties are annotations recorded for particular characters in the buffer. Images in the buffer are recorded as text properties; they also specify formatting information. See section フォーマット情報の編集.
A theme is a set of customizations (q.v.) that give Emacs a particular appearance or behavior. For example, you might use a theme for your favorite set of faces (q.v.).
The tool bar is a line (sometimes multiple lines) of icons at the top of an Emacs frame. Clicking on one of these icons executes a command. You can think of this as a graphical relative of the menu bar (q.v.). See section ツールバー.
Tooltips are small windows displaying a help echo (q.v.) text, which explains parts of the display, lists useful options available via mouse clicks, etc. See section ツールチップ.
Top level is the normal state of Emacs, in which you are editing the text of the file you have visited. You are at top level whenever you are not in a recursive editing level (q.v.) or the minibuffer (q.v.), and not in the middle of a command. You can get back to top level by aborting (q.v.) and quitting (q.v.). See section 中止と中断.
The default behavior of the mark (q.v.) and region (q.v.), in which setting the mark activates it and highlights the region, is called Transient Mark mode. In GNU Emacs 23 and onwards, it is enabled by default. See section Transient Markモードを無効にする.
Transposing two units of text means putting each one into the place formerly occupied by the other. There are Emacs commands to transpose two adjacent characters, words, balanced expressions (q.v.) or lines (see section テキストの入れ替え).
Truncating text lines in the display means leaving out any text on a line that does not fit within the right margin of the window displaying it. See section Truncation, and Glossary---Continuation Line.
Undoing means making your previous editing go in reverse, bringing back the text that existed earlier in the editing session. See section Undo(取り消し).
Unix is a class of multi-user computer operating systems with a long history. There are several implementations today. The GNU project (q.v.) aims to develop a complete Unix-like operating system that is free software (q.v.).
A user option is a face (q.v.) or a variable (q.v.) that exists so that you can customize Emacs by setting it to a new value. See section Easy Customizationインターフェース.
A variable is an object in Lisp that can store an arbitrary value. Emacs uses some variables for internal purposes, and has others (known as “user options”; q.v.) just so that you can set their values to control the behavior of Emacs. The variables used in Emacs that you are likely to be interested in are listed in the Variables Index in this manual (see section Variable Index). See section 変数, for information on variables.
Version control systems keep track of multiple versions of a source file. They provide a more powerful alternative to keeping backup files (q.v.). See section バージョンコントロール.
Visiting a file means loading its contents into a buffer (q.v.) where they can be edited. See section ファイルのvisit(訪問).
Whitespace is any run of consecutive formatting characters (space, tab, newline, backspace, etc.).
Widening is removing any restriction (q.v.) on the current buffer; it is the opposite of narrowing (q.v.). See section ナローイング.
Emacs divides a frame (q.v.) into one or more windows, each of which can display the contents of one buffer (q.v.) at any time. See section 画面の構成, for basic information on how Emacs uses the screen. See section 複数ウィンドウ, for commands to control the use of windows. Some other editors use the term “window” for what we call a “frame” in Emacs.
A window system is software that operates on a graphical display (q.v.), to subdivide the screen so that multiple applications can have their own windows at the same time. All modern operating systems include a window system.
See Glossary---Abbrev.
Word search is searching for a sequence of words, considering the punctuation between them as insignificant. See section 単語検索.
Yanking means reinserting text previously killed (q.v.). It can be used to undo a mistaken kill, or for copying or moving text. Some other systems call this “pasting”. See section yank.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Many people have contributed code included in the Free Software Foundation’s distribution of GNU Emacs. To show our appreciation for their public spirit, we list here in alphabetical order those who have written substantial portions. Others too numerous to mention have reported and fixed bugs, and added features to many parts of Emacs. We thank them for their generosity as well.
This list is intended to mention every contributor of a major package or feature we currently distribute; if you know of someone we have omitted, please make a bug report. More comprehensive information is available in the ChangeLog files, summarized in the file etc/AUTHORS in the distribution.
read-file-name
input; mb-depth.el, display of minibuffer
depth; button.el, the library that implements clickable buttons;
face-remap.el, a package for changing the default face in
individual buffers; and macroexp.el for macro-expansion. He
also worked on an early version of the lexical binding code.
diff
output.
locate
command; find-lisp.el, an Emacs
Lisp emulation of the find
program; net-utils.el; and
the generic mode feature.
eldoc-mode
, a mode to show the defined parameters or
the doc string for the Lisp function near point.
Calc
, an advanced calculator and mathematical tool, since
maintained and developed by Jay Belanger; complete.el, a partial
completion mechanism; and edmacro.el, a package for editing
keyboard macros.
alloca
implementation.
intangible
text property, and rearranged the structure of the
Lisp_Object
type to allow for more data bits.
find
command-line.
refer
(the troff
version) and lookbib
, and refbib.el, a package to convert
those databases to the format used by the LaTeX text formatting package.
ediff
, an interactive interface to the
diff
, patch
, and merge
programs; and
Viper, an emulator of the VI editor.
dired-mode
, with contributions by Lawrence
R. Dodd. He also wrote ls-lisp.el, a Lisp emulation of the
ls
command for platforms that don’t have ls
as a standard
program.
edebug
debug code written using David Gillespie’s Common Lisp support; and
isearch.el, Emacs’s incremental search minor mode. He also
co-wrote hideif.el (q.v.).
ps-print
(with Jim Thompson, Jacques Duthen, and Kenichi Handa),
a package for pretty-printing Emacs buffers to PostScript printers;
delim-col.el, a package to arrange text into columns;
ebnf2ps.el, a package that translates EBNF grammar to a syntactic
chart that can be printed to a PostScript printer; and
whitespace.el, a package that detects and cleans up excess
whitespace in a file (building on an earlier version by Rajesh Vaidheeswarran).
info-finder
feature that
creates a virtual Info manual of package keywords. He also
implemented the Tab Bar and window tab-lines, and added numerous
enhancements and improvements in I-search.
autoarg-mode
, a global minor mode whereby digit keys supply
prefix arguments; autoarg-kp-mode
, which redefines the keypad
numeric keys to digit arguments; autoconf.el, a mode for editing
Autoconf files; cfengine.el, a mode for editing Cfengine files;
elide-head.el, a package for eliding boilerplate text from file
headers; hl-line.el, a minor mode for highlighting the line in
the current window on which point is; cap-words.el, a minor mode
for motion in CapitalizedWordIdentifiers
; latin1-disp.el, a
package that lets you display ISO 8859 characters on Latin-1 terminals
by setting up appropriate display tables; the version of
python.el used prior to Emacs 24.3; smiley.el, a
facility for displaying smiley faces; sym-comp.el, a library
for performing mode-dependent symbol completion; benchmark.el
for timing code execution; and tool-bar.el, a mode to control
the display of the Emacs tool bar. With Riccardo Murri he wrote
vc-bzr.el, support for the Bazaar version control system.
dired
commands on output
from the find
program; grep.el for running the
grep
command; map-ynp.el, a general purpose boolean
question-asker; autoload.el, providing semi-automatic
maintenance of autoload files.
calendar
package.
#ifdef
clauses.
:extend
face
attribute, and also implemented the optional
display-fill-column-indicator
feature.
ebrowse
, the C++ browser;
jit-lock.el, the Just-In-Time font-lock support mode;
tooltip.el, a package for displaying tooltips;
authors.el, a package for maintaining the AUTHORS file;
and rx.el, a regular expression constructor.
PCL-CVS
,
a directory-level front end to the CVS version control system;
reveal.el, a minor mode for automatically revealing invisible
text; smerge-mode.el, a minor mode for resolving diff3
conflicts; diff-mode.el, a mode for viewing and editing context
diffs; css-mode.el for Cascading Style Sheets;
bibtex-style.el for BibTeX Style files; mpc.el, a
client for the Music Player Daemon (MPD); smie.el, a generic
indentation engine; and pcase.el, implementing ML-style pattern
matching. In Emacs 24, he integrated the lexical binding code,
cleaned up the CL namespace (making it acceptable to use CL
functions at runtime), added generalized variables to core Emacs
Lisp, and implemented a new lightweight advice mechanism.
mailto:
URLs.
xwsh
and winterm
terminal emulators; and vc-dir.el, displaying
the status of version-controlled directories.
Daniel also rewrote apropos.el (originally written by Joe Wells), for finding commands, functions, and variables matching a regular expression; and, together with Jim Blandy, co-authored wyse50.el, support for Wyse 50 terminals. He also co-wrote compile.el (q.v.) and ada-stmt.el.
etags
program.
load-history
lisp variable, which records the source file from
which each lisp function loaded into Emacs came.
telnet
sessions within Emacs.
eshell
, a
command shell implemented entirely in Emacs Lisp. He also contributed
to Org mode (q.v.).
man
command.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Jump to: | !
"
#
$
%
(
*
+
-
.
/
1
2
:
<
=
>
?
^
{
}
~
A B C D E F G H I J K L M N O P Q R S T U V W X Z |
---|
Jump to: | !
"
#
$
%
(
*
+
-
.
/
1
2
:
<
=
>
?
^
{
}
~
A B C D E F G H I J K L M N O P Q R S T U V W X Z |
---|
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Jump to: | + - |
---|
Jump to: | + - |
---|
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Jump to: | 2
5
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z |
---|
Jump to: | 2
5
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z |
---|
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Jump to: | A B C D E F G H I J K L M N O P Q R S T U V W X Y |
---|
Jump to: | A B C D E F G H I J K L M N O P Q R S T U V W X Y |
---|
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Jump to: | #
$
(
*
-
.
/
7
8
?
_
~
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z |
---|
Jump to: | #
$
(
*
-
.
/
7
8
?
_
~
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z |
---|
[Top] | [Contents] | [Index] | [ ? ] |
このマニュアル自身はGNU Free Documentation Licenseにより保護されています。このライセンスの精神はGeneral Public Licenseと同様ですが、よりドキュメントに適したものです。GNU Free Documentation Licenseを参照してください。
“point”という用語は、文字‘.’に由来します。この文字は、現在ポイントと呼んでいる値を参照するためのTECO(オリジナルのEmacsを記述していた言語)のコマンドです。
歴史的な理由により、AltのことをMetaという名前で参照します。
site-start.elの中でinhibit-startup-screen
をセットしても機能しません。なぜならスタートアップ画面はsite-start.elが読み込まれる前にセットアップされるからです。site-start.elについての情報は、Emacs初期化ファイルを参照してください。
ASCIIには、文字C-SPCはありません。テキスト端末でC-SPCをタイプすると、通常は文字C-@が与えられます。このキーもset-mark-command
にバインドされているので、もし異なる挙動を示すテキスト端末の場合は、C-SPCのかわりにC-@を使うことを考えるのがよいかもしれません。
C-/以外に、undo
コマンドはC-x
uにもバインドされています。なぜならこれは初心者が記憶するのが簡単だからです。‘u’は“undo”に由来しています。このコマンドはC-_にもバインドされています。なぜならいくつかのテキスト端末では、C-/とタイプすることにより、C-_が入力されるからです。
システムがシンボリックリンクをサポートしていなければ、通常のファイルが使われます。
これはMIMEの‘text/*’の本体、および他のネットワーク転送のコンテキストでも指定されています。これはEmacsが直接サポートしないSGMLリファレンス構文のrecord-start/record-endとは異なります。
EmacsをXで実行している場合には、以下のようにして新しくインストールしたフォントの場所をX serverに指示する必要があるでしょう:
xset fp+ /usr/local/share/emacs/fonts xset fp rehash
より具体的には、そのモードはprog-mode
から“派生”したモードです(Derived
Modes in The Emacs Lisp Reference Manualを参照)。
curved single quote文字、U+2018 LEFT SINGLE QUOTATION MARKとU+2019 RIGHT SINGLE QUOTATION MARKです。curved double quote文字はU+201C LEFT DOUBLE QUOTATION MARKとU+201D RIGHT DOUBLE QUOTATION MARKです。これらの文字を表示できないテキスト端末では、Infoリーダーはそれらをtypewriter ASCII quote文字として表示するかもしれません。
これはLaTeX由来の‘slides’ドキュメントクラスにより置き換えられました。
単語“sexp”はLispで式を参照するのに使用されます。
正規表現と構文テーブル。
tagは、識別子リファレンスの同義語です。etags
パッケージにもとづいたコマンドおよび機能では、伝統的に“tag”という用語をこの意味に使用します。以下のサブセクションでは、この伝統にしたがいます。
The US National Security Agency.
この機能は、Emacsがlibxml2サポートつきでビルドされているか、Lynxブラウザーがインストールされている必要があります。
PostScriptファイルにたいしてはGhostScriptが絶対条件です。DVIファイルにたいしてはdvipdf
またはdvipdfm
が必要です。OpenDocumentおよびMicrosoft
Officeドキュメントにたいしてはunoconv
ツールが必要です。
そのドキュメントに必要な外部ツールが利用可能でなければならず、Emacsがグラフィカルなフレームで実行されていて、PNGイメージをサポートしなければなりません。これらの条件が満たされなければ、Emacsは他のメジャーモードにフォールバックします。
シェルプロセスをサスペンドするべきではありません。これはシェルのサブジョブのサスペンドとはまったく違います。サブジョブのサスペンドは通常行なわれますが、サブジョブを継続するためにはシェルを使用しなければなりません。このコマンドはそれを行ないません。
別の環境変数を使うプログラムもいくつかあります。たとえば、TeXが‘emacsclient’を使うようにするには、環境変数TEXEDIT
を‘emacsclient
+%d %s’にセットします。
MS-DOSでは、DOSファイルシステムの制限により、このファイルの名前は_dir-locals.elになります。ファイルシステムによりファイル名が8+3に制限されている場合、OSによりファイル名が_dir-loc.elに切り詰められるでしょう。
このオプションはMS-Windowsでは効果がありません。
これ以降、“コロンで区切られたディレクトリーのリスト”という場合は、UnixおよびGNU/Linuxシステムの場合を指します。MS-DOSおよびMS-Windowsでは、DOS/Windowsファイル名にはドライブ文字の後のコロンが含まれるので、かわりにセミコロンでディレクトリーが区切られます。
古いバージョンのEmacsは、アプリケーションデータディレクトリーをチェックしません。
これには既知の例外が1つあります。ワークステーションをロックするWindows-Lの組み合せは、システムのより低レベルで処理されます。この理由により、w32-register-hot-key
はこのキー組み合せをオーバーライドできません。これは常にコンピューターをロックします。
printer-name
の値は、スラッシュとバックスラッシュの両方でセットできますが、‘net
use’コマンドはUNC共有名がWindowsスタイルのバックスラッシュでタイプされるのを要求することに注意してください。
通常1つの特定のコードページがディスプレーメモリーに組み込まれていて、CONFIG.SYSのようなシステム設定ファイルを変更して再起動することにより他のコードページをインストールできます。再起動なしでコードページを変更できるサードパーティーのソフトウェアーもありますが、ここでは普通のMS-DOSシステムが振る舞う方法を説明します。
ISO 8859にたいすEmacsの標準コーディングシステムは、この目的に完全に沿っているとは言えません。なぜならDOSコードページは通常、標準ISO文字コードにマッチしないからです。たとえば文字‘ç’(cedillaつきの‘c’)は標準Latin-1文字セットのコード231ですが、それに対応するDOSコードページ850はこのグリフにコード135を使用します。
The wording here was careless. The intention was that nobody would have to pay for permission to use the GNU system. But the words don’t make this clear, and people often interpret them as saying that copies of GNU should always be distributed at little or no charge. That was never the intent; later on, the manifesto mentions the possibility of companies providing the service of distribution for a profit. Subsequently I have learned to distinguish carefully between “free” in the sense of freedom and “free” in the sense of price. Free software is software that users have the freedom to distribute and change. Some users may obtain copies at no charge, while others pay to obtain copies—and if the funds help support improving the software, so much the better. The important thing is that everyone who has a copy has the freedom to cooperate with others in using it.
This is another place I failed to distinguish carefully between the two different meanings of “free.” The statement as it stands is not false—you can get copies of GNU software at no charge, from your friends or over the net. But it does suggest the wrong idea.
Several such companies now exist.
The Free Software Foundation raises most of its funds from a distribution service, although it is a charity rather than a company. If no one chooses to obtain copies by ordering from the FSF, it will be unable to do its work. But this does not mean that proprietary restrictions are justified to force every user to pay. If a small fraction of all the users order copies from the FSF, that is sufficient to keep the FSF afloat. So we ask users to choose to support us in this way. Have you done your part?
A group of computer companies recently pooled funds to support maintenance of the GNU C Compiler.
In the 80s I had not yet realized how confusing it was to speak of “the issue” of “intellectual property.” That term is obviously biased; more subtle is the fact that it lumps together various disparate laws which raise very different issues. Nowadays I urge people to reject the term “intellectual property” entirely, lest it lead others to suppose that those laws form one coherent issue. The way to be clear is to discuss patents, copyrights, and trademarks separately. See https://www.gnu.org/philosophy/not-ipr.xhtml for more explanation of how this term spreads confusion and bias.
Subsequently we have discovered the need to distinguish between “free software” and “freeware”. The term “freeware” means software you are free to redistribute, but usually you are not free to study and change the source code, so most of it is not free software. See https://www.gnu.org/philosophy/words-to-avoid.html for more explanation.
[Top] | [Contents] | [Index] | [ ? ] |
find
movemail
programls
のエミュレーション[Top] | [Contents] | [Index] | [ ? ] |
[Top] | [Contents] | [Index] | [ ? ] |
This document was generated on August 23, 2020 using texi2any.
The buttons in the navigation panels have the following meaning:
Button | Name | Go to | From 1.2.3 go to |
---|---|---|---|
[ << ] | FastBack | Beginning of this chapter or previous chapter | 1 |
[ < ] | Back | Previous section in reading order | 1.2.2 |
[ Up ] | Up | Up section | 1.2 |
[ > ] | Forward | Next section in reading order | 1.2.4 |
[ >> ] | FastForward | Next chapter | 2 |
[Top] | Top | Cover (top) of document | |
[Contents] | Contents | Table of contents | |
[Index] | Index | Index | |
[ ? ] | About | About (help) |
where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:
This document was generated on August 23, 2020 using texi2any.