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


21.13 コマンドのリマップ

あるコマンドから他のコマンドへのリマップ(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をリターンする。positionkey-bindingの場合と同様、使用するキーマップを決定するためにバッファー位置かイベント位置をオプションで指定できる。

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