特定の特殊イベントは、読み取られた直後に非常に低いレベルで処理されます。read-event関数はこれらのイベントを自ら処理し、決して返しません。その代わりに、特殊ではない最初のイベントを待ち続け、それを返します。
特殊イベントはエコーされず、キーシーケンスにまとめられることもなく、last-command-event や (this-command-keys) の値に現れることもありません。数値引数を破棄することはなく、unread-command-events
で未読に戻すこともできず、キーボードマクロに現れることもなく、またキーボードマクロを定義している最中に記録されることもありません。
ただし、特殊イベントは読み込まれた直後にlast-input-eventに出現し、これによりイベントの定義が実際のイベントを特定する仕組みとなっています。
イベントタイプ iconify-frame、make-frame-visible、delete-frame、drag-n-drop、language-change や、sigusr1
のようなユーザーシグナルは、通常このように処理されます。特殊イベントの処理方法――およびどのイベントが特殊であるか――を定義するキーマップは、変数
special-event-map に格納されています(アクティブキーマップの制御
を参照)。これらやその他の特殊イベントの詳細については、その他のシステムイベント を参照してください。
この関数は、入力イベントキューに特殊な event を挿入します。special-event-map
キーマップに含まれるイベントタイプのみが受け付けられます。その結果、キーマップで指定されたハンドラが呼び出されます。
この関数は nil を返します。 例:
(defun my-event-handler (event) (interactive "e") (message "Event arrived: %S" event)) ⇒ my-event-handler (keymap-set special-event-map "<sleep-event>" #'my-event-handler) ⇒ my-event-handler (insert-special-event '(sleep-event pre-sleep)) ⇒ nil ⇒ "Event arrived: (sleep-event pre-sleep)"