Next: , Previous: , Up: キーバインディングのカスタマイズ   [Contents][Index]


50.3.5 対話的なキーバインディングの変更

Emacsがキーを再定義する方法は、キーマップのそのキーのエントリーを変更する方法です。グローバルキーマップを変更できます。この場合すべてのメジャーモードで変更が効果をもちます(ただし同じキーにたいしてそれをオーバーライドする独自のローカルバインディングをもつ場合を除きます)。ローカルキーマップを変更することもできます。これは同じメジャーモードを使用するすべてのバッファーに効果があります。

このセクションでは、現在のEmacsセッションでキーをリバインドする方法を説明します。将来のEmacsセッションで効果をもつようにキーをリバインドする方法については、initファイル内でのキーのリバインドを参照してください。

M-x keymap-global-set RET key cmd RET

cmdを実行するkeyをグローバルに定義します。

M-x keymap-local-set RET key cmd RET

cmdを実行するkeyを、(そのとき効力をもつメジャーモードで)ローカルに定義します。

M-x keymap-global-unset RET key

グローバルマップでkeyを未定義にします。

M-x keymap-local-unset RET key

(そのとき効力をもつメジャーモードで)ローカルにkeyを未定義にします。

たとえば以下は、通常のC-zにたいするグローバルな定義を置き換えて、C-zshellコマンド(対話的なサブシェルを参照してください)にバインドします:

M-x keymap-global-set RET C-z shell RET

keymap-global-setコマンドは、キーの後にコマンド名を読み取ります。キーを押した後に以下のようなメッセージが表示されるので、そのキーにバインドしたいコマンドを入力できます:

Set key C-z to command:

ファンクションキーとマウスイベントも同じ方法で再定義できます。リバインドするキーを指定するときに、ファンクションキーをタイプするか、マウスをクリックするだけです。

複数のイベントを含むキーも、同じ方法で再定義できます。Emacsは、(プレフィクスキーではない)完了キーまで、リバインドするキーの読み取りを続けます。したがってkeyC-fをタイプすると、それで完了です。これによりミニバッファーに入って、すぐにcmdを読み取ります。しかしC-xをタイプした場合、これはプレフィクスなので、他の文字を読み取ります。それが4の場合、これもプレフィクス文字なので、さらに文字を読み取ります。たとえば、

M-x keymap-global-set RET C-x 4 $ spell-other-window RET

これは、(架空のコマンド)spell-other-windowを実行するように、C-x 4 $を再定義します。

keymap-global-unsetで、キーのグローバルな定義を削除できます。これはそのキーを未定義(undefined)にします。その後このキーをタイプしても、Emacsはビープ音を鳴らすだけです。同様にkeymap-local-unsetは、カレントメジャーモードのキーマップでキーを未定義にして、メジャーモードでそのキーにたいするグローバル定義(またはグローバル定義に無い状態)が有効になります。

あるキーを再定義(または未定義に)してから、後でその変更を取り消したくなった場合、キーを未定義にしても上手くいきません — そのキーを標準の定義に再定義する必要があります。そのキーの標準の定義の名前を見つけるには、フレッシュなEmacsのFundamentalモードで、C-h cを使用します。このマニュアルのキーのドキュメントにも、それらのコマンド名がリストされています。

間違ってコマンドを呼び出すことから自分を守りたい場合、そのキーを未定義にするより、コマンドを無効にするほうがよいでしょう。無効にされたコマンドは、実際にそれを実行したくなったとき、少しの手間で呼び出すことができます。コマンドの無効化を参照してください。