Function: insert-special-event

insert-special-event is a function defined in keyboard.c.

Signature

(insert-special-event EVENT)

Documentation

Insert the special EVENT into the input event queue.

Only 'input_event' slots KIND and ARG are set.

View in manual

Probably introduced at or before Emacs version 31.1.

Source Code

// Defined in /usr/src/emacs/src/keyboard.c
{
  /* Check, that it is a special event.  */
  CHECK_CONS (event);
  if (NILP (access_keymap
	    (get_keymap (Vspecial_event_map, 0, 1), event, 0, 0, 1)))
    /* FIXME: Remove this check.  Since 'special-event-map' may change
       between now and the moment we process the event, this check is
       unreliable, and it's redundant anyway since we check below
       if EVENT is one of the supported ones.  */
    signal_error ("Invalid special event kind", XCAR (event));

  /* Construct an input event.  */
  struct input_event ie;
  EVENT_INIT (ie);
  ie.kind =
    (EQ (XCAR (event), Qdelete_frame) ? DELETE_WINDOW_EVENT
#ifdef HAVE_NTGUI
     : EQ (XCAR (event), Qend_session) ? END_SESSION_EVENT
#endif
#ifdef HAVE_NS
     : EQ (XCAR (event), Qns_put_working_text) ? KEY_NS_PUT_WORKING_TEXT
#endif
#ifdef HAVE_NS
     : EQ (XCAR (event), Qns_unput_working_text) ? KEY_NS_UNPUT_WORKING_TEXT
#endif
     : EQ (XCAR (event), Qiconify_frame) ? ICONIFY_EVENT
     : EQ (XCAR (event), Qmake_frame_visible) ? DEICONIFY_EVENT
  /* : EQ (XCAR (event), Qselect_window) ? SELECT_WINDOW_EVENT */
     : EQ (XCAR (event), Qsave_session) ? SAVE_SESSION_EVENT
#ifdef HAVE_DBUS
     : EQ (XCAR (event), Qdbus_event) ? DBUS_EVENT
#endif
#ifdef THREADS_ENABLED
     : EQ (XCAR (event), Qthread_event) ? THREAD_EVENT
#endif
#ifdef USE_FILE_NOTIFY
     : EQ (XCAR (event), Qfile_notify) ? FILE_NOTIFY_EVENT
#endif /* USE_FILE_NOTIFY */
     : EQ (XCAR (event), Qconfig_changed_event) ? CONFIG_CHANGED_EVENT
#if defined (WINDOWSNT)
     : EQ (XCAR (event), Qlanguage_change) ? LANGUAGE_CHANGE_EVENT
#endif
     : EQ (XCAR (event), Qfocus_in) ? FOCUS_IN_EVENT
     : EQ (XCAR (event), Qfocus_out) ? FOCUS_OUT_EVENT
     : EQ (XCAR (event), Qmove_frame) ? MOVE_FRAME_EVENT
     : EQ (XCAR (event), Qsleep_event) ? SLEEP_EVENT
     : (signal_error ("Invalid special event kind", XCAR (event)), NO_EVENT));
  ie.frame_or_window = Qnil;
  ie.arg = CDR (event);

  /* Store it into the input event queue.  */
  kbd_buffer_store_event (&ie);

  return (Qnil);
}