あるコマンドから他のコマンドへのリマップ(remap)には、特別な種類のキーバインディングが使用できます。この機能を使用するためには、ダミーイベントremap
で始まり、その後にリマップしたいコマンド名が続くようなキーシーケンスにたいするキーバインディングを作成します。そしてそのバインディングにたいしては、新たな定義(通常はコマンド名だがキーバインディングにたいして有効な他の任意の定義を指定可能)を指定します。
たとえばMyモードというモードが、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
のようなプレフィクスキーマップ内にリマッピングを置いても、そのようなキーマップはそれ自体がアクティブでないので通常は効果がありません。それに加えてリマップは1レベルを通じてのみ機能します。以下の例では、
(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
なら無視される。