Emacsのキーを再定義するには、キーマップのエントリを変更します。グローバルキーマップを変更すれば、その変更はすべてのメジャーモードに適用されます(ただし、同じキーに対して独自のオーバーライド用ローカルバインディングを持つモードは除きます)。あるいは、ローカルキーマップを変更すれば、同じメジャーモードを使用しているすべてのバッファに適用されます。
本節では、現在のEmacsセッションでキーを再バインドする方法について説明します。キーの再バインドを今後のEmacsセッションにも反映させる方法については、初期化ファイルでのキー再バインドを参照してください。
cmdを実行するため、keyをグローバルに定義する。
cmdを実行するため、keyをローカル(現在適用中のメジャーモード内)で定義します。
グローバルマップで key を undefined にする。
key をローカル(現在適用中のメジャーモード内)で未定義にする。
例えば、以下は C-z を shell コマンド(対話型サブシェル を参照)にバインドし、C-z の通常のグローバル定義を置き換えます:
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 という別のプレフィックス文字であれば、さらにもう1文字を読み取り、というように続きます。例えば、
M-x keymap-global-set RET C-x 4 $ spell-other-window RET
C-x 4 $ を再定義し、(架空の)コマンド spell-other-window を実行する。
keymap-global-unset
を使うと、キーのグローバル定義を削除できます。これによりキーは 未定義 状態となり、入力しても Emacs
はビープ音を鳴らすだけです。同様に、keymap-local-unset
を使うと現在のメジャーモードのキーマップ内でキーが未定義となり、そのメジャーモードではグローバル定義(あるいは定義がないこと)が再び有効になります。
キーを再定義(または未定義に)した後、その変更を取り消したい場合、キーを未定義にしても不十分であり、標準の定義でキーを再定義する必要があります。キーの標準定義名を確認するには、新規に起動したEmacsでファンダメンタルモードのバッファに移動し、C-h c を使用してください。本マニュアルのキーに関するドキュメントには、コマンド名も記載されています。
誤ってコマンドを実行してしまうのを防ぎたい場合は、キーの定義を解除するよりも、コマンドを無効にする方が適切です。無効にしたコマンドは、本当に実行したいときに手間が少なくて済みます。コマンドの無効化を参照してください。