Next: , Previous: , Up: Key Bindings   [Contents][Index]


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

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

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

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

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

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

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

M-x global-unset-key RET key

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

M-x local-unset-key RET key

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

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

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

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

Set key C-z to command:

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

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

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

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

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

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

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