すべてのイベントにはイベントタイプがあり、キーバインドの目的でイベントを分類します。キーボードイベントの場合、イベントタイプはイベント値と一致します。したがって、文字のイベントタイプはその文字となり、ファンクションキー記号のイベントタイプはその記号自体となります。リスト形式のイベントの場合、イベントタイプはリストのCARにある記号となります。このように、イベントタイプは常に記号または文字となります。
同一種類の2つのイベントは、キーバインドに関しては等価であり、したがって常に同じコマンドが実行されます。ただし、一部のコマンドはイベント全体を参照して動作を決定するため、必ずしも同じ処理が行われるとは限りません。例えば、マウスイベントの位置を利用して、バッファ内のどこで動作させるかを決定するコマンドもあります。
場合によっては、イベントをより広範に分類することが有用なこともあります。例えば、他にどのキーやマウスボタンが使用されたかにかかわらず、そのイベントにMETAキーが関与していたかどうかを確認したい場合などが考えられます。
こうした情報を手軽に取得できるよう、関数 event-modifiers と event-basic-type が用意されています。
この関数は、event が持つモディファイアのリストを返します。モディファイアはシンボルであり、shift、control、meta、alt、hyper、super
が含まれます。さらに、マウスイベントシンボルのモディファイアリストには、常に click、drag、down
のいずれかが含まれます。ダブルまたはトリプルイベントの場合は、double または triple も含まれます。
引数 event
は、イベントオブジェクト全体である場合もあれば、単にイベントタイプである場合もあります。現在の Emacs
セッションで入力として読み込まれたイベントにおいて、event
が一度も使用されたことのないシンボルである場合、event に実際に修飾子が付いていても、event-modifiers は nil
を返すことができます。
以下にいくつか例を挙げます。
(event-modifiers ?a)
⇒ nil
(event-modifiers ?A)
⇒ (shift)
(event-modifiers ?\C-a)
⇒ (control)
(event-modifiers ?\C-%)
⇒ (control)
(event-modifiers ?\C-\S-a)
⇒ (control shift)
(event-modifiers 'f5)
⇒ nil
(event-modifiers 's-f5)
⇒ (super)
(event-modifiers 'M-S-f5)
⇒ (meta shift)
(event-modifiers 'mouse-1)
⇒ (click)
(event-modifiers 'down-mouse-1)
⇒ (down)
クリックイベントの修飾子リストには明示的に click
が含まれていますが、イベントシンボル名自体には ‘click’
は含まれていません。同様に、‘C-a’ のような ASCII 制御文字の修飾子リストには control
が含まれていますが、このようなイベントを read-char
経由で読み取ると、制御修飾子ビットが除去された値 1 が返されます。
この関数は、event
が指定するキーまたはマウスボタンから、すべての修飾子を取り除いたものを返します。引数 event は
event-modifiers と同様です。例えば:
(event-basic-type ?a)
⇒ 97
(event-basic-type ?A)
⇒ 97
(event-basic-type ?\C-a)
⇒ 97
(event-basic-type ?\C-\S-a)
⇒ 97
(event-basic-type 'f5)
⇒ f5
(event-basic-type 's-f5)
⇒ f5
(event-basic-type 'M-S-f5)
⇒ f5
(event-basic-type 'down-mouse-1)
⇒ mouse-1