Emacsがキーを再定義する方法は、キーマップのそのキーのエントリーを変更する方法です。グローバルキーマップを変更できます。この場合すべてのメジャーモードで変更が効果をもちます(ただし同じキーにたいしてそれをオーバーライドする独自のローカルバインディングをもつ場合を除きます)。ローカルキーマップを変更することもできます。これは同じメジャーモードを使用するすべてのバッファーに効果があります。
このセクションでは、現在のEmacsセッションでキーをリバインドする方法を説明します。将来のEmacsセッションで効果をもつようにキーをリバインドする方法については、initファイル内でのキーのリバインドを参照してください。
cmdを実行するkeyをグローバルに定義します。
cmdを実行するkeyを、(そのとき効力をもつメジャーモードで)ローカルに定義します。
グローバルマップでkeyを未定義にします。
(そのとき効力をもつメジャーモードで)ローカルにkeyを未定義にします。
たとえば以下は、通常のC-zにたいするグローバルな定義を置き換えて、C-zをshell
コマンド(対話的なサブシェルを参照してください)にバインドします:
M-x keymap-global-set RET C-z shell RET
keymap-global-set
コマンドは、キーの後にコマンド名を読み取ります。キーを押した後に以下のようなメッセージが表示されるので、そのキーにバインドしたいコマンドを入力できます:
Set key C-z to command:
ファンクションキーとマウスイベントも同じ方法で再定義できます。リバインドするキーを指定するときに、ファンクションキーをタイプするか、マウスをクリックするだけです。
複数のイベントを含むキーも、同じ方法で再定義できます。Emacsは、(プレフィクスキーではない)完了キーまで、リバインドするキーの読み取りを続けます。したがってkeyにC-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を使用します。このマニュアルのキーのドキュメントにも、それらのコマンド名がリストされています。
間違ってコマンドを呼び出すことから自分を守りたい場合、そのキーを未定義にするより、コマンドを無効にするほうがよいでしょう。無効にされたコマンドは、実際にそれを実行したくなったとき、少しの手間で呼び出すことができます。コマンドの無効化を参照してください。