従来、Emacsではキーを定義するためのさまざまな構文がサポートされてきました。現在、ドキュメントで推奨されているキーバインドの方法は、key-valid-pでサポートされている構文を使用することであり、これはkeymap-setやkeymap-lookupといったすべての関数でもサポートされています。本セクションでは、旧形式の構文およびインターフェース関数について説明します。これらを新しいコードで使用すべきではありません。
define-key(およびキーの再バインドに使用されるその他の低レベル関数)は、キーに関する複数の異なる構文に対応しています。
修飾子名と1つのベースイベント(文字またはファンクションキー名)を含むリストを使用できます。例えば、[(control ?a) (meta b)]はC-a
M-bと同等であり、[(hyper control left)]はC-H-leftと同等です。
内部的には、キーシーケンスはシフト、コントロール、メタ修飾子用の特殊なエスケープシーケンスを用いた文字列として表現されることが多いですが(文字列型を参照)、この表現はユーザーがキーを再バインドする際にも利用できます。"\M-x" のような文字列は単一の M-x
を含むものとして、"\C-f" は単一の C-f を含むものとして、そして "\M-\C-x" と "\C-\M-x" はともに単一の C-M-x
を含むものとして読み込まれます。
こちらは、キーシーケンスのもう一つの内部表現です。文字列表現よりも幅広い修飾子をサポートしており、ファンクションキーにも対応しています。例として、C-H-x home キーシーケンスを表す ‘[?\C-\H-x home]’ が挙げられます。文字型を参照してください。
この関数は keymap-set のようなものです(キーバインドの変更 を参照)。ただし、従来のキー構文のみを認識します。
さらに、この関数には remove 引数もあります。これが nil 以外の場合、定義は削除されます。これは定義を nil
に設定するのとほぼ同様ですが、keymap に親があり、key が親における同一のバインディングをシャドウイングしている場合には違いが生じます。remove の場合、それ以降のルックアップでは親のバインディングが返されますが、nil の定義ではルックアップの結果は nil となります。
以下に、その他のレガシーなキー定義関数およびコマンドと、新規コードで代わりに使用すべき対応するモダンな関数を示します。
この関数は、現在のグローバルマップにおける key のバインディングを binding に設定します。代わりに keymap-global-set を使用してください。
この関数は、現在のグローバルマップから key のバインディングを削除します。代わりに keymap-global-unset を使用してください。
この関数は、現在のローカルキーマップにおける key のバインドを binding に設定します。代わりに keymap-local-set を使用してください。
この関数は、現在のローカルマップから key のバインディングを削除します。代わりに keymap-local-unset を使用してください。
この関数は、keymap 内で olddef
にバインドされていたすべてのキーについて、olddef を newdef に置き換えます。言い換えれば、olddef
は出現する箇所すべてで newdef に置き換えられます。この関数は nil を返します。代わりに keymap-substitute を使用してください。
map に、define-key と同様に key に対するバインディングを値 binding
で定義しますが、そのバインディングは map のイベント after のバインディングの後に配置してください。引数 key
は長さ 1 である必要があります――要素が 1 つだけのベクトルまたは文字列です。ただし、after
は単一のイベントタイプ――シーケンスではなく、シンボルまたは文字である必要があります。新しいバインディングは after のバインディングの後に配置されます。after が
t
であるか、あるいは省略されている場合、新しいバインディングはキーマップの最後に加えられます。ただし、新しいバインディングは継承されたキーマップよりも前に追加されます。この関数の代わりに
keymap-set-after を使用してください。
この関数は、文字コード from を文字コード to
に変換するために keyboard-translate-table
を変更します。必要に応じてキーボード変換テーブルを作成します。代わりに key-translate
を使用してください。
この関数は、現在有効なキーマップに基づいて key のバインディングを返します。キーマップ内で key が未定義の場合、結果は nil となります。引数
accept-defaults は、lookup-key と同様にデフォルトバインディングの確認を制御します(キールックアップ用関数 を参照)。no-remap が nil 以外の場合、key-binding はコマンドのリマッピングを無視し(リマッピングコマンド を参照)、key に直接指定されたバインディングを返します。オプション引数 position には、バッファ位置または event-start の値のようなイベント位置を指定します。これにより、関数はその position に基づいて決定されたマップを参照します。
key が文字列またはベクトルでない場合、Emacs はエラーを報告します。
この関数の代わりに keymap-lookup を使用してください。
この関数は、keymap における key の定義を返します。文字列またはベクトル key が、keymap で指定されたプレフィックスキーに従って有効なキーシーケンスでない場合、それは長すぎるか、末尾に単一のキーシーケンスに収まりきらない余分なイベントが含まれていることになります。その場合、値は数値となり、key の先頭にあり、完全なキーを構成するイベントの数を示します。
accept-defaults が nil
以外の場合、lookup-key はデフォルトのバインディングに加え、key における特定のイベントに対するバインディングも考慮します。そうでない場合、lookup-key は特定のシーケンス key
に対するバインディングのみを報告し、明示的に問い合わせた場合を除き、デフォルトのバインディングは無視します。
この関数の代わりに keymap-lookup を使用してください。
この関数は、現在のローカルキーマップにおける key のバインディングを返し、そこで未定義の場合は
nil を返します。
引数 accept-defaults は、lookup-key(上記)と同様に、デフォルトバインディングのチェックを制御します。
この関数の代わりに keymap-local-lookup を使用してください。
この関数は、現在のグローバルキーマップにおけるコマンド key
のバインディングを返します。そこで未定義の場合は、nil を返します。
引数 accept-defaults は、lookup-key(上記)と同様に、デフォルトバインディングのチェックを制御します。
この関数の代わりに keymap-global-lookup を使用してください。
この関数は、修飾子名のリストと基本イベント型を、それらすべてを指定するイベント型に変換します。基本イベント型は、リストの最後の要素である必要があります。例えば、
(event-convert-list '(control ?a))
⇒ 1
(event-convert-list '(control meta ?a))
⇒ -134217727
(event-convert-list '(control super f1))
⇒ C-s-f1