特殊な種類のキーバインドを使用すると、元のコマンドに割り当てられたキーシーケンスを参照することなく、あるコマンドを別のコマンドにリマップできます。この機能を利用するには、ダミーイベント remap
で始まり、その後にリマップしたいコマンド名が続くキーシーケンスのキーバインドを作成します。その際、バインドに新しい定義(通常はコマンド名ですが、キーバインドとして有効な他の定義でも構いません)を指定してください。
例えば、My modeがkill-lineの代わりに呼び出すべき特殊なコマンドmy-kill-lineを提供しているとします。これを実現するには、そのモードのキーマップに以下のリマッピングを記述する必要があります。
(keymap-set my-mode-map "<remap> <kill-line>" 'my-kill-line)
すると、my-mode-map が有効な状態でユーザーが C-k(kill-line
のデフォルトのグローバルキーシーケンス)を入力すると、Emacs は代わりに my-kill-line を実行します。
なお、リマッピングはアクティブなキーマップを通じてのみ行われる点に注意してください。例えば、ctl-x-mapのようなプレフィックスキーマップにリマッピングを設定しても、通常は効果がありません。こうしたキーマップ自体はアクティブではないためです。また、リマッピングは単一レベルでしか機能しません。以下の例では、
(keymap-set my-mode-map "<remap> <kill-line>" 'my-kill-line) (keymap-set my-mode-map "<remap> <my-kill-line>" 'my-other-kill-line)
kill-line は my-other-kill-line に再マッピングされません。代わりに、通常のキーバインドで kill-line
が指定されている場合は my-kill-line に、通常のバインドで my-kill-line が指定されている場合は my-other-kill-line に再マッピングされます。
コマンドの再マッピングを取り消すには、nil に再マッピングします。例:
(keymap-set my-mode-map "<remap> <kill-line>" nil)
この関数は、現在有効なキーマップに基づき、command(シンボル)のリマッピングを返します。command がリマッピングされていない(通常はこのケースです)か、あるいはシンボルでない場合は、nil を返します。position では、key-binding
と同様に、使用するキーマップを決定するためのバッファ位置またはイベント位置を任意で指定できます。
オプション引数 keymaps が nil
以外の場合、検索対象とするキーマップのリストを指定します。position が nil 以外の場合は、この引数は無視されます。