Next: , Previous: , Up: キーマップ   [Contents][Index]


23.13 低レベルなキーバインディング

歴史的にEmacsはキーを定義するために、異なる複数の構文を複数サポートしてきました。現時点ではキーをバインドする方法として文書化されているのは、key-valid-pがサポートしている構文を使用する方法です。これはkeymap-setkeymap-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-xC-f"\M-\C-x""\C-\M-x"はいずれも単一のC-M-xを含んだキーシーケンスとして読み取られる。

文字とキーシンボルのベクター

これはキーシーケンスを表す別の内部表現である。文字列表現よりも幅広い範囲の修飾をサポートしており、ファンクションキーもサポートしている。‘[?\C-\H-x home]を例とすると、これはC-H-x homeというキーシーケンスを表している。文字型を参照のこと。

Function: define-key keymap key binding &optional remove

これはkeymap-set (キーバインディングの変更を参照)と似ているが、旧来のキー構文だけを理解する。

この関数には更にremove引数もある。これが非nilだと、その定義は削除される。これは概ね定義にnilをセットするのと同義だが、keymapに親があってkeyが親の同一バインディングをシャドーしている場合に違いが生じる。removeの場合にはそれ以降のルックアップで親のバインディングがリターンされるが、nilの定義ではルックアップにたいしてnilがリターンされるだろう。

他にも以下のような旧来のキー定義関数とコマンドがありますが、新しいコードでは等価な新式の関数を使用してください。

Command: global-set-key key binding

この関数はカレントグローバルマップ内でkeyのバインディングをbindingにセットする。かわりにkeymap-global-setを使うこと。

Command: global-unset-key key

この関数はカレントグローバルマップからkeyのバインディングを削除する。かわりにkeymap-global-unsetを使うこと。

Command: local-set-key key binding

この関数はカレントローカルキーマップ内のkeyのバインディングをbindingにセットする。かわりにkeymap-local-setを使うこと。

Command: local-unset-key key

この関数はカレントローカルキーマップからkeyのバインディングを削除する。かわりにkeymap-local-unsetを使うこと。

Function: substitute-key-definition olddef newdef keymap &optional oldmap

この関数はkeymap内でolddefにバインドされるすべてのキーについてolddefnewdefに置き換える。言い換えるとolddefが出現する箇所のすべてをnewdefに置き換える。この関数はnilをリターンする。かわりにkeymap-substituteを使うこと。

Function: define-key-after map key binding &optional after

define-keyと同じようにmap内にkeyにたいする値bindingのバインディングを定義するが、map内でのバインディング位置はイベントafterのバインディングの後になる。引数keyは長さ1 — 1要素だけのベクターか文字列にすること。しかしafterは単一のイベント型 — シーケンスではないシンボルか文字にすること。新たなバインディングはafterのバインディングの後に追加される。aftertまたは省略された場合には、新たなバインディングはそのキーマップの最後に追加される。しかし新たなバインディングは継承されたすべてのキーマップの前に追加される。この関数ではなくkeymap-set-afterを使うこと。

Function: keyboard-translate from to

この関数は文字コードをfromからtoに変換することによってkeyboard-translate-table話変更する。かわりにkey-translateを使うこと。

Function: key-binding key &optional accept-defaults no-remap position

この関数はカレントでアクティブなキーマップに応じて、keyにたいするバインディングをリターンする。そのキーマップでkeyが未定義なら結果はnilになる。引数accept-defaultslookup-key (キー照合のための関数を参照)の場合と同じように、デフォルトのバインディングのチェックを行うかどうかを制御する。no-remapが非nilならkey-bindingはコマンドのリマップ(コマンドのリマップを参照)を無視して、keyに直接指定されているバインディングをリターンする。オプション引数positionはバッファー位置、あるいはevent-startの値のようなイベント位置のいずれかであること。これによりpositionにもとづいて照会するマップを判断するように告げる。

keyが文字列とベクターのいずれでもなければEmacsはエラーをシグナルする。

この関数ではなくかわりにkeymap-lookupを使うこと。

Function: lookup-key keymap key &optional accept-defaults

この関数はkeymapからkeyの定義をリターンする。文字列かベクターのkeykeymap内で指定されるプレフィクスキーとして有効なキーシーケンスでなければ、それは最後に余計なイベントをもった、単一のキーシーケンスに適合しない長過ぎるキーのはずである。その場合のリターン値は数となり、この数はコンプリートキーを構成するkeyの前にあるイベントの数である。

accept-defaultsが非nilなら、lookup-keykey内の特定のイベントにたいするバインディングと同様にデフォルトバインディングも考慮する。それ以外ではlookup-keyは特定のkeyのシーケンスにたいするバインディングだけを報告して、明示的に指定したとき以外はデフォルトバインディングを無視する。

この関数ではなくかわりにkeymap-lookupを使うこと。

Function: local-key-binding key &optional accept-defaults

この関数はカレントのローカルキーマップ内のkeyにたいするバインディングをリターンする。カレントのローカルキーマップ内で未定義ならnilをリターンする。

引数accept-defaultslookup-key(上記)と同じようにデフォルトバインディングのチェックを制御する。

Function: global-key-binding key &optional accept-defaults

この関数はカレントのグローバルキーマップ内でコマンドkeyにたいするバインディングをリターンする。カレントのグローバルキーマップ内で未定義ならnilをリターンする。

引数accept-defaultslookup-key(上記)と同じようにデフォルトバインディングのチェックを制御する。

Function: event-convert-list list

この修飾名のリストと基本的なイベントタイプを、それらすべてを指定するイベントタイプに変換する。基本的なイベントタイプはリストの最後の要素でなければならない。たとえば、

(event-convert-list '(control ?a))
     ⇒ 1
(event-convert-list '(control meta ?a))
     ⇒ -134217727
(event-convert-list '(control super f1))
     ⇒ C-s-f1

Next: コマンドのリマップ, Previous: キーバインディングの変更, Up: キーマップ   [Contents][Index]