Next: , Up: キーバインディングのカスタマイズ   [Contents][Index]


50.3.1 キーマップ

キーとコマンドで説明されているように、各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 keymap-global-setのようなキーをリバインドするコマンドは、新しいバインディングをグローバルマップの適切な位置に保存することにより機能します(対話的なキーバインディングの変更を参照)。カレントのキーバインディングを閲覧するにはC-h bコマンドを使用してください。

ほとんどの現代的なキーボードは、文字キーと同じようにファンクションキーをもちます。ファンクションキーは文字キーが行なうように入力イベントを送り、キーマップはファンクションキーにたいするバインディングをもつことができます。キーシーケンスにはファンクションキーと文字をミックスすることもできます。たとえば、キーボードにファンクションキーHomeがある場合、EmacsはC-x Homeのようなキーシーケンスを認識できます。S-down-mouse-1のように、マウスイベントとキーボードイベントをミックスすることさえ可能です。

テキスト端末では、ファンクションキーをタイプすることにより、文字シーケンスがコンピューターに送られます。シーケンスの正確な詳細は、ファンクションキーと端末タイプに依存します(シーケンスがESC [で始まることもしばしばあります)。Emacsが端末タイプを理解する場合、自動的にそのようなシーケンスを1つの入力イベントとして処理します。

後続に1文字(ASCIIと非ASCIIの大文字小文字)を伴うC-cから構成されるキーシーケンスはユーザー用に予約済みです。これらのキーシーケンスをEmacs自身がバインドすることは決してなく、Emacs拡張はこれらのキーシーケンスのバインディングを避ける必要があります。言い換えると、ユーザーはC-c aC-c çのようなキーシーケンスをバインドでき、それはEmacsのバインディングによりバインディングがシャドーされることは決してないということに基づいています。