Emacsには多くのキーマップが用意されていますが、任意の時点で有効となっているのはごく一部のみです。Emacsはユーザー入力を受け取ると、その入力イベントを変換し(イベントシーケンス変換用のキーマップを参照)、有効なキーマップの中からキーバインドを探します。
通常、有効なキーマップは、(i) keymap プロパティで指定されたキーマップ、(ii)
有効化されたマイナーモードのキーマップ、(iii) 現在のバッファのローカルキーマップ、(iv) グローバルキーマップの順となります。Emacs
は、これらすべてのキーマップから各入力キーシーケンスを検索します。
これらの通常のキーマップのうち、最も優先度が高いものは、ポイントに keymap
テキストまたはオーバーレイプロパティが指定されている場合に、それが適用されます。(マウス入力イベントの場合、Emacs
はポイントの代わりにイベント位置を使用します。アクティブなキーマップの検索を参照してください。)
次に優先されるのは、有効なマイナーモードによって指定されるキーマップです。これらのキーマップ(存在する場合)は、変数 emulation-mode-map-alists、minor-mode-overriding-map-alist、および minor-mode-map-alist で指定されます。アクティブキーマップの制御を参照してください。
次に優先されるのは、バッファ固有のキーバインドを含むバッファのローカルキーマップです。ミニバッファにもローカルキーマップがあります(ミニバッファ入門を参照)。ポイントにlocal-mapテキストまたはオーバーレイプロパティがあり、それがバッファのデフォルトのローカルキーマップの代わりに使用するローカルキーマップを指定している場合、そちらが優先されます。
ローカルキーマップは通常、バッファのメジャーモードによって設定され、同じメジャーモードを持つすべてのバッファは同一のローカルキーマップを共有します。したがって、あるバッファでローカルキーマップを変更するために
keymap-local-set(キーバインドコマンドを参照)を呼び出すと、同じメジャーモードを持つ他のバッファのローカルキーマップにも影響が及びます。
最後に、グローバルキーマップには、C-fのように現在のバッファに関わらず定義されるキーバインドが含まれています。これは常に有効であり、変数global-mapにバインドされています。
上述の通常のキーマップに加え、Emacsではプログラムが他のキーマップを有効化するための特別な仕組みが用意されています。まず、変数 overriding-local-map
は、グローバルキーマップを除く通常のアクティブなキーマップを置き換えるキーマップを指定します。次に、ターミナルローカル変数 overriding-terminal-local-map は、すべての他のキーマップ(overriding-local-map
を含む)よりも優先されるキーマップを指定します。これは通常、モーダル/トランジェントなキーバインドに使用されます(関数 set-transient-map がこれに便利なインターフェースを提供しています)。詳細は アクティブキーマップの制御
を参照してください。
キーマップを有効にすることだけが、その活用方法ではありません。キーマップは、read-key-sequence内でのイベントの変換など、他の用途でも利用されます。イベントシーケンス変換用のキーマップを参照してください。
標準的なキーマップの一覧については、標準キーマップを参照してください。
これは、現在の状況においてコマンドループがキーシーケンスの検索に使用するアクティブなキーマップの一覧を返します。通常、overriding-local-map と overriding-terminal-local-map は無視されますが、olp が nil 以外の場合はこれらが考慮されます。position は、event-start
によって返されるイベント位置またはバッファ位置のいずれかを任意に指定でき、keymap-lookup
で説明されている通りにキーマップを変更することがあります(keymap-lookup を参照)。