すべてのイベントはイベント型(event type)をもっています。イベント型はキーバインディング目的でイベントをクラス分けします。キーボードイベントにたいするイベント型はイベント値と等しく、したがって文字のイベント型は文字、ファンクションキーシンボルのイベント型はそのシンボル自身になります。リストであるようなイベントのイベント型は、そのリストのCAR内のシンボルです。したがってイベント型は常にシンボルか文字です。
同じ型の2つのイベントはキーバインディングに関する限りは同じものです。したがってそれらは常に同じコマンドを実行します。これらが同じことを行う必要があるという意味ではありませんが、イベント全体を調べてから何を行うか決定するコマンドもいくつかあります。たとえばバッファー内でどこに作用するか決定するためにマウスイベントの場所を使用するコマンドもいくつかあります。
広範なイベントのクラス分けが役に立つときもあります。たとえば他の修飾キーやマウスボタンが使用されたかとは無関係に、METAキーとともに呼び出されたイベントを尋ねたいと思うかもしれません。
関数event-modifiers
やevent-basic-type
は、そのような情報を手軽に取得するために提供されています。
この関数はeventがもつ修飾子のリストをリターンする。この修飾子はシンボルでありshift
、control
、meta
、alt
、hyper
、super
が含まれる。さらにマウスイベントシンボルの修飾子リストには常にclick
、drag
、down
のいずれか1つが含まれる。ダブルイベントとトリプルイベントには、double
やtriple
も含まれる。
引数eventはイベントオブジェクト全体、または単なるイベント型かもしれない。eventがカレントEmacsセッション内で入力として読み取られたイベント内で決して使用されないシンボルなら、実際に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コントロール文字にたいする修飾子リストでは、たとえ‘C-a’の修飾ビットを取り除いて値1をリターンするread-char
を通じて読み取られたイベントであってもcontrol
が含まれる。
この関数は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