Next: , Previous: , Up: Keymaps   [Contents][Index]


21.13 Remapping Commands

あるコマンドから他のコマンドへのリマップ(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-linemy-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)
Function: command-remapping command &optional position keymaps

この関数は、カレントアクティブキーマップにより与えられる、command(シンボル)にたいするリマッピングをリターンする。commandがリマップされていない(これは普通の状況である)、またはシンボル以外の場合、この関数はnilをリターンする。positionは、key-bindingの場合と同様、使用するキーマップを決定するために、オプションバッファー位置、またはイベント位置をオプションで指定できる。

オプション引数keymapsが非nilの場合、それは検索するキーマップのリストを指定する。この引数は、positionが非nilの場合は無視される。