歴史的に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と等価。
キーシーケンスは内部的にはshift、control、metaといった修飾キー用の特別なエスケープシーケンス(文字列型を参照)を用いた文字列として表現されていることがよくあるが、この表現はユーザーがキーのリバインドを行う際にも使うことができる。"\M-x"
や"\C-f"
のような文字列はそれぞれ単一のM-xや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
を使うこと。
define-key
と同じようにmap内に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
(上記)と同じようにデフォルトバインディングのチェックを制御する。
この関数はカレントのグローバルキーマップ内でコマンドkeyにたいするバインディングをリターンする。カレントのグローバルキーマップ内で未定義ならnil
をリターンする。
引数accept-defaultsはlookup-key
(上記)と同じようにデフォルトバインディングのチェックを制御する。
この修飾名のリストと基本的なイベントタイプを、それらすべてを指定するイベントタイプに変換する。基本的なイベントタイプはリストの最後の要素でなければならない。たとえば、
(event-convert-list '(control ?a)) ⇒ 1 (event-convert-list '(control meta ?a)) ⇒ -134217727 (event-convert-list '(control super f1)) ⇒ C-s-f1