elisp: Button Types

 
 37.19.2 Button Types
 --------------------
 
 Every button has a “button type”, which defines default values for the
 button’s properties.  Button types are arranged in a hierarchy, with
 specialized types inheriting from more general types, so that it’s easy
 to define special-purpose types of buttons for specific tasks.
 
  -- Function: define-button-type name &rest properties
      Define a button type called NAME (a symbol).  The remaining
      arguments form a sequence of PROPERTY VALUE pairs, specifying
      default property values for buttons with this type (a button’s type
      may be set by giving it a ‘type’ property when creating the button,
      using the ‘:type’ keyword argument).
 
      In addition, the keyword argument ‘:supertype’ may be used to
      specify a button-type from which NAME inherits its default property
      values.  Note that this inheritance happens only when NAME is
      defined; subsequent changes to a supertype are not reflected in its
      subtypes.
 
    Using ‘define-button-type’ to define default properties for buttons
 is not necessary—buttons without any specified type use the built-in
 button-type ‘button’—but it is encouraged, since doing so usually makes
 the resulting code clearer and more efficient.