次: Init Rebinding, 前: Minibuffer Maps, 上: Key Bindings
Emacsのキーを再定義するには、キーマップの対応する項目を 変更すればよいのです。 グローバルキーマップを変更すると、その変更は (同じキーに対して独自のローカルな定義をしているメジャーモードを除く) すべてのメジャーモードに影響します。 あるいは、カレントバッファのローカルマップを変更すると、 同じメジャーモードを使っているすべてバッファに影響が及びます。
たとえば、Emacsを休止してログインシェルでコマンドを実行するかわりに、
Emacsバッファ内のサブシェルでコマンドを実行したいとします。
通常、(Xウィンドウシステムを使っていない場合)C-zは
関数suspend-emacs
にバインドされていますが、
つぎのようにこのキーをshell
にバインドすれば、
このキーでEmacs内の対話的サブシェルを起動するように変更できます。
M-x global-set-key <RET> C-z shell <RET>
global-set-key
はキー列に続けてコマンド名を読み取ります。
使いたいキーを打鍵すると、どのキーをバインドしたいのかを
確認するつぎのようなメッセージが表示されます。
Set key C-z to command:
同じ手順で、ファンクションキーやマウスイベントを再定義できます。 バインドすべきキーを指定するときに、 キーのかわりにファンクションキーを押したりマウスボタンをクリックしてください。
複数イベントから成るキーも単一イベントのキーと同様にして再定義できます。 Emacsは再定義すべきキー列が完成するまで(つまりプレフィックスキーではない キーが出てくるまで)イベントを読み続けます。 たとえば、keyとしてC-fを打てばそれで終りですから、 ミニバッファはただちにcmdを読む状態になります。 一方、C-xを打つとさらにその先のキーを読みます。 そこで4を打つと、さらにその先のキーが読まれる、というようになります。 たとえば、
M-x global-set-key <RET> C-x 4 $ spell-other-window <RET>
では、C-x 4 $を(実在しない)コマンドspell-other-window
に
バインドします。
C-cに続けて英字という2文字のキー列は、 ユーザーのカスタマイズ用に予約されています。 Lispプログラムはこれらのキー列を定義しないことになっていますから、 これらのキー列のバインディングはどのメジャーモードでも使え、 いかなる機能とも干渉しないはずです。
global-unset-key
でキーのグローバルな定義を取り除けます。
そのキーは未定義になります。
未定義のキーを打つと、Emacsはベルを鳴らします。
同様に、local-unset-key
は現在のメジャーモードでキーを
未定義にしますから、グローバルな定義(あるいはグローバルでの未定義状態)が
現在のメジャーモードでふたたび有効になります。
キーを再定義(または未定義に)して、あとでもとに戻したいと思った場合、 キーを未定義にしてももとには戻りません。 キーの標準定義を設定し直す必要があります。 キーの標準定義を調べるには、基本(fundamental)モードのバッファに いってC-h cを使います。 本書のキーの説明にもコマンド名を掲載してあります。
まちがって、あるコマンドを実行することを防ぎたければ、 キーを未定義にするのでなく、コマンドを使用禁止にするのがよいでしょう。 必要になったときに使用禁止コマンドを起動するのは造作もありません。