Next: Translation Keymaps, Previous: Changing Key Bindings, Up: Keymaps [Contents][Index]
あるコマンドから他のコマンドへのリマップ(remap)には、特別な種類のキーバインディングが使用できます。この機能を使用するためには、ダミーイベントremap
で始まり、その後にリマップしたいコマンド名が続くようなキーシーケンスにたいするキーバインディングを作成します。そして、そのバインディングにたいしては、新たな定義(通常はコマンド名だが、キーバインディングにたいして有効な他の任意の定義を指定可能)を指定します。
たとえば、Myモードというモードが、kill-line
のかわりに呼び出されるmy-kill-line
という特別なコマンドを提供するとします。これを設定するには、このモードのキーマップに以下のようなリマッピングが含まれるはずです:
(define-key my-mode-map [remap kill-line] 'my-kill-line)
その後は、my-mode-map
がアクティブなときは常に、ユーザーがC-k(kill-line
についてデフォルトのグローバルキーシーケンス)をタイプすると、Emacsはかわりにmy-kill-line
を実行するでしょう。
リマップはアクティブなキーマップでのみ行なわれることに注意してください。たとえば、ctl-x-map
のようなプレフィクスキーマップ内にリマッピングを置いても、そのようなキーマップはそれ自体がアクティブでないので、通常は効果がありません。それに加えて、リマップは1レベルを通じてのみ機能します。以下の例では、
(define-key my-mode-map [remap kill-line] 'my-kill-line) (define-key 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
にリマップします:
(define-key my-mode-map [remap kill-line] nil)
この関数は、カレントアクティブキーマップにより与えられる、command(シンボル)にたいするリマッピングをリターンする。commandがリマップされていない(これは普通の状況である)、またはシンボル以外の場合、この関数はnil
をリターンする。position
は、key-binding
の場合と同様、使用するキーマップを決定するために、オプションバッファー位置、またはイベント位置をオプションで指定できる。
オプション引数keymaps
が非nil
の場合、それは検索するキーマップのリストを指定する。この引数は、position
が非nil
の場合は無視される。