emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/xelb 1f9470c 01/42: First commit


From: Chris Feng
Subject: [elpa] externals/xelb 1f9470c 01/42: First commit
Date: Thu, 17 Sep 2015 23:16:36 +0000

branch: externals/xelb
commit 1f9470c57081da9bc3bece5810bfb62c22e2abaa
Author: Chris Feng <address@hidden>
Commit: Chris Feng <address@hidden>

    First commit
---
 COPYING            |  674 +++++++++++++
 Makefile           |   32 +
 README             |    9 +
 el_client.el       |  578 +++++++++++
 xcb-bigreq.el      |   21 +
 xcb-composite.el   |   87 ++
 xcb-damage.el      |   83 ++
 xcb-dpms.el        |   79 ++
 xcb-dri2.el        |  273 +++++
 xcb-dri3.el        |   86 ++
 xcb-ge.el          |   25 +
 xcb-glx.el         | 1681 +++++++++++++++++++++++++++++++
 xcb-present.el     |  206 ++++
 xcb-randr.el       |  946 +++++++++++++++++
 xcb-record.el      |  181 ++++
 xcb-render.el      |  729 ++++++++++++++
 xcb-res.el         |  156 +++
 xcb-screensaver.el |  134 +++
 xcb-shape.el       |  152 +++
 xcb-shm.el         |  137 +++
 xcb-sync.el        |  296 ++++++
 xcb-types.el       |  625 ++++++++++++
 xcb-xc_misc.el     |   48 +
 xcb-xevie.el       |   70 ++
 xcb-xf86dri.el     |  170 ++++
 xcb-xf86vidmode.el |  517 ++++++++++
 xcb-xfixes.el      |  396 ++++++++
 xcb-xinerama.el    |   86 ++
 xcb-xinput.el      | 2770 ++++++++++++++++++++++++++++++++++++++++++++++++++
 xcb-xkb.el         | 2246 +++++++++++++++++++++++++++++++++++++++++
 xcb-xprint.el      |  354 +++++++
 xcb-xproto.el      | 2848 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 xcb-xselinux.el    |  333 ++++++
 xcb-xtest.el       |   58 ++
 xcb-xv.el          |  474 +++++++++
 xcb-xvmc.el        |  151 +++
 xcb.el             |  682 +++++++++++++
 37 files changed, 18393 insertions(+), 0 deletions(-)

diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..94a9ed0
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..9b2fe7d
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,32 @@
+PROTO_PATH := ../xcb-proto/src
+
+EMACS_BIN := emacs -Q
+
+EXTENSIONS := bigreq dpms ge present render shape xf86dri xinerama xprint \
+xtest composite dri2 glx randr res shm xc_misc xf86vidmode xinput xvmc \
+damage dri3 record screensaver sync xevie xfixes xkb xselinux xv
+# EXTENSIONS := render randr xkb
+
+LIBS = xcb-xproto.el $(addprefix xcb-,$(addsuffix .el,$(EXTENSIONS)))
+
+all: clean $(LIBS)
+
+xcb-%.el: $(PROTO_PATH)/%.xml
+       @echo -n "\n"Generating address@hidden
+       @$(EMACS_BIN) --script ./el_client.el $< > $@
+
+xcb-composite.el: xcb-xfixes.el
+xcb-damage.el: xcb-xfixes.el
+xcb-xvmc.el: xcb-xv.el
+xcb-randr.el: xcb-render.el
+xcb-xfixes.el: xcb-render.el xcb-shape.el
+xcb-present.el: xcb-randr.el
+xcb-present.el: xcb-xfixes.el
+xcb-present.el: xcb-sync.el
+xcb-xv.el: xcb-shm.el
+xcb-xinput.el: xcb-xfixes.el
+
+.PHONY: clean
+
+clean:
+       @rm -vf $(LIBS)
diff --git a/README b/README
new file mode 100644
index 0000000..5d87558
--- /dev/null
+++ b/README
@@ -0,0 +1,9 @@
+X protocol Emacs Lisp Binding
+=============================
+
+XELB (X protocol Emacs Lisp Binding) is a pure Elisp implementation of the X
+protocol based on the XML description files from XCB project. It features an
+object-oriented API and permits a certain degree of concurrency.
+
+While XELB is developed and tested on Emacs 25, it should also work on recent
+versions of Emacs 24.
diff --git a/el_client.el b/el_client.el
new file mode 100644
index 0000000..66d7a89
--- /dev/null
+++ b/el_client.el
@@ -0,0 +1,578 @@
+;;; el_client.el --- XELB Code Generator  -*- lexical-binding: t -*-
+
+;; Copyright (C) 2015 Chris Feng
+
+;; Author: Chris Feng <address@hidden>
+;; Keywords: unix
+
+;; This file is not part of GNU Emacs.
+
+;; This file is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This file is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this file.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; el_client is responsible for converting XCB XML description files into Elisp
+;; libraries. Here are a few design guidelines:
+;; + The generated codes should be human-readable and conform to the Elisp
+;;   coding conventions. Names mentioned in X specifications are preferred.
+;; + Deprecated features such as <valueparam> should be dropped, for
+;;   - they would generate incompatible codes, and
+;;   - they are probably already dropped upstream.
+;; + All documentations (within <doc> tags) and comments should be stripped
+;;   out to reduce the overall amount of code. XELB application developers are
+;;   then encouraged to refer to the corresponding specifications to get an
+;;   authoritative explanation.
+
+;; This file is only intended to be run as a script.
+
+;; References:
+;; + xcb/proto (git://anongit.freedesktop.org/xcb/proto)
+
+;;; Code:
+
+(require 'cl-lib)
+
+(setq pp-escape-newlines nil)
+
+;;;; Variables
+
+(defvar prefix "xcb:" "Namespace of this module.")
+(make-variable-buffer-local 'prefix)
+
+(defvar error-alist nil "Record X errors in this module.")
+(make-variable-buffer-local 'error-alist)
+
+(defvar event-alist nil "Record X events in this module.")
+(make-variable-buffer-local 'event-alist)
+
+;;;; Helper functions
+
+(defsubst node-name (node)
+  "Return the tag name of node NODE."
+  (car node))
+
+(defsubst node-attr (node attr)
+  "Return the attribute ATTR of node NODE."
+  (cdr (assoc attr (cadr node))))
+
+(defsubst escape-name (name)
+  "Replace underscores in NAME with dashes."
+  (replace-regexp-in-string "_" "-" name))
+
+(defsubst node-name-escape (node)
+  "Return the tag name of node NODE and escape it."
+  (escape-name (node-name node)))
+
+(defsubst node-attr-escape (node attr)
+  "Return the attribute ATTR of node NODE and escape it."
+  (escape-name (node-attr node attr)))
+
+(defsubst node-subnodes (node)
+  "Return all the subnodes of node NODE as a list."
+  (cddr node))
+
+(defsubst node-subnode (node)
+  "Return the (only) subnode of node NODE with useless contents skipped."
+  (let ((result (node-subnodes node)))
+    (catch 'break
+      (dolist (i result)
+        (unless (and (listp i)
+                     (or (eq (node-name i) 'comment) (eq (node-name i) 'doc)))
+          (throw 'break i))))))
+
+;;;; Entry & root element
+
+(defun parse (file)
+  "Parse an XCB protocol description file FILE (XML)."
+  (let (result header)
+    (with-temp-buffer
+      (insert-file-contents file)
+      (setq result (libxml-parse-xml-region (point-min) (point-max) nil t))
+      (cl-assert (eq 'xcb (node-name result)))
+      (setq header (node-attr result 'header))
+      (unless (string= header "xproto")
+        (setq prefix (concat prefix header ":")))
+      ;; Print header
+      (princ (format "\
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `%s' by `el_client.el'.
+\n(require 'xcb-types)\n\n" (file-name-nondirectory file)))
+      ;; Print extension info (if any)
+      (let ((extension-xname (node-attr result 'extension-xname))
+            (extension-name (node-attr result 'extension-name))
+            (major-version (node-attr result 'major-version))
+            (minor-version (node-attr result 'minor-version)))
+        (when extension-xname
+          (pp `(defconst ,(intern (concat prefix "-extension-xname"))
+                 ,extension-xname)))
+        (when extension-name
+          (pp `(defconst ,(intern (concat prefix "-extension-name"))
+                 ,extension-name)))
+        (when major-version
+          (pp `(defconst ,(intern (concat prefix "-major-version"))
+                 ,(string-to-number major-version))))
+        (when minor-version
+          (pp `(defconst ,(intern (concat prefix "-minor-version"))
+                 ,(string-to-number minor-version))))
+        (when (or extension-xname extension-name major-version minor-version)
+          (princ "\n")))
+      ;; Print contents
+      (dolist (i (node-subnodes result))
+        (let ((result (parse-top-level-element i)))
+          (when result                  ;skip <doc>, comments, etc
+            (dolist (j result)
+              (pp j))
+            (princ "\n"))))
+      ;; Print error/event alists
+      (when error-alist
+        (pp `(defconst ,(intern (concat prefix "error-number-class-alist"))
+               ',error-alist "(error-number . error-class) alist"))
+        (princ "\n"))
+      (when event-alist
+        (pp `(defconst ,(intern (concat prefix "event-number-class-alist"))
+               ',event-alist "(event-number . event-class) alist"))
+        (princ "\n"))
+      ;; Print footer
+      (princ (format "\n\n(provide 'xcb-%s)\n" header)))))
+
+;;;; XCB: top-level elements
+
+(defun parse-top-level-element (node)
+  "Parse a top-level element."
+  (pcase (node-name node)
+    (`import (parse-import node))
+    (`struct (parse-struct node))
+    (`union (parse-union node))
+    ((or `xidtype `xidunion)
+     (parse-xidtype node))              ;they are basically the same
+    (`enum (parse-enum node))
+    (`typedef (parse-typedef node))
+    (`request (parse-request node))
+    (`event (parse-event node))
+    (`error (parse-error node))
+    (`eventcopy (parse-eventcopy node))
+    (`errorcopy (parse-errorcopy node))
+    ((or `comment `doc))                ;ignored
+    (x (error "Unsupported top-level element: <%s>" x))))
+
+(defun parse-import (node)
+  "Parse <import>."
+  (let ((header (intern (concat "xcb-" (node-subnode node)))))
+    (require header)
+    `((require ',header))))
+
+(defun parse-struct (node)
+  "Parse <struct>."
+  (let ((name (intern (concat prefix (node-attr node 'name))))
+        (contents (node-subnodes node))
+        (pad-count 0)
+        result)
+    (setq contents
+          (apply 'nconc
+                 (mapcar (lambda (i)
+                           (setq result (parse-structure-content i))
+                           (when (eq (node-name i) 'pad) ;rename pad~
+                             (setq result
+                                   `((,(intern (format "pad~%d" pad-count))
+                                      ,@(cdar result))))
+                             (setq pad-count (1+ pad-count)))
+                           result)
+                         contents)))
+    `((defclass ,name (xcb:-struct) ,contents))))
+
+(defun parse-union (node)
+  "Parse <union>."
+  (let ((name (intern (concat prefix (node-attr node 'name))))
+        (contents (node-subnodes node)))
+    (setq contents
+          (apply 'nconc
+                 (mapcar (lambda (i)
+                           (parse-structure-content i))
+                         contents)))
+    `((defclass ,name (xcb:-union) ,contents))))
+
+(defun parse-xidtype (node)
+  "Parse <xidtype>."
+  (let ((name (intern (concat prefix (node-attr node 'name)))))
+    `((xcb:deftypealias ',name 'xcb:-u4))))
+
+(defun parse-enum (node)
+  "Parse <enum>."
+  (let ((name-prefix (concat prefix (node-attr node 'name) ":"))
+        (items (node-subnodes node))
+        (value 0))
+    (delq nil                ;remove nil's produced by tags like <doc>
+          (mapcar (lambda (i)
+                    (when (eq (node-name i) 'item) ;only handle <item> tags
+                      (let* ((name (node-attr i 'name))
+                             (name (intern (concat name-prefix name)))
+                             (expression (node-subnode i)))
+                        (if expression
+                            (setq value (parse-expression expression))
+                          (setq value (1+ value)))
+                        `(defconst ,name ,value))))
+                  items))))
+
+(defun parse-typedef (node)
+  "Parse <typedef>."
+  (let* ((oldname (node-attr node 'oldname))
+         (oldname (or (intern-soft (concat "xcb:" oldname))
+                      (intern (concat prefix oldname))))
+         (newname (intern (concat prefix (node-attr node 'newname)))))
+    `((xcb:deftypealias ',newname ',oldname))))
+
+(defun parse-request (node)
+  "Parse <request>.
+
+The `combine-adjacent' attribute is simply ignored."
+  (let* ((name (intern (concat prefix (node-attr node 'name))))
+         (opcode (string-to-int (node-attr node 'opcode)))
+         (contents `((~opcode :initform ,opcode :type xcb:-u1)))
+         (subnodes (node-subnodes node))
+         (pad-count 0)
+         (reply-pad-count 0)
+         expressions
+         result reply-result reply-name reply-contents)
+    (dolist (i subnodes)
+      (if (not (eq (node-name i) 'reply))
+          (progn
+            (setq result (parse-structure-content i))
+            (pcase (node-name i)
+              (`pad                     ;rename pad~
+               (setq result
+                     `((,(intern (format "pad~%d" pad-count))
+                        ,@(cdar result))))
+               (setq pad-count (1+ pad-count))
+               (setq contents (nconc contents result)))
+              (`exprfield             ;split into field and expression
+               (setq contents (nconc contents (list (car result))))
+               (setq expressions (nconc expressions (list (cadr result)))))
+              (_ (setq contents (nconc contents result)))))
+        ;; Parse <reply>
+        (setq reply-name
+              (intern (concat prefix (node-attr node 'name) "~reply")))
+        (setq reply-contents (node-subnodes i))
+        (setq reply-contents
+              (apply 'nconc
+                     (mapcar (lambda (j)
+                               (setq reply-result (parse-structure-content j))
+                               (when (eq (node-name j) 'pad) ;rename pad~
+                                 (setq reply-result
+                                       `((,(intern (format "pad~%d"
+                                                           reply-pad-count))
+                                          ,@(cdar reply-result))))
+                                 (setq reply-pad-count (1+ reply-pad-count)))
+                               reply-result)
+                             reply-contents)))))
+    (delq nil contents)
+    (delq nil
+          `((defclass ,name (xcb:-request) ,contents)
+            ;; The optional expressions
+            ,(when expressions
+               `(cl-defmethod xcb:marshal ((obj ,name) connection) nil
+                              ,@expressions
+                              (cl-call-next-method obj connection)))
+            ;; The optional reply body
+            ,(when reply-name
+               (delq nil reply-contents)
+               `(defclass ,reply-name (xcb:-reply) ,reply-contents))))))
+
+(defun parse-event (node)
+  "Parse <event>.
+
+The `no-sequence-number' is ignored here since it's only used for
+KeymapNotify event; instead, we handle this case in `xcb:unmarshal'."
+  (let ((name (intern (concat prefix (node-attr node 'name))))
+        (event-number (string-to-int (node-attr node 'number)))
+        (xge (node-attr node 'xge))
+        (contents (node-subnodes node))
+        (pad-count 0)
+        result)
+    (setq contents
+          (apply 'nconc
+                 (mapcar (lambda (i)
+                           (setq result (parse-structure-content i))
+                           (when (eq (node-name i) 'pad) ;rename pad~
+                             (setq result
+                                   `((,(intern (format "pad~%d" pad-count))
+                                      ,@(cdar result))))
+                             (setq pad-count (1+ pad-count)))
+                           result)
+                         contents)))
+    (when xge                           ;generic event
+      (setq contents
+            (append
+             '((extension :type xcb:CARD8)
+               (length :type xcb:CARD32)
+               (evtype :type xcb:CARD16))
+             contents)))
+    (setq event-alist (nconc event-alist `((,event-number . ,name))))
+    `((defclass ,name (xcb:-event) ,contents))))
+
+(defun parse-error (node)
+  "Parse <error>."
+  (let ((name (intern (concat prefix (node-attr node 'name))))
+        (error-number (string-to-int (node-attr node 'number)))
+        (contents (node-subnodes node))
+        (pad-count 0)
+        result)
+    (setq contents
+          (apply 'nconc
+                (mapcar (lambda (i)
+                          (setq result (parse-structure-content i))
+                          (when (eq (node-name i) 'pad) ;rename pad~
+                            (setq result
+                                  `((,(intern (format "pad~%d" pad-count))
+                                     ,@(cdar result))))
+                            (setq pad-count (1+ pad-count)))
+                          result)
+                        contents)))
+    (setq error-alist (nconc error-alist `((,error-number . ,name))))
+    `((defclass ,name (xcb:-error) ,contents))))
+
+(defun parse-eventcopy (node)
+  "Parse <eventcopy>."
+  (let* ((name (intern (concat prefix (node-attr node 'name))))
+         (refname (node-attr node 'ref))
+         (refname (or (intern-soft (concat "xcb:" refname))
+                      (intern (concat prefix refname))))
+         (event-number (string-to-int (node-attr node 'number))))
+    (setq event-alist (nconc event-alist `((,event-number . ,name))))
+    `((defclass ,name (xcb:-event ,refname) nil)))) ;shadow the method of ref
+
+(defun parse-errorcopy (node)
+  "Parse <errorcopy>."
+  (let* ((name (intern (concat prefix (node-attr node 'name))))
+         (refname (node-attr node 'ref))
+         (refname (or (intern-soft (concat "xcb:" refname))
+                      (intern (concat prefix refname))))
+         (error-number (string-to-int (node-attr node 'number))))
+    (setq error-alist (nconc error-alist `((,error-number . ,name))))
+    `((defclass ,name (xcb:-error ,refname) nil)))) ;shadow the method of ref
+
+;;;; XCB: structure contents
+
+(defun parse-structure-content (node)
+  "Parse a structure content."
+  (pcase (node-name node)
+    (`pad (parse-pad node))
+    (`field (parse-field node))
+    (`fd (parse-fd node))
+    (`list (parse-list node))
+    (`exprfield (parse-exprfield node))
+    (`switch (parse-switch node))
+    ((or `comment `doc))                ;simply ignored
+    (x (error "Unsupported structure content: <%s>" x))))
+
+;; The car of the result shall be renamed to prevent duplication of slot names
+(defun parse-pad (node)
+  "Parse <pad>."
+  (let ((bytes (node-attr node 'bytes))
+        (align (node-attr node 'align)))
+    (if bytes
+        `((pad~ :initform ,(string-to-int bytes) :type xcb:-pad))
+      (if align
+          `((pad~ :initform ,(string-to-int align) :type xcb:-pad-align))
+        (error "Invalid <pad> field")))))
+
+(defun parse-field (node)
+  "Parse <field>."
+  (let* ((name (intern (node-attr-escape node 'name)))
+         (type (node-attr node 'type))
+         (type (or (intern-soft (concat "xcb:" type)) ;extension or xproto
+                   (intern (concat prefix type)))))
+    `((,name :initarg ,(intern (concat ":" (symbol-name name))) :type ,type))))
+
+(defun parse-fd (node)
+  "Parse <fd>."
+  (let ((name (intern (node-attr-escape node 'name))))
+    `((,name :type xcb:-fd))))
+
+(defun parse-list (node)
+  "Parse <list>."
+  (let* ((name (intern (node-attr-escape node 'name)))
+         (name-alt (intern (concat (node-attr-escape node 'name) "~")))
+         (type (node-attr node 'type))
+         (type (or (intern-soft (concat "xcb:" type))
+                   (intern (concat prefix type))))
+         (size (parse-expression (node-subnode node))))
+    `((,name :initarg ,(intern (concat ":" (symbol-name name)))
+             :type xcb:-ignore)
+      (,name-alt :initform '(name ,name type ,type size ,size)
+                 :type xcb:-list))))
+
+;; The car of result is the field declaration, and the cadr is the expression
+;; to be evaluated.
+(defun parse-exprfield (node)
+  "Parse <exprfield>."
+  (let* ((name (intern (node-attr-escape node 'name)))
+         (type (node-attr node 'type))
+         (type (or (intern-soft (concat "xcb:" type))
+                   (intern (concat prefix type))))
+         (value (parse-expression (node-subnode node))))
+    `((,name :type ,type)
+      (setf (slot-value obj ',name) ',value))))
+
+;; The only difference between <bitcase> and <case> is whether the `condition'
+;; is a list
+;; The name attribute of <bitcase> and <case> seems not useful here.
+(defun parse-switch (node)
+  "Parse <switch>."
+  (let ((name (intern (node-attr-escape node 'name)))
+        (expression (parse-expression (car (node-subnodes node))))
+        (cases (cdr (node-subnodes node)))
+        (pad-count 10) ;avoid naming duplication (as only one <swith> allowed)
+        fields fields-name)
+    ;; Avoid duplicated slot names by appending "*" if necessary
+    (let (names name)
+      (dolist (case cases)
+        (pcase (node-name case)
+          ((or `bitcase `case)
+           (dolist (field (node-subnodes case))
+             (pcase (node-name field)
+               ((or `enumref `pad `doc `comment))
+               (_
+                (setq name (node-attr field 'name))
+                (when (member name names)
+                  (while (member name names)
+                    (setq name (concat name "*")))
+                  (setcdr (assoc 'name (cadr field)) name))
+                (cl-pushnew name names :test 'equal))))))))
+    (setq cases
+          (mapcar (lambda (i)
+                    (let ((case-name (node-name i))
+                          condition name-list tmp)
+                      (when (or (eq case-name 'bitcase) (eq case-name 'case))
+                        (dolist (j (node-subnodes i))
+                          (pcase (node-name j)
+                            (`enumref
+                             (setq condition
+                                   (nconc condition (list (parse-enumref j)))))
+                            (x
+                             (setq tmp (parse-structure-content j))
+                             (when (eq x 'pad) ;rename pad~
+                               (setq tmp
+                                     `((,(intern (format "pad~%d" pad-count))
+                                        ,@(cdar tmp))))
+                               (setq pad-count (1+ pad-count)))
+                             (setq fields (nconc fields tmp))
+                             (setq name-list
+                                   (nconc name-list (list (caar tmp)))))))
+                        (when (eq case-name 'bitcase)
+                          (setq condition (if (= 1 (length condition))
+                                              (car condition)
+                                            `(logior ,@condition)))))
+                      `(,condition ,@name-list)))
+                  cases))
+    `((,name :initform '(expression ,expression cases ,cases)
+             :type xcb:-switch)
+      ,@fields)))
+
+;;;; XCB: expressions
+
+(defun parse-expression (node)
+  "Parse an expression."
+  (when node
+    (pcase (node-name node)
+      (`op (parse-op node))
+      (`fieldref (parse-fieldref node))
+      (`paramref (parse-paramref node))
+      (`value (parse-value node))
+      (`bit (parse-bit node))
+      (`enumref (parse-enumref node))
+      (`unop (parse-unop node))
+      (`sumof (parse-sumof node))
+      (`popcount (parse-popcount node))
+      (`listelement-ref (parse-listelement-ref node))
+      ((or `comment `doc))                ;simply ignored
+      (x (error "Unsupported expression: <%s>" x)))))
+
+(defun parse-op (node)
+  "Parse <op>."
+  (let* ((subnodes (node-subnodes node))
+         (x (parse-expression (car subnodes)))
+         (y (parse-expression (cadr subnodes))))
+    (pcase (node-attr node 'op)
+      ("+" `(+ ,x ,y))
+      ("-" `(- ,x ,y))
+      ("*" `(* ,x ,y))
+      ("/" `(/ ,x ,y))
+      ("&" `(logand ,x ,y))
+      ("<<" `(lsh ,x ,y))
+      (x (error "Unsupported operator: `%s'" x)))))
+
+(defun parse-fieldref (node)
+  "Parse <fieldref>."
+  `(xcb:-fieldref ',(intern (escape-name (node-subnode node)))))
+
+(defun parse-paramref (node)
+  "Parse <paramref>."
+  `(xcb:-paramref ',(intern (escape-name (node-subnode node)))))
+
+(defun parse-value (node)
+  "Parse <value>."
+  (string-to-int (replace-regexp-in-string "^0x" "#x" (node-subnode node))))
+
+(defun parse-bit (node)
+  "Parse <bit>."
+  (let ((bit (string-to-int (node-subnode node))))
+    (cl-assert (and (<= 0 bit) (>= 31 bit)))
+    (lsh 1 bit)))
+
+(defun parse-enumref (node)
+  "Parse <enumref>."
+  (let ((name (concat (node-attr node 'ref) ":" (node-subnode node))))
+    (or (intern-soft (concat "xcb:" name))
+        (intern (concat prefix name)))))
+
+(defun parse-unop (node)
+  "Parse <unop>."
+  (cl-assert (string= "~" (node-attr node 'op)))
+  `(lognot (parse-expression (node-subnode node))))
+
+(defun parse-sumof (node)
+  "Parse <sumof>."
+  (let* ((ref (intern (node-attr-escape node 'ref)))
+         (expression (node-subnode node))
+         (list-data `(slot-value obj ',ref)))
+    (if (not expression)
+        `(apply '+ ,list-data)
+      (setq expression (parse-expression expression))
+      `(apply '+ (mapcar (lambda (i)
+                           (eval ',expression (list (nconc '(obj) i))))
+                         ,list-data)))))
+
+(defun parse-popcount (node)
+  "Parse <popcount>."
+  (let ((expression (parse-expression (node-subnode node))))
+    `(xcb:-popcount ,expression)))
+
+(defun parse-listelement-ref (node)
+  "Parse <listelement-ref>."
+  'obj)                      ;a list element is internally named 'obj'
+
+;;;; The entry
+
+(setq debug-on-error t)
+(setq edebug-all-forms t)
+
+(if (not argv)
+    (error "Usage: el_client.el <protocol.xml> [additional_load_paths]")
+  (add-to-list 'load-path default-directory)
+  (dolist (i (cdr argv))
+    (add-to-list 'load-path i))
+  (require 'xcb-types)
+  (parse (car argv)))
+
+;;; el_client.el ends here
diff --git a/xcb-bigreq.el b/xcb-bigreq.el
new file mode 100644
index 0000000..4f24dfc
--- /dev/null
+++ b/xcb-bigreq.el
@@ -0,0 +1,21 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `bigreq.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:bigreq:-extension-xname "BIG-REQUESTS")
+(defconst xcb:bigreq:-extension-name "BigRequests")
+(defconst xcb:bigreq:-major-version 0)
+(defconst xcb:bigreq:-minor-version 0)
+
+(defclass xcb:bigreq:Enable
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)))
+(defclass xcb:bigreq:Enable~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (maximum-request-length :initarg :maximum-request-length :type xcb:CARD32)))
+
+
+
+(provide 'xcb-bigreq)
diff --git a/xcb-composite.el b/xcb-composite.el
new file mode 100644
index 0000000..77c1807
--- /dev/null
+++ b/xcb-composite.el
@@ -0,0 +1,87 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `composite.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:composite:-extension-xname "Composite")
+(defconst xcb:composite:-extension-name "Composite")
+(defconst xcb:composite:-major-version 0)
+(defconst xcb:composite:-minor-version 4)
+
+(require 'xcb-xproto)
+
+(require 'xcb-xfixes)
+
+(defconst xcb:composite:Redirect:Automatic 0)
+(defconst xcb:composite:Redirect:Manual 1)
+
+(defclass xcb:composite:QueryVersion
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)
+   (client-major-version :initarg :client-major-version :type xcb:CARD32)
+   (client-minor-version :initarg :client-minor-version :type xcb:CARD32)))
+(defclass xcb:composite:QueryVersion~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (major-version :initarg :major-version :type xcb:CARD32)
+   (minor-version :initarg :minor-version :type xcb:CARD32)
+   (pad~1 :initform 16 :type xcb:-pad)))
+
+(defclass xcb:composite:RedirectWindow
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (update :initarg :update :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:composite:RedirectSubwindows
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (update :initarg :update :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:composite:UnredirectWindow
+  (xcb:-request)
+  ((~opcode :initform 3 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (update :initarg :update :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:composite:UnredirectSubwindows
+  (xcb:-request)
+  ((~opcode :initform 4 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (update :initarg :update :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:composite:CreateRegionFromBorderClip
+  (xcb:-request)
+  ((~opcode :initform 5 :type xcb:-u1)
+   (region :initarg :region :type xcb:composite:REGION)
+   (window :initarg :window :type xcb:WINDOW)))
+
+(defclass xcb:composite:NameWindowPixmap
+  (xcb:-request)
+  ((~opcode :initform 6 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (pixmap :initarg :pixmap :type xcb:PIXMAP)))
+
+(defclass xcb:composite:GetOverlayWindow
+  (xcb:-request)
+  ((~opcode :initform 7 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)))
+(defclass xcb:composite:GetOverlayWindow~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (overlay-win :initarg :overlay-win :type xcb:WINDOW)
+   (pad~1 :initform 20 :type xcb:-pad)))
+
+(defclass xcb:composite:ReleaseOverlayWindow
+  (xcb:-request)
+  ((~opcode :initform 8 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)))
+
+
+
+(provide 'xcb-composite)
diff --git a/xcb-damage.el b/xcb-damage.el
new file mode 100644
index 0000000..9cf4362
--- /dev/null
+++ b/xcb-damage.el
@@ -0,0 +1,83 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `damage.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:damage:-extension-xname "DAMAGE")
+(defconst xcb:damage:-extension-name "Damage")
+(defconst xcb:damage:-major-version 1)
+(defconst xcb:damage:-minor-version 1)
+
+(require 'xcb-xproto)
+
+(require 'xcb-xfixes)
+
+(xcb:deftypealias 'xcb:damage:DAMAGE 'xcb:-u4)
+
+(defconst xcb:damage:ReportLevel:RawRectangles 0)
+(defconst xcb:damage:ReportLevel:DeltaRectangles 1)
+(defconst xcb:damage:ReportLevel:BoundingBox 2)
+(defconst xcb:damage:ReportLevel:NonEmpty 3)
+
+(defclass xcb:damage:BadDamage
+  (xcb:-error)
+  nil)
+
+(defclass xcb:damage:QueryVersion
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)
+   (client-major-version :initarg :client-major-version :type xcb:CARD32)
+   (client-minor-version :initarg :client-minor-version :type xcb:CARD32)))
+(defclass xcb:damage:QueryVersion~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (major-version :initarg :major-version :type xcb:CARD32)
+   (minor-version :initarg :minor-version :type xcb:CARD32)
+   (pad~1 :initform 16 :type xcb:-pad)))
+
+(defclass xcb:damage:Create
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)
+   (damage :initarg :damage :type xcb:damage:DAMAGE)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (level :initarg :level :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:damage:Destroy
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)
+   (damage :initarg :damage :type xcb:damage:DAMAGE)))
+
+(defclass xcb:damage:Subtract
+  (xcb:-request)
+  ((~opcode :initform 3 :type xcb:-u1)
+   (damage :initarg :damage :type xcb:damage:DAMAGE)
+   (repair :initarg :repair :type xcb:damage:REGION)
+   (parts :initarg :parts :type xcb:damage:REGION)))
+
+(defclass xcb:damage:Add
+  (xcb:-request)
+  ((~opcode :initform 4 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (region :initarg :region :type xcb:damage:REGION)))
+
+(defclass xcb:damage:Notify
+  (xcb:-event)
+  ((level :initarg :level :type xcb:CARD8)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (damage :initarg :damage :type xcb:damage:DAMAGE)
+   (timestamp :initarg :timestamp :type xcb:TIMESTAMP)
+   (area :initarg :area :type xcb:RECTANGLE)
+   (geometry :initarg :geometry :type xcb:RECTANGLE)))
+
+(defconst xcb:damage:error-number-class-alist
+  '((0 . xcb:damage:BadDamage))
+  "(error-number . error-class) alist")
+
+(defconst xcb:damage:event-number-class-alist
+  '((0 . xcb:damage:Notify))
+  "(event-number . event-class) alist")
+
+
+
+(provide 'xcb-damage)
diff --git a/xcb-dpms.el b/xcb-dpms.el
new file mode 100644
index 0000000..bd6411d
--- /dev/null
+++ b/xcb-dpms.el
@@ -0,0 +1,79 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `dpms.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:dpms:-extension-xname "DPMS")
+(defconst xcb:dpms:-extension-name "DPMS")
+(defconst xcb:dpms:-major-version 0)
+(defconst xcb:dpms:-minor-version 0)
+
+(defclass xcb:dpms:GetVersion
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)
+   (client-major-version :initarg :client-major-version :type xcb:CARD16)
+   (client-minor-version :initarg :client-minor-version :type xcb:CARD16)))
+(defclass xcb:dpms:GetVersion~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (server-major-version :initarg :server-major-version :type xcb:CARD16)
+   (server-minor-version :initarg :server-minor-version :type xcb:CARD16)))
+
+(defclass xcb:dpms:Capable
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)))
+(defclass xcb:dpms:Capable~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (capable :initarg :capable :type xcb:BOOL)
+   (pad~1 :initform 23 :type xcb:-pad)))
+
+(defclass xcb:dpms:GetTimeouts
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)))
+(defclass xcb:dpms:GetTimeouts~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (standby-timeout :initarg :standby-timeout :type xcb:CARD16)
+   (suspend-timeout :initarg :suspend-timeout :type xcb:CARD16)
+   (off-timeout :initarg :off-timeout :type xcb:CARD16)
+   (pad~1 :initform 18 :type xcb:-pad)))
+
+(defclass xcb:dpms:SetTimeouts
+  (xcb:-request)
+  ((~opcode :initform 3 :type xcb:-u1)
+   (standby-timeout :initarg :standby-timeout :type xcb:CARD16)
+   (suspend-timeout :initarg :suspend-timeout :type xcb:CARD16)
+   (off-timeout :initarg :off-timeout :type xcb:CARD16)))
+
+(defclass xcb:dpms:Enable
+  (xcb:-request)
+  ((~opcode :initform 4 :type xcb:-u1)))
+
+(defclass xcb:dpms:Disable
+  (xcb:-request)
+  ((~opcode :initform 5 :type xcb:-u1)))
+
+(defconst xcb:dpms:DPMSMode:On 0)
+(defconst xcb:dpms:DPMSMode:Standby 1)
+(defconst xcb:dpms:DPMSMode:Suspend 2)
+(defconst xcb:dpms:DPMSMode:Off 3)
+
+(defclass xcb:dpms:ForceLevel
+  (xcb:-request)
+  ((~opcode :initform 6 :type xcb:-u1)
+   (power-level :initarg :power-level :type xcb:CARD16)))
+
+(defclass xcb:dpms:Info
+  (xcb:-request)
+  ((~opcode :initform 7 :type xcb:-u1)))
+(defclass xcb:dpms:Info~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (power-level :initarg :power-level :type xcb:CARD16)
+   (state :initarg :state :type xcb:BOOL)
+   (pad~1 :initform 21 :type xcb:-pad)))
+
+
+
+(provide 'xcb-dpms)
diff --git a/xcb-dri2.el b/xcb-dri2.el
new file mode 100644
index 0000000..f30db9f
--- /dev/null
+++ b/xcb-dri2.el
@@ -0,0 +1,273 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `dri2.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:dri2:-extension-xname "DRI2")
+(defconst xcb:dri2:-extension-name "DRI2")
+(defconst xcb:dri2:-major-version 1)
+(defconst xcb:dri2:-minor-version 4)
+
+(require 'xcb-xproto)
+
+(defconst xcb:dri2:Attachment:BufferFrontLeft 0)
+(defconst xcb:dri2:Attachment:BufferBackLeft 1)
+(defconst xcb:dri2:Attachment:BufferFrontRight 2)
+(defconst xcb:dri2:Attachment:BufferBackRight 3)
+(defconst xcb:dri2:Attachment:BufferDepth 4)
+(defconst xcb:dri2:Attachment:BufferStencil 5)
+(defconst xcb:dri2:Attachment:BufferAccum 6)
+(defconst xcb:dri2:Attachment:BufferFakeFrontLeft 7)
+(defconst xcb:dri2:Attachment:BufferFakeFrontRight 8)
+(defconst xcb:dri2:Attachment:BufferDepthStencil 9)
+(defconst xcb:dri2:Attachment:BufferHiz 10)
+
+(defconst xcb:dri2:DriverType:DRI 0)
+(defconst xcb:dri2:DriverType:VDPAU 1)
+
+(defconst xcb:dri2:EventType:ExchangeComplete 1)
+(defconst xcb:dri2:EventType:BlitComplete 2)
+(defconst xcb:dri2:EventType:FlipComplete 3)
+
+(defclass xcb:dri2:DRI2Buffer
+  (xcb:-struct)
+  ((attachment :initarg :attachment :type xcb:CARD32)
+   (name :initarg :name :type xcb:CARD32)
+   (pitch :initarg :pitch :type xcb:CARD32)
+   (cpp :initarg :cpp :type xcb:CARD32)
+   (flags :initarg :flags :type xcb:CARD32)))
+
+(defclass xcb:dri2:AttachFormat
+  (xcb:-struct)
+  ((attachment :initarg :attachment :type xcb:CARD32)
+   (format :initarg :format :type xcb:CARD32)))
+
+(defclass xcb:dri2:QueryVersion
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)
+   (major-version :initarg :major-version :type xcb:CARD32)
+   (minor-version :initarg :minor-version :type xcb:CARD32)))
+(defclass xcb:dri2:QueryVersion~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (major-version :initarg :major-version :type xcb:CARD32)
+   (minor-version :initarg :minor-version :type xcb:CARD32)))
+
+(defclass xcb:dri2:Connect
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (driver-type :initarg :driver-type :type xcb:CARD32)))
+(defclass xcb:dri2:Connect~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (driver-name-length :initarg :driver-name-length :type xcb:CARD32)
+   (device-name-length :initarg :device-name-length :type xcb:CARD32)
+   (pad~1 :initform 16 :type xcb:-pad)
+   (driver-name :initarg :driver-name :type xcb:-ignore)
+   (driver-name~ :initform
+                '(name driver-name type xcb:char size
+                       (xcb:-fieldref 'driver-name-length))
+                :type xcb:-list)
+   (alignment-pad :initarg :alignment-pad :type xcb:-ignore)
+   (alignment-pad~ :initform
+                  '(name alignment-pad type xcb:void size
+                         (-
+                          (logand
+                           (+
+                            (xcb:-fieldref 'driver-name-length)
+                            3)
+                           (lognot
+                            (parse-expression
+                             (node-subnode node))))
+                          (xcb:-fieldref 'driver-name-length)))
+                  :type xcb:-list)
+   (device-name :initarg :device-name :type xcb:-ignore)
+   (device-name~ :initform
+                '(name device-name type xcb:char size
+                       (xcb:-fieldref 'device-name-length))
+                :type xcb:-list)))
+
+(defclass xcb:dri2:Authenticate
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (magic :initarg :magic :type xcb:CARD32)))
+(defclass xcb:dri2:Authenticate~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (authenticated :initarg :authenticated :type xcb:CARD32)))
+
+(defclass xcb:dri2:CreateDrawable
+  (xcb:-request)
+  ((~opcode :initform 3 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)))
+
+(defclass xcb:dri2:DestroyDrawable
+  (xcb:-request)
+  ((~opcode :initform 4 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)))
+
+(defclass xcb:dri2:GetBuffers
+  (xcb:-request)
+  ((~opcode :initform 5 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (count :initarg :count :type xcb:CARD32)
+   (attachments :initarg :attachments :type xcb:-ignore)
+   (attachments~ :initform
+                '(name attachments type xcb:CARD32 size nil)
+                :type xcb:-list)))
+(defclass xcb:dri2:GetBuffers~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (width :initarg :width :type xcb:CARD32)
+   (height :initarg :height :type xcb:CARD32)
+   (count :initarg :count :type xcb:CARD32)
+   (pad~1 :initform 12 :type xcb:-pad)
+   (buffers :initarg :buffers :type xcb:-ignore)
+   (buffers~ :initform
+            '(name buffers type xcb:dri2:DRI2Buffer size
+                   (xcb:-fieldref 'count))
+            :type xcb:-list)))
+
+(defclass xcb:dri2:CopyRegion
+  (xcb:-request)
+  ((~opcode :initform 6 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (region :initarg :region :type xcb:CARD32)
+   (dest :initarg :dest :type xcb:CARD32)
+   (src :initarg :src :type xcb:CARD32)))
+(defclass xcb:dri2:CopyRegion~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)))
+
+(defclass xcb:dri2:GetBuffersWithFormat
+  (xcb:-request)
+  ((~opcode :initform 7 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (count :initarg :count :type xcb:CARD32)
+   (attachments :initarg :attachments :type xcb:-ignore)
+   (attachments~ :initform
+                '(name attachments type xcb:dri2:AttachFormat size nil)
+                :type xcb:-list)))
+(defclass xcb:dri2:GetBuffersWithFormat~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (width :initarg :width :type xcb:CARD32)
+   (height :initarg :height :type xcb:CARD32)
+   (count :initarg :count :type xcb:CARD32)
+   (pad~1 :initform 12 :type xcb:-pad)
+   (buffers :initarg :buffers :type xcb:-ignore)
+   (buffers~ :initform
+            '(name buffers type xcb:dri2:DRI2Buffer size
+                   (xcb:-fieldref 'count))
+            :type xcb:-list)))
+
+(defclass xcb:dri2:SwapBuffers
+  (xcb:-request)
+  ((~opcode :initform 8 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (target-msc-hi :initarg :target-msc-hi :type xcb:CARD32)
+   (target-msc-lo :initarg :target-msc-lo :type xcb:CARD32)
+   (divisor-hi :initarg :divisor-hi :type xcb:CARD32)
+   (divisor-lo :initarg :divisor-lo :type xcb:CARD32)
+   (remainder-hi :initarg :remainder-hi :type xcb:CARD32)
+   (remainder-lo :initarg :remainder-lo :type xcb:CARD32)))
+(defclass xcb:dri2:SwapBuffers~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (swap-hi :initarg :swap-hi :type xcb:CARD32)
+   (swap-lo :initarg :swap-lo :type xcb:CARD32)))
+
+(defclass xcb:dri2:GetMSC
+  (xcb:-request)
+  ((~opcode :initform 9 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)))
+(defclass xcb:dri2:GetMSC~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (ust-hi :initarg :ust-hi :type xcb:CARD32)
+   (ust-lo :initarg :ust-lo :type xcb:CARD32)
+   (msc-hi :initarg :msc-hi :type xcb:CARD32)
+   (msc-lo :initarg :msc-lo :type xcb:CARD32)
+   (sbc-hi :initarg :sbc-hi :type xcb:CARD32)
+   (sbc-lo :initarg :sbc-lo :type xcb:CARD32)))
+
+(defclass xcb:dri2:WaitMSC
+  (xcb:-request)
+  ((~opcode :initform 10 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (target-msc-hi :initarg :target-msc-hi :type xcb:CARD32)
+   (target-msc-lo :initarg :target-msc-lo :type xcb:CARD32)
+   (divisor-hi :initarg :divisor-hi :type xcb:CARD32)
+   (divisor-lo :initarg :divisor-lo :type xcb:CARD32)
+   (remainder-hi :initarg :remainder-hi :type xcb:CARD32)
+   (remainder-lo :initarg :remainder-lo :type xcb:CARD32)))
+(defclass xcb:dri2:WaitMSC~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (ust-hi :initarg :ust-hi :type xcb:CARD32)
+   (ust-lo :initarg :ust-lo :type xcb:CARD32)
+   (msc-hi :initarg :msc-hi :type xcb:CARD32)
+   (msc-lo :initarg :msc-lo :type xcb:CARD32)
+   (sbc-hi :initarg :sbc-hi :type xcb:CARD32)
+   (sbc-lo :initarg :sbc-lo :type xcb:CARD32)))
+
+(defclass xcb:dri2:WaitSBC
+  (xcb:-request)
+  ((~opcode :initform 11 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (target-sbc-hi :initarg :target-sbc-hi :type xcb:CARD32)
+   (target-sbc-lo :initarg :target-sbc-lo :type xcb:CARD32)))
+(defclass xcb:dri2:WaitSBC~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (ust-hi :initarg :ust-hi :type xcb:CARD32)
+   (ust-lo :initarg :ust-lo :type xcb:CARD32)
+   (msc-hi :initarg :msc-hi :type xcb:CARD32)
+   (msc-lo :initarg :msc-lo :type xcb:CARD32)
+   (sbc-hi :initarg :sbc-hi :type xcb:CARD32)
+   (sbc-lo :initarg :sbc-lo :type xcb:CARD32)))
+
+(defclass xcb:dri2:SwapInterval
+  (xcb:-request)
+  ((~opcode :initform 12 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (interval :initarg :interval :type xcb:CARD32)))
+
+(defclass xcb:dri2:GetParam
+  (xcb:-request)
+  ((~opcode :initform 13 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (param :initarg :param :type xcb:CARD32)))
+(defclass xcb:dri2:GetParam~reply
+  (xcb:-reply)
+  ((is-param-recognized :initarg :is-param-recognized :type xcb:BOOL)
+   (value-hi :initarg :value-hi :type xcb:CARD32)
+   (value-lo :initarg :value-lo :type xcb:CARD32)))
+
+(defclass xcb:dri2:BufferSwapComplete
+  (xcb:-event)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (event-type :initarg :event-type :type xcb:CARD16)
+   (pad~1 :initform 2 :type xcb:-pad)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (ust-hi :initarg :ust-hi :type xcb:CARD32)
+   (ust-lo :initarg :ust-lo :type xcb:CARD32)
+   (msc-hi :initarg :msc-hi :type xcb:CARD32)
+   (msc-lo :initarg :msc-lo :type xcb:CARD32)
+   (sbc :initarg :sbc :type xcb:CARD32)))
+
+(defclass xcb:dri2:InvalidateBuffers
+  (xcb:-event)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)))
+
+(defconst xcb:dri2:event-number-class-alist
+  '((0 . xcb:dri2:BufferSwapComplete)
+    (1 . xcb:dri2:InvalidateBuffers))
+  "(event-number . event-class) alist")
+
+
+
+(provide 'xcb-dri2)
diff --git a/xcb-dri3.el b/xcb-dri3.el
new file mode 100644
index 0000000..7c11eb0
--- /dev/null
+++ b/xcb-dri3.el
@@ -0,0 +1,86 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `dri3.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:dri3:-extension-xname "DRI3")
+(defconst xcb:dri3:-extension-name "DRI3")
+(defconst xcb:dri3:-major-version 1)
+(defconst xcb:dri3:-minor-version 0)
+
+(require 'xcb-xproto)
+
+(defclass xcb:dri3:QueryVersion
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)
+   (major-version :initarg :major-version :type xcb:CARD32)
+   (minor-version :initarg :minor-version :type xcb:CARD32)))
+(defclass xcb:dri3:QueryVersion~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (major-version :initarg :major-version :type xcb:CARD32)
+   (minor-version :initarg :minor-version :type xcb:CARD32)))
+
+(defclass xcb:dri3:Open
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (provider :initarg :provider :type xcb:CARD32)))
+(defclass xcb:dri3:Open~reply
+  (xcb:-reply)
+  ((nfd :initarg :nfd :type xcb:CARD8)
+   (device-fd :type xcb:-fd)
+   (pad~0 :initform 24 :type xcb:-pad)))
+
+(defclass xcb:dri3:PixmapFromBuffer
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)
+   (pixmap :initarg :pixmap :type xcb:PIXMAP)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (size :initarg :size :type xcb:CARD32)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (stride :initarg :stride :type xcb:CARD16)
+   (depth :initarg :depth :type xcb:CARD8)
+   (bpp :initarg :bpp :type xcb:CARD8)
+   (pixmap-fd :type xcb:-fd)))
+
+(defclass xcb:dri3:BufferFromPixmap
+  (xcb:-request)
+  ((~opcode :initform 3 :type xcb:-u1)
+   (pixmap :initarg :pixmap :type xcb:PIXMAP)))
+(defclass xcb:dri3:BufferFromPixmap~reply
+  (xcb:-reply)
+  ((nfd :initarg :nfd :type xcb:CARD8)
+   (size :initarg :size :type xcb:CARD32)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (stride :initarg :stride :type xcb:CARD16)
+   (depth :initarg :depth :type xcb:CARD8)
+   (bpp :initarg :bpp :type xcb:CARD8)
+   (pixmap-fd :type xcb:-fd)
+   (pad~0 :initform 12 :type xcb:-pad)))
+
+(defclass xcb:dri3:FenceFromFD
+  (xcb:-request)
+  ((~opcode :initform 4 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (fence :initarg :fence :type xcb:CARD32)
+   (initially-triggered :initarg :initially-triggered :type xcb:BOOL)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (fence-fd :type xcb:-fd)))
+
+(defclass xcb:dri3:FDFromFence
+  (xcb:-request)
+  ((~opcode :initform 5 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (fence :initarg :fence :type xcb:CARD32)))
+(defclass xcb:dri3:FDFromFence~reply
+  (xcb:-reply)
+  ((nfd :initarg :nfd :type xcb:CARD8)
+   (fence-fd :type xcb:-fd)
+   (pad~0 :initform 24 :type xcb:-pad)))
+
+
+
+(provide 'xcb-dri3)
diff --git a/xcb-ge.el b/xcb-ge.el
new file mode 100644
index 0000000..34d0293
--- /dev/null
+++ b/xcb-ge.el
@@ -0,0 +1,25 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `ge.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:ge:-extension-xname "Generic Event Extension")
+(defconst xcb:ge:-extension-name "GenericEvent")
+(defconst xcb:ge:-major-version 1)
+(defconst xcb:ge:-minor-version 0)
+
+(defclass xcb:ge:QueryVersion
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)
+   (client-major-version :initarg :client-major-version :type xcb:CARD16)
+   (client-minor-version :initarg :client-minor-version :type xcb:CARD16)))
+(defclass xcb:ge:QueryVersion~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (major-version :initarg :major-version :type xcb:CARD16)
+   (minor-version :initarg :minor-version :type xcb:CARD16)
+   (pad~1 :initform 20 :type xcb:-pad)))
+
+
+
+(provide 'xcb-ge)
diff --git a/xcb-glx.el b/xcb-glx.el
new file mode 100644
index 0000000..6036b41
--- /dev/null
+++ b/xcb-glx.el
@@ -0,0 +1,1681 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `glx.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:glx:-extension-xname "GLX")
+(defconst xcb:glx:-extension-name "Glx")
+(defconst xcb:glx:-major-version 1)
+(defconst xcb:glx:-minor-version 4)
+
+(require 'xcb-xproto)
+
+(xcb:deftypealias 'xcb:glx:PIXMAP 'xcb:-u4)
+
+(xcb:deftypealias 'xcb:glx:CONTEXT 'xcb:-u4)
+
+(xcb:deftypealias 'xcb:glx:PBUFFER 'xcb:-u4)
+
+(xcb:deftypealias 'xcb:glx:WINDOW 'xcb:-u4)
+
+(xcb:deftypealias 'xcb:glx:FBCONFIG 'xcb:-u4)
+
+(xcb:deftypealias 'xcb:glx:DRAWABLE 'xcb:-u4)
+
+(xcb:deftypealias 'xcb:glx:FLOAT32 'xcb:glx:float)
+
+(xcb:deftypealias 'xcb:glx:FLOAT64 'xcb:glx:double)
+
+(xcb:deftypealias 'xcb:glx:BOOL32 'xcb:CARD32)
+
+(xcb:deftypealias 'xcb:glx:CONTEXT_TAG 'xcb:CARD32)
+
+(defclass xcb:glx:Generic
+  (xcb:-error)
+  ((bad-value :initarg :bad-value :type xcb:CARD32)
+   (minor-opcode :initarg :minor-opcode :type xcb:CARD16)
+   (major-opcode :initarg :major-opcode :type xcb:CARD8)
+   (pad~0 :initform 21 :type xcb:-pad)))
+
+(defclass xcb:glx:BadContext
+  (xcb:-error xcb:glx:Generic)
+  nil)
+
+(defclass xcb:glx:BadContextState
+  (xcb:-error xcb:glx:Generic)
+  nil)
+
+(defclass xcb:glx:BadDrawable
+  (xcb:-error xcb:glx:Generic)
+  nil)
+
+(defclass xcb:glx:BadPixmap
+  (xcb:-error xcb:glx:Generic)
+  nil)
+
+(defclass xcb:glx:BadContextTag
+  (xcb:-error xcb:glx:Generic)
+  nil)
+
+(defclass xcb:glx:BadCurrentWindow
+  (xcb:-error xcb:glx:Generic)
+  nil)
+
+(defclass xcb:glx:BadRenderRequest
+  (xcb:-error xcb:glx:Generic)
+  nil)
+
+(defclass xcb:glx:BadLargeRequest
+  (xcb:-error xcb:glx:Generic)
+  nil)
+
+(defclass xcb:glx:UnsupportedPrivateRequest
+  (xcb:-error xcb:glx:Generic)
+  nil)
+
+(defclass xcb:glx:BadFBConfig
+  (xcb:-error xcb:glx:Generic)
+  nil)
+
+(defclass xcb:glx:BadPbuffer
+  (xcb:-error xcb:glx:Generic)
+  nil)
+
+(defclass xcb:glx:BadCurrentDrawable
+  (xcb:-error xcb:glx:Generic)
+  nil)
+
+(defclass xcb:glx:BadWindow
+  (xcb:-error xcb:glx:Generic)
+  nil)
+
+(defclass xcb:glx:GLXBadProfileARB
+  (xcb:-error xcb:glx:Generic)
+  nil)
+
+(defclass xcb:glx:PbufferClobber
+  (xcb:-event)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (event-type :initarg :event-type :type xcb:CARD16)
+   (draw-type :initarg :draw-type :type xcb:CARD16)
+   (drawable :initarg :drawable :type xcb:glx:DRAWABLE)
+   (b-mask :initarg :b-mask :type xcb:CARD32)
+   (aux-buffer :initarg :aux-buffer :type xcb:CARD16)
+   (x :initarg :x :type xcb:CARD16)
+   (y :initarg :y :type xcb:CARD16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (count :initarg :count :type xcb:CARD16)
+   (pad~1 :initform 4 :type xcb:-pad)))
+
+(defclass xcb:glx:BufferSwapComplete
+  (xcb:-event)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (event-type :initarg :event-type :type xcb:CARD16)
+   (pad~1 :initform 2 :type xcb:-pad)
+   (drawable :initarg :drawable :type xcb:glx:DRAWABLE)
+   (ust-hi :initarg :ust-hi :type xcb:CARD32)
+   (ust-lo :initarg :ust-lo :type xcb:CARD32)
+   (msc-hi :initarg :msc-hi :type xcb:CARD32)
+   (msc-lo :initarg :msc-lo :type xcb:CARD32)
+   (sbc :initarg :sbc :type xcb:CARD32)))
+
+(defconst xcb:glx:PBCET:Damaged 32791)
+(defconst xcb:glx:PBCET:Saved 32792)
+
+(defconst xcb:glx:PBCDT:Window 32793)
+(defconst xcb:glx:PBCDT:Pbuffer 32794)
+
+(defclass xcb:glx:Render
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:BYTE size nil)
+         :type xcb:-list)))
+
+(defclass xcb:glx:RenderLarge
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (request-num :initarg :request-num :type xcb:CARD16)
+   (request-total :initarg :request-total :type xcb:CARD16)
+   (data-len :initarg :data-len :type xcb:CARD32)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:BYTE size
+                (xcb:-fieldref 'data-len))
+         :type xcb:-list)))
+
+(defclass xcb:glx:CreateContext
+  (xcb:-request)
+  ((~opcode :initform 3 :type xcb:-u1)
+   (context :initarg :context :type xcb:glx:CONTEXT)
+   (visual :initarg :visual :type xcb:VISUALID)
+   (screen :initarg :screen :type xcb:CARD32)
+   (share-list :initarg :share-list :type xcb:glx:CONTEXT)
+   (is-direct :initarg :is-direct :type xcb:BOOL)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:glx:DestroyContext
+  (xcb:-request)
+  ((~opcode :initform 4 :type xcb:-u1)
+   (context :initarg :context :type xcb:glx:CONTEXT)))
+
+(defclass xcb:glx:MakeCurrent
+  (xcb:-request)
+  ((~opcode :initform 5 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:glx:DRAWABLE)
+   (context :initarg :context :type xcb:glx:CONTEXT)
+   (old-context-tag :initarg :old-context-tag :type xcb:glx:CONTEXT_TAG)))
+(defclass xcb:glx:MakeCurrent~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (pad~1 :initform 20 :type xcb:-pad)))
+
+(defclass xcb:glx:IsDirect
+  (xcb:-request)
+  ((~opcode :initform 6 :type xcb:-u1)
+   (context :initarg :context :type xcb:glx:CONTEXT)))
+(defclass xcb:glx:IsDirect~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (is-direct :initarg :is-direct :type xcb:BOOL)
+   (pad~1 :initform 23 :type xcb:-pad)))
+
+(defclass xcb:glx:QueryVersion
+  (xcb:-request)
+  ((~opcode :initform 7 :type xcb:-u1)
+   (major-version :initarg :major-version :type xcb:CARD32)
+   (minor-version :initarg :minor-version :type xcb:CARD32)))
+(defclass xcb:glx:QueryVersion~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (major-version :initarg :major-version :type xcb:CARD32)
+   (minor-version :initarg :minor-version :type xcb:CARD32)
+   (pad~1 :initform 16 :type xcb:-pad)))
+
+(defclass xcb:glx:WaitGL
+  (xcb:-request)
+  ((~opcode :initform 8 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)))
+
+(defclass xcb:glx:WaitX
+  (xcb:-request)
+  ((~opcode :initform 9 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)))
+
+(defclass xcb:glx:CopyContext
+  (xcb:-request)
+  ((~opcode :initform 10 :type xcb:-u1)
+   (src :initarg :src :type xcb:glx:CONTEXT)
+   (dest :initarg :dest :type xcb:glx:CONTEXT)
+   (mask :initarg :mask :type xcb:CARD32)
+   (src-context-tag :initarg :src-context-tag :type xcb:glx:CONTEXT_TAG)))
+
+(defconst xcb:glx:GC:GL_CURRENT_BIT 1)
+(defconst xcb:glx:GC:GL_POINT_BIT 2)
+(defconst xcb:glx:GC:GL_LINE_BIT 4)
+(defconst xcb:glx:GC:GL_POLYGON_BIT 8)
+(defconst xcb:glx:GC:GL_POLYGON_STIPPLE_BIT 16)
+(defconst xcb:glx:GC:GL_PIXEL_MODE_BIT 32)
+(defconst xcb:glx:GC:GL_LIGHTING_BIT 64)
+(defconst xcb:glx:GC:GL_FOG_BIT 128)
+(defconst xcb:glx:GC:GL_DEPTH_BUFFER_BIT 256)
+(defconst xcb:glx:GC:GL_ACCUM_BUFFER_BIT 512)
+(defconst xcb:glx:GC:GL_STENCIL_BUFFER_BIT 1024)
+(defconst xcb:glx:GC:GL_VIEWPORT_BIT 2048)
+(defconst xcb:glx:GC:GL_TRANSFORM_BIT 4096)
+(defconst xcb:glx:GC:GL_ENABLE_BIT 8192)
+(defconst xcb:glx:GC:GL_COLOR_BUFFER_BIT 16384)
+(defconst xcb:glx:GC:GL_HINT_BIT 32768)
+(defconst xcb:glx:GC:GL_EVAL_BIT 65536)
+(defconst xcb:glx:GC:GL_LIST_BIT 131072)
+(defconst xcb:glx:GC:GL_TEXTURE_BIT 262144)
+(defconst xcb:glx:GC:GL_SCISSOR_BIT 524288)
+(defconst xcb:glx:GC:GL_ALL_ATTRIB_BITS 16777215)
+
+(defclass xcb:glx:SwapBuffers
+  (xcb:-request)
+  ((~opcode :initform 11 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (drawable :initarg :drawable :type xcb:glx:DRAWABLE)))
+
+(defclass xcb:glx:UseXFont
+  (xcb:-request)
+  ((~opcode :initform 12 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (font :initarg :font :type xcb:FONT)
+   (first :initarg :first :type xcb:CARD32)
+   (count :initarg :count :type xcb:CARD32)
+   (list-base :initarg :list-base :type xcb:CARD32)))
+
+(defclass xcb:glx:CreateGLXPixmap
+  (xcb:-request)
+  ((~opcode :initform 13 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD32)
+   (visual :initarg :visual :type xcb:VISUALID)
+   (pixmap :initarg :pixmap :type xcb:glx:xproto:PIXMAP)
+   (glx-pixmap :initarg :glx-pixmap :type xcb:glx:PIXMAP)))
+
+(defclass xcb:glx:GetVisualConfigs
+  (xcb:-request)
+  ((~opcode :initform 14 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD32)))
+(defclass xcb:glx:GetVisualConfigs~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (num-visuals :initarg :num-visuals :type xcb:CARD32)
+   (num-properties :initarg :num-properties :type xcb:CARD32)
+   (pad~1 :initform 16 :type xcb:-pad)
+   (property-list :initarg :property-list :type xcb:-ignore)
+   (property-list~ :initform
+                  '(name property-list type xcb:CARD32 size
+                         (xcb:-fieldref 'length))
+                  :type xcb:-list)))
+
+(defclass xcb:glx:DestroyGLXPixmap
+  (xcb:-request)
+  ((~opcode :initform 15 :type xcb:-u1)
+   (glx-pixmap :initarg :glx-pixmap :type xcb:glx:PIXMAP)))
+
+(defclass xcb:glx:VendorPrivate
+  (xcb:-request)
+  ((~opcode :initform 16 :type xcb:-u1)
+   (vendor-code :initarg :vendor-code :type xcb:CARD32)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:BYTE size nil)
+         :type xcb:-list)))
+
+(defclass xcb:glx:VendorPrivateWithReply
+  (xcb:-request)
+  ((~opcode :initform 17 :type xcb:-u1)
+   (vendor-code :initarg :vendor-code :type xcb:CARD32)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:BYTE size nil)
+         :type xcb:-list)))
+(defclass xcb:glx:VendorPrivateWithReply~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (retval :initarg :retval :type xcb:CARD32)
+   (data1 :initarg :data1 :type xcb:-ignore)
+   (data1~ :initform
+          '(name data1 type xcb:BYTE size 24)
+          :type xcb:-list)
+   (data2 :initarg :data2 :type xcb:-ignore)
+   (data2~ :initform
+          '(name data2 type xcb:BYTE size
+                 (*
+                  (xcb:-fieldref 'length)
+                  4))
+          :type xcb:-list)))
+
+(defclass xcb:glx:QueryExtensionsString
+  (xcb:-request)
+  ((~opcode :initform 18 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD32)))
+(defclass xcb:glx:QueryExtensionsString~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (pad~2 :initform 16 :type xcb:-pad)))
+
+(defclass xcb:glx:QueryServerString
+  (xcb:-request)
+  ((~opcode :initform 19 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD32)
+   (name :initarg :name :type xcb:CARD32)))
+(defclass xcb:glx:QueryServerString~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (str-len :initarg :str-len :type xcb:CARD32)
+   (pad~2 :initform 16 :type xcb:-pad)
+   (string :initarg :string :type xcb:-ignore)
+   (string~ :initform
+           '(name string type xcb:char size
+                  (xcb:-fieldref 'str-len))
+           :type xcb:-list)))
+
+(defclass xcb:glx:ClientInfo
+  (xcb:-request)
+  ((~opcode :initform 20 :type xcb:-u1)
+   (major-version :initarg :major-version :type xcb:CARD32)
+   (minor-version :initarg :minor-version :type xcb:CARD32)
+   (str-len :initarg :str-len :type xcb:CARD32)
+   (string :initarg :string :type xcb:-ignore)
+   (string~ :initform
+           '(name string type xcb:char size
+                  (xcb:-fieldref 'str-len))
+           :type xcb:-list)))
+
+(defclass xcb:glx:GetFBConfigs
+  (xcb:-request)
+  ((~opcode :initform 21 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD32)))
+(defclass xcb:glx:GetFBConfigs~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (num-FB-configs :initarg :num-FB-configs :type xcb:CARD32)
+   (num-properties :initarg :num-properties :type xcb:CARD32)
+   (pad~1 :initform 16 :type xcb:-pad)
+   (property-list :initarg :property-list :type xcb:-ignore)
+   (property-list~ :initform
+                  '(name property-list type xcb:CARD32 size
+                         (xcb:-fieldref 'length))
+                  :type xcb:-list)))
+
+(defclass xcb:glx:CreatePixmap
+  (xcb:-request)
+  ((~opcode :initform 22 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD32)
+   (fbconfig :initarg :fbconfig :type xcb:glx:FBCONFIG)
+   (pixmap :initarg :pixmap :type xcb:glx:xproto:PIXMAP)
+   (glx-pixmap :initarg :glx-pixmap :type xcb:glx:PIXMAP)
+   (num-attribs :initarg :num-attribs :type xcb:CARD32)
+   (attribs :initarg :attribs :type xcb:-ignore)
+   (attribs~ :initform
+            '(name attribs type xcb:CARD32 size
+                   (*
+                    (xcb:-fieldref 'num-attribs)
+                    2))
+            :type xcb:-list)))
+
+(defclass xcb:glx:DestroyPixmap
+  (xcb:-request)
+  ((~opcode :initform 23 :type xcb:-u1)
+   (glx-pixmap :initarg :glx-pixmap :type xcb:glx:PIXMAP)))
+
+(defclass xcb:glx:CreateNewContext
+  (xcb:-request)
+  ((~opcode :initform 24 :type xcb:-u1)
+   (context :initarg :context :type xcb:glx:CONTEXT)
+   (fbconfig :initarg :fbconfig :type xcb:glx:FBCONFIG)
+   (screen :initarg :screen :type xcb:CARD32)
+   (render-type :initarg :render-type :type xcb:CARD32)
+   (share-list :initarg :share-list :type xcb:glx:CONTEXT)
+   (is-direct :initarg :is-direct :type xcb:BOOL)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:glx:QueryContext
+  (xcb:-request)
+  ((~opcode :initform 25 :type xcb:-u1)
+   (context :initarg :context :type xcb:glx:CONTEXT)))
+(defclass xcb:glx:QueryContext~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (num-attribs :initarg :num-attribs :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (attribs :initarg :attribs :type xcb:-ignore)
+   (attribs~ :initform
+            '(name attribs type xcb:CARD32 size
+                   (*
+                    (xcb:-fieldref 'num-attribs)
+                    2))
+            :type xcb:-list)))
+
+(defclass xcb:glx:MakeContextCurrent
+  (xcb:-request)
+  ((~opcode :initform 26 :type xcb:-u1)
+   (old-context-tag :initarg :old-context-tag :type xcb:glx:CONTEXT_TAG)
+   (drawable :initarg :drawable :type xcb:glx:DRAWABLE)
+   (read-drawable :initarg :read-drawable :type xcb:glx:DRAWABLE)
+   (context :initarg :context :type xcb:glx:CONTEXT)))
+(defclass xcb:glx:MakeContextCurrent~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (pad~1 :initform 20 :type xcb:-pad)))
+
+(defclass xcb:glx:CreatePbuffer
+  (xcb:-request)
+  ((~opcode :initform 27 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD32)
+   (fbconfig :initarg :fbconfig :type xcb:glx:FBCONFIG)
+   (pbuffer :initarg :pbuffer :type xcb:glx:PBUFFER)
+   (num-attribs :initarg :num-attribs :type xcb:CARD32)
+   (attribs :initarg :attribs :type xcb:-ignore)
+   (attribs~ :initform
+            '(name attribs type xcb:CARD32 size
+                   (*
+                    (xcb:-fieldref 'num-attribs)
+                    2))
+            :type xcb:-list)))
+
+(defclass xcb:glx:DestroyPbuffer
+  (xcb:-request)
+  ((~opcode :initform 28 :type xcb:-u1)
+   (pbuffer :initarg :pbuffer :type xcb:glx:PBUFFER)))
+
+(defclass xcb:glx:GetDrawableAttributes
+  (xcb:-request)
+  ((~opcode :initform 29 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:glx:DRAWABLE)))
+(defclass xcb:glx:GetDrawableAttributes~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (num-attribs :initarg :num-attribs :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (attribs :initarg :attribs :type xcb:-ignore)
+   (attribs~ :initform
+            '(name attribs type xcb:CARD32 size
+                   (*
+                    (xcb:-fieldref 'num-attribs)
+                    2))
+            :type xcb:-list)))
+
+(defclass xcb:glx:ChangeDrawableAttributes
+  (xcb:-request)
+  ((~opcode :initform 30 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:glx:DRAWABLE)
+   (num-attribs :initarg :num-attribs :type xcb:CARD32)
+   (attribs :initarg :attribs :type xcb:-ignore)
+   (attribs~ :initform
+            '(name attribs type xcb:CARD32 size
+                   (*
+                    (xcb:-fieldref 'num-attribs)
+                    2))
+            :type xcb:-list)))
+
+(defclass xcb:glx:CreateWindow
+  (xcb:-request)
+  ((~opcode :initform 31 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD32)
+   (fbconfig :initarg :fbconfig :type xcb:glx:FBCONFIG)
+   (window :initarg :window :type xcb:glx:xproto:WINDOW)
+   (glx-window :initarg :glx-window :type xcb:glx:WINDOW)
+   (num-attribs :initarg :num-attribs :type xcb:CARD32)
+   (attribs :initarg :attribs :type xcb:-ignore)
+   (attribs~ :initform
+            '(name attribs type xcb:CARD32 size
+                   (*
+                    (xcb:-fieldref 'num-attribs)
+                    2))
+            :type xcb:-list)))
+
+(defclass xcb:glx:DeleteWindow
+  (xcb:-request)
+  ((~opcode :initform 32 :type xcb:-u1)
+   (glxwindow :initarg :glxwindow :type xcb:glx:WINDOW)))
+
+(defclass xcb:glx:SetClientInfoARB
+  (xcb:-request)
+  ((~opcode :initform 33 :type xcb:-u1)
+   (major-version :initarg :major-version :type xcb:CARD32)
+   (minor-version :initarg :minor-version :type xcb:CARD32)
+   (num-versions :initarg :num-versions :type xcb:CARD32)
+   (gl-str-len :initarg :gl-str-len :type xcb:CARD32)
+   (glx-str-len :initarg :glx-str-len :type xcb:CARD32)
+   (gl-versions :initarg :gl-versions :type xcb:-ignore)
+   (gl-versions~ :initform
+                '(name gl-versions type xcb:CARD32 size
+                       (*
+                        (xcb:-fieldref 'num-versions)
+                        2))
+                :type xcb:-list)
+   (gl-extension-string :initarg :gl-extension-string :type xcb:-ignore)
+   (gl-extension-string~ :initform
+                        '(name gl-extension-string type xcb:char size
+                               (xcb:-fieldref 'gl-str-len))
+                        :type xcb:-list)
+   (glx-extension-string :initarg :glx-extension-string :type xcb:-ignore)
+   (glx-extension-string~ :initform
+                         '(name glx-extension-string type xcb:char size
+                                (xcb:-fieldref 'glx-str-len))
+                         :type xcb:-list)))
+
+(defclass xcb:glx:CreateContextAttribsARB
+  (xcb:-request)
+  ((~opcode :initform 34 :type xcb:-u1)
+   (context :initarg :context :type xcb:glx:CONTEXT)
+   (fbconfig :initarg :fbconfig :type xcb:glx:FBCONFIG)
+   (screen :initarg :screen :type xcb:CARD32)
+   (share-list :initarg :share-list :type xcb:glx:CONTEXT)
+   (is-direct :initarg :is-direct :type xcb:BOOL)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (num-attribs :initarg :num-attribs :type xcb:CARD32)
+   (attribs :initarg :attribs :type xcb:-ignore)
+   (attribs~ :initform
+            '(name attribs type xcb:CARD32 size
+                   (*
+                    (xcb:-fieldref 'num-attribs)
+                    2))
+            :type xcb:-list)))
+
+(defclass xcb:glx:SetClientInfo2ARB
+  (xcb:-request)
+  ((~opcode :initform 35 :type xcb:-u1)
+   (major-version :initarg :major-version :type xcb:CARD32)
+   (minor-version :initarg :minor-version :type xcb:CARD32)
+   (num-versions :initarg :num-versions :type xcb:CARD32)
+   (gl-str-len :initarg :gl-str-len :type xcb:CARD32)
+   (glx-str-len :initarg :glx-str-len :type xcb:CARD32)
+   (gl-versions :initarg :gl-versions :type xcb:-ignore)
+   (gl-versions~ :initform
+                '(name gl-versions type xcb:CARD32 size
+                       (*
+                        (xcb:-fieldref 'num-versions)
+                        3))
+                :type xcb:-list)
+   (gl-extension-string :initarg :gl-extension-string :type xcb:-ignore)
+   (gl-extension-string~ :initform
+                        '(name gl-extension-string type xcb:char size
+                               (xcb:-fieldref 'gl-str-len))
+                        :type xcb:-list)
+   (glx-extension-string :initarg :glx-extension-string :type xcb:-ignore)
+   (glx-extension-string~ :initform
+                         '(name glx-extension-string type xcb:char size
+                                (xcb:-fieldref 'glx-str-len))
+                         :type xcb:-list)))
+
+(defclass xcb:glx:NewList
+  (xcb:-request)
+  ((~opcode :initform 101 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (list :initarg :list :type xcb:CARD32)
+   (mode :initarg :mode :type xcb:CARD32)))
+
+(defclass xcb:glx:EndList
+  (xcb:-request)
+  ((~opcode :initform 102 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)))
+
+(defclass xcb:glx:DeleteLists
+  (xcb:-request)
+  ((~opcode :initform 103 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (list :initarg :list :type xcb:CARD32)
+   (range :initarg :range :type xcb:INT32)))
+
+(defclass xcb:glx:GenLists
+  (xcb:-request)
+  ((~opcode :initform 104 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (range :initarg :range :type xcb:INT32)))
+(defclass xcb:glx:GenLists~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (ret-val :initarg :ret-val :type xcb:CARD32)))
+
+(defclass xcb:glx:FeedbackBuffer
+  (xcb:-request)
+  ((~opcode :initform 105 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (size :initarg :size :type xcb:INT32)
+   (type :initarg :type :type xcb:INT32)))
+
+(defclass xcb:glx:SelectBuffer
+  (xcb:-request)
+  ((~opcode :initform 106 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (size :initarg :size :type xcb:INT32)))
+
+(defclass xcb:glx:RenderMode
+  (xcb:-request)
+  ((~opcode :initform 107 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (mode :initarg :mode :type xcb:CARD32)))
+(defclass xcb:glx:RenderMode~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (ret-val :initarg :ret-val :type xcb:CARD32)
+   (n :initarg :n :type xcb:CARD32)
+   (new-mode :initarg :new-mode :type xcb:CARD32)
+   (pad~1 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:CARD32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defconst xcb:glx:RM:GL_RENDER 7168)
+(defconst xcb:glx:RM:GL_FEEDBACK 7169)
+(defconst xcb:glx:RM:GL_SELECT 7170)
+
+(defclass xcb:glx:Finish
+  (xcb:-request)
+  ((~opcode :initform 108 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)))
+(defclass xcb:glx:Finish~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)))
+
+(defclass xcb:glx:PixelStoref
+  (xcb:-request)
+  ((~opcode :initform 109 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (pname :initarg :pname :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:glx:FLOAT32)))
+
+(defclass xcb:glx:PixelStorei
+  (xcb:-request)
+  ((~opcode :initform 110 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (pname :initarg :pname :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:INT32)))
+
+(defclass xcb:glx:ReadPixels
+  (xcb:-request)
+  ((~opcode :initform 111 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (x :initarg :x :type xcb:INT32)
+   (y :initarg :y :type xcb:INT32)
+   (width :initarg :width :type xcb:INT32)
+   (height :initarg :height :type xcb:INT32)
+   (format :initarg :format :type xcb:CARD32)
+   (type :initarg :type :type xcb:CARD32)
+   (swap-bytes :initarg :swap-bytes :type xcb:BOOL)
+   (lsb-first :initarg :lsb-first :type xcb:BOOL)))
+(defclass xcb:glx:ReadPixels~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 24 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:BYTE size
+                (*
+                 (xcb:-fieldref 'length)
+                 4))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetBooleanv
+  (xcb:-request)
+  ((~opcode :initform 112 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (pname :initarg :pname :type xcb:INT32)))
+(defclass xcb:glx:GetBooleanv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:BOOL)
+   (pad~2 :initform 15 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:BOOL size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetClipPlane
+  (xcb:-request)
+  ((~opcode :initform 113 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (plane :initarg :plane :type xcb:INT32)))
+(defclass xcb:glx:GetClipPlane~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 24 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:glx:FLOAT64 size
+                (/
+                 (xcb:-fieldref 'length)
+                 2))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetDoublev
+  (xcb:-request)
+  ((~opcode :initform 114 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (pname :initarg :pname :type xcb:CARD32)))
+(defclass xcb:glx:GetDoublev~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:glx:FLOAT64)
+   (pad~2 :initform 8 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:glx:FLOAT64 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetError
+  (xcb:-request)
+  ((~opcode :initform 115 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)))
+(defclass xcb:glx:GetError~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (error :initarg :error :type xcb:INT32)))
+
+(defclass xcb:glx:GetFloatv
+  (xcb:-request)
+  ((~opcode :initform 116 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (pname :initarg :pname :type xcb:CARD32)))
+(defclass xcb:glx:GetFloatv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:glx:FLOAT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:glx:FLOAT32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetIntegerv
+  (xcb:-request)
+  ((~opcode :initform 117 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (pname :initarg :pname :type xcb:CARD32)))
+(defclass xcb:glx:GetIntegerv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:INT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:INT32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetLightfv
+  (xcb:-request)
+  ((~opcode :initform 118 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (light :initarg :light :type xcb:CARD32)
+   (pname :initarg :pname :type xcb:CARD32)))
+(defclass xcb:glx:GetLightfv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:glx:FLOAT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:glx:FLOAT32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetLightiv
+  (xcb:-request)
+  ((~opcode :initform 119 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (light :initarg :light :type xcb:CARD32)
+   (pname :initarg :pname :type xcb:CARD32)))
+(defclass xcb:glx:GetLightiv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:INT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:INT32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetMapdv
+  (xcb:-request)
+  ((~opcode :initform 120 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (target :initarg :target :type xcb:CARD32)
+   (query :initarg :query :type xcb:CARD32)))
+(defclass xcb:glx:GetMapdv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:glx:FLOAT64)
+   (pad~2 :initform 8 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:glx:FLOAT64 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetMapfv
+  (xcb:-request)
+  ((~opcode :initform 121 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (target :initarg :target :type xcb:CARD32)
+   (query :initarg :query :type xcb:CARD32)))
+(defclass xcb:glx:GetMapfv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:glx:FLOAT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:glx:FLOAT32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetMapiv
+  (xcb:-request)
+  ((~opcode :initform 122 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (target :initarg :target :type xcb:CARD32)
+   (query :initarg :query :type xcb:CARD32)))
+(defclass xcb:glx:GetMapiv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:INT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:INT32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetMaterialfv
+  (xcb:-request)
+  ((~opcode :initform 123 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (face :initarg :face :type xcb:CARD32)
+   (pname :initarg :pname :type xcb:CARD32)))
+(defclass xcb:glx:GetMaterialfv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:glx:FLOAT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:glx:FLOAT32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetMaterialiv
+  (xcb:-request)
+  ((~opcode :initform 124 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (face :initarg :face :type xcb:CARD32)
+   (pname :initarg :pname :type xcb:CARD32)))
+(defclass xcb:glx:GetMaterialiv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:INT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:INT32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetPixelMapfv
+  (xcb:-request)
+  ((~opcode :initform 125 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (map :initarg :map :type xcb:CARD32)))
+(defclass xcb:glx:GetPixelMapfv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:glx:FLOAT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:glx:FLOAT32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetPixelMapuiv
+  (xcb:-request)
+  ((~opcode :initform 126 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (map :initarg :map :type xcb:CARD32)))
+(defclass xcb:glx:GetPixelMapuiv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:CARD32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:CARD32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetPixelMapusv
+  (xcb:-request)
+  ((~opcode :initform 127 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (map :initarg :map :type xcb:CARD32)))
+(defclass xcb:glx:GetPixelMapusv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:CARD16)
+   (pad~2 :initform 16 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:CARD16 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetPolygonStipple
+  (xcb:-request)
+  ((~opcode :initform 128 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (lsb-first :initarg :lsb-first :type xcb:BOOL)))
+(defclass xcb:glx:GetPolygonStipple~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 24 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:BYTE size
+                (*
+                 (xcb:-fieldref 'length)
+                 4))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetString
+  (xcb:-request)
+  ((~opcode :initform 129 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (name :initarg :name :type xcb:CARD32)))
+(defclass xcb:glx:GetString~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (pad~2 :initform 16 :type xcb:-pad)
+   (string :initarg :string :type xcb:-ignore)
+   (string~ :initform
+           '(name string type xcb:char size
+                  (xcb:-fieldref 'n))
+           :type xcb:-list)))
+
+(defclass xcb:glx:GetTexEnvfv
+  (xcb:-request)
+  ((~opcode :initform 130 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (target :initarg :target :type xcb:CARD32)
+   (pname :initarg :pname :type xcb:CARD32)))
+(defclass xcb:glx:GetTexEnvfv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:glx:FLOAT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:glx:FLOAT32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetTexEnviv
+  (xcb:-request)
+  ((~opcode :initform 131 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (target :initarg :target :type xcb:CARD32)
+   (pname :initarg :pname :type xcb:CARD32)))
+(defclass xcb:glx:GetTexEnviv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:INT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:INT32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetTexGendv
+  (xcb:-request)
+  ((~opcode :initform 132 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (coord :initarg :coord :type xcb:CARD32)
+   (pname :initarg :pname :type xcb:CARD32)))
+(defclass xcb:glx:GetTexGendv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:glx:FLOAT64)
+   (pad~2 :initform 8 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:glx:FLOAT64 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetTexGenfv
+  (xcb:-request)
+  ((~opcode :initform 133 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (coord :initarg :coord :type xcb:CARD32)
+   (pname :initarg :pname :type xcb:CARD32)))
+(defclass xcb:glx:GetTexGenfv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:glx:FLOAT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:glx:FLOAT32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetTexGeniv
+  (xcb:-request)
+  ((~opcode :initform 134 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (coord :initarg :coord :type xcb:CARD32)
+   (pname :initarg :pname :type xcb:CARD32)))
+(defclass xcb:glx:GetTexGeniv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:INT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:INT32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetTexImage
+  (xcb:-request)
+  ((~opcode :initform 135 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (target :initarg :target :type xcb:CARD32)
+   (level :initarg :level :type xcb:INT32)
+   (format :initarg :format :type xcb:CARD32)
+   (type :initarg :type :type xcb:CARD32)
+   (swap-bytes :initarg :swap-bytes :type xcb:BOOL)))
+(defclass xcb:glx:GetTexImage~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 8 :type xcb:-pad)
+   (width :initarg :width :type xcb:INT32)
+   (height :initarg :height :type xcb:INT32)
+   (depth :initarg :depth :type xcb:INT32)
+   (pad~2 :initform 4 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:BYTE size
+                (*
+                 (xcb:-fieldref 'length)
+                 4))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetTexParameterfv
+  (xcb:-request)
+  ((~opcode :initform 136 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (target :initarg :target :type xcb:CARD32)
+   (pname :initarg :pname :type xcb:CARD32)))
+(defclass xcb:glx:GetTexParameterfv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:glx:FLOAT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:glx:FLOAT32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetTexParameteriv
+  (xcb:-request)
+  ((~opcode :initform 137 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (target :initarg :target :type xcb:CARD32)
+   (pname :initarg :pname :type xcb:CARD32)))
+(defclass xcb:glx:GetTexParameteriv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:INT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:INT32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetTexLevelParameterfv
+  (xcb:-request)
+  ((~opcode :initform 138 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (target :initarg :target :type xcb:CARD32)
+   (level :initarg :level :type xcb:INT32)
+   (pname :initarg :pname :type xcb:CARD32)))
+(defclass xcb:glx:GetTexLevelParameterfv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:glx:FLOAT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:glx:FLOAT32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetTexLevelParameteriv
+  (xcb:-request)
+  ((~opcode :initform 139 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (target :initarg :target :type xcb:CARD32)
+   (level :initarg :level :type xcb:INT32)
+   (pname :initarg :pname :type xcb:CARD32)))
+(defclass xcb:glx:GetTexLevelParameteriv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:INT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:INT32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:IsList
+  (xcb:-request)
+  ((~opcode :initform 141 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (list :initarg :list :type xcb:CARD32)))
+(defclass xcb:glx:IsList~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (ret-val :initarg :ret-val :type xcb:BOOL32)))
+
+(defclass xcb:glx:Flush
+  (xcb:-request)
+  ((~opcode :initform 142 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)))
+
+(defclass xcb:glx:AreTexturesResident
+  (xcb:-request)
+  ((~opcode :initform 143 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (n :initarg :n :type xcb:INT32)
+   (textures :initarg :textures :type xcb:-ignore)
+   (textures~ :initform
+             '(name textures type xcb:CARD32 size
+                    (xcb:-fieldref 'n))
+             :type xcb:-list)))
+(defclass xcb:glx:AreTexturesResident~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (ret-val :initarg :ret-val :type xcb:BOOL32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:BOOL size
+                (*
+                 (xcb:-fieldref 'length)
+                 4))
+         :type xcb:-list)))
+
+(defclass xcb:glx:DeleteTextures
+  (xcb:-request)
+  ((~opcode :initform 144 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (n :initarg :n :type xcb:INT32)
+   (textures :initarg :textures :type xcb:-ignore)
+   (textures~ :initform
+             '(name textures type xcb:CARD32 size
+                    (xcb:-fieldref 'n))
+             :type xcb:-list)))
+
+(defclass xcb:glx:GenTextures
+  (xcb:-request)
+  ((~opcode :initform 145 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (n :initarg :n :type xcb:INT32)))
+(defclass xcb:glx:GenTextures~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 24 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:CARD32 size
+                (xcb:-fieldref 'length))
+         :type xcb:-list)))
+
+(defclass xcb:glx:IsTexture
+  (xcb:-request)
+  ((~opcode :initform 146 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (texture :initarg :texture :type xcb:CARD32)))
+(defclass xcb:glx:IsTexture~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (ret-val :initarg :ret-val :type xcb:BOOL32)))
+
+(defclass xcb:glx:GetColorTable
+  (xcb:-request)
+  ((~opcode :initform 147 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (target :initarg :target :type xcb:CARD32)
+   (format :initarg :format :type xcb:CARD32)
+   (type :initarg :type :type xcb:CARD32)
+   (swap-bytes :initarg :swap-bytes :type xcb:BOOL)))
+(defclass xcb:glx:GetColorTable~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 8 :type xcb:-pad)
+   (width :initarg :width :type xcb:INT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:BYTE size
+                (*
+                 (xcb:-fieldref 'length)
+                 4))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetColorTableParameterfv
+  (xcb:-request)
+  ((~opcode :initform 148 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (target :initarg :target :type xcb:CARD32)
+   (pname :initarg :pname :type xcb:CARD32)))
+(defclass xcb:glx:GetColorTableParameterfv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:glx:FLOAT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:glx:FLOAT32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetColorTableParameteriv
+  (xcb:-request)
+  ((~opcode :initform 149 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (target :initarg :target :type xcb:CARD32)
+   (pname :initarg :pname :type xcb:CARD32)))
+(defclass xcb:glx:GetColorTableParameteriv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:INT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:INT32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetConvolutionFilter
+  (xcb:-request)
+  ((~opcode :initform 150 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (target :initarg :target :type xcb:CARD32)
+   (format :initarg :format :type xcb:CARD32)
+   (type :initarg :type :type xcb:CARD32)
+   (swap-bytes :initarg :swap-bytes :type xcb:BOOL)))
+(defclass xcb:glx:GetConvolutionFilter~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 8 :type xcb:-pad)
+   (width :initarg :width :type xcb:INT32)
+   (height :initarg :height :type xcb:INT32)
+   (pad~2 :initform 8 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:BYTE size
+                (*
+                 (xcb:-fieldref 'length)
+                 4))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetConvolutionParameterfv
+  (xcb:-request)
+  ((~opcode :initform 151 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (target :initarg :target :type xcb:CARD32)
+   (pname :initarg :pname :type xcb:CARD32)))
+(defclass xcb:glx:GetConvolutionParameterfv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:glx:FLOAT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:glx:FLOAT32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetConvolutionParameteriv
+  (xcb:-request)
+  ((~opcode :initform 152 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (target :initarg :target :type xcb:CARD32)
+   (pname :initarg :pname :type xcb:CARD32)))
+(defclass xcb:glx:GetConvolutionParameteriv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:INT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:INT32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetSeparableFilter
+  (xcb:-request)
+  ((~opcode :initform 153 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (target :initarg :target :type xcb:CARD32)
+   (format :initarg :format :type xcb:CARD32)
+   (type :initarg :type :type xcb:CARD32)
+   (swap-bytes :initarg :swap-bytes :type xcb:BOOL)))
+(defclass xcb:glx:GetSeparableFilter~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 8 :type xcb:-pad)
+   (row-w :initarg :row-w :type xcb:INT32)
+   (col-h :initarg :col-h :type xcb:INT32)
+   (pad~2 :initform 8 :type xcb:-pad)
+   (rows-and-cols :initarg :rows-and-cols :type xcb:-ignore)
+   (rows-and-cols~ :initform
+                  '(name rows-and-cols type xcb:BYTE size
+                         (*
+                          (xcb:-fieldref 'length)
+                          4))
+                  :type xcb:-list)))
+
+(defclass xcb:glx:GetHistogram
+  (xcb:-request)
+  ((~opcode :initform 154 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (target :initarg :target :type xcb:CARD32)
+   (format :initarg :format :type xcb:CARD32)
+   (type :initarg :type :type xcb:CARD32)
+   (swap-bytes :initarg :swap-bytes :type xcb:BOOL)
+   (reset :initarg :reset :type xcb:BOOL)))
+(defclass xcb:glx:GetHistogram~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 8 :type xcb:-pad)
+   (width :initarg :width :type xcb:INT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:BYTE size
+                (*
+                 (xcb:-fieldref 'length)
+                 4))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetHistogramParameterfv
+  (xcb:-request)
+  ((~opcode :initform 155 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (target :initarg :target :type xcb:CARD32)
+   (pname :initarg :pname :type xcb:CARD32)))
+(defclass xcb:glx:GetHistogramParameterfv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:glx:FLOAT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:glx:FLOAT32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetHistogramParameteriv
+  (xcb:-request)
+  ((~opcode :initform 156 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (target :initarg :target :type xcb:CARD32)
+   (pname :initarg :pname :type xcb:CARD32)))
+(defclass xcb:glx:GetHistogramParameteriv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:INT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:INT32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetMinmax
+  (xcb:-request)
+  ((~opcode :initform 157 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (target :initarg :target :type xcb:CARD32)
+   (format :initarg :format :type xcb:CARD32)
+   (type :initarg :type :type xcb:CARD32)
+   (swap-bytes :initarg :swap-bytes :type xcb:BOOL)
+   (reset :initarg :reset :type xcb:BOOL)))
+(defclass xcb:glx:GetMinmax~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 24 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:BYTE size
+                (*
+                 (xcb:-fieldref 'length)
+                 4))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetMinmaxParameterfv
+  (xcb:-request)
+  ((~opcode :initform 158 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (target :initarg :target :type xcb:CARD32)
+   (pname :initarg :pname :type xcb:CARD32)))
+(defclass xcb:glx:GetMinmaxParameterfv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:glx:FLOAT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:glx:FLOAT32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetMinmaxParameteriv
+  (xcb:-request)
+  ((~opcode :initform 159 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (target :initarg :target :type xcb:CARD32)
+   (pname :initarg :pname :type xcb:CARD32)))
+(defclass xcb:glx:GetMinmaxParameteriv~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:INT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:INT32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetCompressedTexImageARB
+  (xcb:-request)
+  ((~opcode :initform 160 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (target :initarg :target :type xcb:CARD32)
+   (level :initarg :level :type xcb:INT32)))
+(defclass xcb:glx:GetCompressedTexImageARB~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 8 :type xcb:-pad)
+   (size :initarg :size :type xcb:INT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:BYTE size
+                (*
+                 (xcb:-fieldref 'length)
+                 4))
+         :type xcb:-list)))
+
+(defclass xcb:glx:DeleteQueriesARB
+  (xcb:-request)
+  ((~opcode :initform 161 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (n :initarg :n :type xcb:INT32)
+   (ids :initarg :ids :type xcb:-ignore)
+   (ids~ :initform
+        '(name ids type xcb:CARD32 size
+               (xcb:-fieldref 'n))
+        :type xcb:-list)))
+
+(defclass xcb:glx:GenQueriesARB
+  (xcb:-request)
+  ((~opcode :initform 162 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (n :initarg :n :type xcb:INT32)))
+(defclass xcb:glx:GenQueriesARB~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 24 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:CARD32 size
+                (xcb:-fieldref 'length))
+         :type xcb:-list)))
+
+(defclass xcb:glx:IsQueryARB
+  (xcb:-request)
+  ((~opcode :initform 163 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (id :initarg :id :type xcb:CARD32)))
+(defclass xcb:glx:IsQueryARB~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (ret-val :initarg :ret-val :type xcb:BOOL32)))
+
+(defclass xcb:glx:GetQueryivARB
+  (xcb:-request)
+  ((~opcode :initform 164 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (target :initarg :target :type xcb:CARD32)
+   (pname :initarg :pname :type xcb:CARD32)))
+(defclass xcb:glx:GetQueryivARB~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:INT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:INT32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetQueryObjectivARB
+  (xcb:-request)
+  ((~opcode :initform 165 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (id :initarg :id :type xcb:CARD32)
+   (pname :initarg :pname :type xcb:CARD32)))
+(defclass xcb:glx:GetQueryObjectivARB~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:INT32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:INT32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defclass xcb:glx:GetQueryObjectuivARB
+  (xcb:-request)
+  ((~opcode :initform 166 :type xcb:-u1)
+   (context-tag :initarg :context-tag :type xcb:glx:CONTEXT_TAG)
+   (id :initarg :id :type xcb:CARD32)
+   (pname :initarg :pname :type xcb:CARD32)))
+(defclass xcb:glx:GetQueryObjectuivARB~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (n :initarg :n :type xcb:CARD32)
+   (datum :initarg :datum :type xcb:CARD32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:CARD32 size
+                (xcb:-fieldref 'n))
+         :type xcb:-list)))
+
+(defconst xcb:glx:error-number-class-alist
+  '((-1 . xcb:glx:Generic)
+    (0 . xcb:glx:BadContext)
+    (1 . xcb:glx:BadContextState)
+    (2 . xcb:glx:BadDrawable)
+    (3 . xcb:glx:BadPixmap)
+    (4 . xcb:glx:BadContextTag)
+    (5 . xcb:glx:BadCurrentWindow)
+    (6 . xcb:glx:BadRenderRequest)
+    (7 . xcb:glx:BadLargeRequest)
+    (8 . xcb:glx:UnsupportedPrivateRequest)
+    (9 . xcb:glx:BadFBConfig)
+    (10 . xcb:glx:BadPbuffer)
+    (11 . xcb:glx:BadCurrentDrawable)
+    (12 . xcb:glx:BadWindow)
+    (13 . xcb:glx:GLXBadProfileARB))
+  "(error-number . error-class) alist")
+
+(defconst xcb:glx:event-number-class-alist
+  '((0 . xcb:glx:PbufferClobber)
+    (1 . xcb:glx:BufferSwapComplete))
+  "(event-number . event-class) alist")
+
+
+
+(provide 'xcb-glx)
diff --git a/xcb-present.el b/xcb-present.el
new file mode 100644
index 0000000..137b4d9
--- /dev/null
+++ b/xcb-present.el
@@ -0,0 +1,206 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `present.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:present:-extension-xname "Present")
+(defconst xcb:present:-extension-name "Present")
+(defconst xcb:present:-major-version 1)
+(defconst xcb:present:-minor-version 0)
+
+(require 'xcb-xproto)
+
+(require 'xcb-randr)
+
+(require 'xcb-xfixes)
+
+(require 'xcb-sync)
+
+(defconst xcb:present:Event:ConfigureNotify 0)
+(defconst xcb:present:Event:CompleteNotify 1)
+(defconst xcb:present:Event:IdleNotify 2)
+(defconst xcb:present:Event:RedirectNotify 3)
+
+(defconst xcb:present:EventMask:NoEvent 0)
+(defconst xcb:present:EventMask:ConfigureNotify 1)
+(defconst xcb:present:EventMask:CompleteNotify 2)
+(defconst xcb:present:EventMask:IdleNotify 4)
+(defconst xcb:present:EventMask:RedirectNotify 8)
+
+(defconst xcb:present:Option:None 0)
+(defconst xcb:present:Option:Async 1)
+(defconst xcb:present:Option:Copy 2)
+(defconst xcb:present:Option:UST 4)
+
+(defconst xcb:present:Capability:None 0)
+(defconst xcb:present:Capability:Async 1)
+(defconst xcb:present:Capability:Fence 2)
+(defconst xcb:present:Capability:UST 4)
+
+(defconst xcb:present:CompleteKind:Pixmap 0)
+(defconst xcb:present:CompleteKind:NotifyMSC 1)
+
+(defconst xcb:present:CompleteMode:Copy 0)
+(defconst xcb:present:CompleteMode:Flip 1)
+(defconst xcb:present:CompleteMode:Skip 2)
+
+(defclass xcb:present:Notify
+  (xcb:-struct)
+  ((window :initarg :window :type xcb:WINDOW)
+   (serial :initarg :serial :type xcb:CARD32)))
+
+(defclass xcb:present:QueryVersion
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)
+   (major-version :initarg :major-version :type xcb:CARD32)
+   (minor-version :initarg :minor-version :type xcb:CARD32)))
+(defclass xcb:present:QueryVersion~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (major-version :initarg :major-version :type xcb:CARD32)
+   (minor-version :initarg :minor-version :type xcb:CARD32)))
+
+(defclass xcb:present:Pixmap
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (pixmap :initarg :pixmap :type xcb:PIXMAP)
+   (serial :initarg :serial :type xcb:CARD32)
+   (valid :initarg :valid :type xcb:present:REGION)
+   (update :initarg :update :type xcb:present:REGION)
+   (x-off :initarg :x-off :type xcb:INT16)
+   (y-off :initarg :y-off :type xcb:INT16)
+   (target-crtc :initarg :target-crtc :type xcb:present:CRTC)
+   (wait-fence :initarg :wait-fence :type xcb:present:FENCE)
+   (idle-fence :initarg :idle-fence :type xcb:present:FENCE)
+   (options :initarg :options :type xcb:CARD32)
+   (pad~0 :initform 4 :type xcb:-pad)
+   (target-msc :initarg :target-msc :type xcb:present:CARD64)
+   (divisor :initarg :divisor :type xcb:present:CARD64)
+   (remainder :initarg :remainder :type xcb:present:CARD64)
+   (notifies :initarg :notifies :type xcb:-ignore)
+   (notifies~ :initform
+             '(name notifies type xcb:present:Notify size nil)
+             :type xcb:-list)))
+
+(defclass xcb:present:NotifyMSC
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (serial :initarg :serial :type xcb:CARD32)
+   (pad~0 :initform 4 :type xcb:-pad)
+   (target-msc :initarg :target-msc :type xcb:present:CARD64)
+   (divisor :initarg :divisor :type xcb:present:CARD64)
+   (remainder :initarg :remainder :type xcb:present:CARD64)))
+
+(xcb:deftypealias 'xcb:present:EVENT 'xcb:-u4)
+
+(defclass xcb:present:SelectInput
+  (xcb:-request)
+  ((~opcode :initform 3 :type xcb:-u1)
+   (eid :initarg :eid :type xcb:present:EVENT)
+   (window :initarg :window :type xcb:WINDOW)
+   (event-mask :initarg :event-mask :type xcb:CARD32)))
+
+(defclass xcb:present:QueryCapabilities
+  (xcb:-request)
+  ((~opcode :initform 4 :type xcb:-u1)
+   (target :initarg :target :type xcb:CARD32)))
+(defclass xcb:present:QueryCapabilities~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (capabilities :initarg :capabilities :type xcb:CARD32)))
+
+(defclass xcb:present:Generic
+  (xcb:-event)
+  ((extension :initarg :extension :type xcb:CARD8)
+   (length :initarg :length :type xcb:CARD32)
+   (evtype :initarg :evtype :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (event :initarg :event :type xcb:present:EVENT)))
+
+(defclass xcb:present:ConfigureNotify
+  (xcb:-event)
+  ((extension :type xcb:CARD8)
+   (length :type xcb:CARD32)
+   (evtype :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (event :initarg :event :type xcb:present:EVENT)
+   (window :initarg :window :type xcb:WINDOW)
+   (x :initarg :x :type xcb:INT16)
+   (y :initarg :y :type xcb:INT16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (off-x :initarg :off-x :type xcb:INT16)
+   (off-y :initarg :off-y :type xcb:INT16)
+   (pixmap-width :initarg :pixmap-width :type xcb:CARD16)
+   (pixmap-height :initarg :pixmap-height :type xcb:CARD16)
+   (pixmap-flags :initarg :pixmap-flags :type xcb:CARD32)))
+
+(defclass xcb:present:CompleteNotify
+  (xcb:-event)
+  ((extension :type xcb:CARD8)
+   (length :type xcb:CARD32)
+   (evtype :type xcb:CARD16)
+   (kind :initarg :kind :type xcb:CARD8)
+   (mode :initarg :mode :type xcb:CARD8)
+   (event :initarg :event :type xcb:present:EVENT)
+   (window :initarg :window :type xcb:WINDOW)
+   (serial :initarg :serial :type xcb:CARD32)
+   (ust :initarg :ust :type xcb:present:CARD64)
+   (msc :initarg :msc :type xcb:present:CARD64)))
+
+(defclass xcb:present:IdleNotify
+  (xcb:-event)
+  ((extension :type xcb:CARD8)
+   (length :type xcb:CARD32)
+   (evtype :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (event :initarg :event :type xcb:present:EVENT)
+   (window :initarg :window :type xcb:WINDOW)
+   (serial :initarg :serial :type xcb:CARD32)
+   (pixmap :initarg :pixmap :type xcb:PIXMAP)
+   (idle-fence :initarg :idle-fence :type xcb:present:FENCE)))
+
+(defclass xcb:present:RedirectNotify
+  (xcb:-event)
+  ((extension :type xcb:CARD8)
+   (length :type xcb:CARD32)
+   (evtype :type xcb:CARD16)
+   (update-window :initarg :update-window :type xcb:BOOL)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (event :initarg :event :type xcb:present:EVENT)
+   (event-window :initarg :event-window :type xcb:WINDOW)
+   (window :initarg :window :type xcb:WINDOW)
+   (pixmap :initarg :pixmap :type xcb:PIXMAP)
+   (serial :initarg :serial :type xcb:CARD32)
+   (valid-region :initarg :valid-region :type xcb:present:REGION)
+   (update-region :initarg :update-region :type xcb:present:REGION)
+   (valid-rect :initarg :valid-rect :type xcb:RECTANGLE)
+   (update-rect :initarg :update-rect :type xcb:RECTANGLE)
+   (x-off :initarg :x-off :type xcb:INT16)
+   (y-off :initarg :y-off :type xcb:INT16)
+   (target-crtc :initarg :target-crtc :type xcb:present:CRTC)
+   (wait-fence :initarg :wait-fence :type xcb:present:FENCE)
+   (idle-fence :initarg :idle-fence :type xcb:present:FENCE)
+   (options :initarg :options :type xcb:CARD32)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (target-msc :initarg :target-msc :type xcb:present:CARD64)
+   (divisor :initarg :divisor :type xcb:present:CARD64)
+   (remainder :initarg :remainder :type xcb:present:CARD64)
+   (notifies :initarg :notifies :type xcb:-ignore)
+   (notifies~ :initform
+             '(name notifies type xcb:present:Notify size nil)
+             :type xcb:-list)))
+
+(defconst xcb:present:event-number-class-alist
+  '((0 . xcb:present:Generic)
+    (0 . xcb:present:ConfigureNotify)
+    (1 . xcb:present:CompleteNotify)
+    (2 . xcb:present:IdleNotify)
+    (3 . xcb:present:RedirectNotify))
+  "(event-number . event-class) alist")
+
+
+
+(provide 'xcb-present)
diff --git a/xcb-randr.el b/xcb-randr.el
new file mode 100644
index 0000000..ed78538
--- /dev/null
+++ b/xcb-randr.el
@@ -0,0 +1,946 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `randr.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:randr:-extension-xname "RANDR")
+(defconst xcb:randr:-extension-name "RandR")
+(defconst xcb:randr:-major-version 1)
+(defconst xcb:randr:-minor-version 4)
+
+(require 'xcb-xproto)
+
+(require 'xcb-render)
+
+(xcb:deftypealias 'xcb:randr:MODE 'xcb:-u4)
+
+(xcb:deftypealias 'xcb:randr:CRTC 'xcb:-u4)
+
+(xcb:deftypealias 'xcb:randr:OUTPUT 'xcb:-u4)
+
+(xcb:deftypealias 'xcb:randr:PROVIDER 'xcb:-u4)
+
+(defclass xcb:randr:BadOutput
+  (xcb:-error)
+  nil)
+
+(defclass xcb:randr:BadCrtc
+  (xcb:-error)
+  nil)
+
+(defclass xcb:randr:BadMode
+  (xcb:-error)
+  nil)
+
+(defclass xcb:randr:BadProvider
+  (xcb:-error)
+  nil)
+
+(defconst xcb:randr:Rotation:Rotate_0 1)
+(defconst xcb:randr:Rotation:Rotate_90 2)
+(defconst xcb:randr:Rotation:Rotate_180 4)
+(defconst xcb:randr:Rotation:Rotate_270 8)
+(defconst xcb:randr:Rotation:Reflect_X 16)
+(defconst xcb:randr:Rotation:Reflect_Y 32)
+
+(defclass xcb:randr:ScreenSize
+  (xcb:-struct)
+  ((width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (mwidth :initarg :mwidth :type xcb:CARD16)
+   (mheight :initarg :mheight :type xcb:CARD16)))
+
+(defclass xcb:randr:RefreshRates
+  (xcb:-struct)
+  ((nRates :initarg :nRates :type xcb:CARD16)
+   (rates :initarg :rates :type xcb:-ignore)
+   (rates~ :initform
+          '(name rates type xcb:CARD16 size
+                 (xcb:-fieldref 'nRates))
+          :type xcb:-list)))
+
+(defclass xcb:randr:QueryVersion
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)
+   (major-version :initarg :major-version :type xcb:CARD32)
+   (minor-version :initarg :minor-version :type xcb:CARD32)))
+(defclass xcb:randr:QueryVersion~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (major-version :initarg :major-version :type xcb:CARD32)
+   (minor-version :initarg :minor-version :type xcb:CARD32)
+   (pad~1 :initform 16 :type xcb:-pad)))
+
+(defconst xcb:randr:SetConfig:Success 0)
+(defconst xcb:randr:SetConfig:InvalidConfigTime 1)
+(defconst xcb:randr:SetConfig:InvalidTime 2)
+(defconst xcb:randr:SetConfig:Failed 3)
+
+(defclass xcb:randr:SetScreenConfig
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (timestamp :initarg :timestamp :type xcb:TIMESTAMP)
+   (config-timestamp :initarg :config-timestamp :type xcb:TIMESTAMP)
+   (sizeID :initarg :sizeID :type xcb:CARD16)
+   (rotation :initarg :rotation :type xcb:CARD16)
+   (rate :initarg :rate :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)))
+(defclass xcb:randr:SetScreenConfig~reply
+  (xcb:-reply)
+  ((status :initarg :status :type xcb:CARD8)
+   (new-timestamp :initarg :new-timestamp :type xcb:TIMESTAMP)
+   (config-timestamp :initarg :config-timestamp :type xcb:TIMESTAMP)
+   (root :initarg :root :type xcb:WINDOW)
+   (subpixel-order :initarg :subpixel-order :type xcb:CARD16)
+   (pad~0 :initform 10 :type xcb:-pad)))
+
+(defconst xcb:randr:NotifyMask:ScreenChange 1)
+(defconst xcb:randr:NotifyMask:CrtcChange 2)
+(defconst xcb:randr:NotifyMask:OutputChange 4)
+(defconst xcb:randr:NotifyMask:OutputProperty 8)
+(defconst xcb:randr:NotifyMask:ProviderChange 16)
+(defconst xcb:randr:NotifyMask:ProviderProperty 32)
+(defconst xcb:randr:NotifyMask:ResourceChange 64)
+
+(defclass xcb:randr:SelectInput
+  (xcb:-request)
+  ((~opcode :initform 4 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (enable :initarg :enable :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)))
+
+(defclass xcb:randr:GetScreenInfo
+  (xcb:-request)
+  ((~opcode :initform 5 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)))
+(defclass xcb:randr:GetScreenInfo~reply
+  (xcb:-reply)
+  ((rotations :initarg :rotations :type xcb:CARD8)
+   (root :initarg :root :type xcb:WINDOW)
+   (timestamp :initarg :timestamp :type xcb:TIMESTAMP)
+   (config-timestamp :initarg :config-timestamp :type xcb:TIMESTAMP)
+   (nSizes :initarg :nSizes :type xcb:CARD16)
+   (sizeID :initarg :sizeID :type xcb:CARD16)
+   (rotation :initarg :rotation :type xcb:CARD16)
+   (rate :initarg :rate :type xcb:CARD16)
+   (nInfo :initarg :nInfo :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (sizes :initarg :sizes :type xcb:-ignore)
+   (sizes~ :initform
+          '(name sizes type xcb:randr:ScreenSize size
+                 (xcb:-fieldref 'nSizes))
+          :type xcb:-list)
+   (rates :initarg :rates :type xcb:-ignore)
+   (rates~ :initform
+          '(name rates type xcb:randr:RefreshRates size
+                 (-
+                  (xcb:-fieldref 'nInfo)
+                  (xcb:-fieldref 'nSizes)))
+          :type xcb:-list)))
+
+(defclass xcb:randr:GetScreenSizeRange
+  (xcb:-request)
+  ((~opcode :initform 6 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)))
+(defclass xcb:randr:GetScreenSizeRange~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (min-width :initarg :min-width :type xcb:CARD16)
+   (min-height :initarg :min-height :type xcb:CARD16)
+   (max-width :initarg :max-width :type xcb:CARD16)
+   (max-height :initarg :max-height :type xcb:CARD16)
+   (pad~1 :initform 16 :type xcb:-pad)))
+
+(defclass xcb:randr:SetScreenSize
+  (xcb:-request)
+  ((~opcode :initform 7 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (mm-width :initarg :mm-width :type xcb:CARD32)
+   (mm-height :initarg :mm-height :type xcb:CARD32)))
+
+(defconst xcb:randr:ModeFlag:HsyncPositive 1)
+(defconst xcb:randr:ModeFlag:HsyncNegative 2)
+(defconst xcb:randr:ModeFlag:VsyncPositive 4)
+(defconst xcb:randr:ModeFlag:VsyncNegative 8)
+(defconst xcb:randr:ModeFlag:Interlace 16)
+(defconst xcb:randr:ModeFlag:DoubleScan 32)
+(defconst xcb:randr:ModeFlag:Csync 64)
+(defconst xcb:randr:ModeFlag:CsyncPositive 128)
+(defconst xcb:randr:ModeFlag:CsyncNegative 256)
+(defconst xcb:randr:ModeFlag:HskewPresent 512)
+(defconst xcb:randr:ModeFlag:Bcast 1024)
+(defconst xcb:randr:ModeFlag:PixelMultiplex 2048)
+(defconst xcb:randr:ModeFlag:DoubleClock 4096)
+(defconst xcb:randr:ModeFlag:HalveClock 8192)
+
+(defclass xcb:randr:ModeInfo
+  (xcb:-struct)
+  ((id :initarg :id :type xcb:CARD32)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (dot-clock :initarg :dot-clock :type xcb:CARD32)
+   (hsync-start :initarg :hsync-start :type xcb:CARD16)
+   (hsync-end :initarg :hsync-end :type xcb:CARD16)
+   (htotal :initarg :htotal :type xcb:CARD16)
+   (hskew :initarg :hskew :type xcb:CARD16)
+   (vsync-start :initarg :vsync-start :type xcb:CARD16)
+   (vsync-end :initarg :vsync-end :type xcb:CARD16)
+   (vtotal :initarg :vtotal :type xcb:CARD16)
+   (name-len :initarg :name-len :type xcb:CARD16)
+   (mode-flags :initarg :mode-flags :type xcb:CARD32)))
+
+(defclass xcb:randr:GetScreenResources
+  (xcb:-request)
+  ((~opcode :initform 8 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)))
+(defclass xcb:randr:GetScreenResources~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (timestamp :initarg :timestamp :type xcb:TIMESTAMP)
+   (config-timestamp :initarg :config-timestamp :type xcb:TIMESTAMP)
+   (num-crtcs :initarg :num-crtcs :type xcb:CARD16)
+   (num-outputs :initarg :num-outputs :type xcb:CARD16)
+   (num-modes :initarg :num-modes :type xcb:CARD16)
+   (names-len :initarg :names-len :type xcb:CARD16)
+   (pad~1 :initform 8 :type xcb:-pad)
+   (crtcs :initarg :crtcs :type xcb:-ignore)
+   (crtcs~ :initform
+          '(name crtcs type xcb:randr:CRTC size
+                 (xcb:-fieldref 'num-crtcs))
+          :type xcb:-list)
+   (outputs :initarg :outputs :type xcb:-ignore)
+   (outputs~ :initform
+            '(name outputs type xcb:randr:OUTPUT size
+                   (xcb:-fieldref 'num-outputs))
+            :type xcb:-list)
+   (modes :initarg :modes :type xcb:-ignore)
+   (modes~ :initform
+          '(name modes type xcb:randr:ModeInfo size
+                 (xcb:-fieldref 'num-modes))
+          :type xcb:-list)
+   (names :initarg :names :type xcb:-ignore)
+   (names~ :initform
+          '(name names type xcb:BYTE size
+                 (xcb:-fieldref 'names-len))
+          :type xcb:-list)))
+
+(defconst xcb:randr:Connection:Connected 0)
+(defconst xcb:randr:Connection:Disconnected 1)
+(defconst xcb:randr:Connection:Unknown 2)
+
+(defclass xcb:randr:GetOutputInfo
+  (xcb:-request)
+  ((~opcode :initform 9 :type xcb:-u1)
+   (output :initarg :output :type xcb:randr:OUTPUT)
+   (config-timestamp :initarg :config-timestamp :type xcb:TIMESTAMP)))
+(defclass xcb:randr:GetOutputInfo~reply
+  (xcb:-reply)
+  ((status :initarg :status :type xcb:CARD8)
+   (timestamp :initarg :timestamp :type xcb:TIMESTAMP)
+   (crtc :initarg :crtc :type xcb:randr:CRTC)
+   (mm-width :initarg :mm-width :type xcb:CARD32)
+   (mm-height :initarg :mm-height :type xcb:CARD32)
+   (connection :initarg :connection :type xcb:CARD8)
+   (subpixel-order :initarg :subpixel-order :type xcb:CARD8)
+   (num-crtcs :initarg :num-crtcs :type xcb:CARD16)
+   (num-modes :initarg :num-modes :type xcb:CARD16)
+   (num-preferred :initarg :num-preferred :type xcb:CARD16)
+   (num-clones :initarg :num-clones :type xcb:CARD16)
+   (name-len :initarg :name-len :type xcb:CARD16)
+   (crtcs :initarg :crtcs :type xcb:-ignore)
+   (crtcs~ :initform
+          '(name crtcs type xcb:randr:CRTC size
+                 (xcb:-fieldref 'num-crtcs))
+          :type xcb:-list)
+   (modes :initarg :modes :type xcb:-ignore)
+   (modes~ :initform
+          '(name modes type xcb:randr:MODE size
+                 (xcb:-fieldref 'num-modes))
+          :type xcb:-list)
+   (clones :initarg :clones :type xcb:-ignore)
+   (clones~ :initform
+           '(name clones type xcb:randr:OUTPUT size
+                  (xcb:-fieldref 'num-clones))
+           :type xcb:-list)
+   (name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:BYTE size
+                (xcb:-fieldref 'name-len))
+         :type xcb:-list)))
+
+(defclass xcb:randr:ListOutputProperties
+  (xcb:-request)
+  ((~opcode :initform 10 :type xcb:-u1)
+   (output :initarg :output :type xcb:randr:OUTPUT)))
+(defclass xcb:randr:ListOutputProperties~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (num-atoms :initarg :num-atoms :type xcb:CARD16)
+   (pad~1 :initform 22 :type xcb:-pad)
+   (atoms :initarg :atoms :type xcb:-ignore)
+   (atoms~ :initform
+          '(name atoms type xcb:ATOM size
+                 (xcb:-fieldref 'num-atoms))
+          :type xcb:-list)))
+
+(defclass xcb:randr:QueryOutputProperty
+  (xcb:-request)
+  ((~opcode :initform 11 :type xcb:-u1)
+   (output :initarg :output :type xcb:randr:OUTPUT)
+   (property :initarg :property :type xcb:ATOM)))
+(defclass xcb:randr:QueryOutputProperty~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pending :initarg :pending :type xcb:BOOL)
+   (range :initarg :range :type xcb:BOOL)
+   (immutable :initarg :immutable :type xcb:BOOL)
+   (pad~1 :initform 21 :type xcb:-pad)
+   (validValues :initarg :validValues :type xcb:-ignore)
+   (validValues~ :initform
+                '(name validValues type xcb:INT32 size
+                       (xcb:-fieldref 'length))
+                :type xcb:-list)))
+
+(defclass xcb:randr:ConfigureOutputProperty
+  (xcb:-request)
+  ((~opcode :initform 12 :type xcb:-u1)
+   (output :initarg :output :type xcb:randr:OUTPUT)
+   (property :initarg :property :type xcb:ATOM)
+   (pending :initarg :pending :type xcb:BOOL)
+   (range :initarg :range :type xcb:BOOL)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (values :initarg :values :type xcb:-ignore)
+   (values~ :initform
+           '(name values type xcb:INT32 size nil)
+           :type xcb:-list)))
+
+(defclass xcb:randr:ChangeOutputProperty
+  (xcb:-request)
+  ((~opcode :initform 13 :type xcb:-u1)
+   (output :initarg :output :type xcb:randr:OUTPUT)
+   (property :initarg :property :type xcb:ATOM)
+   (type :initarg :type :type xcb:ATOM)
+   (format :initarg :format :type xcb:CARD8)
+   (mode :initarg :mode :type xcb:CARD8)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (num-units :initarg :num-units :type xcb:CARD32)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:void size
+                (/
+                 (*
+                  (xcb:-fieldref 'num-units)
+                  (xcb:-fieldref 'format))
+                 8))
+         :type xcb:-list)))
+
+(defclass xcb:randr:DeleteOutputProperty
+  (xcb:-request)
+  ((~opcode :initform 14 :type xcb:-u1)
+   (output :initarg :output :type xcb:randr:OUTPUT)
+   (property :initarg :property :type xcb:ATOM)))
+
+(defclass xcb:randr:GetOutputProperty
+  (xcb:-request)
+  ((~opcode :initform 15 :type xcb:-u1)
+   (output :initarg :output :type xcb:randr:OUTPUT)
+   (property :initarg :property :type xcb:ATOM)
+   (type :initarg :type :type xcb:ATOM)
+   (long-offset :initarg :long-offset :type xcb:CARD32)
+   (long-length :initarg :long-length :type xcb:CARD32)
+   (delete :initarg :delete :type xcb:BOOL)
+   (pending :initarg :pending :type xcb:BOOL)
+   (pad~0 :initform 2 :type xcb:-pad)))
+(defclass xcb:randr:GetOutputProperty~reply
+  (xcb:-reply)
+  ((format :initarg :format :type xcb:CARD8)
+   (type :initarg :type :type xcb:ATOM)
+   (bytes-after :initarg :bytes-after :type xcb:CARD32)
+   (num-items :initarg :num-items :type xcb:CARD32)
+   (pad~0 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:BYTE size
+                (*
+                 (xcb:-fieldref 'num-items)
+                 (/
+                  (xcb:-fieldref 'format)
+                  8)))
+         :type xcb:-list)))
+
+(defclass xcb:randr:CreateMode
+  (xcb:-request)
+  ((~opcode :initform 16 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (mode-info :initarg :mode-info :type xcb:randr:ModeInfo)
+   (name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:char size nil)
+         :type xcb:-list)))
+(defclass xcb:randr:CreateMode~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (mode :initarg :mode :type xcb:randr:MODE)
+   (pad~1 :initform 20 :type xcb:-pad)))
+
+(defclass xcb:randr:DestroyMode
+  (xcb:-request)
+  ((~opcode :initform 17 :type xcb:-u1)
+   (mode :initarg :mode :type xcb:randr:MODE)))
+
+(defclass xcb:randr:AddOutputMode
+  (xcb:-request)
+  ((~opcode :initform 18 :type xcb:-u1)
+   (output :initarg :output :type xcb:randr:OUTPUT)
+   (mode :initarg :mode :type xcb:randr:MODE)))
+
+(defclass xcb:randr:DeleteOutputMode
+  (xcb:-request)
+  ((~opcode :initform 19 :type xcb:-u1)
+   (output :initarg :output :type xcb:randr:OUTPUT)
+   (mode :initarg :mode :type xcb:randr:MODE)))
+
+(defclass xcb:randr:GetCrtcInfo
+  (xcb:-request)
+  ((~opcode :initform 20 :type xcb:-u1)
+   (crtc :initarg :crtc :type xcb:randr:CRTC)
+   (config-timestamp :initarg :config-timestamp :type xcb:TIMESTAMP)))
+(defclass xcb:randr:GetCrtcInfo~reply
+  (xcb:-reply)
+  ((status :initarg :status :type xcb:CARD8)
+   (timestamp :initarg :timestamp :type xcb:TIMESTAMP)
+   (x :initarg :x :type xcb:INT16)
+   (y :initarg :y :type xcb:INT16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (mode :initarg :mode :type xcb:randr:MODE)
+   (rotation :initarg :rotation :type xcb:CARD16)
+   (rotations :initarg :rotations :type xcb:CARD16)
+   (num-outputs :initarg :num-outputs :type xcb:CARD16)
+   (num-possible-outputs :initarg :num-possible-outputs :type xcb:CARD16)
+   (outputs :initarg :outputs :type xcb:-ignore)
+   (outputs~ :initform
+            '(name outputs type xcb:randr:OUTPUT size
+                   (xcb:-fieldref 'num-outputs))
+            :type xcb:-list)
+   (possible :initarg :possible :type xcb:-ignore)
+   (possible~ :initform
+             '(name possible type xcb:randr:OUTPUT size
+                    (xcb:-fieldref 'num-possible-outputs))
+             :type xcb:-list)))
+
+(defclass xcb:randr:SetCrtcConfig
+  (xcb:-request)
+  ((~opcode :initform 21 :type xcb:-u1)
+   (crtc :initarg :crtc :type xcb:randr:CRTC)
+   (timestamp :initarg :timestamp :type xcb:TIMESTAMP)
+   (config-timestamp :initarg :config-timestamp :type xcb:TIMESTAMP)
+   (x :initarg :x :type xcb:INT16)
+   (y :initarg :y :type xcb:INT16)
+   (mode :initarg :mode :type xcb:randr:MODE)
+   (rotation :initarg :rotation :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (outputs :initarg :outputs :type xcb:-ignore)
+   (outputs~ :initform
+            '(name outputs type xcb:randr:OUTPUT size nil)
+            :type xcb:-list)))
+(defclass xcb:randr:SetCrtcConfig~reply
+  (xcb:-reply)
+  ((status :initarg :status :type xcb:CARD8)
+   (timestamp :initarg :timestamp :type xcb:TIMESTAMP)
+   (pad~0 :initform 20 :type xcb:-pad)))
+
+(defclass xcb:randr:GetCrtcGammaSize
+  (xcb:-request)
+  ((~opcode :initform 22 :type xcb:-u1)
+   (crtc :initarg :crtc :type xcb:randr:CRTC)))
+(defclass xcb:randr:GetCrtcGammaSize~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (size :initarg :size :type xcb:CARD16)
+   (pad~1 :initform 22 :type xcb:-pad)))
+
+(defclass xcb:randr:GetCrtcGamma
+  (xcb:-request)
+  ((~opcode :initform 23 :type xcb:-u1)
+   (crtc :initarg :crtc :type xcb:randr:CRTC)))
+(defclass xcb:randr:GetCrtcGamma~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (size :initarg :size :type xcb:CARD16)
+   (pad~1 :initform 22 :type xcb:-pad)
+   (red :initarg :red :type xcb:-ignore)
+   (red~ :initform
+        '(name red type xcb:CARD16 size
+               (xcb:-fieldref 'size))
+        :type xcb:-list)
+   (green :initarg :green :type xcb:-ignore)
+   (green~ :initform
+          '(name green type xcb:CARD16 size
+                 (xcb:-fieldref 'size))
+          :type xcb:-list)
+   (blue :initarg :blue :type xcb:-ignore)
+   (blue~ :initform
+         '(name blue type xcb:CARD16 size
+                (xcb:-fieldref 'size))
+         :type xcb:-list)))
+
+(defclass xcb:randr:SetCrtcGamma
+  (xcb:-request)
+  ((~opcode :initform 24 :type xcb:-u1)
+   (crtc :initarg :crtc :type xcb:randr:CRTC)
+   (size :initarg :size :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (red :initarg :red :type xcb:-ignore)
+   (red~ :initform
+        '(name red type xcb:CARD16 size
+               (xcb:-fieldref 'size))
+        :type xcb:-list)
+   (green :initarg :green :type xcb:-ignore)
+   (green~ :initform
+          '(name green type xcb:CARD16 size
+                 (xcb:-fieldref 'size))
+          :type xcb:-list)
+   (blue :initarg :blue :type xcb:-ignore)
+   (blue~ :initform
+         '(name blue type xcb:CARD16 size
+                (xcb:-fieldref 'size))
+         :type xcb:-list)))
+
+(defclass xcb:randr:GetScreenResourcesCurrent
+  (xcb:-request)
+  ((~opcode :initform 25 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)))
+(defclass xcb:randr:GetScreenResourcesCurrent~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (timestamp :initarg :timestamp :type xcb:TIMESTAMP)
+   (config-timestamp :initarg :config-timestamp :type xcb:TIMESTAMP)
+   (num-crtcs :initarg :num-crtcs :type xcb:CARD16)
+   (num-outputs :initarg :num-outputs :type xcb:CARD16)
+   (num-modes :initarg :num-modes :type xcb:CARD16)
+   (names-len :initarg :names-len :type xcb:CARD16)
+   (pad~1 :initform 8 :type xcb:-pad)
+   (crtcs :initarg :crtcs :type xcb:-ignore)
+   (crtcs~ :initform
+          '(name crtcs type xcb:randr:CRTC size
+                 (xcb:-fieldref 'num-crtcs))
+          :type xcb:-list)
+   (outputs :initarg :outputs :type xcb:-ignore)
+   (outputs~ :initform
+            '(name outputs type xcb:randr:OUTPUT size
+                   (xcb:-fieldref 'num-outputs))
+            :type xcb:-list)
+   (modes :initarg :modes :type xcb:-ignore)
+   (modes~ :initform
+          '(name modes type xcb:randr:ModeInfo size
+                 (xcb:-fieldref 'num-modes))
+          :type xcb:-list)
+   (names :initarg :names :type xcb:-ignore)
+   (names~ :initform
+          '(name names type xcb:BYTE size
+                 (xcb:-fieldref 'names-len))
+          :type xcb:-list)))
+
+(defconst xcb:randr:Transform:Unit 1)
+(defconst xcb:randr:Transform:ScaleUp 2)
+(defconst xcb:randr:Transform:ScaleDown 4)
+(defconst xcb:randr:Transform:Projective 8)
+
+(defclass xcb:randr:SetCrtcTransform
+  (xcb:-request)
+  ((~opcode :initform 26 :type xcb:-u1)
+   (crtc :initarg :crtc :type xcb:randr:CRTC)
+   (transform :initarg :transform :type xcb:randr:TRANSFORM)
+   (filter-len :initarg :filter-len :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (filter-name :initarg :filter-name :type xcb:-ignore)
+   (filter-name~ :initform
+                '(name filter-name type xcb:char size
+                       (xcb:-fieldref 'filter-len))
+                :type xcb:-list)
+   (filter-params :initarg :filter-params :type xcb:-ignore)
+   (filter-params~ :initform
+                  '(name filter-params type xcb:randr:FIXED size nil)
+                  :type xcb:-list)))
+
+(defclass xcb:randr:GetCrtcTransform
+  (xcb:-request)
+  ((~opcode :initform 27 :type xcb:-u1)
+   (crtc :initarg :crtc :type xcb:randr:CRTC)))
+(defclass xcb:randr:GetCrtcTransform~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pending-transform :initarg :pending-transform :type xcb:randr:TRANSFORM)
+   (has-transforms :initarg :has-transforms :type xcb:BOOL)
+   (pad~1 :initform 3 :type xcb:-pad)
+   (current-transform :initarg :current-transform :type xcb:randr:TRANSFORM)
+   (pad~2 :initform 4 :type xcb:-pad)
+   (pending-len :initarg :pending-len :type xcb:CARD16)
+   (pending-nparams :initarg :pending-nparams :type xcb:CARD16)
+   (current-len :initarg :current-len :type xcb:CARD16)
+   (current-nparams :initarg :current-nparams :type xcb:CARD16)
+   (pending-filter-name :initarg :pending-filter-name :type xcb:-ignore)
+   (pending-filter-name~ :initform
+                        '(name pending-filter-name type xcb:char size
+                               (xcb:-fieldref 'pending-len))
+                        :type xcb:-list)
+   (pending-params :initarg :pending-params :type xcb:-ignore)
+   (pending-params~ :initform
+                   '(name pending-params type xcb:randr:FIXED size
+                          (xcb:-fieldref 'pending-nparams))
+                   :type xcb:-list)
+   (current-filter-name :initarg :current-filter-name :type xcb:-ignore)
+   (current-filter-name~ :initform
+                        '(name current-filter-name type xcb:char size
+                               (xcb:-fieldref 'current-len))
+                        :type xcb:-list)
+   (current-params :initarg :current-params :type xcb:-ignore)
+   (current-params~ :initform
+                   '(name current-params type xcb:randr:FIXED size
+                          (xcb:-fieldref 'current-nparams))
+                   :type xcb:-list)))
+
+(defclass xcb:randr:GetPanning
+  (xcb:-request)
+  ((~opcode :initform 28 :type xcb:-u1)
+   (crtc :initarg :crtc :type xcb:randr:CRTC)))
+(defclass xcb:randr:GetPanning~reply
+  (xcb:-reply)
+  ((status :initarg :status :type xcb:CARD8)
+   (timestamp :initarg :timestamp :type xcb:TIMESTAMP)
+   (left :initarg :left :type xcb:CARD16)
+   (top :initarg :top :type xcb:CARD16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (track-left :initarg :track-left :type xcb:CARD16)
+   (track-top :initarg :track-top :type xcb:CARD16)
+   (track-width :initarg :track-width :type xcb:CARD16)
+   (track-height :initarg :track-height :type xcb:CARD16)
+   (border-left :initarg :border-left :type xcb:INT16)
+   (border-top :initarg :border-top :type xcb:INT16)
+   (border-right :initarg :border-right :type xcb:INT16)
+   (border-bottom :initarg :border-bottom :type xcb:INT16)))
+
+(defclass xcb:randr:SetPanning
+  (xcb:-request)
+  ((~opcode :initform 29 :type xcb:-u1)
+   (crtc :initarg :crtc :type xcb:randr:CRTC)
+   (timestamp :initarg :timestamp :type xcb:TIMESTAMP)
+   (left :initarg :left :type xcb:CARD16)
+   (top :initarg :top :type xcb:CARD16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (track-left :initarg :track-left :type xcb:CARD16)
+   (track-top :initarg :track-top :type xcb:CARD16)
+   (track-width :initarg :track-width :type xcb:CARD16)
+   (track-height :initarg :track-height :type xcb:CARD16)
+   (border-left :initarg :border-left :type xcb:INT16)
+   (border-top :initarg :border-top :type xcb:INT16)
+   (border-right :initarg :border-right :type xcb:INT16)
+   (border-bottom :initarg :border-bottom :type xcb:INT16)))
+(defclass xcb:randr:SetPanning~reply
+  (xcb:-reply)
+  ((status :initarg :status :type xcb:CARD8)
+   (timestamp :initarg :timestamp :type xcb:TIMESTAMP)))
+
+(defclass xcb:randr:SetOutputPrimary
+  (xcb:-request)
+  ((~opcode :initform 30 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (output :initarg :output :type xcb:randr:OUTPUT)))
+
+(defclass xcb:randr:GetOutputPrimary
+  (xcb:-request)
+  ((~opcode :initform 31 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)))
+(defclass xcb:randr:GetOutputPrimary~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (output :initarg :output :type xcb:randr:OUTPUT)))
+
+(defclass xcb:randr:GetProviders
+  (xcb:-request)
+  ((~opcode :initform 32 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)))
+(defclass xcb:randr:GetProviders~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (timestamp :initarg :timestamp :type xcb:TIMESTAMP)
+   (num-providers :initarg :num-providers :type xcb:CARD16)
+   (pad~1 :initform 18 :type xcb:-pad)
+   (providers :initarg :providers :type xcb:-ignore)
+   (providers~ :initform
+              '(name providers type xcb:randr:PROVIDER size
+                     (xcb:-fieldref 'num-providers))
+              :type xcb:-list)))
+
+(defconst xcb:randr:ProviderCapability:SourceOutput 1)
+(defconst xcb:randr:ProviderCapability:SinkOutput 2)
+(defconst xcb:randr:ProviderCapability:SourceOffload 4)
+(defconst xcb:randr:ProviderCapability:SinkOffload 8)
+
+(defclass xcb:randr:GetProviderInfo
+  (xcb:-request)
+  ((~opcode :initform 33 :type xcb:-u1)
+   (provider :initarg :provider :type xcb:randr:PROVIDER)
+   (config-timestamp :initarg :config-timestamp :type xcb:TIMESTAMP)))
+(defclass xcb:randr:GetProviderInfo~reply
+  (xcb:-reply)
+  ((status :initarg :status :type xcb:CARD8)
+   (timestamp :initarg :timestamp :type xcb:TIMESTAMP)
+   (capabilities :initarg :capabilities :type xcb:CARD32)
+   (num-crtcs :initarg :num-crtcs :type xcb:CARD16)
+   (num-outputs :initarg :num-outputs :type xcb:CARD16)
+   (num-associated-providers :initarg :num-associated-providers :type 
xcb:CARD16)
+   (name-len :initarg :name-len :type xcb:CARD16)
+   (pad~0 :initform 8 :type xcb:-pad)
+   (crtcs :initarg :crtcs :type xcb:-ignore)
+   (crtcs~ :initform
+          '(name crtcs type xcb:randr:CRTC size
+                 (xcb:-fieldref 'num-crtcs))
+          :type xcb:-list)
+   (outputs :initarg :outputs :type xcb:-ignore)
+   (outputs~ :initform
+            '(name outputs type xcb:randr:OUTPUT size
+                   (xcb:-fieldref 'num-outputs))
+            :type xcb:-list)
+   (associated-providers :initarg :associated-providers :type xcb:-ignore)
+   (associated-providers~ :initform
+                         '(name associated-providers type xcb:randr:PROVIDER 
size
+                                (xcb:-fieldref 'num-associated-providers))
+                         :type xcb:-list)
+   (associated-capability :initarg :associated-capability :type xcb:-ignore)
+   (associated-capability~ :initform
+                          '(name associated-capability type xcb:CARD32 size
+                                 (xcb:-fieldref 'num-associated-providers))
+                          :type xcb:-list)
+   (name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:char size
+                (xcb:-fieldref 'name-len))
+         :type xcb:-list)))
+
+(defclass xcb:randr:SetProviderOffloadSink
+  (xcb:-request)
+  ((~opcode :initform 34 :type xcb:-u1)
+   (provider :initarg :provider :type xcb:randr:PROVIDER)
+   (sink-provider :initarg :sink-provider :type xcb:randr:PROVIDER)
+   (config-timestamp :initarg :config-timestamp :type xcb:TIMESTAMP)))
+
+(defclass xcb:randr:SetProviderOutputSource
+  (xcb:-request)
+  ((~opcode :initform 35 :type xcb:-u1)
+   (provider :initarg :provider :type xcb:randr:PROVIDER)
+   (source-provider :initarg :source-provider :type xcb:randr:PROVIDER)
+   (config-timestamp :initarg :config-timestamp :type xcb:TIMESTAMP)))
+
+(defclass xcb:randr:ListProviderProperties
+  (xcb:-request)
+  ((~opcode :initform 36 :type xcb:-u1)
+   (provider :initarg :provider :type xcb:randr:PROVIDER)))
+(defclass xcb:randr:ListProviderProperties~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (num-atoms :initarg :num-atoms :type xcb:CARD16)
+   (pad~1 :initform 22 :type xcb:-pad)
+   (atoms :initarg :atoms :type xcb:-ignore)
+   (atoms~ :initform
+          '(name atoms type xcb:ATOM size
+                 (xcb:-fieldref 'num-atoms))
+          :type xcb:-list)))
+
+(defclass xcb:randr:QueryProviderProperty
+  (xcb:-request)
+  ((~opcode :initform 37 :type xcb:-u1)
+   (provider :initarg :provider :type xcb:randr:PROVIDER)
+   (property :initarg :property :type xcb:ATOM)))
+(defclass xcb:randr:QueryProviderProperty~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pending :initarg :pending :type xcb:BOOL)
+   (range :initarg :range :type xcb:BOOL)
+   (immutable :initarg :immutable :type xcb:BOOL)
+   (pad~1 :initform 21 :type xcb:-pad)
+   (valid-values :initarg :valid-values :type xcb:-ignore)
+   (valid-values~ :initform
+                 '(name valid-values type xcb:INT32 size
+                        (xcb:-fieldref 'length))
+                 :type xcb:-list)))
+
+(defclass xcb:randr:ConfigureProviderProperty
+  (xcb:-request)
+  ((~opcode :initform 38 :type xcb:-u1)
+   (provider :initarg :provider :type xcb:randr:PROVIDER)
+   (property :initarg :property :type xcb:ATOM)
+   (pending :initarg :pending :type xcb:BOOL)
+   (range :initarg :range :type xcb:BOOL)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (values :initarg :values :type xcb:-ignore)
+   (values~ :initform
+           '(name values type xcb:INT32 size nil)
+           :type xcb:-list)))
+
+(defclass xcb:randr:ChangeProviderProperty
+  (xcb:-request)
+  ((~opcode :initform 39 :type xcb:-u1)
+   (provider :initarg :provider :type xcb:randr:PROVIDER)
+   (property :initarg :property :type xcb:ATOM)
+   (type :initarg :type :type xcb:ATOM)
+   (format :initarg :format :type xcb:CARD8)
+   (mode :initarg :mode :type xcb:CARD8)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (num-items :initarg :num-items :type xcb:CARD32)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:void size
+                (*
+                 (xcb:-fieldref 'num-items)
+                 (/
+                  (xcb:-fieldref 'format)
+                  8)))
+         :type xcb:-list)))
+
+(defclass xcb:randr:DeleteProviderProperty
+  (xcb:-request)
+  ((~opcode :initform 40 :type xcb:-u1)
+   (provider :initarg :provider :type xcb:randr:PROVIDER)
+   (property :initarg :property :type xcb:ATOM)))
+
+(defclass xcb:randr:GetProviderProperty
+  (xcb:-request)
+  ((~opcode :initform 41 :type xcb:-u1)
+   (provider :initarg :provider :type xcb:randr:PROVIDER)
+   (property :initarg :property :type xcb:ATOM)
+   (type :initarg :type :type xcb:ATOM)
+   (long-offset :initarg :long-offset :type xcb:CARD32)
+   (long-length :initarg :long-length :type xcb:CARD32)
+   (delete :initarg :delete :type xcb:BOOL)
+   (pending :initarg :pending :type xcb:BOOL)
+   (pad~0 :initform 2 :type xcb:-pad)))
+(defclass xcb:randr:GetProviderProperty~reply
+  (xcb:-reply)
+  ((format :initarg :format :type xcb:CARD8)
+   (type :initarg :type :type xcb:ATOM)
+   (bytes-after :initarg :bytes-after :type xcb:CARD32)
+   (num-items :initarg :num-items :type xcb:CARD32)
+   (pad~0 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:void size
+                (*
+                 (xcb:-fieldref 'num-items)
+                 (/
+                  (xcb:-fieldref 'format)
+                  8)))
+         :type xcb:-list)))
+
+(defclass xcb:randr:ScreenChangeNotify
+  (xcb:-event)
+  ((rotation :initarg :rotation :type xcb:CARD8)
+   (timestamp :initarg :timestamp :type xcb:TIMESTAMP)
+   (config-timestamp :initarg :config-timestamp :type xcb:TIMESTAMP)
+   (root :initarg :root :type xcb:WINDOW)
+   (request-window :initarg :request-window :type xcb:WINDOW)
+   (sizeID :initarg :sizeID :type xcb:CARD16)
+   (subpixel-order :initarg :subpixel-order :type xcb:CARD16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (mwidth :initarg :mwidth :type xcb:CARD16)
+   (mheight :initarg :mheight :type xcb:CARD16)))
+
+(defconst xcb:randr:Notify:CrtcChange 0)
+(defconst xcb:randr:Notify:OutputChange 1)
+(defconst xcb:randr:Notify:OutputProperty 2)
+(defconst xcb:randr:Notify:ProviderChange 3)
+(defconst xcb:randr:Notify:ProviderProperty 4)
+(defconst xcb:randr:Notify:ResourceChange 5)
+
+(defclass xcb:randr:CrtcChange
+  (xcb:-struct)
+  ((timestamp :initarg :timestamp :type xcb:TIMESTAMP)
+   (window :initarg :window :type xcb:WINDOW)
+   (crtc :initarg :crtc :type xcb:randr:CRTC)
+   (mode :initarg :mode :type xcb:randr:MODE)
+   (rotation :initarg :rotation :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (x :initarg :x :type xcb:INT16)
+   (y :initarg :y :type xcb:INT16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)))
+
+(defclass xcb:randr:OutputChange
+  (xcb:-struct)
+  ((timestamp :initarg :timestamp :type xcb:TIMESTAMP)
+   (config-timestamp :initarg :config-timestamp :type xcb:TIMESTAMP)
+   (window :initarg :window :type xcb:WINDOW)
+   (output :initarg :output :type xcb:randr:OUTPUT)
+   (crtc :initarg :crtc :type xcb:randr:CRTC)
+   (mode :initarg :mode :type xcb:randr:MODE)
+   (rotation :initarg :rotation :type xcb:CARD16)
+   (connection :initarg :connection :type xcb:CARD8)
+   (subpixel-order :initarg :subpixel-order :type xcb:CARD8)))
+
+(defclass xcb:randr:OutputProperty
+  (xcb:-struct)
+  ((window :initarg :window :type xcb:WINDOW)
+   (output :initarg :output :type xcb:randr:OUTPUT)
+   (atom :initarg :atom :type xcb:ATOM)
+   (timestamp :initarg :timestamp :type xcb:TIMESTAMP)
+   (status :initarg :status :type xcb:CARD8)
+   (pad~0 :initform 11 :type xcb:-pad)))
+
+(defclass xcb:randr:ProviderChange
+  (xcb:-struct)
+  ((timestamp :initarg :timestamp :type xcb:TIMESTAMP)
+   (window :initarg :window :type xcb:WINDOW)
+   (provider :initarg :provider :type xcb:randr:PROVIDER)
+   (pad~0 :initform 16 :type xcb:-pad)))
+
+(defclass xcb:randr:ProviderProperty
+  (xcb:-struct)
+  ((window :initarg :window :type xcb:WINDOW)
+   (provider :initarg :provider :type xcb:randr:PROVIDER)
+   (atom :initarg :atom :type xcb:ATOM)
+   (timestamp :initarg :timestamp :type xcb:TIMESTAMP)
+   (state :initarg :state :type xcb:CARD8)
+   (pad~0 :initform 11 :type xcb:-pad)))
+
+(defclass xcb:randr:ResourceChange
+  (xcb:-struct)
+  ((timestamp :initarg :timestamp :type xcb:TIMESTAMP)
+   (window :initarg :window :type xcb:WINDOW)
+   (pad~0 :initform 20 :type xcb:-pad)))
+
+(defclass xcb:randr:NotifyData
+  (xcb:-union)
+  ((cc :initarg :cc :type xcb:randr:CrtcChange)
+   (oc :initarg :oc :type xcb:randr:OutputChange)
+   (op :initarg :op :type xcb:randr:OutputProperty)
+   (pc :initarg :pc :type xcb:randr:ProviderChange)
+   (pp :initarg :pp :type xcb:randr:ProviderProperty)
+   (rc :initarg :rc :type xcb:randr:ResourceChange)))
+
+(defclass xcb:randr:Notify
+  (xcb:-event)
+  ((subCode :initarg :subCode :type xcb:CARD8)
+   (u :initarg :u :type xcb:randr:NotifyData)))
+
+(defconst xcb:randr:error-number-class-alist
+  '((0 . xcb:randr:BadOutput)
+    (1 . xcb:randr:BadCrtc)
+    (2 . xcb:randr:BadMode)
+    (3 . xcb:randr:BadProvider))
+  "(error-number . error-class) alist")
+
+(defconst xcb:randr:event-number-class-alist
+  '((0 . xcb:randr:ScreenChangeNotify)
+    (1 . xcb:randr:Notify))
+  "(event-number . event-class) alist")
+
+
+
+(provide 'xcb-randr)
diff --git a/xcb-record.el b/xcb-record.el
new file mode 100644
index 0000000..b89327c
--- /dev/null
+++ b/xcb-record.el
@@ -0,0 +1,181 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `record.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:record:-extension-xname "RECORD")
+(defconst xcb:record:-extension-name "Record")
+(defconst xcb:record:-major-version 1)
+(defconst xcb:record:-minor-version 13)
+
+(xcb:deftypealias 'xcb:record:CONTEXT 'xcb:-u4)
+
+(defclass xcb:record:Range8
+  (xcb:-struct)
+  ((first :initarg :first :type xcb:CARD8)
+   (last :initarg :last :type xcb:CARD8)))
+
+(defclass xcb:record:Range16
+  (xcb:-struct)
+  ((first :initarg :first :type xcb:CARD16)
+   (last :initarg :last :type xcb:CARD16)))
+
+(defclass xcb:record:ExtRange
+  (xcb:-struct)
+  ((major :initarg :major :type xcb:record:Range8)
+   (minor :initarg :minor :type xcb:record:Range16)))
+
+(defclass xcb:record:Range
+  (xcb:-struct)
+  ((core-requests :initarg :core-requests :type xcb:record:Range8)
+   (core-replies :initarg :core-replies :type xcb:record:Range8)
+   (ext-requests :initarg :ext-requests :type xcb:record:ExtRange)
+   (ext-replies :initarg :ext-replies :type xcb:record:ExtRange)
+   (delivered-events :initarg :delivered-events :type xcb:record:Range8)
+   (device-events :initarg :device-events :type xcb:record:Range8)
+   (errors :initarg :errors :type xcb:record:Range8)
+   (client-started :initarg :client-started :type xcb:BOOL)
+   (client-died :initarg :client-died :type xcb:BOOL)))
+
+(xcb:deftypealias 'xcb:record:ElementHeader 'xcb:CARD8)
+
+(defconst xcb:record:HType:FromServerTime 1)
+(defconst xcb:record:HType:FromClientTime 2)
+(defconst xcb:record:HType:FromClientSequence 4)
+
+(xcb:deftypealias 'xcb:record:ClientSpec 'xcb:CARD32)
+
+(defconst xcb:record:CS:CurrentClients 1)
+(defconst xcb:record:CS:FutureClients 2)
+(defconst xcb:record:CS:AllClients 3)
+
+(defclass xcb:record:ClientInfo
+  (xcb:-struct)
+  ((client-resource :initarg :client-resource :type xcb:record:ClientSpec)
+   (num-ranges :initarg :num-ranges :type xcb:CARD32)
+   (ranges :initarg :ranges :type xcb:-ignore)
+   (ranges~ :initform
+           '(name ranges type xcb:record:Range size
+                  (xcb:-fieldref 'num-ranges))
+           :type xcb:-list)))
+
+(defclass xcb:record:BadContext
+  (xcb:-error)
+  ((invalid-record :initarg :invalid-record :type xcb:CARD32)))
+
+(defclass xcb:record:QueryVersion
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)
+   (major-version :initarg :major-version :type xcb:CARD16)
+   (minor-version :initarg :minor-version :type xcb:CARD16)))
+(defclass xcb:record:QueryVersion~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (major-version :initarg :major-version :type xcb:CARD16)
+   (minor-version :initarg :minor-version :type xcb:CARD16)))
+
+(defclass xcb:record:CreateContext
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)
+   (context :initarg :context :type xcb:record:CONTEXT)
+   (element-header :initarg :element-header :type xcb:record:ElementHeader)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (num-client-specs :initarg :num-client-specs :type xcb:CARD32)
+   (num-ranges :initarg :num-ranges :type xcb:CARD32)
+   (client-specs :initarg :client-specs :type xcb:-ignore)
+   (client-specs~ :initform
+                 '(name client-specs type xcb:record:ClientSpec size
+                        (xcb:-fieldref 'num-client-specs))
+                 :type xcb:-list)
+   (ranges :initarg :ranges :type xcb:-ignore)
+   (ranges~ :initform
+           '(name ranges type xcb:record:Range size
+                  (xcb:-fieldref 'num-ranges))
+           :type xcb:-list)))
+
+(defclass xcb:record:RegisterClients
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)
+   (context :initarg :context :type xcb:record:CONTEXT)
+   (element-header :initarg :element-header :type xcb:record:ElementHeader)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (num-client-specs :initarg :num-client-specs :type xcb:CARD32)
+   (num-ranges :initarg :num-ranges :type xcb:CARD32)
+   (client-specs :initarg :client-specs :type xcb:-ignore)
+   (client-specs~ :initform
+                 '(name client-specs type xcb:record:ClientSpec size
+                        (xcb:-fieldref 'num-client-specs))
+                 :type xcb:-list)
+   (ranges :initarg :ranges :type xcb:-ignore)
+   (ranges~ :initform
+           '(name ranges type xcb:record:Range size
+                  (xcb:-fieldref 'num-ranges))
+           :type xcb:-list)))
+
+(defclass xcb:record:UnregisterClients
+  (xcb:-request)
+  ((~opcode :initform 3 :type xcb:-u1)
+   (context :initarg :context :type xcb:record:CONTEXT)
+   (num-client-specs :initarg :num-client-specs :type xcb:CARD32)
+   (client-specs :initarg :client-specs :type xcb:-ignore)
+   (client-specs~ :initform
+                 '(name client-specs type xcb:record:ClientSpec size
+                        (xcb:-fieldref 'num-client-specs))
+                 :type xcb:-list)))
+
+(defclass xcb:record:GetContext
+  (xcb:-request)
+  ((~opcode :initform 4 :type xcb:-u1)
+   (context :initarg :context :type xcb:record:CONTEXT)))
+(defclass xcb:record:GetContext~reply
+  (xcb:-reply)
+  ((enabled :initarg :enabled :type xcb:BOOL)
+   (element-header :initarg :element-header :type xcb:record:ElementHeader)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (num-intercepted-clients :initarg :num-intercepted-clients :type xcb:CARD32)
+   (pad~1 :initform 16 :type xcb:-pad)
+   (intercepted-clients :initarg :intercepted-clients :type xcb:-ignore)
+   (intercepted-clients~ :initform
+                        '(name intercepted-clients type xcb:record:ClientInfo 
size
+                               (xcb:-fieldref 'num-intercepted-clients))
+                        :type xcb:-list)))
+
+(defclass xcb:record:EnableContext
+  (xcb:-request)
+  ((~opcode :initform 5 :type xcb:-u1)
+   (context :initarg :context :type xcb:record:CONTEXT)))
+(defclass xcb:record:EnableContext~reply
+  (xcb:-reply)
+  ((category :initarg :category :type xcb:CARD8)
+   (element-header :initarg :element-header :type xcb:record:ElementHeader)
+   (client-swapped :initarg :client-swapped :type xcb:BOOL)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (xid-base :initarg :xid-base :type xcb:CARD32)
+   (server-time :initarg :server-time :type xcb:CARD32)
+   (rec-sequence-num :initarg :rec-sequence-num :type xcb:CARD32)
+   (pad~1 :initform 8 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:BYTE size
+                (*
+                 (xcb:-fieldref 'length)
+                 4))
+         :type xcb:-list)))
+
+(defclass xcb:record:DisableContext
+  (xcb:-request)
+  ((~opcode :initform 6 :type xcb:-u1)
+   (context :initarg :context :type xcb:record:CONTEXT)))
+
+(defclass xcb:record:FreeContext
+  (xcb:-request)
+  ((~opcode :initform 7 :type xcb:-u1)
+   (context :initarg :context :type xcb:record:CONTEXT)))
+
+(defconst xcb:record:error-number-class-alist
+  '((0 . xcb:record:BadContext))
+  "(error-number . error-class) alist")
+
+
+
+(provide 'xcb-record)
diff --git a/xcb-render.el b/xcb-render.el
new file mode 100644
index 0000000..841a021
--- /dev/null
+++ b/xcb-render.el
@@ -0,0 +1,729 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `render.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:render:-extension-xname "RENDER")
+(defconst xcb:render:-extension-name "Render")
+(defconst xcb:render:-major-version 0)
+(defconst xcb:render:-minor-version 11)
+
+(require 'xcb-xproto)
+
+(defconst xcb:render:PictType:Indexed 0)
+(defconst xcb:render:PictType:Direct 1)
+
+(defconst xcb:render:Picture:None 0)
+
+(defconst xcb:render:PictOp:Clear 0)
+(defconst xcb:render:PictOp:Src 1)
+(defconst xcb:render:PictOp:Dst 2)
+(defconst xcb:render:PictOp:Over 3)
+(defconst xcb:render:PictOp:OverReverse 4)
+(defconst xcb:render:PictOp:In 5)
+(defconst xcb:render:PictOp:InReverse 6)
+(defconst xcb:render:PictOp:Out 7)
+(defconst xcb:render:PictOp:OutReverse 8)
+(defconst xcb:render:PictOp:Atop 9)
+(defconst xcb:render:PictOp:AtopReverse 10)
+(defconst xcb:render:PictOp:Xor 11)
+(defconst xcb:render:PictOp:Add 12)
+(defconst xcb:render:PictOp:Saturate 13)
+(defconst xcb:render:PictOp:DisjointClear 16)
+(defconst xcb:render:PictOp:DisjointSrc 17)
+(defconst xcb:render:PictOp:DisjointDst 18)
+(defconst xcb:render:PictOp:DisjointOver 19)
+(defconst xcb:render:PictOp:DisjointOverReverse 20)
+(defconst xcb:render:PictOp:DisjointIn 21)
+(defconst xcb:render:PictOp:DisjointInReverse 22)
+(defconst xcb:render:PictOp:DisjointOut 23)
+(defconst xcb:render:PictOp:DisjointOutReverse 24)
+(defconst xcb:render:PictOp:DisjointAtop 25)
+(defconst xcb:render:PictOp:DisjointAtopReverse 26)
+(defconst xcb:render:PictOp:DisjointXor 27)
+(defconst xcb:render:PictOp:ConjointClear 32)
+(defconst xcb:render:PictOp:ConjointSrc 33)
+(defconst xcb:render:PictOp:ConjointDst 34)
+(defconst xcb:render:PictOp:ConjointOver 35)
+(defconst xcb:render:PictOp:ConjointOverReverse 36)
+(defconst xcb:render:PictOp:ConjointIn 37)
+(defconst xcb:render:PictOp:ConjointInReverse 38)
+(defconst xcb:render:PictOp:ConjointOut 39)
+(defconst xcb:render:PictOp:ConjointOutReverse 40)
+(defconst xcb:render:PictOp:ConjointAtop 41)
+(defconst xcb:render:PictOp:ConjointAtopReverse 42)
+(defconst xcb:render:PictOp:ConjointXor 43)
+(defconst xcb:render:PictOp:Multiply 48)
+(defconst xcb:render:PictOp:Screen 49)
+(defconst xcb:render:PictOp:Overlay 50)
+(defconst xcb:render:PictOp:Darken 51)
+(defconst xcb:render:PictOp:Lighten 52)
+(defconst xcb:render:PictOp:ColorDodge 53)
+(defconst xcb:render:PictOp:ColorBurn 54)
+(defconst xcb:render:PictOp:HardLight 55)
+(defconst xcb:render:PictOp:SoftLight 56)
+(defconst xcb:render:PictOp:Difference 57)
+(defconst xcb:render:PictOp:Exclusion 58)
+(defconst xcb:render:PictOp:HSLHue 59)
+(defconst xcb:render:PictOp:HSLSaturation 60)
+(defconst xcb:render:PictOp:HSLColor 61)
+(defconst xcb:render:PictOp:HSLLuminosity 62)
+
+(defconst xcb:render:PolyEdge:Sharp 0)
+(defconst xcb:render:PolyEdge:Smooth 1)
+
+(defconst xcb:render:PolyMode:Precise 0)
+(defconst xcb:render:PolyMode:Imprecise 1)
+
+(defconst xcb:render:CP:Repeat 1)
+(defconst xcb:render:CP:AlphaMap 2)
+(defconst xcb:render:CP:AlphaXOrigin 4)
+(defconst xcb:render:CP:AlphaYOrigin 8)
+(defconst xcb:render:CP:ClipXOrigin 16)
+(defconst xcb:render:CP:ClipYOrigin 32)
+(defconst xcb:render:CP:ClipMask 64)
+(defconst xcb:render:CP:GraphicsExposure 128)
+(defconst xcb:render:CP:SubwindowMode 256)
+(defconst xcb:render:CP:PolyEdge 512)
+(defconst xcb:render:CP:PolyMode 1024)
+(defconst xcb:render:CP:Dither 2048)
+(defconst xcb:render:CP:ComponentAlpha 4096)
+
+(defconst xcb:render:SubPixel:Unknown 0)
+(defconst xcb:render:SubPixel:HorizontalRGB 1)
+(defconst xcb:render:SubPixel:HorizontalBGR 2)
+(defconst xcb:render:SubPixel:VerticalRGB 3)
+(defconst xcb:render:SubPixel:VerticalBGR 4)
+(defconst xcb:render:SubPixel:None 5)
+
+(defconst xcb:render:Repeat:None 0)
+(defconst xcb:render:Repeat:Normal 1)
+(defconst xcb:render:Repeat:Pad 2)
+(defconst xcb:render:Repeat:Reflect 3)
+
+(xcb:deftypealias 'xcb:render:GLYPH 'xcb:CARD32)
+
+(xcb:deftypealias 'xcb:render:GLYPHSET 'xcb:-u4)
+
+(xcb:deftypealias 'xcb:render:PICTURE 'xcb:-u4)
+
+(xcb:deftypealias 'xcb:render:PICTFORMAT 'xcb:-u4)
+
+(xcb:deftypealias 'xcb:render:FIXED 'xcb:INT32)
+
+(defclass xcb:render:PictFormat
+  (xcb:-error)
+  nil)
+
+(defclass xcb:render:Picture
+  (xcb:-error)
+  nil)
+
+(defclass xcb:render:PictOp
+  (xcb:-error)
+  nil)
+
+(defclass xcb:render:GlyphSet
+  (xcb:-error)
+  nil)
+
+(defclass xcb:render:Glyph
+  (xcb:-error)
+  nil)
+
+(defclass xcb:render:DIRECTFORMAT
+  (xcb:-struct)
+  ((red-shift :initarg :red-shift :type xcb:CARD16)
+   (red-mask :initarg :red-mask :type xcb:CARD16)
+   (green-shift :initarg :green-shift :type xcb:CARD16)
+   (green-mask :initarg :green-mask :type xcb:CARD16)
+   (blue-shift :initarg :blue-shift :type xcb:CARD16)
+   (blue-mask :initarg :blue-mask :type xcb:CARD16)
+   (alpha-shift :initarg :alpha-shift :type xcb:CARD16)
+   (alpha-mask :initarg :alpha-mask :type xcb:CARD16)))
+
+(defclass xcb:render:PICTFORMINFO
+  (xcb:-struct)
+  ((id :initarg :id :type xcb:render:PICTFORMAT)
+   (type :initarg :type :type xcb:CARD8)
+   (depth :initarg :depth :type xcb:CARD8)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (direct :initarg :direct :type xcb:render:DIRECTFORMAT)
+   (colormap :initarg :colormap :type xcb:COLORMAP)))
+
+(defclass xcb:render:PICTVISUAL
+  (xcb:-struct)
+  ((visual :initarg :visual :type xcb:VISUALID)
+   (format :initarg :format :type xcb:render:PICTFORMAT)))
+
+(defclass xcb:render:PICTDEPTH
+  (xcb:-struct)
+  ((depth :initarg :depth :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (num-visuals :initarg :num-visuals :type xcb:CARD16)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (visuals :initarg :visuals :type xcb:-ignore)
+   (visuals~ :initform
+            '(name visuals type xcb:render:PICTVISUAL size
+                   (xcb:-fieldref 'num-visuals))
+            :type xcb:-list)))
+
+(defclass xcb:render:PICTSCREEN
+  (xcb:-struct)
+  ((num-depths :initarg :num-depths :type xcb:CARD32)
+   (fallback :initarg :fallback :type xcb:render:PICTFORMAT)
+   (depths :initarg :depths :type xcb:-ignore)
+   (depths~ :initform
+           '(name depths type xcb:render:PICTDEPTH size
+                  (xcb:-fieldref 'num-depths))
+           :type xcb:-list)))
+
+(defclass xcb:render:INDEXVALUE
+  (xcb:-struct)
+  ((pixel :initarg :pixel :type xcb:CARD32)
+   (red :initarg :red :type xcb:CARD16)
+   (green :initarg :green :type xcb:CARD16)
+   (blue :initarg :blue :type xcb:CARD16)
+   (alpha :initarg :alpha :type xcb:CARD16)))
+
+(defclass xcb:render:COLOR
+  (xcb:-struct)
+  ((red :initarg :red :type xcb:CARD16)
+   (green :initarg :green :type xcb:CARD16)
+   (blue :initarg :blue :type xcb:CARD16)
+   (alpha :initarg :alpha :type xcb:CARD16)))
+
+(defclass xcb:render:POINTFIX
+  (xcb:-struct)
+  ((x :initarg :x :type xcb:render:FIXED)
+   (y :initarg :y :type xcb:render:FIXED)))
+
+(defclass xcb:render:LINEFIX
+  (xcb:-struct)
+  ((p1 :initarg :p1 :type xcb:render:POINTFIX)
+   (p2 :initarg :p2 :type xcb:render:POINTFIX)))
+
+(defclass xcb:render:TRIANGLE
+  (xcb:-struct)
+  ((p1 :initarg :p1 :type xcb:render:POINTFIX)
+   (p2 :initarg :p2 :type xcb:render:POINTFIX)
+   (p3 :initarg :p3 :type xcb:render:POINTFIX)))
+
+(defclass xcb:render:TRAPEZOID
+  (xcb:-struct)
+  ((top :initarg :top :type xcb:render:FIXED)
+   (bottom :initarg :bottom :type xcb:render:FIXED)
+   (left :initarg :left :type xcb:render:LINEFIX)
+   (right :initarg :right :type xcb:render:LINEFIX)))
+
+(defclass xcb:render:GLYPHINFO
+  (xcb:-struct)
+  ((width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (x :initarg :x :type xcb:INT16)
+   (y :initarg :y :type xcb:INT16)
+   (x-off :initarg :x-off :type xcb:INT16)
+   (y-off :initarg :y-off :type xcb:INT16)))
+
+(defclass xcb:render:QueryVersion
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)
+   (client-major-version :initarg :client-major-version :type xcb:CARD32)
+   (client-minor-version :initarg :client-minor-version :type xcb:CARD32)))
+(defclass xcb:render:QueryVersion~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (major-version :initarg :major-version :type xcb:CARD32)
+   (minor-version :initarg :minor-version :type xcb:CARD32)
+   (pad~1 :initform 16 :type xcb:-pad)))
+
+(defclass xcb:render:QueryPictFormats
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)))
+(defclass xcb:render:QueryPictFormats~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (num-formats :initarg :num-formats :type xcb:CARD32)
+   (num-screens :initarg :num-screens :type xcb:CARD32)
+   (num-depths :initarg :num-depths :type xcb:CARD32)
+   (num-visuals :initarg :num-visuals :type xcb:CARD32)
+   (num-subpixel :initarg :num-subpixel :type xcb:CARD32)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (formats :initarg :formats :type xcb:-ignore)
+   (formats~ :initform
+            '(name formats type xcb:render:PICTFORMINFO size
+                   (xcb:-fieldref 'num-formats))
+            :type xcb:-list)
+   (screens :initarg :screens :type xcb:-ignore)
+   (screens~ :initform
+            '(name screens type xcb:render:PICTSCREEN size
+                   (xcb:-fieldref 'num-screens))
+            :type xcb:-list)
+   (subpixels :initarg :subpixels :type xcb:-ignore)
+   (subpixels~ :initform
+              '(name subpixels type xcb:CARD32 size
+                     (xcb:-fieldref 'num-subpixel))
+              :type xcb:-list)))
+
+(defclass xcb:render:QueryPictIndexValues
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)
+   (format :initarg :format :type xcb:render:PICTFORMAT)))
+(defclass xcb:render:QueryPictIndexValues~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (num-values :initarg :num-values :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (values :initarg :values :type xcb:-ignore)
+   (values~ :initform
+           '(name values type xcb:render:INDEXVALUE size
+                  (xcb:-fieldref 'num-values))
+           :type xcb:-list)))
+
+(defclass xcb:render:CreatePicture
+  (xcb:-request)
+  ((~opcode :initform 4 :type xcb:-u1)
+   (pid :initarg :pid :type xcb:render:PICTURE)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (format :initarg :format :type xcb:render:PICTFORMAT)
+   (value-mask :initarg :value-mask :type xcb:CARD32)
+   (value-list :initform
+              '(expression
+                (xcb:-fieldref 'value-mask)
+                cases
+                ((xcb:render:CP:Repeat repeat)
+                 (xcb:render:CP:AlphaMap alphamap)
+                 (xcb:render:CP:AlphaXOrigin alphaxorigin)
+                 (xcb:render:CP:AlphaYOrigin alphayorigin)
+                 (xcb:render:CP:ClipXOrigin clipxorigin)
+                 (xcb:render:CP:ClipYOrigin clipyorigin)
+                 (xcb:render:CP:ClipMask clipmask)
+                 (xcb:render:CP:GraphicsExposure graphicsexposure)
+                 (xcb:render:CP:SubwindowMode subwindowmode)
+                 (xcb:render:CP:PolyEdge polyedge)
+                 (xcb:render:CP:PolyMode polymode)
+                 (xcb:render:CP:Dither dither)
+                 (xcb:render:CP:ComponentAlpha componentalpha)))
+              :type xcb:-switch)
+   (repeat :initarg :repeat :type xcb:CARD32)
+   (alphamap :initarg :alphamap :type xcb:render:PICTURE)
+   (alphaxorigin :initarg :alphaxorigin :type xcb:INT32)
+   (alphayorigin :initarg :alphayorigin :type xcb:INT32)
+   (clipxorigin :initarg :clipxorigin :type xcb:INT32)
+   (clipyorigin :initarg :clipyorigin :type xcb:INT32)
+   (clipmask :initarg :clipmask :type xcb:PIXMAP)
+   (graphicsexposure :initarg :graphicsexposure :type xcb:CARD32)
+   (subwindowmode :initarg :subwindowmode :type xcb:CARD32)
+   (polyedge :initarg :polyedge :type xcb:CARD32)
+   (polymode :initarg :polymode :type xcb:CARD32)
+   (dither :initarg :dither :type xcb:ATOM)
+   (componentalpha :initarg :componentalpha :type xcb:CARD32)))
+
+(defclass xcb:render:ChangePicture
+  (xcb:-request)
+  ((~opcode :initform 5 :type xcb:-u1)
+   (picture :initarg :picture :type xcb:render:PICTURE)
+   (value-mask :initarg :value-mask :type xcb:CARD32)
+   (value-list :initform
+              '(expression
+                (xcb:-fieldref 'value-mask)
+                cases
+                ((xcb:render:CP:Repeat repeat)
+                 (xcb:render:CP:AlphaMap alphamap)
+                 (xcb:render:CP:AlphaXOrigin alphaxorigin)
+                 (xcb:render:CP:AlphaYOrigin alphayorigin)
+                 (xcb:render:CP:ClipXOrigin clipxorigin)
+                 (xcb:render:CP:ClipYOrigin clipyorigin)
+                 (xcb:render:CP:ClipMask clipmask)
+                 (xcb:render:CP:GraphicsExposure graphicsexposure)
+                 (xcb:render:CP:SubwindowMode subwindowmode)
+                 (xcb:render:CP:PolyEdge polyedge)
+                 (xcb:render:CP:PolyMode polymode)
+                 (xcb:render:CP:Dither dither)
+                 (xcb:render:CP:ComponentAlpha componentalpha)))
+              :type xcb:-switch)
+   (repeat :initarg :repeat :type xcb:CARD32)
+   (alphamap :initarg :alphamap :type xcb:render:PICTURE)
+   (alphaxorigin :initarg :alphaxorigin :type xcb:INT32)
+   (alphayorigin :initarg :alphayorigin :type xcb:INT32)
+   (clipxorigin :initarg :clipxorigin :type xcb:INT32)
+   (clipyorigin :initarg :clipyorigin :type xcb:INT32)
+   (clipmask :initarg :clipmask :type xcb:PIXMAP)
+   (graphicsexposure :initarg :graphicsexposure :type xcb:CARD32)
+   (subwindowmode :initarg :subwindowmode :type xcb:CARD32)
+   (polyedge :initarg :polyedge :type xcb:CARD32)
+   (polymode :initarg :polymode :type xcb:CARD32)
+   (dither :initarg :dither :type xcb:ATOM)
+   (componentalpha :initarg :componentalpha :type xcb:CARD32)))
+
+(defclass xcb:render:SetPictureClipRectangles
+  (xcb:-request)
+  ((~opcode :initform 6 :type xcb:-u1)
+   (picture :initarg :picture :type xcb:render:PICTURE)
+   (clip-x-origin :initarg :clip-x-origin :type xcb:INT16)
+   (clip-y-origin :initarg :clip-y-origin :type xcb:INT16)
+   (rectangles :initarg :rectangles :type xcb:-ignore)
+   (rectangles~ :initform
+               '(name rectangles type xcb:RECTANGLE size nil)
+               :type xcb:-list)))
+
+(defclass xcb:render:FreePicture
+  (xcb:-request)
+  ((~opcode :initform 7 :type xcb:-u1)
+   (picture :initarg :picture :type xcb:render:PICTURE)))
+
+(defclass xcb:render:Composite
+  (xcb:-request)
+  ((~opcode :initform 8 :type xcb:-u1)
+   (op :initarg :op :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (src :initarg :src :type xcb:render:PICTURE)
+   (mask :initarg :mask :type xcb:render:PICTURE)
+   (dst :initarg :dst :type xcb:render:PICTURE)
+   (src-x :initarg :src-x :type xcb:INT16)
+   (src-y :initarg :src-y :type xcb:INT16)
+   (mask-x :initarg :mask-x :type xcb:INT16)
+   (mask-y :initarg :mask-y :type xcb:INT16)
+   (dst-x :initarg :dst-x :type xcb:INT16)
+   (dst-y :initarg :dst-y :type xcb:INT16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)))
+
+(defclass xcb:render:Trapezoids
+  (xcb:-request)
+  ((~opcode :initform 10 :type xcb:-u1)
+   (op :initarg :op :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (src :initarg :src :type xcb:render:PICTURE)
+   (dst :initarg :dst :type xcb:render:PICTURE)
+   (mask-format :initarg :mask-format :type xcb:render:PICTFORMAT)
+   (src-x :initarg :src-x :type xcb:INT16)
+   (src-y :initarg :src-y :type xcb:INT16)
+   (traps :initarg :traps :type xcb:-ignore)
+   (traps~ :initform
+          '(name traps type xcb:render:TRAPEZOID size nil)
+          :type xcb:-list)))
+
+(defclass xcb:render:Triangles
+  (xcb:-request)
+  ((~opcode :initform 11 :type xcb:-u1)
+   (op :initarg :op :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (src :initarg :src :type xcb:render:PICTURE)
+   (dst :initarg :dst :type xcb:render:PICTURE)
+   (mask-format :initarg :mask-format :type xcb:render:PICTFORMAT)
+   (src-x :initarg :src-x :type xcb:INT16)
+   (src-y :initarg :src-y :type xcb:INT16)
+   (triangles :initarg :triangles :type xcb:-ignore)
+   (triangles~ :initform
+              '(name triangles type xcb:render:TRIANGLE size nil)
+              :type xcb:-list)))
+
+(defclass xcb:render:TriStrip
+  (xcb:-request)
+  ((~opcode :initform 12 :type xcb:-u1)
+   (op :initarg :op :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (src :initarg :src :type xcb:render:PICTURE)
+   (dst :initarg :dst :type xcb:render:PICTURE)
+   (mask-format :initarg :mask-format :type xcb:render:PICTFORMAT)
+   (src-x :initarg :src-x :type xcb:INT16)
+   (src-y :initarg :src-y :type xcb:INT16)
+   (points :initarg :points :type xcb:-ignore)
+   (points~ :initform
+           '(name points type xcb:render:POINTFIX size nil)
+           :type xcb:-list)))
+
+(defclass xcb:render:TriFan
+  (xcb:-request)
+  ((~opcode :initform 13 :type xcb:-u1)
+   (op :initarg :op :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (src :initarg :src :type xcb:render:PICTURE)
+   (dst :initarg :dst :type xcb:render:PICTURE)
+   (mask-format :initarg :mask-format :type xcb:render:PICTFORMAT)
+   (src-x :initarg :src-x :type xcb:INT16)
+   (src-y :initarg :src-y :type xcb:INT16)
+   (points :initarg :points :type xcb:-ignore)
+   (points~ :initform
+           '(name points type xcb:render:POINTFIX size nil)
+           :type xcb:-list)))
+
+(defclass xcb:render:CreateGlyphSet
+  (xcb:-request)
+  ((~opcode :initform 17 :type xcb:-u1)
+   (gsid :initarg :gsid :type xcb:render:GLYPHSET)
+   (format :initarg :format :type xcb:render:PICTFORMAT)))
+
+(defclass xcb:render:ReferenceGlyphSet
+  (xcb:-request)
+  ((~opcode :initform 18 :type xcb:-u1)
+   (gsid :initarg :gsid :type xcb:render:GLYPHSET)
+   (existing :initarg :existing :type xcb:render:GLYPHSET)))
+
+(defclass xcb:render:FreeGlyphSet
+  (xcb:-request)
+  ((~opcode :initform 19 :type xcb:-u1)
+   (glyphset :initarg :glyphset :type xcb:render:GLYPHSET)))
+
+(defclass xcb:render:AddGlyphs
+  (xcb:-request)
+  ((~opcode :initform 20 :type xcb:-u1)
+   (glyphset :initarg :glyphset :type xcb:render:GLYPHSET)
+   (glyphs-len :initarg :glyphs-len :type xcb:CARD32)
+   (glyphids :initarg :glyphids :type xcb:-ignore)
+   (glyphids~ :initform
+             '(name glyphids type xcb:CARD32 size
+                    (xcb:-fieldref 'glyphs-len))
+             :type xcb:-list)
+   (glyphs :initarg :glyphs :type xcb:-ignore)
+   (glyphs~ :initform
+           '(name glyphs type xcb:render:GLYPHINFO size
+                  (xcb:-fieldref 'glyphs-len))
+           :type xcb:-list)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:BYTE size nil)
+         :type xcb:-list)))
+
+(defclass xcb:render:FreeGlyphs
+  (xcb:-request)
+  ((~opcode :initform 22 :type xcb:-u1)
+   (glyphset :initarg :glyphset :type xcb:render:GLYPHSET)
+   (glyphs :initarg :glyphs :type xcb:-ignore)
+   (glyphs~ :initform
+           '(name glyphs type xcb:render:GLYPH size nil)
+           :type xcb:-list)))
+
+(defclass xcb:render:CompositeGlyphs8
+  (xcb:-request)
+  ((~opcode :initform 23 :type xcb:-u1)
+   (op :initarg :op :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (src :initarg :src :type xcb:render:PICTURE)
+   (dst :initarg :dst :type xcb:render:PICTURE)
+   (mask-format :initarg :mask-format :type xcb:render:PICTFORMAT)
+   (glyphset :initarg :glyphset :type xcb:render:GLYPHSET)
+   (src-x :initarg :src-x :type xcb:INT16)
+   (src-y :initarg :src-y :type xcb:INT16)
+   (glyphcmds :initarg :glyphcmds :type xcb:-ignore)
+   (glyphcmds~ :initform
+              '(name glyphcmds type xcb:BYTE size nil)
+              :type xcb:-list)))
+
+(defclass xcb:render:CompositeGlyphs16
+  (xcb:-request)
+  ((~opcode :initform 24 :type xcb:-u1)
+   (op :initarg :op :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (src :initarg :src :type xcb:render:PICTURE)
+   (dst :initarg :dst :type xcb:render:PICTURE)
+   (mask-format :initarg :mask-format :type xcb:render:PICTFORMAT)
+   (glyphset :initarg :glyphset :type xcb:render:GLYPHSET)
+   (src-x :initarg :src-x :type xcb:INT16)
+   (src-y :initarg :src-y :type xcb:INT16)
+   (glyphcmds :initarg :glyphcmds :type xcb:-ignore)
+   (glyphcmds~ :initform
+              '(name glyphcmds type xcb:BYTE size nil)
+              :type xcb:-list)))
+
+(defclass xcb:render:CompositeGlyphs32
+  (xcb:-request)
+  ((~opcode :initform 25 :type xcb:-u1)
+   (op :initarg :op :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (src :initarg :src :type xcb:render:PICTURE)
+   (dst :initarg :dst :type xcb:render:PICTURE)
+   (mask-format :initarg :mask-format :type xcb:render:PICTFORMAT)
+   (glyphset :initarg :glyphset :type xcb:render:GLYPHSET)
+   (src-x :initarg :src-x :type xcb:INT16)
+   (src-y :initarg :src-y :type xcb:INT16)
+   (glyphcmds :initarg :glyphcmds :type xcb:-ignore)
+   (glyphcmds~ :initform
+              '(name glyphcmds type xcb:BYTE size nil)
+              :type xcb:-list)))
+
+(defclass xcb:render:FillRectangles
+  (xcb:-request)
+  ((~opcode :initform 26 :type xcb:-u1)
+   (op :initarg :op :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (dst :initarg :dst :type xcb:render:PICTURE)
+   (color :initarg :color :type xcb:render:COLOR)
+   (rects :initarg :rects :type xcb:-ignore)
+   (rects~ :initform
+          '(name rects type xcb:RECTANGLE size nil)
+          :type xcb:-list)))
+
+(defclass xcb:render:CreateCursor
+  (xcb:-request)
+  ((~opcode :initform 27 :type xcb:-u1)
+   (cid :initarg :cid :type xcb:CURSOR)
+   (source :initarg :source :type xcb:render:PICTURE)
+   (x :initarg :x :type xcb:CARD16)
+   (y :initarg :y :type xcb:CARD16)))
+
+(defclass xcb:render:TRANSFORM
+  (xcb:-struct)
+  ((matrix11 :initarg :matrix11 :type xcb:render:FIXED)
+   (matrix12 :initarg :matrix12 :type xcb:render:FIXED)
+   (matrix13 :initarg :matrix13 :type xcb:render:FIXED)
+   (matrix21 :initarg :matrix21 :type xcb:render:FIXED)
+   (matrix22 :initarg :matrix22 :type xcb:render:FIXED)
+   (matrix23 :initarg :matrix23 :type xcb:render:FIXED)
+   (matrix31 :initarg :matrix31 :type xcb:render:FIXED)
+   (matrix32 :initarg :matrix32 :type xcb:render:FIXED)
+   (matrix33 :initarg :matrix33 :type xcb:render:FIXED)))
+
+(defclass xcb:render:SetPictureTransform
+  (xcb:-request)
+  ((~opcode :initform 28 :type xcb:-u1)
+   (picture :initarg :picture :type xcb:render:PICTURE)
+   (transform :initarg :transform :type xcb:render:TRANSFORM)))
+
+(defclass xcb:render:QueryFilters
+  (xcb:-request)
+  ((~opcode :initform 29 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)))
+(defclass xcb:render:QueryFilters~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (num-aliases :initarg :num-aliases :type xcb:CARD32)
+   (num-filters :initarg :num-filters :type xcb:CARD32)
+   (pad~1 :initform 16 :type xcb:-pad)
+   (aliases :initarg :aliases :type xcb:-ignore)
+   (aliases~ :initform
+            '(name aliases type xcb:CARD16 size
+                   (xcb:-fieldref 'num-aliases))
+            :type xcb:-list)
+   (filters :initarg :filters :type xcb:-ignore)
+   (filters~ :initform
+            '(name filters type xcb:STR size
+                   (xcb:-fieldref 'num-filters))
+            :type xcb:-list)))
+
+(defclass xcb:render:SetPictureFilter
+  (xcb:-request)
+  ((~opcode :initform 30 :type xcb:-u1)
+   (picture :initarg :picture :type xcb:render:PICTURE)
+   (filter-len :initarg :filter-len :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (filter :initarg :filter :type xcb:-ignore)
+   (filter~ :initform
+           '(name filter type xcb:char size
+                  (xcb:-fieldref 'filter-len))
+           :type xcb:-list)
+   (values :initarg :values :type xcb:-ignore)
+   (values~ :initform
+           '(name values type xcb:render:FIXED size nil)
+           :type xcb:-list)))
+
+(defclass xcb:render:ANIMCURSORELT
+  (xcb:-struct)
+  ((cursor :initarg :cursor :type xcb:CURSOR)
+   (delay :initarg :delay :type xcb:CARD32)))
+
+(defclass xcb:render:CreateAnimCursor
+  (xcb:-request)
+  ((~opcode :initform 31 :type xcb:-u1)
+   (cid :initarg :cid :type xcb:CURSOR)
+   (cursors :initarg :cursors :type xcb:-ignore)
+   (cursors~ :initform
+            '(name cursors type xcb:render:ANIMCURSORELT size nil)
+            :type xcb:-list)))
+
+(defclass xcb:render:SPANFIX
+  (xcb:-struct)
+  ((l :initarg :l :type xcb:render:FIXED)
+   (r :initarg :r :type xcb:render:FIXED)
+   (y :initarg :y :type xcb:render:FIXED)))
+
+(defclass xcb:render:TRAP
+  (xcb:-struct)
+  ((top :initarg :top :type xcb:render:SPANFIX)
+   (bot :initarg :bot :type xcb:render:SPANFIX)))
+
+(defclass xcb:render:AddTraps
+  (xcb:-request)
+  ((~opcode :initform 32 :type xcb:-u1)
+   (picture :initarg :picture :type xcb:render:PICTURE)
+   (x-off :initarg :x-off :type xcb:INT16)
+   (y-off :initarg :y-off :type xcb:INT16)
+   (traps :initarg :traps :type xcb:-ignore)
+   (traps~ :initform
+          '(name traps type xcb:render:TRAP size nil)
+          :type xcb:-list)))
+
+(defclass xcb:render:CreateSolidFill
+  (xcb:-request)
+  ((~opcode :initform 33 :type xcb:-u1)
+   (picture :initarg :picture :type xcb:render:PICTURE)
+   (color :initarg :color :type xcb:render:COLOR)))
+
+(defclass xcb:render:CreateLinearGradient
+  (xcb:-request)
+  ((~opcode :initform 34 :type xcb:-u1)
+   (picture :initarg :picture :type xcb:render:PICTURE)
+   (p1 :initarg :p1 :type xcb:render:POINTFIX)
+   (p2 :initarg :p2 :type xcb:render:POINTFIX)
+   (num-stops :initarg :num-stops :type xcb:CARD32)
+   (stops :initarg :stops :type xcb:-ignore)
+   (stops~ :initform
+          '(name stops type xcb:render:FIXED size
+                 (xcb:-fieldref 'num-stops))
+          :type xcb:-list)
+   (colors :initarg :colors :type xcb:-ignore)
+   (colors~ :initform
+           '(name colors type xcb:render:COLOR size
+                  (xcb:-fieldref 'num-stops))
+           :type xcb:-list)))
+
+(defclass xcb:render:CreateRadialGradient
+  (xcb:-request)
+  ((~opcode :initform 35 :type xcb:-u1)
+   (picture :initarg :picture :type xcb:render:PICTURE)
+   (inner :initarg :inner :type xcb:render:POINTFIX)
+   (outer :initarg :outer :type xcb:render:POINTFIX)
+   (inner-radius :initarg :inner-radius :type xcb:render:FIXED)
+   (outer-radius :initarg :outer-radius :type xcb:render:FIXED)
+   (num-stops :initarg :num-stops :type xcb:CARD32)
+   (stops :initarg :stops :type xcb:-ignore)
+   (stops~ :initform
+          '(name stops type xcb:render:FIXED size
+                 (xcb:-fieldref 'num-stops))
+          :type xcb:-list)
+   (colors :initarg :colors :type xcb:-ignore)
+   (colors~ :initform
+           '(name colors type xcb:render:COLOR size
+                  (xcb:-fieldref 'num-stops))
+           :type xcb:-list)))
+
+(defclass xcb:render:CreateConicalGradient
+  (xcb:-request)
+  ((~opcode :initform 36 :type xcb:-u1)
+   (picture :initarg :picture :type xcb:render:PICTURE)
+   (center :initarg :center :type xcb:render:POINTFIX)
+   (angle :initarg :angle :type xcb:render:FIXED)
+   (num-stops :initarg :num-stops :type xcb:CARD32)
+   (stops :initarg :stops :type xcb:-ignore)
+   (stops~ :initform
+          '(name stops type xcb:render:FIXED size
+                 (xcb:-fieldref 'num-stops))
+          :type xcb:-list)
+   (colors :initarg :colors :type xcb:-ignore)
+   (colors~ :initform
+           '(name colors type xcb:render:COLOR size
+                  (xcb:-fieldref 'num-stops))
+           :type xcb:-list)))
+
+(defconst xcb:render:error-number-class-alist
+  '((0 . xcb:render:PictFormat)
+    (1 . xcb:render:Picture)
+    (2 . xcb:render:PictOp)
+    (3 . xcb:render:GlyphSet)
+    (4 . xcb:render:Glyph))
+  "(error-number . error-class) alist")
+
+
+
+(provide 'xcb-render)
diff --git a/xcb-res.el b/xcb-res.el
new file mode 100644
index 0000000..e9c299b
--- /dev/null
+++ b/xcb-res.el
@@ -0,0 +1,156 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `res.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:res:-extension-xname "X-Resource")
+(defconst xcb:res:-extension-name "Res")
+(defconst xcb:res:-major-version 1)
+(defconst xcb:res:-minor-version 2)
+
+(require 'xcb-xproto)
+
+(defclass xcb:res:Client
+  (xcb:-struct)
+  ((resource-base :initarg :resource-base :type xcb:CARD32)
+   (resource-mask :initarg :resource-mask :type xcb:CARD32)))
+
+(defclass xcb:res:Type
+  (xcb:-struct)
+  ((resource-type :initarg :resource-type :type xcb:ATOM)
+   (count :initarg :count :type xcb:CARD32)))
+
+(defconst xcb:res:ClientIdMask:ClientXID 1)
+(defconst xcb:res:ClientIdMask:LocalClientPID 2)
+
+(defclass xcb:res:ClientIdSpec
+  (xcb:-struct)
+  ((client :initarg :client :type xcb:CARD32)
+   (mask :initarg :mask :type xcb:CARD32)))
+
+(defclass xcb:res:ClientIdValue
+  (xcb:-struct)
+  ((spec :initarg :spec :type xcb:res:ClientIdSpec)
+   (length :initarg :length :type xcb:CARD32)
+   (value :initarg :value :type xcb:-ignore)
+   (value~ :initform
+          '(name value type xcb:CARD32 size
+                 (xcb:-fieldref 'length))
+          :type xcb:-list)))
+
+(defclass xcb:res:ResourceIdSpec
+  (xcb:-struct)
+  ((resource :initarg :resource :type xcb:CARD32)
+   (type :initarg :type :type xcb:CARD32)))
+
+(defclass xcb:res:ResourceSizeSpec
+  (xcb:-struct)
+  ((spec :initarg :spec :type xcb:res:ResourceIdSpec)
+   (bytes :initarg :bytes :type xcb:CARD32)
+   (ref-count :initarg :ref-count :type xcb:CARD32)
+   (use-count :initarg :use-count :type xcb:CARD32)))
+
+(defclass xcb:res:ResourceSizeValue
+  (xcb:-struct)
+  ((size :initarg :size :type xcb:res:ResourceSizeSpec)
+   (num-cross-references :initarg :num-cross-references :type xcb:CARD32)
+   (cross-references :initarg :cross-references :type xcb:-ignore)
+   (cross-references~ :initform
+                     '(name cross-references type xcb:res:ResourceSizeSpec size
+                            (xcb:-fieldref 'num-cross-references))
+                     :type xcb:-list)))
+
+(defclass xcb:res:QueryVersion
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)
+   (client-major :initarg :client-major :type xcb:CARD8)
+   (client-minor :initarg :client-minor :type xcb:CARD8)))
+(defclass xcb:res:QueryVersion~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (server-major :initarg :server-major :type xcb:CARD16)
+   (server-minor :initarg :server-minor :type xcb:CARD16)))
+
+(defclass xcb:res:QueryClients
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)))
+(defclass xcb:res:QueryClients~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (num-clients :initarg :num-clients :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (clients :initarg :clients :type xcb:-ignore)
+   (clients~ :initform
+            '(name clients type xcb:res:Client size
+                   (xcb:-fieldref 'num-clients))
+            :type xcb:-list)))
+
+(defclass xcb:res:QueryClientResources
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)
+   (xid :initarg :xid :type xcb:CARD32)))
+(defclass xcb:res:QueryClientResources~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (num-types :initarg :num-types :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (types :initarg :types :type xcb:-ignore)
+   (types~ :initform
+          '(name types type xcb:res:Type size
+                 (xcb:-fieldref 'num-types))
+          :type xcb:-list)))
+
+(defclass xcb:res:QueryClientPixmapBytes
+  (xcb:-request)
+  ((~opcode :initform 3 :type xcb:-u1)
+   (xid :initarg :xid :type xcb:CARD32)))
+(defclass xcb:res:QueryClientPixmapBytes~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (bytes :initarg :bytes :type xcb:CARD32)
+   (bytes-overflow :initarg :bytes-overflow :type xcb:CARD32)))
+
+(defclass xcb:res:QueryClientIds
+  (xcb:-request)
+  ((~opcode :initform 4 :type xcb:-u1)
+   (num-specs :initarg :num-specs :type xcb:CARD32)
+   (specs :initarg :specs :type xcb:-ignore)
+   (specs~ :initform
+          '(name specs type xcb:res:ClientIdSpec size
+                 (xcb:-fieldref 'num-specs))
+          :type xcb:-list)))
+(defclass xcb:res:QueryClientIds~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (num-ids :initarg :num-ids :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (ids :initarg :ids :type xcb:-ignore)
+   (ids~ :initform
+        '(name ids type xcb:res:ClientIdValue size
+               (xcb:-fieldref 'num-ids))
+        :type xcb:-list)))
+
+(defclass xcb:res:QueryResourceBytes
+  (xcb:-request)
+  ((~opcode :initform 5 :type xcb:-u1)
+   (client :initarg :client :type xcb:CARD32)
+   (num-specs :initarg :num-specs :type xcb:CARD32)
+   (specs :initarg :specs :type xcb:-ignore)
+   (specs~ :initform
+          '(name specs type xcb:res:ResourceIdSpec size
+                 (xcb:-fieldref 'num-specs))
+          :type xcb:-list)))
+(defclass xcb:res:QueryResourceBytes~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (num-sizes :initarg :num-sizes :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (sizes :initarg :sizes :type xcb:-ignore)
+   (sizes~ :initform
+          '(name sizes type xcb:res:ResourceSizeValue size
+                 (xcb:-fieldref 'num-sizes))
+          :type xcb:-list)))
+
+
+
+(provide 'xcb-res)
diff --git a/xcb-screensaver.el b/xcb-screensaver.el
new file mode 100644
index 0000000..233e1e0
--- /dev/null
+++ b/xcb-screensaver.el
@@ -0,0 +1,134 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `screensaver.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:screensaver:-extension-xname "MIT-SCREEN-SAVER")
+(defconst xcb:screensaver:-extension-name "ScreenSaver")
+(defconst xcb:screensaver:-major-version 1)
+(defconst xcb:screensaver:-minor-version 1)
+
+(require 'xcb-xproto)
+
+(defconst xcb:screensaver:Kind:Blanked 0)
+(defconst xcb:screensaver:Kind:Internal 1)
+(defconst xcb:screensaver:Kind:External 2)
+
+(defconst xcb:screensaver:Event:NotifyMask 1)
+(defconst xcb:screensaver:Event:CycleMask 2)
+
+(defconst xcb:screensaver:State:Off 0)
+(defconst xcb:screensaver:State:On 1)
+(defconst xcb:screensaver:State:Cycle 2)
+(defconst xcb:screensaver:State:Disabled 3)
+
+(defclass xcb:screensaver:QueryVersion
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)
+   (client-major-version :initarg :client-major-version :type xcb:CARD8)
+   (client-minor-version :initarg :client-minor-version :type xcb:CARD8)
+   (pad~0 :initform 2 :type xcb:-pad)))
+(defclass xcb:screensaver:QueryVersion~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (server-major-version :initarg :server-major-version :type xcb:CARD16)
+   (server-minor-version :initarg :server-minor-version :type xcb:CARD16)
+   (pad~1 :initform 20 :type xcb:-pad)))
+
+(defclass xcb:screensaver:QueryInfo
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)))
+(defclass xcb:screensaver:QueryInfo~reply
+  (xcb:-reply)
+  ((state :initarg :state :type xcb:CARD8)
+   (saver-window :initarg :saver-window :type xcb:WINDOW)
+   (ms-until-server :initarg :ms-until-server :type xcb:CARD32)
+   (ms-since-user-input :initarg :ms-since-user-input :type xcb:CARD32)
+   (event-mask :initarg :event-mask :type xcb:CARD32)
+   (kind :initarg :kind :type xcb:BYTE)
+   (pad~0 :initform 7 :type xcb:-pad)))
+
+(defclass xcb:screensaver:SelectInput
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (event-mask :initarg :event-mask :type xcb:CARD32)))
+
+(defclass xcb:screensaver:SetAttributes
+  (xcb:-request)
+  ((~opcode :initform 3 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (x :initarg :x :type xcb:INT16)
+   (y :initarg :y :type xcb:INT16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (border-width :initarg :border-width :type xcb:CARD16)
+   (class :initarg :class :type xcb:BYTE)
+   (depth :initarg :depth :type xcb:CARD8)
+   (visual :initarg :visual :type xcb:VISUALID)
+   (value-mask :initarg :value-mask :type xcb:CARD32)
+   (value-list :initform
+              '(expression
+                (xcb:-fieldref 'value-mask)
+                cases
+                ((xcb:CW:BackPixmap background-pixmap)
+                 (xcb:CW:BackPixel background-pixel)
+                 (xcb:CW:BorderPixmap border-pixmap)
+                 (xcb:CW:BorderPixel border-pixel)
+                 (xcb:CW:BitGravity bit-gravity)
+                 (xcb:CW:WinGravity win-gravity)
+                 (xcb:CW:BackingStore backing-store)
+                 (xcb:CW:BackingPlanes backing-planes)
+                 (xcb:CW:BackingPixel backing-pixel)
+                 (xcb:CW:OverrideRedirect override-redirect)
+                 (xcb:CW:SaveUnder save-under)
+                 (xcb:CW:EventMask event-mask)
+                 (xcb:CW:DontPropagate do-not-propogate-mask)
+                 (xcb:CW:Colormap colormap)
+                 (xcb:CW:Cursor cursor)))
+              :type xcb:-switch)
+   (background-pixmap :initarg :background-pixmap :type xcb:PIXMAP)
+   (background-pixel :initarg :background-pixel :type xcb:CARD32)
+   (border-pixmap :initarg :border-pixmap :type xcb:PIXMAP)
+   (border-pixel :initarg :border-pixel :type xcb:CARD32)
+   (bit-gravity :initarg :bit-gravity :type xcb:CARD32)
+   (win-gravity :initarg :win-gravity :type xcb:CARD32)
+   (backing-store :initarg :backing-store :type xcb:CARD32)
+   (backing-planes :initarg :backing-planes :type xcb:CARD32)
+   (backing-pixel :initarg :backing-pixel :type xcb:CARD32)
+   (override-redirect :initarg :override-redirect :type xcb:BOOL32)
+   (save-under :initarg :save-under :type xcb:BOOL32)
+   (event-mask :initarg :event-mask :type xcb:CARD32)
+   (do-not-propogate-mask :initarg :do-not-propogate-mask :type xcb:CARD32)
+   (colormap :initarg :colormap :type xcb:COLORMAP)
+   (cursor :initarg :cursor :type xcb:CURSOR)))
+
+(defclass xcb:screensaver:UnsetAttributes
+  (xcb:-request)
+  ((~opcode :initform 4 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)))
+
+(defclass xcb:screensaver:Suspend
+  (xcb:-request)
+  ((~opcode :initform 5 :type xcb:-u1)
+   (suspend :initarg :suspend :type xcb:BOOL)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:screensaver:Notify
+  (xcb:-event)
+  ((state :initarg :state :type xcb:BYTE)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (root :initarg :root :type xcb:WINDOW)
+   (window :initarg :window :type xcb:WINDOW)
+   (kind :initarg :kind :type xcb:BYTE)
+   (forced :initarg :forced :type xcb:BOOL)
+   (pad~0 :initform 14 :type xcb:-pad)))
+
+(defconst xcb:screensaver:event-number-class-alist
+  '((0 . xcb:screensaver:Notify))
+  "(event-number . event-class) alist")
+
+
+
+(provide 'xcb-screensaver)
diff --git a/xcb-shape.el b/xcb-shape.el
new file mode 100644
index 0000000..340d586
--- /dev/null
+++ b/xcb-shape.el
@@ -0,0 +1,152 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `shape.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:shape:-extension-xname "SHAPE")
+(defconst xcb:shape:-extension-name "Shape")
+(defconst xcb:shape:-major-version 1)
+(defconst xcb:shape:-minor-version 1)
+
+(require 'xcb-xproto)
+
+(xcb:deftypealias 'xcb:shape:OP 'xcb:CARD8)
+
+(xcb:deftypealias 'xcb:shape:KIND 'xcb:CARD8)
+
+(defconst xcb:shape:SO:Set 0)
+(defconst xcb:shape:SO:Union 1)
+(defconst xcb:shape:SO:Intersect 2)
+(defconst xcb:shape:SO:Subtract 3)
+(defconst xcb:shape:SO:Invert 4)
+
+(defconst xcb:shape:SK:Bounding 0)
+(defconst xcb:shape:SK:Clip 1)
+(defconst xcb:shape:SK:Input 2)
+
+(defclass xcb:shape:Notify
+  (xcb:-event)
+  ((shape-kind :initarg :shape-kind :type xcb:shape:KIND)
+   (affected-window :initarg :affected-window :type xcb:WINDOW)
+   (extents-x :initarg :extents-x :type xcb:INT16)
+   (extents-y :initarg :extents-y :type xcb:INT16)
+   (extents-width :initarg :extents-width :type xcb:CARD16)
+   (extents-height :initarg :extents-height :type xcb:CARD16)
+   (server-time :initarg :server-time :type xcb:TIMESTAMP)
+   (shaped :initarg :shaped :type xcb:BOOL)
+   (pad~0 :initform 11 :type xcb:-pad)))
+
+(defclass xcb:shape:QueryVersion
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)))
+(defclass xcb:shape:QueryVersion~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (major-version :initarg :major-version :type xcb:CARD16)
+   (minor-version :initarg :minor-version :type xcb:CARD16)))
+
+(defclass xcb:shape:Rectangles
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)
+   (operation :initarg :operation :type xcb:shape:OP)
+   (destination-kind :initarg :destination-kind :type xcb:shape:KIND)
+   (ordering :initarg :ordering :type xcb:BYTE)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (destination-window :initarg :destination-window :type xcb:WINDOW)
+   (x-offset :initarg :x-offset :type xcb:INT16)
+   (y-offset :initarg :y-offset :type xcb:INT16)
+   (rectangles :initarg :rectangles :type xcb:-ignore)
+   (rectangles~ :initform
+               '(name rectangles type xcb:RECTANGLE size nil)
+               :type xcb:-list)))
+
+(defclass xcb:shape:Mask
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)
+   (operation :initarg :operation :type xcb:shape:OP)
+   (destination-kind :initarg :destination-kind :type xcb:shape:KIND)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (destination-window :initarg :destination-window :type xcb:WINDOW)
+   (x-offset :initarg :x-offset :type xcb:INT16)
+   (y-offset :initarg :y-offset :type xcb:INT16)
+   (source-bitmap :initarg :source-bitmap :type xcb:PIXMAP)))
+
+(defclass xcb:shape:Combine
+  (xcb:-request)
+  ((~opcode :initform 3 :type xcb:-u1)
+   (operation :initarg :operation :type xcb:shape:OP)
+   (destination-kind :initarg :destination-kind :type xcb:shape:KIND)
+   (source-kind :initarg :source-kind :type xcb:shape:KIND)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (destination-window :initarg :destination-window :type xcb:WINDOW)
+   (x-offset :initarg :x-offset :type xcb:INT16)
+   (y-offset :initarg :y-offset :type xcb:INT16)
+   (source-window :initarg :source-window :type xcb:WINDOW)))
+
+(defclass xcb:shape:Offset
+  (xcb:-request)
+  ((~opcode :initform 4 :type xcb:-u1)
+   (destination-kind :initarg :destination-kind :type xcb:shape:KIND)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (destination-window :initarg :destination-window :type xcb:WINDOW)
+   (x-offset :initarg :x-offset :type xcb:INT16)
+   (y-offset :initarg :y-offset :type xcb:INT16)))
+
+(defclass xcb:shape:QueryExtents
+  (xcb:-request)
+  ((~opcode :initform 5 :type xcb:-u1)
+   (destination-window :initarg :destination-window :type xcb:WINDOW)))
+(defclass xcb:shape:QueryExtents~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (bounding-shaped :initarg :bounding-shaped :type xcb:BOOL)
+   (clip-shaped :initarg :clip-shaped :type xcb:BOOL)
+   (pad~1 :initform 2 :type xcb:-pad)
+   (bounding-shape-extents-x :initarg :bounding-shape-extents-x :type 
xcb:INT16)
+   (bounding-shape-extents-y :initarg :bounding-shape-extents-y :type 
xcb:INT16)
+   (bounding-shape-extents-width :initarg :bounding-shape-extents-width :type 
xcb:CARD16)
+   (bounding-shape-extents-height :initarg :bounding-shape-extents-height 
:type xcb:CARD16)
+   (clip-shape-extents-x :initarg :clip-shape-extents-x :type xcb:INT16)
+   (clip-shape-extents-y :initarg :clip-shape-extents-y :type xcb:INT16)
+   (clip-shape-extents-width :initarg :clip-shape-extents-width :type 
xcb:CARD16)
+   (clip-shape-extents-height :initarg :clip-shape-extents-height :type 
xcb:CARD16)))
+
+(defclass xcb:shape:SelectInput
+  (xcb:-request)
+  ((~opcode :initform 6 :type xcb:-u1)
+   (destination-window :initarg :destination-window :type xcb:WINDOW)
+   (enable :initarg :enable :type xcb:BOOL)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:shape:InputSelected
+  (xcb:-request)
+  ((~opcode :initform 7 :type xcb:-u1)
+   (destination-window :initarg :destination-window :type xcb:WINDOW)))
+(defclass xcb:shape:InputSelected~reply
+  (xcb:-reply)
+  ((enabled :initarg :enabled :type xcb:BOOL)))
+
+(defclass xcb:shape:GetRectangles
+  (xcb:-request)
+  ((~opcode :initform 8 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (source-kind :initarg :source-kind :type xcb:shape:KIND)
+   (pad~0 :initform 3 :type xcb:-pad)))
+(defclass xcb:shape:GetRectangles~reply
+  (xcb:-reply)
+  ((ordering :initarg :ordering :type xcb:BYTE)
+   (rectangles-len :initarg :rectangles-len :type xcb:CARD32)
+   (pad~0 :initform 20 :type xcb:-pad)
+   (rectangles :initarg :rectangles :type xcb:-ignore)
+   (rectangles~ :initform
+               '(name rectangles type xcb:RECTANGLE size
+                      (xcb:-fieldref 'rectangles-len))
+               :type xcb:-list)))
+
+(defconst xcb:shape:event-number-class-alist
+  '((0 . xcb:shape:Notify))
+  "(event-number . event-class) alist")
+
+
+
+(provide 'xcb-shape)
diff --git a/xcb-shm.el b/xcb-shm.el
new file mode 100644
index 0000000..52d4afa
--- /dev/null
+++ b/xcb-shm.el
@@ -0,0 +1,137 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `shm.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:shm:-extension-xname "MIT-SHM")
+(defconst xcb:shm:-extension-name "Shm")
+(defconst xcb:shm:-major-version 1)
+(defconst xcb:shm:-minor-version 2)
+
+(require 'xcb-xproto)
+
+(xcb:deftypealias 'xcb:shm:SEG 'xcb:-u4)
+
+(defclass xcb:shm:Completion
+  (xcb:-event)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (minor-event :initarg :minor-event :type xcb:CARD16)
+   (major-event :initarg :major-event :type xcb:BYTE)
+   (pad~1 :initform 1 :type xcb:-pad)
+   (shmseg :initarg :shmseg :type xcb:shm:SEG)
+   (offset :initarg :offset :type xcb:CARD32)))
+
+(defclass xcb:shm:BadSeg
+  (xcb:-error xcb:Value)
+  nil)
+
+(defclass xcb:shm:QueryVersion
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)))
+(defclass xcb:shm:QueryVersion~reply
+  (xcb:-reply)
+  ((shared-pixmaps :initarg :shared-pixmaps :type xcb:BOOL)
+   (major-version :initarg :major-version :type xcb:CARD16)
+   (minor-version :initarg :minor-version :type xcb:CARD16)
+   (uid :initarg :uid :type xcb:CARD16)
+   (gid :initarg :gid :type xcb:CARD16)
+   (pixmap-format :initarg :pixmap-format :type xcb:CARD8)
+   (pad~0 :initform 15 :type xcb:-pad)))
+
+(defclass xcb:shm:Attach
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)
+   (shmseg :initarg :shmseg :type xcb:shm:SEG)
+   (shmid :initarg :shmid :type xcb:CARD32)
+   (read-only :initarg :read-only :type xcb:BOOL)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:shm:Detach
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)
+   (shmseg :initarg :shmseg :type xcb:shm:SEG)))
+
+(defclass xcb:shm:PutImage
+  (xcb:-request)
+  ((~opcode :initform 3 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (gc :initarg :gc :type xcb:GCONTEXT)
+   (total-width :initarg :total-width :type xcb:CARD16)
+   (total-height :initarg :total-height :type xcb:CARD16)
+   (src-x :initarg :src-x :type xcb:CARD16)
+   (src-y :initarg :src-y :type xcb:CARD16)
+   (src-width :initarg :src-width :type xcb:CARD16)
+   (src-height :initarg :src-height :type xcb:CARD16)
+   (dst-x :initarg :dst-x :type xcb:INT16)
+   (dst-y :initarg :dst-y :type xcb:INT16)
+   (depth :initarg :depth :type xcb:CARD8)
+   (format :initarg :format :type xcb:CARD8)
+   (send-event :initarg :send-event :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (shmseg :initarg :shmseg :type xcb:shm:SEG)
+   (offset :initarg :offset :type xcb:CARD32)))
+
+(defclass xcb:shm:GetImage
+  (xcb:-request)
+  ((~opcode :initform 4 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (x :initarg :x :type xcb:INT16)
+   (y :initarg :y :type xcb:INT16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (plane-mask :initarg :plane-mask :type xcb:CARD32)
+   (format :initarg :format :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (shmseg :initarg :shmseg :type xcb:shm:SEG)
+   (offset :initarg :offset :type xcb:CARD32)))
+(defclass xcb:shm:GetImage~reply
+  (xcb:-reply)
+  ((depth :initarg :depth :type xcb:CARD8)
+   (visual :initarg :visual :type xcb:VISUALID)
+   (size :initarg :size :type xcb:CARD32)))
+
+(defclass xcb:shm:CreatePixmap
+  (xcb:-request)
+  ((~opcode :initform 5 :type xcb:-u1)
+   (pid :initarg :pid :type xcb:PIXMAP)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (depth :initarg :depth :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (shmseg :initarg :shmseg :type xcb:shm:SEG)
+   (offset :initarg :offset :type xcb:CARD32)))
+
+(defclass xcb:shm:AttachFd
+  (xcb:-request)
+  ((~opcode :initform 6 :type xcb:-u1)
+   (shmseg :initarg :shmseg :type xcb:shm:SEG)
+   (shm-fd :type xcb:-fd)
+   (read-only :initarg :read-only :type xcb:BOOL)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:shm:CreateSegment
+  (xcb:-request)
+  ((~opcode :initform 7 :type xcb:-u1)
+   (shmseg :initarg :shmseg :type xcb:shm:SEG)
+   (size :initarg :size :type xcb:CARD32)
+   (read-only :initarg :read-only :type xcb:BOOL)
+   (pad~0 :initform 3 :type xcb:-pad)))
+(defclass xcb:shm:CreateSegment~reply
+  (xcb:-reply)
+  ((nfd :initarg :nfd :type xcb:CARD8)
+   (shm-fd :type xcb:-fd)
+   (pad~0 :initform 24 :type xcb:-pad)))
+
+(defconst xcb:shm:error-number-class-alist
+  '((0 . xcb:shm:BadSeg))
+  "(error-number . error-class) alist")
+
+(defconst xcb:shm:event-number-class-alist
+  '((0 . xcb:shm:Completion))
+  "(event-number . event-class) alist")
+
+
+
+(provide 'xcb-shm)
diff --git a/xcb-sync.el b/xcb-sync.el
new file mode 100644
index 0000000..bdcb6e9
--- /dev/null
+++ b/xcb-sync.el
@@ -0,0 +1,296 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `sync.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:sync:-extension-xname "SYNC")
+(defconst xcb:sync:-extension-name "Sync")
+(defconst xcb:sync:-major-version 3)
+(defconst xcb:sync:-minor-version 1)
+
+(require 'xcb-xproto)
+
+(xcb:deftypealias 'xcb:sync:ALARM 'xcb:-u4)
+
+(defconst xcb:sync:ALARMSTATE:Active 0)
+(defconst xcb:sync:ALARMSTATE:Inactive 1)
+(defconst xcb:sync:ALARMSTATE:Destroyed 2)
+
+(xcb:deftypealias 'xcb:sync:COUNTER 'xcb:-u4)
+
+(xcb:deftypealias 'xcb:sync:FENCE 'xcb:-u4)
+
+(defconst xcb:sync:TESTTYPE:PositiveTransition 0)
+(defconst xcb:sync:TESTTYPE:NegativeTransition 1)
+(defconst xcb:sync:TESTTYPE:PositiveComparison 2)
+(defconst xcb:sync:TESTTYPE:NegativeComparison 3)
+
+(defconst xcb:sync:VALUETYPE:Absolute 0)
+(defconst xcb:sync:VALUETYPE:Relative 1)
+
+(defconst xcb:sync:CA:Counter 1)
+(defconst xcb:sync:CA:ValueType 2)
+(defconst xcb:sync:CA:Value 4)
+(defconst xcb:sync:CA:TestType 8)
+(defconst xcb:sync:CA:Delta 16)
+(defconst xcb:sync:CA:Events 32)
+
+(defclass xcb:sync:INT64
+  (xcb:-struct)
+  ((hi :initarg :hi :type xcb:INT32)
+   (lo :initarg :lo :type xcb:CARD32)))
+
+(defclass xcb:sync:SYSTEMCOUNTER
+  (xcb:-struct)
+  ((counter :initarg :counter :type xcb:sync:COUNTER)
+   (resolution :initarg :resolution :type xcb:sync:INT64)
+   (name-len :initarg :name-len :type xcb:CARD16)
+   (name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:char size
+                (xcb:-fieldref 'name-len))
+         :type xcb:-list)))
+
+(defclass xcb:sync:TRIGGER
+  (xcb:-struct)
+  ((counter :initarg :counter :type xcb:sync:COUNTER)
+   (wait-type :initarg :wait-type :type xcb:CARD32)
+   (wait-value :initarg :wait-value :type xcb:sync:INT64)
+   (test-type :initarg :test-type :type xcb:CARD32)))
+
+(defclass xcb:sync:WAITCONDITION
+  (xcb:-struct)
+  ((trigger :initarg :trigger :type xcb:sync:TRIGGER)
+   (event-threshold :initarg :event-threshold :type xcb:sync:INT64)))
+
+(defclass xcb:sync:Counter
+  (xcb:-error)
+  ((bad-counter :initarg :bad-counter :type xcb:CARD32)
+   (minor-opcode :initarg :minor-opcode :type xcb:CARD16)
+   (major-opcode :initarg :major-opcode :type xcb:CARD8)))
+
+(defclass xcb:sync:Alarm
+  (xcb:-error)
+  ((bad-alarm :initarg :bad-alarm :type xcb:CARD32)
+   (minor-opcode :initarg :minor-opcode :type xcb:CARD16)
+   (major-opcode :initarg :major-opcode :type xcb:CARD8)))
+
+(defclass xcb:sync:Initialize
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)
+   (desired-major-version :initarg :desired-major-version :type xcb:CARD8)
+   (desired-minor-version :initarg :desired-minor-version :type xcb:CARD8)))
+(defclass xcb:sync:Initialize~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (major-version :initarg :major-version :type xcb:CARD8)
+   (minor-version :initarg :minor-version :type xcb:CARD8)
+   (pad~1 :initform 22 :type xcb:-pad)))
+
+(defclass xcb:sync:ListSystemCounters
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)))
+(defclass xcb:sync:ListSystemCounters~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (counters-len :initarg :counters-len :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (counters :initarg :counters :type xcb:-ignore)
+   (counters~ :initform
+             '(name counters type xcb:sync:SYSTEMCOUNTER size
+                    (xcb:-fieldref 'counters-len))
+             :type xcb:-list)))
+
+(defclass xcb:sync:CreateCounter
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)
+   (id :initarg :id :type xcb:sync:COUNTER)
+   (initial-value :initarg :initial-value :type xcb:sync:INT64)))
+
+(defclass xcb:sync:DestroyCounter
+  (xcb:-request)
+  ((~opcode :initform 6 :type xcb:-u1)
+   (counter :initarg :counter :type xcb:sync:COUNTER)))
+
+(defclass xcb:sync:QueryCounter
+  (xcb:-request)
+  ((~opcode :initform 5 :type xcb:-u1)
+   (counter :initarg :counter :type xcb:sync:COUNTER)))
+(defclass xcb:sync:QueryCounter~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (counter-value :initarg :counter-value :type xcb:sync:INT64)))
+
+(defclass xcb:sync:Await
+  (xcb:-request)
+  ((~opcode :initform 7 :type xcb:-u1)
+   (wait-list :initarg :wait-list :type xcb:-ignore)
+   (wait-list~ :initform
+              '(name wait-list type xcb:sync:WAITCONDITION size nil)
+              :type xcb:-list)))
+
+(defclass xcb:sync:ChangeCounter
+  (xcb:-request)
+  ((~opcode :initform 4 :type xcb:-u1)
+   (counter :initarg :counter :type xcb:sync:COUNTER)
+   (amount :initarg :amount :type xcb:sync:INT64)))
+
+(defclass xcb:sync:SetCounter
+  (xcb:-request)
+  ((~opcode :initform 3 :type xcb:-u1)
+   (counter :initarg :counter :type xcb:sync:COUNTER)
+   (value :initarg :value :type xcb:sync:INT64)))
+
+(defclass xcb:sync:CreateAlarm
+  (xcb:-request)
+  ((~opcode :initform 8 :type xcb:-u1)
+   (id :initarg :id :type xcb:sync:ALARM)
+   (value-mask :initarg :value-mask :type xcb:CARD32)
+   (value-list :initform
+              '(expression
+                (xcb:-fieldref 'value-mask)
+                cases
+                ((xcb:sync:CA:Counter counter)
+                 (xcb:sync:CA:ValueType valueType)
+                 (xcb:sync:CA:Value value)
+                 (xcb:sync:CA:TestType testType)
+                 (xcb:sync:CA:Delta delta)
+                 (xcb:sync:CA:Events events)))
+              :type xcb:-switch)
+   (counter :initarg :counter :type xcb:sync:COUNTER)
+   (valueType :initarg :valueType :type xcb:CARD32)
+   (value :initarg :value :type xcb:sync:INT64)
+   (testType :initarg :testType :type xcb:CARD32)
+   (delta :initarg :delta :type xcb:sync:INT64)
+   (events :initarg :events :type xcb:CARD32)))
+
+(defclass xcb:sync:ChangeAlarm
+  (xcb:-request)
+  ((~opcode :initform 9 :type xcb:-u1)
+   (id :initarg :id :type xcb:sync:ALARM)
+   (value-mask :initarg :value-mask :type xcb:CARD32)
+   (value-list :initform
+              '(expression
+                (xcb:-fieldref 'value-mask)
+                cases
+                ((xcb:sync:CA:Counter counter)
+                 (xcb:sync:CA:ValueType valueType)
+                 (xcb:sync:CA:Value value)
+                 (xcb:sync:CA:TestType testType)
+                 (xcb:sync:CA:Delta delta)
+                 (xcb:sync:CA:Events events)))
+              :type xcb:-switch)
+   (counter :initarg :counter :type xcb:sync:COUNTER)
+   (valueType :initarg :valueType :type xcb:CARD32)
+   (value :initarg :value :type xcb:sync:INT64)
+   (testType :initarg :testType :type xcb:CARD32)
+   (delta :initarg :delta :type xcb:sync:INT64)
+   (events :initarg :events :type xcb:CARD32)))
+
+(defclass xcb:sync:DestroyAlarm
+  (xcb:-request)
+  ((~opcode :initform 11 :type xcb:-u1)
+   (alarm :initarg :alarm :type xcb:sync:ALARM)))
+
+(defclass xcb:sync:QueryAlarm
+  (xcb:-request)
+  ((~opcode :initform 10 :type xcb:-u1)
+   (alarm :initarg :alarm :type xcb:sync:ALARM)))
+(defclass xcb:sync:QueryAlarm~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (trigger :initarg :trigger :type xcb:sync:TRIGGER)
+   (delta :initarg :delta :type xcb:sync:INT64)
+   (events :initarg :events :type xcb:BOOL)
+   (state :initarg :state :type xcb:CARD8)
+   (pad~1 :initform 2 :type xcb:-pad)))
+
+(defclass xcb:sync:SetPriority
+  (xcb:-request)
+  ((~opcode :initform 12 :type xcb:-u1)
+   (id :initarg :id :type xcb:CARD32)
+   (priority :initarg :priority :type xcb:INT32)))
+
+(defclass xcb:sync:GetPriority
+  (xcb:-request)
+  ((~opcode :initform 13 :type xcb:-u1)
+   (id :initarg :id :type xcb:CARD32)))
+(defclass xcb:sync:GetPriority~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (priority :initarg :priority :type xcb:INT32)))
+
+(defclass xcb:sync:CreateFence
+  (xcb:-request)
+  ((~opcode :initform 14 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (fence :initarg :fence :type xcb:sync:FENCE)
+   (initially-triggered :initarg :initially-triggered :type xcb:BOOL)))
+
+(defclass xcb:sync:TriggerFence
+  (xcb:-request)
+  ((~opcode :initform 15 :type xcb:-u1)
+   (fence :initarg :fence :type xcb:sync:FENCE)))
+
+(defclass xcb:sync:ResetFence
+  (xcb:-request)
+  ((~opcode :initform 16 :type xcb:-u1)
+   (fence :initarg :fence :type xcb:sync:FENCE)))
+
+(defclass xcb:sync:DestroyFence
+  (xcb:-request)
+  ((~opcode :initform 17 :type xcb:-u1)
+   (fence :initarg :fence :type xcb:sync:FENCE)))
+
+(defclass xcb:sync:QueryFence
+  (xcb:-request)
+  ((~opcode :initform 18 :type xcb:-u1)
+   (fence :initarg :fence :type xcb:sync:FENCE)))
+(defclass xcb:sync:QueryFence~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (triggered :initarg :triggered :type xcb:BOOL)
+   (pad~1 :initform 23 :type xcb:-pad)))
+
+(defclass xcb:sync:AwaitFence
+  (xcb:-request)
+  ((~opcode :initform 19 :type xcb:-u1)
+   (fence-list :initarg :fence-list :type xcb:-ignore)
+   (fence-list~ :initform
+               '(name fence-list type xcb:sync:FENCE size nil)
+               :type xcb:-list)))
+
+(defclass xcb:sync:CounterNotify
+  (xcb:-event)
+  ((kind :initarg :kind :type xcb:CARD8)
+   (counter :initarg :counter :type xcb:sync:COUNTER)
+   (wait-value :initarg :wait-value :type xcb:sync:INT64)
+   (counter-value :initarg :counter-value :type xcb:sync:INT64)
+   (timestamp :initarg :timestamp :type xcb:TIMESTAMP)
+   (count :initarg :count :type xcb:CARD16)
+   (destroyed :initarg :destroyed :type xcb:BOOL)
+   (pad~0 :initform 1 :type xcb:-pad)))
+
+(defclass xcb:sync:AlarmNotify
+  (xcb:-event)
+  ((kind :initarg :kind :type xcb:CARD8)
+   (alarm :initarg :alarm :type xcb:sync:ALARM)
+   (counter-value :initarg :counter-value :type xcb:sync:INT64)
+   (alarm-value :initarg :alarm-value :type xcb:sync:INT64)
+   (timestamp :initarg :timestamp :type xcb:TIMESTAMP)
+   (state :initarg :state :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defconst xcb:sync:error-number-class-alist
+  '((0 . xcb:sync:Counter)
+    (1 . xcb:sync:Alarm))
+  "(error-number . error-class) alist")
+
+(defconst xcb:sync:event-number-class-alist
+  '((0 . xcb:sync:CounterNotify)
+    (1 . xcb:sync:AlarmNotify))
+  "(event-number . event-class) alist")
+
+
+
+(provide 'xcb-sync)
diff --git a/xcb-types.el b/xcb-types.el
new file mode 100644
index 0000000..33ddeb3
--- /dev/null
+++ b/xcb-types.el
@@ -0,0 +1,625 @@
+;;; xcb-types.el --- Type definitions for XCB  -*- lexical-binding: t -*-
+
+;; Copyright (C) 2015 Chris Feng
+
+;; Author: Chris Feng <address@hidden>
+;; Keywords: unix
+
+;; This file is not part of GNU Emacs.
+
+;; This file is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This file is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this file.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This library defines various data types frequently used in XELB. Simple
+;; types are defined with `cl-deftype' while others are defined as classes.
+;; Basically, data types are used for converting objects to/from byte arrays
+;; rather than for validation purpose. Classes defined elsewhere should also
+;; support `xcb:marshal' and `xcb:unmarshal' methods in order to be considered
+;; a type. Most classes defined here are direct or indirect subclasses of
+;; `xcb:-struct', which has implemented the fundamental marshalling and
+;; unmarshalling methods. These classes again act as the superclasses for more
+;; concrete ones. You may use `eieio-browse' to easily get an overview of the
+;; inheritance hierarchies of all classes defined.
+
+;; Please pay special attention to the byte order adopted in your application.
+;; The global variable `xcb:lsb' specifies the byte order at the time of
+;; instantiating a class (e.g. via `make-instance'). You may let-bind it to
+;; temporarily change the byte order locally.
+
+;; Todo:
+;; + The current implementation of `eieio-default-eval-maybe' only `eval's a
+;;   certain type of forms. If this is changed in the future, we will have to
+;;   adapt our codes accordingly.
+;; + STRING16 and CHAR2B should always be big-endian.
+;; + <paramref> for `xcb:-marshal-field'?
+
+;; References:
+;; + X protocol (http://www.x.org/releases/X11R7.7/doc/xproto/x11protocol.txt)
+
+;;; Code:
+
+(require 'cl-lib)
+(require 'eieio)
+
+;;;; Fix backward compatibility issues with Emacs < 25
+
+;; The `cl-generic' package on ELPA does not solve all problems
+
+(unless (fboundp 'cl-defmethod)
+  (defalias 'cl-defmethod 'defmethod))
+
+(unless (fboundp 'cl-call-next-method)
+  (defalias 'cl-call-next-method 'call-next-method))
+
+(unless (fboundp 'eieio-class-slots)
+  (defun eieio-class-slots (class)
+    (let* ((tmp (class-v class))
+           (names (eieio--class-public-a tmp))
+           (initforms (eieio--class-public-d tmp))
+           (types (eieio--class-public-type tmp))
+           result)
+      (dotimes (i (length names))
+        (setq result (nconc result (list (vector (elt names i)
+                                                 (elt initforms i)
+                                                 (elt types i))))))
+      result))
+  (defsubst cl--slot-descriptor-name (slot) (elt slot 0))
+  (defsubst cl--slot-descriptor-initform (slot) (elt slot 1))
+  (defsubst cl--slot-descriptor-type (slot) (elt slot 2))
+  ;; More fixes for Emacs < 24.4
+  (unless (fboundp 'eieio--class-public-a)
+    (defsubst eieio--class-public-a (slot) (aref slot class-public-a))
+    (defsubst eieio--class-public-d (slot) (aref slot class-public-d))
+    (defsubst eieio--class-public-type (slot) (aref slot class-public-type))))
+
+;;;; Utility functions
+
+(defsubst xcb:-pack-u1 (value)
+  "1 byte unsigned integer => byte array."
+  (vector value))
+
+(defsubst xcb:-pack-i1 (value)
+  "1 byte signed integer => byte array."
+  (xcb:-pack-u1 (if (>= value 0) value
+                  (1+ (logand #xFF (lognot (- value)))))))
+
+(defsubst xcb:-pack-u2 (value)
+  "2 bytes unsigned integer => byte array (MSB first)."
+  (vector (logand (lsh value -8) #xFF) (logand value #xFF)))
+
+(defsubst xcb:-pack-u2-lsb (value)
+  "2 bytes unsigned integer => byte array (LSB first)."
+  (vector (logand value #xFF) (logand (lsh value -8) #xFF)))
+
+(defsubst xcb:-pack-i2 (value)
+  "2 bytes signed integer => byte array (MSB first)."
+  (xcb:-pack-u2 (if (>= value 0) value
+                  (1+ (logand #xFFFF (lognot (- value)))))))
+
+(defsubst xcb:-pack-i2-lsb (value)
+  "2 bytes signed integer => byte array (LSB first)."
+  (xcb:-pack-u2-lsb (if (>= value 0) value
+                      (1+ (logand #xFFFF (lognot (- value)))))))
+
+(if (/= 0 (lsh 1 32))
+    ;; 64 bit
+    (progn
+      (defsubst xcb:-pack-u4 (value)
+        "4 bytes unsigned integer => byte array (MSB first, 64-bit)."
+        (vector (logand (lsh value -24) #xFF) (logand (lsh value -16) #xFF)
+                (logand (lsh value -8) #xFF) (logand value #xFF)))
+      (defsubst xcb:-pack-u4-lsb (value)
+        "4 byte unsigned integer => byte array (LSB first, 64-bit)."
+        (vector (logand value #xFF) (logand (lsh value -8) #xFF)
+                (logand (lsh value -16) #xFF) (logand (lsh value -24) #xFF))))
+  ;; 32 bit (30-bit actually; large numbers are represented as float type)
+  (defsubst xcb:-pack-u4 (value)
+    "4 bytes unsigned integer => byte array (MSB first, 32-bit)."
+    (if (integerp value)
+        (vector (logand (lsh value -24) #xFF) (logand (lsh value -16) #xFF)
+                (logand (lsh value -8) #xFF) (logand value #xFF))
+      (let ((msw (truncate value #x10000))
+            (lsw (truncate (- value (lsh msw 16)))))
+        (vector (logand (lsh msw -8) #xFF) (logand msw #xFF)
+                (logand (lsh lsw -8) #xFF) (logand lsw #xFF)))))
+  (defsubst xcb:-pack-u4-lsb (value)
+    "4 bytes unsigned integer => byte array (LSB first, 32-bit)."
+    (if (integerp value)
+        (vector (logand value #xFF) (logand (lsh value -8) #xFF)
+                (logand (lsh value -16) #xFF) (logand (lsh value -24) #xFF))
+      (let ((msw (truncate value #x10000))
+            (lsw (truncate (- value (* msw #x10000)))))
+        (vector (logand lsw #xFF) (logand (lsh lsw -8) #xFF)
+                (logand msw #xFF) (logand (lsh msw -8) #xFF))))))
+
+(defsubst xcb:-pack-i4 (value)
+  "4 bytes signed integer => byte array (MSB first)."
+  (xcb:-pack-u4 (if (>= value 0)
+                    value
+                  (+ value #x100000000)))) ;treated as float for 32-bit
+
+(defsubst xcb:-pack-i4-lsb (value)
+  "4 bytes signed integer => byte array (LSB first)."
+  (xcb:-pack-u4-lsb (if (>= value 0)
+                        value
+                      (+ value #x100000000)))) ;treated as float for 32-bit
+
+(defsubst xcb:-unpack-u1 (data)
+  "Byte array => 1 byte unsigned integer."
+  (elt data 0))
+
+(defsubst xcb:-unpack-i1 (data)
+  "Byte array => 1 byte signed integer."
+  (let ((value (xcb:-unpack-u1 data)))
+    (if (= 0 (logand #x80 value))
+        value
+      (- (logand #xFF (lognot (1- value)))))))
+
+(defsubst xcb:-unpack-u2 (data)
+  "Byte array => 2 bytes unsigned integer (MSB first)."
+  (logior (lsh (elt data 0) 8) (elt data 1)))
+
+(defsubst xcb:-unpack-u2-lsb (data)
+  "Byte array => 2 bytes unsigned integer (LSB first)."
+  (logior (elt data 0) (lsh (elt data 1) 8)))
+
+(defsubst xcb:-unpack-i2 (data)
+  "Byte array => 2 bytes signed integer (MSB first)."
+  (let ((value (xcb:-unpack-u2 data)))
+    (if (= 0 (logand #x8000 value))
+        value
+      (- (logand #xFFFF (lognot (1- value)))))))
+
+(defsubst xcb:-unpack-i2-lsb (data)
+  "Byte array => 2 bytes signed integer (LSB first)."
+  (let ((value (xcb:-unpack-u2-lsb data)))
+    (if (= 0 (logand #x8000 value))
+        value
+      (- (logand #xFFFF (lognot (1- value)))))))
+
+(if (/= 0 (lsh 1 32))
+    ;; 64-bit
+    (progn
+      (defsubst xcb:-unpack-u4 (data)
+        "Byte array => 4 bytes unsigned integer (MSB first, 64-bit)."
+        (logior (lsh (elt data 0) 24) (lsh (elt data 1) 16)
+                (lsh (elt data 2) 8) (elt data 3)))
+      (defsubst xcb:-unpack-u4-lsb (data)
+        "Byte array => 4 bytes unsigned integer (LSB first, 64-bit)."
+        (logior (elt data 0) (lsh (elt data 1) 8)
+                (lsh (elt data 2) 16) (lsh (elt data 3) 24))))
+  ;; 32-bit (30-bit actually; large numbers are represented as float type)
+  (defsubst xcb:-unpack-u4 (data)
+    "Byte array => 4 bytes unsigned integer (MSB first, 32-bit)."
+    (let ((msb (elt data 0)))
+      (+ (if (> msb 31) (* msb 16777216.0) (lsh msb 24))
+         (logior (lsh (elt data 1) 16) (lsh (elt data 2) 8) (elt data 3)))))
+  (defsubst xcb:-unpack-u4-lsb (data)
+    "Byte array => 4 bytes unsigned integer (LSB first, 32-bit)."
+    (let ((msb (elt data 3)))
+      (+ (if (> msb 31) (* msb 16777216.0) (lsh msb 24))
+         (logior (elt data 0) (lsh (elt data 1) 8) (lsh (elt data 2) 16))))))
+
+(defsubst xcb:-unpack-i4 (data)
+  "Byte array => 4 bytes signed integer (MSB first)."
+  (let ((value (xcb:-unpack-u4 data)))
+    (if (< value #x80000000)            ;treated as float for 32-bit
+        value
+      (- value #x100000000))))          ;treated as float for 32-bit
+
+(defsubst xcb:-unpack-i4-lsb (data)
+  "Byte array => 4 bytes signed integer (LSB first)."
+  (let ((value (xcb:-unpack-u4-lsb data)))
+    (if (< value #x80000000)            ;treated as float for 32-bit
+        value
+      (- value #x100000000))))          ;treated as float for 32-bit
+
+(defmacro xcb:-fieldref (field)
+  "Evaluate a <fieldref> field."
+  `(slot-value obj ,field))
+
+(defmacro xcb:-paramref (field)
+  "Evaluate a <paramref> field."
+  `(slot-value ctx ,field))
+
+(defsubst xcb:-popcount (mask)
+  "Return the popcount of integer MASK."
+  (apply '+ (mapcar (lambda (i)
+                      (logand (lsh mask i) 1))
+                    (number-sequence -31 0)))) ;32-bit number assumed (CARD32)
+
+(defsubst xcb:-request-class->reply-class (request)
+  "Return the reply class corresponding to the request class REQUEST."
+  (intern-soft (concat (symbol-name request) "~reply")))
+
+;;;; Basic types
+
+;; typedef in C
+(defmacro xcb:deftypealias (new-type old-type)
+  "Define NEW-TYPE as an alias of type OLD-TYPE"
+  `(progn
+     (cl-deftype ,(eval new-type) nil ,old-type)
+     (defvaralias ,new-type ,old-type)))
+
+;; 1/2/4 B signed/unsigned integer
+(cl-deftype xcb:-i1 () t)
+(cl-deftype xcb:-i2 () t)
+(cl-deftype xcb:-i4 () t)
+(cl-deftype xcb:-u1 () t)
+(cl-deftype xcb:-u2 () t)
+(cl-deftype xcb:-u4 () t)
+;; <pad>
+(cl-deftype xcb:-pad () t)
+;; <pad> with align attribute
+(cl-deftype xcb:-pad-align () t)
+;; <fd>
+(cl-deftype xcb:-fd () t)
+;; <list>
+(cl-deftype xcb:-list () t)
+;; <switch>
+(cl-deftype xcb:-switch () t)
+;; This type of data is not involved in marshalling/unmarshalling
+(cl-deftype xcb:-ignore () t)
+;; C types and types missing in XCB
+(cl-deftype xcb:void () t)
+(xcb:deftypealias 'xcb:char 'xcb:-u1)
+(xcb:deftypealias 'xcb:BYTE 'xcb:-u1)
+(xcb:deftypealias 'xcb:INT8 'xcb:-i1)
+(xcb:deftypealias 'xcb:INT16 'xcb:-i2)
+(xcb:deftypealias 'xcb:INT32 'xcb:-i4)
+(xcb:deftypealias 'xcb:CARD8 'xcb:-u1)
+(xcb:deftypealias 'xcb:CARD16 'xcb:-u2)
+(xcb:deftypealias 'xcb:CARD32 'xcb:-u4)
+(xcb:deftypealias 'xcb:BOOL 'xcb:-u1)
+
+;;;; Struct type
+
+(defvar xcb:lsb t "t for LSB first (i.e., little-endian), nil otherwise.
+
+Consider let-bind it rather than change its global value.")
+
+(defclass xcb:-struct ()
+  ((~lsb :initarg :~lsb
+         :initform (symbol-value 'xcb:lsb) ;see `eieio-default-eval-maybe'
+         :type xcb:-ignore))
+  :documentation "Struct type.")
+
+(cl-defmethod xcb:marshal ((obj xcb:-struct))
+  "Return the byte-array representation of struct OBJ."
+  (let ((slots (eieio-class-slots (eieio-object-class obj)))
+        result name type value)
+    (catch 'break
+      (dolist (slot slots)
+        (setq type (cl--slot-descriptor-type slot))
+        (unless (or (eq type 'fd) (eq type 'xcb:-ignore))
+          (setq name (cl--slot-descriptor-name slot))
+          (setq value (slot-value obj name))
+          (when (symbolp value)        ;see `eieio-default-eval-maybe'
+            (setq value (symbol-value value)))
+          (setq result
+                (vconcat result (xcb:-marshal-field obj type value
+                                                    (length result))))
+          (when (eq type 'xcb:-switch) ;xcb:-switch always finishes a struct
+            (throw 'break 'nil)))))
+    result))
+
+(cl-defmethod xcb:-marshal-field ((obj xcb:-struct) type value &optional pos)
+  "Return the byte-array representation of a field in struct OBJ of type TYPE
+and value VALUE.
+
+The optional POS argument indicates current byte index of the field (used by
+`xcb:-pad-align' type)."
+  (pcase (indirect-variable type)
+    (`xcb:-u1 (xcb:-pack-u1 value))
+    (`xcb:-i1 (xcb:-pack-i1 value))
+    (`xcb:-u2
+     (if (slot-value obj '~lsb) (xcb:-pack-u2-lsb value) (xcb:-pack-u2 value)))
+    (`xcb:-i2
+     (if (slot-value obj '~lsb) (xcb:-pack-i2-lsb value) (xcb:-pack-i2 value)))
+    (`xcb:-u4
+     (if (slot-value obj '~lsb) (xcb:-pack-u4-lsb value) (xcb:-pack-u4 value)))
+    (`xcb:-i4
+     (if (slot-value obj '~lsb) (xcb:-pack-i4-lsb value) (xcb:-pack-i4 value)))
+    (`xcb:void (vector value))
+    (`xcb:-pad
+     (unless (integerp value)
+       (setq value (eval value `((obj . ,obj)))))
+     (make-vector value 0))
+    (`xcb:-pad-align
+     (unless (integerp value)
+       (setq value (eval value `((obj . ,obj)))))
+     (make-vector (% (- 4 (% pos value)) 4) 0))
+    (`xcb:-list
+     (let* ((list-name (plist-get value 'name))
+            (list-type (plist-get value 'type))
+            (list-size (plist-get value 'size))
+            (data (slot-value obj list-name)))
+       (unless (integerp list-size)
+         (setq list-size (eval list-size `((obj . ,obj))))
+         (unless list-size
+           (setq list-size (length data)))) ;list-size can be nil
+       (cl-assert (= list-size (length data)))
+       (mapconcat (lambda (i)
+                    (xcb:-marshal-field obj list-type i))
+                  data [])))
+    (`xcb:-switch
+     (let ((slots (eieio-class-slots (eieio-object-class obj)))
+           (expression (plist-get value 'expression))
+           (cases (plist-get value 'cases))
+           result condition name-list slot-type)
+       (unless (integerp expression)
+         (setq expression (eval expression `((obj . ,obj)))))
+       (cl-assert (integerp expression))
+       (dolist (i cases)
+         (setq condition (car i))
+         (setq name-list (cdr i))
+         (setq flag nil)
+         (if (symbolp condition)
+             (setq condition (symbol-value condition))
+           (when (and (listp condition) (eq 'logior (car condition)))
+             (setq condition (apply 'logior (cdr condition)))))
+         (cl-assert (or (integerp condition) (listp condition)))
+         (if (integerp condition)
+             (setq flag (/= 0 (logand expression condition)))
+           (while (and (not flag) condition)
+             (setq flag (or flag (= expression (pop condition))))))
+         (when flag
+           (dolist (name name-list)
+             (catch 'break
+               (dolist (slot slots) ;better way to find the slot type?
+                 (when (eq name (cl--slot-descriptor-name slot))
+                   (setq slot-type (cl--slot-descriptor-type slot))
+                   (throw 'break nil))))
+             (setq result
+                   (vconcat result
+                            (xcb:-marshal-field obj slot-type
+                                                (slot-value obj name)
+                                                (+ pos (length result))))))))
+       result))
+    ((and x (guard (child-of-class-p x xcb:-struct)))
+     (xcb:marshal value))
+    (x (error "[XCB] Unsupported type for marshalling: %s" x))))
+
+(cl-defmethod xcb:unmarshal ((obj xcb:-struct) byte-array &optional ctx)
+  "Fill in fields of struct OBJ according to its byte-array representation.
+
+The optional argument CTX is for <paramref>."
+  (let ((slots (eieio-class-slots (eieio-object-class obj)))
+        (result 0)
+        tmp type)
+    (dolist (slot slots)
+      (setq type (cl--slot-descriptor-type slot))
+      (unless (or (eq type 'fd) (eq type 'xcb:-ignore))
+        (setq tmp (xcb:-unmarshal-field obj type byte-array
+                                        (cl--slot-descriptor-initform slot)
+                                        ctx))
+        (setf (slot-value obj (cl--slot-descriptor-name slot)) (car tmp))
+        (setq byte-array (substring byte-array (cadr tmp)))
+        (setq result (+ result (cadr tmp)))))
+    result))
+
+(cl-defmethod xcb:-unmarshal-field ((obj xcb:-struct) type data initform
+                                    &optional ctx)
+  "Return the value of a field in struct OBJ of type TYPE, byte-array
+representation DATA, and default value INITFORM.
+
+The optional argument CTX is for <paramref>.
+
+This method returns a list of two components, with the first being the result
+and the second the consumed length."
+  (pcase (indirect-variable type)
+    (`xcb:-u1 (list (elt data 0) 1))
+    (`xcb:-i1 (let ((result (elt data 0)))
+                (list (if (< result 128) result (- result 255)) 1)))
+    (`xcb:-u2 (list (if (slot-value obj '~lsb)
+                        (xcb:-unpack-u2-lsb data) (xcb:-unpack-u2 data))
+                    2))
+    (`xcb:-i2 (list (if (slot-value obj '~lsb)
+                        (xcb:-unpack-i2-lsb data) (xcb:-unpack-i2 data))
+                    2))
+    (`xcb:-u4 (list (if (slot-value obj '~lsb)
+                        (xcb:-unpack-u4-lsb data) (xcb:-unpack-u4 data))
+                    4))
+    (`xcb:-i4 (list (if (slot-value obj '~lsb)
+                        (xcb:-unpack-i4-lsb data) (xcb:-unpack-i4 data))
+                    4))
+    (`xcb:void (list (elt data 0) 1))
+    (`xcb:-pad
+     (unless (integerp initform)
+       (when (eq 'quote (car initform))
+         (setq initform (cadr initform)))
+       (setq initform (eval initform `((obj . ,obj) (ctx . ,ctx)))))
+     (list initform initform))
+    (`xcb:-pad-align                 ;assume the whole data is aligned
+     (unless (integerp initform)
+       (when (eq 'quote (car initform))
+         (setq initform (cadr initform)))
+       (setq initform (eval initform `((obj . ,obj) (ctx . ,ctx)))))
+     (list initform (% (length data) initform)))
+    (`xcb:-list
+     (when (eq 'quote (car initform))   ;unquote the form
+       (setq initform (cadr initform)))
+     (let ((list-name (plist-get initform 'name))
+           (list-type (plist-get initform 'type))
+           (list-size (plist-get initform 'size)))
+       (unless (integerp list-size)
+         (setq list-size (eval list-size `((obj . ,obj) (ctx . ,ctx)))))
+       (cl-assert (integerp list-size))
+       (pcase list-type
+         (`xcb:char                     ;as Latin-1 encoded string
+          (setf (slot-value obj list-name)
+                (decode-coding-string
+                 (apply 'unibyte-string
+                        (append (substring data 0 list-size) nil))
+                 'iso-latin-1))
+          (list initform list-size))
+         (`xcb:void                     ;for further unmarshalling
+          (setf (slot-value obj list-name) (substring data 0 list-size))
+          (list initform list-size))
+         (x
+          (let ((count 0)
+                result tmp)
+            (dotimes (i list-size)
+              (setq tmp (xcb:-unmarshal-field obj x data nil))
+              (setq result (nconc result (list (car tmp))))
+              (setq data (substring data (cadr tmp)))
+              (setq count (+ count (cadr tmp))))
+            (setf (slot-value obj list-name) result)
+            (list initform count))))))
+    (`xcb:-switch
+     (let ((slots (eieio-class-slots (eieio-object-class obj)))
+           (expression (plist-get initform 'expression))
+           (cases (plist-get initform 'cases))
+           (count 0)
+           condition name-list flag slot-type tmp)
+       (unless (integerp expression)
+         (setq expression (eval expression `((obj . ,obj) (ctx . ,ctx)))))
+       (cl-assert (integerp expression))
+       (dolist (i cases)
+         (setq condition (car i))
+         (setq name-list (cdr i))
+         (setq flag nil)
+         (if (integerp condition)
+             (setq flag (/= 0 (logand expression condition)))
+           (if (eq 'logior (car condition))
+               (setq flag (/= 0 (logand expression
+                                        (apply 'logior (cdr condition)))))
+             (while (and (not flag) condition)
+               (setq flag (or flag (= expression (pop condition)))))))
+         (when flag
+           (dolist (name name-list)
+             (catch 'break
+               (dolist (slot slots) ;better way to find the slot type?
+                 (when (eq name (cl--slot-descriptor-name slot))
+                   (setq slot-type (cl--slot-descriptor-type slot))
+                   (throw 'break nil))))
+             (setq tmp (xcb:-unmarshal-field obj data nil))
+             (setf (slot-value obj name) (car tmp))
+             (setq count (+ count (cadr tmp)))
+             (setq data (substring data (cadr tmp))))))
+       (list initform count)))
+    ((and x (guard (child-of-class-p x xcb:-struct)))
+     (let* ((struct-obj (make-instance x))
+            (tmp (xcb:unmarshal struct-obj data obj)))
+       (list struct-obj tmp)))
+    (x (error "[XCB] Unsupported type for unmarshalling: %s" x))))
+
+;;;; Types derived directly from `xcb:-struct'
+
+(defclass xcb:-request (xcb:-struct)
+  nil
+  :documentation "X request type.")
+
+(defclass xcb:-reply (xcb:-struct)
+  ((length :initarg :length ;reply length, used in e.g. GetKeyboardMapping
+           :type xcb:-ignore))
+  :documentation "X reply type.")
+;;
+(cl-defmethod xcb:unmarshal ((obj xcb:-reply) byte-array)
+  "Fill in fields in a reply OBJ according to its byte-array representation."
+  (cl-call-next-method obj (vconcat (substring byte-array 1 2)
+                                    (substring byte-array 8))))
+
+(defclass xcb:-event (xcb:-struct)
+  nil
+  :documentation "Event type.")
+;;
+(cl-defmethod xcb:marshal ((obj xcb:-event) connection &optional sequence)
+  "Return the byte-array representation of event OBJ.
+
+This method is mainly designed for `xcb:SendEvent', where it's used to generate
+synthetic events. The CONNECTION argument is used to retrieve the event number
+for extensions. If SEQUENCE is non-nil, it is used as the sequence number in
+the synthetic event. Otherwise, 0 is assumed.
+
+Note that this method auto pads the result to 32 bytes, as is always the case."
+  (let ((result (cl-call-next-method obj)))
+    (setq result (vconcat
+                  `[,(xcb:-error-or-event-class->number
+                      connection (eieio-object-class obj))]
+                  result))
+    (unless (same-class-p obj xcb:KeymapNotify)
+      (setq result
+            (vconcat (substring result 0 2)
+                     (funcall (if (slot-value obj '~lsb) 'xcb:-pack-u2-lsb
+                                'xcb:-pack-u2)
+                              (or sequence 0))
+                     (substring result 2))))
+    (cl-assert (>= 32 (length result)))
+    (setq result (vconcat result (make-vector (- 32 (length result)) 0)))))
+;;
+(cl-defmethod xcb:unmarshal ((obj xcb:-event) byte-array)
+  "Fill in event OBJ according to its byte-array representation BYTE-ARRAY."
+  (cl-call-next-method obj
+                       (if (same-class-p obj xcb:KeymapNotify)
+                           (substring byte-array 1) ;strip event code
+                         ;; Strip event code & sequence number
+                         (vconcat (substring byte-array 1 2)
+                                  (substring byte-array 4)))))
+
+(defclass xcb:-error (xcb:-struct)
+  nil
+  :documentation "X error type.")
+;;
+(cl-defmethod xcb:unmarshal ((obj xcb:-error) byte-array)
+  "Fill in error OBJ according to its byte-array representation BYTE-ARRAY."
+  (cl-call-next-method obj (substring byte-array 4))) ;skip the first 4 bytes
+
+(defclass xcb:-union (xcb:-struct)
+  nil
+  :documentation "Union type.")
+;;
+(cl-defmethod xcb:marshal ((obj xcb:-union))
+  "Return the byte-array representation of union OBJ.
+
+This result is converted from the first bounded slot."
+  (let ((slots (eieio-class-slots (eieio-object-class obj)))
+        result slot type name)
+    (while (and (not result) slots)
+      (setq slot (pop slots))
+      (setq type (cl--slot-descriptor-type slot)
+            name (cl--slot-descriptor-name slot))
+      (unless (or (not (slot-boundp obj name))
+                  (eq type 'xcb:-ignore)
+                  ;; Dealing with `xcb:-list' type
+                  (and (eq type 'xcb:-list)
+                       (not (slot-boundp obj (plist-get (slot-value obj name)
+                                                        'name)))))
+        (setq result (xcb:-marshal-field obj
+                                         (cl--slot-descriptor-type slot)
+                                         (slot-value obj name)))))
+    result))
+;;
+(cl-defmethod xcb:unmarshal ((obj xcb:-union) byte-array &optional ctx)
+  "Fill in every field in union OBJ, according to BYTE-ARRAY.
+
+The optional argument CTX is for <paramref>."
+  (let ((slots (eieio-class-slots (eieio-object-class obj)))
+        consumed tmp type)
+    (dolist (slot slots)
+      (setq type (cl--slot-descriptor-type slot))
+      (unless (eq type 'xcb:-ignore)
+        (setq tmp (xcb:-unmarshal-field obj type byte-array
+                                        (cl--slot-descriptor-initform slot)
+                                        ctx))
+        (setf (slot-value obj (cl--slot-descriptor-name slot)) (car tmp))
+        (setq consumed (cadr tmp))))
+    consumed))                          ;consume byte-array only once
+
+
+
+(provide 'xcb-types)
+
+;;; xcb-types.el ends here
diff --git a/xcb-xc_misc.el b/xcb-xc_misc.el
new file mode 100644
index 0000000..f641ce9
--- /dev/null
+++ b/xcb-xc_misc.el
@@ -0,0 +1,48 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `xc_misc.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:xc_misc:-extension-xname "XC-MISC")
+(defconst xcb:xc_misc:-extension-name "XCMisc")
+(defconst xcb:xc_misc:-major-version 1)
+(defconst xcb:xc_misc:-minor-version 1)
+
+(defclass xcb:xc_misc:GetVersion
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)
+   (client-major-version :initarg :client-major-version :type xcb:CARD16)
+   (client-minor-version :initarg :client-minor-version :type xcb:CARD16)))
+(defclass xcb:xc_misc:GetVersion~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (server-major-version :initarg :server-major-version :type xcb:CARD16)
+   (server-minor-version :initarg :server-minor-version :type xcb:CARD16)))
+
+(defclass xcb:xc_misc:GetXIDRange
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)))
+(defclass xcb:xc_misc:GetXIDRange~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (start-id :initarg :start-id :type xcb:CARD32)
+   (count :initarg :count :type xcb:CARD32)))
+
+(defclass xcb:xc_misc:GetXIDList
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)
+   (count :initarg :count :type xcb:CARD32)))
+(defclass xcb:xc_misc:GetXIDList~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (ids-len :initarg :ids-len :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (ids :initarg :ids :type xcb:-ignore)
+   (ids~ :initform
+        '(name ids type xcb:CARD32 size
+               (xcb:-fieldref 'ids-len))
+        :type xcb:-list)))
+
+
+
+(provide 'xcb-xc_misc)
diff --git a/xcb-xevie.el b/xcb-xevie.el
new file mode 100644
index 0000000..49ab69d
--- /dev/null
+++ b/xcb-xevie.el
@@ -0,0 +1,70 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `xevie.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:xevie:-extension-xname "XEVIE")
+(defconst xcb:xevie:-extension-name "Xevie")
+(defconst xcb:xevie:-major-version 1)
+(defconst xcb:xevie:-minor-version 0)
+
+(defclass xcb:xevie:QueryVersion
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)
+   (client-major-version :initarg :client-major-version :type xcb:CARD16)
+   (client-minor-version :initarg :client-minor-version :type xcb:CARD16)))
+(defclass xcb:xevie:QueryVersion~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (server-major-version :initarg :server-major-version :type xcb:CARD16)
+   (server-minor-version :initarg :server-minor-version :type xcb:CARD16)
+   (pad~1 :initform 20 :type xcb:-pad)))
+
+(defclass xcb:xevie:Start
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD32)))
+(defclass xcb:xevie:Start~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 24 :type xcb:-pad)))
+
+(defclass xcb:xevie:End
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)
+   (cmap :initarg :cmap :type xcb:CARD32)))
+(defclass xcb:xevie:End~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 24 :type xcb:-pad)))
+
+(defconst xcb:xevie:Datatype:Unmodified 0)
+(defconst xcb:xevie:Datatype:Modified 1)
+
+(defclass xcb:xevie:Event
+  (xcb:-struct)
+  ((pad~0 :initform 32 :type xcb:-pad)))
+
+(defclass xcb:xevie:Send
+  (xcb:-request)
+  ((~opcode :initform 3 :type xcb:-u1)
+   (event :initarg :event :type xcb:xevie:Event)
+   (data-type :initarg :data-type :type xcb:CARD32)
+   (pad~0 :initform 64 :type xcb:-pad)))
+(defclass xcb:xevie:Send~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 24 :type xcb:-pad)))
+
+(defclass xcb:xevie:SelectInput
+  (xcb:-request)
+  ((~opcode :initform 4 :type xcb:-u1)
+   (event-mask :initarg :event-mask :type xcb:CARD32)))
+(defclass xcb:xevie:SelectInput~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 24 :type xcb:-pad)))
+
+
+
+(provide 'xcb-xevie)
diff --git a/xcb-xf86dri.el b/xcb-xf86dri.el
new file mode 100644
index 0000000..4d34e00
--- /dev/null
+++ b/xcb-xf86dri.el
@@ -0,0 +1,170 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `xf86dri.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:xf86dri:-extension-xname "XFree86-DRI")
+(defconst xcb:xf86dri:-extension-name "XF86Dri")
+(defconst xcb:xf86dri:-major-version 4)
+(defconst xcb:xf86dri:-minor-version 1)
+
+(defclass xcb:xf86dri:DrmClipRect
+  (xcb:-struct)
+  ((x1 :initarg :x1 :type xcb:INT16)
+   (y1 :initarg :y1 :type xcb:INT16)
+   (x2 :initarg :x2 :type xcb:INT16)
+   (x3 :initarg :x3 :type xcb:INT16)))
+
+(defclass xcb:xf86dri:QueryVersion
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)))
+(defclass xcb:xf86dri:QueryVersion~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (dri-major-version :initarg :dri-major-version :type xcb:CARD16)
+   (dri-minor-version :initarg :dri-minor-version :type xcb:CARD16)
+   (dri-minor-patch :initarg :dri-minor-patch :type xcb:CARD32)))
+
+(defclass xcb:xf86dri:QueryDirectRenderingCapable
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD32)))
+(defclass xcb:xf86dri:QueryDirectRenderingCapable~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (is-capable :initarg :is-capable :type xcb:BOOL)))
+
+(defclass xcb:xf86dri:OpenConnection
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD32)))
+(defclass xcb:xf86dri:OpenConnection~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (sarea-handle-low :initarg :sarea-handle-low :type xcb:CARD32)
+   (sarea-handle-high :initarg :sarea-handle-high :type xcb:CARD32)
+   (bus-id-len :initarg :bus-id-len :type xcb:CARD32)
+   (pad~1 :initform 12 :type xcb:-pad)
+   (bus-id :initarg :bus-id :type xcb:-ignore)
+   (bus-id~ :initform
+           '(name bus-id type xcb:char size
+                  (xcb:-fieldref 'bus-id-len))
+           :type xcb:-list)))
+
+(defclass xcb:xf86dri:CloseConnection
+  (xcb:-request)
+  ((~opcode :initform 3 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD32)))
+
+(defclass xcb:xf86dri:GetClientDriverName
+  (xcb:-request)
+  ((~opcode :initform 4 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD32)))
+(defclass xcb:xf86dri:GetClientDriverName~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (client-driver-major-version :initarg :client-driver-major-version :type 
xcb:CARD32)
+   (client-driver-minor-version :initarg :client-driver-minor-version :type 
xcb:CARD32)
+   (client-driver-patch-version :initarg :client-driver-patch-version :type 
xcb:CARD32)
+   (client-driver-name-len :initarg :client-driver-name-len :type xcb:CARD32)
+   (pad~1 :initform 8 :type xcb:-pad)
+   (client-driver-name :initarg :client-driver-name :type xcb:-ignore)
+   (client-driver-name~ :initform
+                       '(name client-driver-name type xcb:char size
+                              (xcb:-fieldref 'client-driver-name-len))
+                       :type xcb:-list)))
+
+(defclass xcb:xf86dri:CreateContext
+  (xcb:-request)
+  ((~opcode :initform 5 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD32)
+   (visual :initarg :visual :type xcb:CARD32)
+   (context :initarg :context :type xcb:CARD32)))
+(defclass xcb:xf86dri:CreateContext~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (hw-context :initarg :hw-context :type xcb:CARD32)))
+
+(defclass xcb:xf86dri:DestroyContext
+  (xcb:-request)
+  ((~opcode :initform 6 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD32)
+   (context :initarg :context :type xcb:CARD32)))
+
+(defclass xcb:xf86dri:CreateDrawable
+  (xcb:-request)
+  ((~opcode :initform 7 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD32)
+   (drawable :initarg :drawable :type xcb:CARD32)))
+(defclass xcb:xf86dri:CreateDrawable~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (hw-drawable-handle :initarg :hw-drawable-handle :type xcb:CARD32)))
+
+(defclass xcb:xf86dri:DestroyDrawable
+  (xcb:-request)
+  ((~opcode :initform 8 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD32)
+   (drawable :initarg :drawable :type xcb:CARD32)))
+
+(defclass xcb:xf86dri:GetDrawableInfo
+  (xcb:-request)
+  ((~opcode :initform 9 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD32)
+   (drawable :initarg :drawable :type xcb:CARD32)))
+(defclass xcb:xf86dri:GetDrawableInfo~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (drawable-table-index :initarg :drawable-table-index :type xcb:CARD32)
+   (drawable-table-stamp :initarg :drawable-table-stamp :type xcb:CARD32)
+   (drawable-origin-X :initarg :drawable-origin-X :type xcb:INT16)
+   (drawable-origin-Y :initarg :drawable-origin-Y :type xcb:INT16)
+   (drawable-size-W :initarg :drawable-size-W :type xcb:INT16)
+   (drawable-size-H :initarg :drawable-size-H :type xcb:INT16)
+   (num-clip-rects :initarg :num-clip-rects :type xcb:CARD32)
+   (back-x :initarg :back-x :type xcb:INT16)
+   (back-y :initarg :back-y :type xcb:INT16)
+   (num-back-clip-rects :initarg :num-back-clip-rects :type xcb:CARD32)
+   (clip-rects :initarg :clip-rects :type xcb:-ignore)
+   (clip-rects~ :initform
+               '(name clip-rects type xcb:xf86dri:DrmClipRect size
+                      (xcb:-fieldref 'num-clip-rects))
+               :type xcb:-list)
+   (back-clip-rects :initarg :back-clip-rects :type xcb:-ignore)
+   (back-clip-rects~ :initform
+                    '(name back-clip-rects type xcb:xf86dri:DrmClipRect size
+                           (xcb:-fieldref 'num-back-clip-rects))
+                    :type xcb:-list)))
+
+(defclass xcb:xf86dri:GetDeviceInfo
+  (xcb:-request)
+  ((~opcode :initform 10 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD32)))
+(defclass xcb:xf86dri:GetDeviceInfo~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (framebuffer-handle-low :initarg :framebuffer-handle-low :type xcb:CARD32)
+   (framebuffer-handle-high :initarg :framebuffer-handle-high :type xcb:CARD32)
+   (framebuffer-origin-offset :initarg :framebuffer-origin-offset :type 
xcb:CARD32)
+   (framebuffer-size :initarg :framebuffer-size :type xcb:CARD32)
+   (framebuffer-stride :initarg :framebuffer-stride :type xcb:CARD32)
+   (device-private-size :initarg :device-private-size :type xcb:CARD32)
+   (device-private :initarg :device-private :type xcb:-ignore)
+   (device-private~ :initform
+                   '(name device-private type xcb:CARD32 size
+                          (xcb:-fieldref 'device-private-size))
+                   :type xcb:-list)))
+
+(defclass xcb:xf86dri:AuthConnection
+  (xcb:-request)
+  ((~opcode :initform 11 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD32)
+   (magic :initarg :magic :type xcb:CARD32)))
+(defclass xcb:xf86dri:AuthConnection~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (authenticated :initarg :authenticated :type xcb:CARD32)))
+
+
+
+(provide 'xcb-xf86dri)
diff --git a/xcb-xf86vidmode.el b/xcb-xf86vidmode.el
new file mode 100644
index 0000000..4325ac8
--- /dev/null
+++ b/xcb-xf86vidmode.el
@@ -0,0 +1,517 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `xf86vidmode.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:xf86vidmode:-extension-xname "XFree86-VidModeExtension")
+(defconst xcb:xf86vidmode:-extension-name "XF86VidMode")
+(defconst xcb:xf86vidmode:-major-version 2)
+(defconst xcb:xf86vidmode:-minor-version 2)
+
+(xcb:deftypealias 'xcb:xf86vidmode:SYNCRANGE 'xcb:CARD32)
+
+(xcb:deftypealias 'xcb:xf86vidmode:DOTCLOCK 'xcb:CARD32)
+
+(defconst xcb:xf86vidmode:ModeFlag:Positive_HSync 1)
+(defconst xcb:xf86vidmode:ModeFlag:Negative_HSync 2)
+(defconst xcb:xf86vidmode:ModeFlag:Positive_VSync 4)
+(defconst xcb:xf86vidmode:ModeFlag:Negative_VSync 8)
+(defconst xcb:xf86vidmode:ModeFlag:Interlace 16)
+(defconst xcb:xf86vidmode:ModeFlag:Composite_Sync 32)
+(defconst xcb:xf86vidmode:ModeFlag:Positive_CSync 64)
+(defconst xcb:xf86vidmode:ModeFlag:Negative_CSync 128)
+(defconst xcb:xf86vidmode:ModeFlag:HSkew 256)
+(defconst xcb:xf86vidmode:ModeFlag:Broadcast 512)
+(defconst xcb:xf86vidmode:ModeFlag:Pixmux 1024)
+(defconst xcb:xf86vidmode:ModeFlag:Double_Clock 2048)
+(defconst xcb:xf86vidmode:ModeFlag:Half_Clock 4096)
+
+(defconst xcb:xf86vidmode:ClockFlag:Programable 1)
+
+(defconst xcb:xf86vidmode:Permission:Read 1)
+(defconst xcb:xf86vidmode:Permission:Write 2)
+
+(defclass xcb:xf86vidmode:ModeInfo
+  (xcb:-struct)
+  ((dotclock :initarg :dotclock :type xcb:xf86vidmode:DOTCLOCK)
+   (hdisplay :initarg :hdisplay :type xcb:CARD16)
+   (hsyncstart :initarg :hsyncstart :type xcb:CARD16)
+   (hsyncend :initarg :hsyncend :type xcb:CARD16)
+   (htotal :initarg :htotal :type xcb:CARD16)
+   (hskew :initarg :hskew :type xcb:CARD32)
+   (vdisplay :initarg :vdisplay :type xcb:CARD16)
+   (vsyncstart :initarg :vsyncstart :type xcb:CARD16)
+   (vsyncend :initarg :vsyncend :type xcb:CARD16)
+   (vtotal :initarg :vtotal :type xcb:CARD16)
+   (pad~0 :initform 4 :type xcb:-pad)
+   (flags :initarg :flags :type xcb:CARD32)
+   (pad~1 :initform 12 :type xcb:-pad)
+   (privsize :initarg :privsize :type xcb:CARD32)))
+
+(defclass xcb:xf86vidmode:QueryVersion
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)))
+(defclass xcb:xf86vidmode:QueryVersion~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (major-version :initarg :major-version :type xcb:CARD16)
+   (minor-version :initarg :minor-version :type xcb:CARD16)))
+
+(defclass xcb:xf86vidmode:GetModeLine
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)))
+(defclass xcb:xf86vidmode:GetModeLine~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (dotclock :initarg :dotclock :type xcb:xf86vidmode:DOTCLOCK)
+   (hdisplay :initarg :hdisplay :type xcb:CARD16)
+   (hsyncstart :initarg :hsyncstart :type xcb:CARD16)
+   (hsyncend :initarg :hsyncend :type xcb:CARD16)
+   (htotal :initarg :htotal :type xcb:CARD16)
+   (hskew :initarg :hskew :type xcb:CARD16)
+   (vdisplay :initarg :vdisplay :type xcb:CARD16)
+   (vsyncstart :initarg :vsyncstart :type xcb:CARD16)
+   (vsyncend :initarg :vsyncend :type xcb:CARD16)
+   (vtotal :initarg :vtotal :type xcb:CARD16)
+   (pad~1 :initform 2 :type xcb:-pad)
+   (flags :initarg :flags :type xcb:CARD32)
+   (pad~2 :initform 12 :type xcb:-pad)
+   (privsize :initarg :privsize :type xcb:CARD32)
+   (private :initarg :private :type xcb:-ignore)
+   (private~ :initform
+            '(name private type xcb:CARD8 size
+                   (xcb:-fieldref 'privsize))
+            :type xcb:-list)))
+
+(defclass xcb:xf86vidmode:ModModeLine
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD32)
+   (hdisplay :initarg :hdisplay :type xcb:CARD16)
+   (hsyncstart :initarg :hsyncstart :type xcb:CARD16)
+   (hsyncend :initarg :hsyncend :type xcb:CARD16)
+   (htotal :initarg :htotal :type xcb:CARD16)
+   (hskew :initarg :hskew :type xcb:CARD16)
+   (vdisplay :initarg :vdisplay :type xcb:CARD16)
+   (vsyncstart :initarg :vsyncstart :type xcb:CARD16)
+   (vsyncend :initarg :vsyncend :type xcb:CARD16)
+   (vtotal :initarg :vtotal :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (flags :initarg :flags :type xcb:CARD32)
+   (pad~1 :initform 12 :type xcb:-pad)
+   (privsize :initarg :privsize :type xcb:CARD32)
+   (private :initarg :private :type xcb:-ignore)
+   (private~ :initform
+            '(name private type xcb:CARD8 size
+                   (xcb:-fieldref 'privsize))
+            :type xcb:-list)))
+
+(defclass xcb:xf86vidmode:SwitchMode
+  (xcb:-request)
+  ((~opcode :initform 3 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD16)
+   (zoom :initarg :zoom :type xcb:CARD16)))
+
+(defclass xcb:xf86vidmode:GetMonitor
+  (xcb:-request)
+  ((~opcode :initform 4 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)))
+(defclass xcb:xf86vidmode:GetMonitor~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (vendor-length :initarg :vendor-length :type xcb:CARD8)
+   (model-length :initarg :model-length :type xcb:CARD8)
+   (num-hsync :initarg :num-hsync :type xcb:CARD8)
+   (num-vsync :initarg :num-vsync :type xcb:CARD8)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (hsync :initarg :hsync :type xcb:-ignore)
+   (hsync~ :initform
+          '(name hsync type xcb:xf86vidmode:SYNCRANGE size
+                 (xcb:-fieldref 'num-hsync))
+          :type xcb:-list)
+   (vsync :initarg :vsync :type xcb:-ignore)
+   (vsync~ :initform
+          '(name vsync type xcb:xf86vidmode:SYNCRANGE size
+                 (xcb:-fieldref 'num-vsync))
+          :type xcb:-list)
+   (vendor :initarg :vendor :type xcb:-ignore)
+   (vendor~ :initform
+           '(name vendor type xcb:char size
+                  (xcb:-fieldref 'vendor-length))
+           :type xcb:-list)
+   (alignment-pad :initarg :alignment-pad :type xcb:-ignore)
+   (alignment-pad~ :initform
+                  '(name alignment-pad type xcb:void size
+                         (-
+                          (logand
+                           (+
+                            (xcb:-fieldref 'vendor-length)
+                            3)
+                           (lognot
+                            (parse-expression
+                             (node-subnode node))))
+                          (xcb:-fieldref 'vendor-length)))
+                  :type xcb:-list)
+   (model :initarg :model :type xcb:-ignore)
+   (model~ :initform
+          '(name model type xcb:char size
+                 (xcb:-fieldref 'model-length))
+          :type xcb:-list)))
+
+(defclass xcb:xf86vidmode:LockModeSwitch
+  (xcb:-request)
+  ((~opcode :initform 5 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD16)
+   (lock :initarg :lock :type xcb:CARD16)))
+
+(defclass xcb:xf86vidmode:GetAllModeLines
+  (xcb:-request)
+  ((~opcode :initform 6 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)))
+(defclass xcb:xf86vidmode:GetAllModeLines~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (modecount :initarg :modecount :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (modeinfo :initarg :modeinfo :type xcb:-ignore)
+   (modeinfo~ :initform
+             '(name modeinfo type xcb:xf86vidmode:ModeInfo size
+                    (xcb:-fieldref 'modecount))
+             :type xcb:-list)))
+
+(defclass xcb:xf86vidmode:AddModeLine
+  (xcb:-request)
+  ((~opcode :initform 7 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD32)
+   (dotclock :initarg :dotclock :type xcb:xf86vidmode:DOTCLOCK)
+   (hdisplay :initarg :hdisplay :type xcb:CARD16)
+   (hsyncstart :initarg :hsyncstart :type xcb:CARD16)
+   (hsyncend :initarg :hsyncend :type xcb:CARD16)
+   (htotal :initarg :htotal :type xcb:CARD16)
+   (hskew :initarg :hskew :type xcb:CARD16)
+   (vdisplay :initarg :vdisplay :type xcb:CARD16)
+   (vsyncstart :initarg :vsyncstart :type xcb:CARD16)
+   (vsyncend :initarg :vsyncend :type xcb:CARD16)
+   (vtotal :initarg :vtotal :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (flags :initarg :flags :type xcb:CARD32)
+   (pad~1 :initform 12 :type xcb:-pad)
+   (privsize :initarg :privsize :type xcb:CARD32)
+   (after-dotclock :initarg :after-dotclock :type xcb:xf86vidmode:DOTCLOCK)
+   (after-hdisplay :initarg :after-hdisplay :type xcb:CARD16)
+   (after-hsyncstart :initarg :after-hsyncstart :type xcb:CARD16)
+   (after-hsyncend :initarg :after-hsyncend :type xcb:CARD16)
+   (after-htotal :initarg :after-htotal :type xcb:CARD16)
+   (after-hskew :initarg :after-hskew :type xcb:CARD16)
+   (after-vdisplay :initarg :after-vdisplay :type xcb:CARD16)
+   (after-vsyncstart :initarg :after-vsyncstart :type xcb:CARD16)
+   (after-vsyncend :initarg :after-vsyncend :type xcb:CARD16)
+   (after-vtotal :initarg :after-vtotal :type xcb:CARD16)
+   (pad~2 :initform 2 :type xcb:-pad)
+   (after-flags :initarg :after-flags :type xcb:CARD32)
+   (pad~3 :initform 12 :type xcb:-pad)
+   (private :initarg :private :type xcb:-ignore)
+   (private~ :initform
+            '(name private type xcb:CARD8 size
+                   (xcb:-fieldref 'privsize))
+            :type xcb:-list)))
+
+(defclass xcb:xf86vidmode:DeleteModeLine
+  (xcb:-request)
+  ((~opcode :initform 8 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD32)
+   (dotclock :initarg :dotclock :type xcb:xf86vidmode:DOTCLOCK)
+   (hdisplay :initarg :hdisplay :type xcb:CARD16)
+   (hsyncstart :initarg :hsyncstart :type xcb:CARD16)
+   (hsyncend :initarg :hsyncend :type xcb:CARD16)
+   (htotal :initarg :htotal :type xcb:CARD16)
+   (hskew :initarg :hskew :type xcb:CARD16)
+   (vdisplay :initarg :vdisplay :type xcb:CARD16)
+   (vsyncstart :initarg :vsyncstart :type xcb:CARD16)
+   (vsyncend :initarg :vsyncend :type xcb:CARD16)
+   (vtotal :initarg :vtotal :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (flags :initarg :flags :type xcb:CARD32)
+   (pad~1 :initform 12 :type xcb:-pad)
+   (privsize :initarg :privsize :type xcb:CARD32)
+   (private :initarg :private :type xcb:-ignore)
+   (private~ :initform
+            '(name private type xcb:CARD8 size
+                   (xcb:-fieldref 'privsize))
+            :type xcb:-list)))
+
+(defclass xcb:xf86vidmode:ValidateModeLine
+  (xcb:-request)
+  ((~opcode :initform 9 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD32)
+   (dotclock :initarg :dotclock :type xcb:xf86vidmode:DOTCLOCK)
+   (hdisplay :initarg :hdisplay :type xcb:CARD16)
+   (hsyncstart :initarg :hsyncstart :type xcb:CARD16)
+   (hsyncend :initarg :hsyncend :type xcb:CARD16)
+   (htotal :initarg :htotal :type xcb:CARD16)
+   (hskew :initarg :hskew :type xcb:CARD16)
+   (vdisplay :initarg :vdisplay :type xcb:CARD16)
+   (vsyncstart :initarg :vsyncstart :type xcb:CARD16)
+   (vsyncend :initarg :vsyncend :type xcb:CARD16)
+   (vtotal :initarg :vtotal :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (flags :initarg :flags :type xcb:CARD32)
+   (pad~1 :initform 12 :type xcb:-pad)
+   (privsize :initarg :privsize :type xcb:CARD32)
+   (private :initarg :private :type xcb:-ignore)
+   (private~ :initform
+            '(name private type xcb:CARD8 size
+                   (xcb:-fieldref 'privsize))
+            :type xcb:-list)))
+(defclass xcb:xf86vidmode:ValidateModeLine~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (status :initarg :status :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)))
+
+(defclass xcb:xf86vidmode:SwitchToMode
+  (xcb:-request)
+  ((~opcode :initform 10 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD32)
+   (dotclock :initarg :dotclock :type xcb:xf86vidmode:DOTCLOCK)
+   (hdisplay :initarg :hdisplay :type xcb:CARD16)
+   (hsyncstart :initarg :hsyncstart :type xcb:CARD16)
+   (hsyncend :initarg :hsyncend :type xcb:CARD16)
+   (htotal :initarg :htotal :type xcb:CARD16)
+   (hskew :initarg :hskew :type xcb:CARD16)
+   (vdisplay :initarg :vdisplay :type xcb:CARD16)
+   (vsyncstart :initarg :vsyncstart :type xcb:CARD16)
+   (vsyncend :initarg :vsyncend :type xcb:CARD16)
+   (vtotal :initarg :vtotal :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (flags :initarg :flags :type xcb:CARD32)
+   (pad~1 :initform 12 :type xcb:-pad)
+   (privsize :initarg :privsize :type xcb:CARD32)
+   (private :initarg :private :type xcb:-ignore)
+   (private~ :initform
+            '(name private type xcb:CARD8 size
+                   (xcb:-fieldref 'privsize))
+            :type xcb:-list)))
+
+(defclass xcb:xf86vidmode:GetViewPort
+  (xcb:-request)
+  ((~opcode :initform 11 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)))
+(defclass xcb:xf86vidmode:GetViewPort~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (x :initarg :x :type xcb:CARD32)
+   (y :initarg :y :type xcb:CARD32)
+   (pad~1 :initform 16 :type xcb:-pad)))
+
+(defclass xcb:xf86vidmode:SetViewPort
+  (xcb:-request)
+  ((~opcode :initform 12 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (x :initarg :x :type xcb:CARD32)
+   (y :initarg :y :type xcb:CARD32)))
+
+(defclass xcb:xf86vidmode:GetDotClocks
+  (xcb:-request)
+  ((~opcode :initform 13 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)))
+(defclass xcb:xf86vidmode:GetDotClocks~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (flags :initarg :flags :type xcb:CARD32)
+   (clocks :initarg :clocks :type xcb:CARD32)
+   (maxclocks :initarg :maxclocks :type xcb:CARD32)
+   (pad~1 :initform 12 :type xcb:-pad)
+   (clock :initarg :clock :type xcb:-ignore)
+   (clock~ :initform
+          '(name clock type xcb:CARD32 size
+                 (*
+                  (- 1
+                     (logand
+                      (xcb:-fieldref 'flags)
+                      1))
+                  (xcb:-fieldref 'clocks)))
+          :type xcb:-list)))
+
+(defclass xcb:xf86vidmode:SetClientVersion
+  (xcb:-request)
+  ((~opcode :initform 14 :type xcb:-u1)
+   (major :initarg :major :type xcb:CARD16)
+   (minor :initarg :minor :type xcb:CARD16)))
+
+(defclass xcb:xf86vidmode:SetGamma
+  (xcb:-request)
+  ((~opcode :initform 15 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (red :initarg :red :type xcb:CARD32)
+   (green :initarg :green :type xcb:CARD32)
+   (blue :initarg :blue :type xcb:CARD32)
+   (pad~1 :initform 12 :type xcb:-pad)))
+
+(defclass xcb:xf86vidmode:GetGamma
+  (xcb:-request)
+  ((~opcode :initform 16 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD16)
+   (pad~0 :initform 26 :type xcb:-pad)))
+(defclass xcb:xf86vidmode:GetGamma~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (red :initarg :red :type xcb:CARD32)
+   (green :initarg :green :type xcb:CARD32)
+   (blue :initarg :blue :type xcb:CARD32)
+   (pad~1 :initform 12 :type xcb:-pad)))
+
+(defclass xcb:xf86vidmode:GetGammaRamp
+  (xcb:-request)
+  ((~opcode :initform 17 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD16)
+   (size :initarg :size :type xcb:CARD16)))
+(defclass xcb:xf86vidmode:GetGammaRamp~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (size :initarg :size :type xcb:CARD16)
+   (pad~1 :initform 22 :type xcb:-pad)
+   (red :initarg :red :type xcb:-ignore)
+   (red~ :initform
+        '(name red type xcb:CARD16 size
+               (logand
+                (+
+                 (xcb:-fieldref 'size)
+                 1)
+                (lognot
+                 (parse-expression
+                  (node-subnode node)))))
+        :type xcb:-list)
+   (green :initarg :green :type xcb:-ignore)
+   (green~ :initform
+          '(name green type xcb:CARD16 size
+                 (logand
+                  (+
+                   (xcb:-fieldref 'size)
+                   1)
+                  (lognot
+                   (parse-expression
+                    (node-subnode node)))))
+          :type xcb:-list)
+   (blue :initarg :blue :type xcb:-ignore)
+   (blue~ :initform
+         '(name blue type xcb:CARD16 size
+                (logand
+                 (+
+                  (xcb:-fieldref 'size)
+                  1)
+                 (lognot
+                  (parse-expression
+                   (node-subnode node)))))
+         :type xcb:-list)))
+
+(defclass xcb:xf86vidmode:SetGammaRamp
+  (xcb:-request)
+  ((~opcode :initform 18 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD16)
+   (size :initarg :size :type xcb:CARD16)
+   (red :initarg :red :type xcb:-ignore)
+   (red~ :initform
+        '(name red type xcb:CARD16 size
+               (logand
+                (+
+                 (xcb:-fieldref 'size)
+                 1)
+                (lognot
+                 (parse-expression
+                  (node-subnode node)))))
+        :type xcb:-list)
+   (green :initarg :green :type xcb:-ignore)
+   (green~ :initform
+          '(name green type xcb:CARD16 size
+                 (logand
+                  (+
+                   (xcb:-fieldref 'size)
+                   1)
+                  (lognot
+                   (parse-expression
+                    (node-subnode node)))))
+          :type xcb:-list)
+   (blue :initarg :blue :type xcb:-ignore)
+   (blue~ :initform
+         '(name blue type xcb:CARD16 size
+                (logand
+                 (+
+                  (xcb:-fieldref 'size)
+                  1)
+                 (lognot
+                  (parse-expression
+                   (node-subnode node)))))
+         :type xcb:-list)))
+
+(defclass xcb:xf86vidmode:GetGammaRampSize
+  (xcb:-request)
+  ((~opcode :initform 19 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)))
+(defclass xcb:xf86vidmode:GetGammaRampSize~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (size :initarg :size :type xcb:CARD16)
+   (pad~1 :initform 22 :type xcb:-pad)))
+
+(defclass xcb:xf86vidmode:GetPermissions
+  (xcb:-request)
+  ((~opcode :initform 20 :type xcb:-u1)
+   (screen :initarg :screen :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)))
+(defclass xcb:xf86vidmode:GetPermissions~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (permissions :initarg :permissions :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)))
+
+(defclass xcb:xf86vidmode:BadClock
+  (xcb:-error)
+  nil)
+
+(defclass xcb:xf86vidmode:BadHTimings
+  (xcb:-error)
+  nil)
+
+(defclass xcb:xf86vidmode:BadVTimings
+  (xcb:-error)
+  nil)
+
+(defclass xcb:xf86vidmode:ModeUnsuitable
+  (xcb:-error)
+  nil)
+
+(defclass xcb:xf86vidmode:ExtensionDisabled
+  (xcb:-error)
+  nil)
+
+(defclass xcb:xf86vidmode:ClientNotLocal
+  (xcb:-error)
+  nil)
+
+(defclass xcb:xf86vidmode:ZoomLocked
+  (xcb:-error)
+  nil)
+
+(defconst xcb:xf86vidmode:error-number-class-alist
+  '((0 . xcb:xf86vidmode:BadClock)
+    (1 . xcb:xf86vidmode:BadHTimings)
+    (2 . xcb:xf86vidmode:BadVTimings)
+    (3 . xcb:xf86vidmode:ModeUnsuitable)
+    (4 . xcb:xf86vidmode:ExtensionDisabled)
+    (5 . xcb:xf86vidmode:ClientNotLocal)
+    (6 . xcb:xf86vidmode:ZoomLocked))
+  "(error-number . error-class) alist")
+
+
+
+(provide 'xcb-xf86vidmode)
diff --git a/xcb-xfixes.el b/xcb-xfixes.el
new file mode 100644
index 0000000..22c5666
--- /dev/null
+++ b/xcb-xfixes.el
@@ -0,0 +1,396 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `xfixes.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:xfixes:-extension-xname "XFIXES")
+(defconst xcb:xfixes:-extension-name "XFixes")
+(defconst xcb:xfixes:-major-version 5)
+(defconst xcb:xfixes:-minor-version 0)
+
+(require 'xcb-xproto)
+
+(require 'xcb-render)
+
+(require 'xcb-shape)
+
+(defclass xcb:xfixes:QueryVersion
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)
+   (client-major-version :initarg :client-major-version :type xcb:CARD32)
+   (client-minor-version :initarg :client-minor-version :type xcb:CARD32)))
+(defclass xcb:xfixes:QueryVersion~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (major-version :initarg :major-version :type xcb:CARD32)
+   (minor-version :initarg :minor-version :type xcb:CARD32)
+   (pad~1 :initform 16 :type xcb:-pad)))
+
+(defconst xcb:xfixes:SaveSetMode:Insert 0)
+(defconst xcb:xfixes:SaveSetMode:Delete 1)
+
+(defconst xcb:xfixes:SaveSetTarget:Nearest 0)
+(defconst xcb:xfixes:SaveSetTarget:Root 1)
+
+(defconst xcb:xfixes:SaveSetMapping:Map 0)
+(defconst xcb:xfixes:SaveSetMapping:Unmap 1)
+
+(defclass xcb:xfixes:ChangeSaveSet
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)
+   (mode :initarg :mode :type xcb:BYTE)
+   (target :initarg :target :type xcb:BYTE)
+   (map :initarg :map :type xcb:BYTE)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (window :initarg :window :type xcb:WINDOW)))
+
+(defconst xcb:xfixes:SelectionEvent:SetSelectionOwner 0)
+(defconst xcb:xfixes:SelectionEvent:SelectionWindowDestroy 1)
+(defconst xcb:xfixes:SelectionEvent:SelectionClientClose 2)
+
+(defconst xcb:xfixes:SelectionEventMask:SetSelectionOwner 1)
+(defconst xcb:xfixes:SelectionEventMask:SelectionWindowDestroy 2)
+(defconst xcb:xfixes:SelectionEventMask:SelectionClientClose 4)
+
+(defclass xcb:xfixes:SelectionNotify
+  (xcb:-event)
+  ((subtype :initarg :subtype :type xcb:CARD8)
+   (window :initarg :window :type xcb:WINDOW)
+   (owner :initarg :owner :type xcb:WINDOW)
+   (selection :initarg :selection :type xcb:ATOM)
+   (timestamp :initarg :timestamp :type xcb:TIMESTAMP)
+   (selection-timestamp :initarg :selection-timestamp :type xcb:TIMESTAMP)
+   (pad~0 :initform 8 :type xcb:-pad)))
+
+(defclass xcb:xfixes:SelectSelectionInput
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (selection :initarg :selection :type xcb:ATOM)
+   (event-mask :initarg :event-mask :type xcb:CARD32)))
+
+(defconst xcb:xfixes:CursorNotify:DisplayCursor 0)
+
+(defconst xcb:xfixes:CursorNotifyMask:DisplayCursor 1)
+
+(defclass xcb:xfixes:CursorNotify
+  (xcb:-event)
+  ((subtype :initarg :subtype :type xcb:CARD8)
+   (window :initarg :window :type xcb:WINDOW)
+   (cursor-serial :initarg :cursor-serial :type xcb:CARD32)
+   (timestamp :initarg :timestamp :type xcb:TIMESTAMP)
+   (name :initarg :name :type xcb:ATOM)
+   (pad~0 :initform 12 :type xcb:-pad)))
+
+(defclass xcb:xfixes:SelectCursorInput
+  (xcb:-request)
+  ((~opcode :initform 3 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (event-mask :initarg :event-mask :type xcb:CARD32)))
+
+(defclass xcb:xfixes:GetCursorImage
+  (xcb:-request)
+  ((~opcode :initform 4 :type xcb:-u1)))
+(defclass xcb:xfixes:GetCursorImage~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (x :initarg :x :type xcb:INT16)
+   (y :initarg :y :type xcb:INT16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (xhot :initarg :xhot :type xcb:CARD16)
+   (yhot :initarg :yhot :type xcb:CARD16)
+   (cursor-serial :initarg :cursor-serial :type xcb:CARD32)
+   (pad~1 :initform 8 :type xcb:-pad)
+   (cursor-image :initarg :cursor-image :type xcb:-ignore)
+   (cursor-image~ :initform
+                 '(name cursor-image type xcb:CARD32 size
+                        (*
+                         (xcb:-fieldref 'width)
+                         (xcb:-fieldref 'height)))
+                 :type xcb:-list)))
+
+(xcb:deftypealias 'xcb:xfixes:REGION 'xcb:-u4)
+
+(defclass xcb:xfixes:BadRegion
+  (xcb:-error)
+  nil)
+
+(defconst xcb:xfixes:Region:None 0)
+
+(defclass xcb:xfixes:CreateRegion
+  (xcb:-request)
+  ((~opcode :initform 5 :type xcb:-u1)
+   (region :initarg :region :type xcb:xfixes:REGION)
+   (rectangles :initarg :rectangles :type xcb:-ignore)
+   (rectangles~ :initform
+               '(name rectangles type xcb:RECTANGLE size nil)
+               :type xcb:-list)))
+
+(defclass xcb:xfixes:CreateRegionFromBitmap
+  (xcb:-request)
+  ((~opcode :initform 6 :type xcb:-u1)
+   (region :initarg :region :type xcb:xfixes:REGION)
+   (bitmap :initarg :bitmap :type xcb:PIXMAP)))
+
+(defclass xcb:xfixes:CreateRegionFromWindow
+  (xcb:-request)
+  ((~opcode :initform 7 :type xcb:-u1)
+   (region :initarg :region :type xcb:xfixes:REGION)
+   (window :initarg :window :type xcb:WINDOW)
+   (kind :initarg :kind :type xcb:shape:KIND)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:xfixes:CreateRegionFromGC
+  (xcb:-request)
+  ((~opcode :initform 8 :type xcb:-u1)
+   (region :initarg :region :type xcb:xfixes:REGION)
+   (gc :initarg :gc :type xcb:GCONTEXT)))
+
+(defclass xcb:xfixes:CreateRegionFromPicture
+  (xcb:-request)
+  ((~opcode :initform 9 :type xcb:-u1)
+   (region :initarg :region :type xcb:xfixes:REGION)
+   (picture :initarg :picture :type xcb:xfixes:PICTURE)))
+
+(defclass xcb:xfixes:DestroyRegion
+  (xcb:-request)
+  ((~opcode :initform 10 :type xcb:-u1)
+   (region :initarg :region :type xcb:xfixes:REGION)))
+
+(defclass xcb:xfixes:SetRegion
+  (xcb:-request)
+  ((~opcode :initform 11 :type xcb:-u1)
+   (region :initarg :region :type xcb:xfixes:REGION)
+   (rectangles :initarg :rectangles :type xcb:-ignore)
+   (rectangles~ :initform
+               '(name rectangles type xcb:RECTANGLE size nil)
+               :type xcb:-list)))
+
+(defclass xcb:xfixes:CopyRegion
+  (xcb:-request)
+  ((~opcode :initform 12 :type xcb:-u1)
+   (source :initarg :source :type xcb:xfixes:REGION)
+   (destination :initarg :destination :type xcb:xfixes:REGION)))
+
+(defclass xcb:xfixes:UnionRegion
+  (xcb:-request)
+  ((~opcode :initform 13 :type xcb:-u1)
+   (source1 :initarg :source1 :type xcb:xfixes:REGION)
+   (source2 :initarg :source2 :type xcb:xfixes:REGION)
+   (destination :initarg :destination :type xcb:xfixes:REGION)))
+
+(defclass xcb:xfixes:IntersectRegion
+  (xcb:-request)
+  ((~opcode :initform 14 :type xcb:-u1)
+   (source1 :initarg :source1 :type xcb:xfixes:REGION)
+   (source2 :initarg :source2 :type xcb:xfixes:REGION)
+   (destination :initarg :destination :type xcb:xfixes:REGION)))
+
+(defclass xcb:xfixes:SubtractRegion
+  (xcb:-request)
+  ((~opcode :initform 15 :type xcb:-u1)
+   (source1 :initarg :source1 :type xcb:xfixes:REGION)
+   (source2 :initarg :source2 :type xcb:xfixes:REGION)
+   (destination :initarg :destination :type xcb:xfixes:REGION)))
+
+(defclass xcb:xfixes:InvertRegion
+  (xcb:-request)
+  ((~opcode :initform 16 :type xcb:-u1)
+   (source :initarg :source :type xcb:xfixes:REGION)
+   (bounds :initarg :bounds :type xcb:RECTANGLE)
+   (destination :initarg :destination :type xcb:xfixes:REGION)))
+
+(defclass xcb:xfixes:TranslateRegion
+  (xcb:-request)
+  ((~opcode :initform 17 :type xcb:-u1)
+   (region :initarg :region :type xcb:xfixes:REGION)
+   (dx :initarg :dx :type xcb:INT16)
+   (dy :initarg :dy :type xcb:INT16)))
+
+(defclass xcb:xfixes:RegionExtents
+  (xcb:-request)
+  ((~opcode :initform 18 :type xcb:-u1)
+   (source :initarg :source :type xcb:xfixes:REGION)
+   (destination :initarg :destination :type xcb:xfixes:REGION)))
+
+(defclass xcb:xfixes:FetchRegion
+  (xcb:-request)
+  ((~opcode :initform 19 :type xcb:-u1)
+   (region :initarg :region :type xcb:xfixes:REGION)))
+(defclass xcb:xfixes:FetchRegion~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (extents :initarg :extents :type xcb:RECTANGLE)
+   (pad~1 :initform 16 :type xcb:-pad)
+   (rectangles :initarg :rectangles :type xcb:-ignore)
+   (rectangles~ :initform
+               '(name rectangles type xcb:RECTANGLE size
+                      (/
+                       (xcb:-fieldref 'length)
+                       2))
+               :type xcb:-list)))
+
+(defclass xcb:xfixes:SetGCClipRegion
+  (xcb:-request)
+  ((~opcode :initform 20 :type xcb:-u1)
+   (gc :initarg :gc :type xcb:GCONTEXT)
+   (region :initarg :region :type xcb:xfixes:REGION)
+   (x-origin :initarg :x-origin :type xcb:INT16)
+   (y-origin :initarg :y-origin :type xcb:INT16)))
+
+(defclass xcb:xfixes:SetWindowShapeRegion
+  (xcb:-request)
+  ((~opcode :initform 21 :type xcb:-u1)
+   (dest :initarg :dest :type xcb:WINDOW)
+   (dest-kind :initarg :dest-kind :type xcb:shape:KIND)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (x-offset :initarg :x-offset :type xcb:INT16)
+   (y-offset :initarg :y-offset :type xcb:INT16)
+   (region :initarg :region :type xcb:xfixes:REGION)))
+
+(defclass xcb:xfixes:SetPictureClipRegion
+  (xcb:-request)
+  ((~opcode :initform 22 :type xcb:-u1)
+   (picture :initarg :picture :type xcb:xfixes:PICTURE)
+   (region :initarg :region :type xcb:xfixes:REGION)
+   (x-origin :initarg :x-origin :type xcb:INT16)
+   (y-origin :initarg :y-origin :type xcb:INT16)))
+
+(defclass xcb:xfixes:SetCursorName
+  (xcb:-request)
+  ((~opcode :initform 23 :type xcb:-u1)
+   (cursor :initarg :cursor :type xcb:CURSOR)
+   (nbytes :initarg :nbytes :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:char size
+                (xcb:-fieldref 'nbytes))
+         :type xcb:-list)))
+
+(defclass xcb:xfixes:GetCursorName
+  (xcb:-request)
+  ((~opcode :initform 24 :type xcb:-u1)
+   (cursor :initarg :cursor :type xcb:CURSOR)))
+(defclass xcb:xfixes:GetCursorName~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (atom :initarg :atom :type xcb:ATOM)
+   (nbytes :initarg :nbytes :type xcb:CARD16)
+   (pad~1 :initform 18 :type xcb:-pad)
+   (name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:char size
+                (xcb:-fieldref 'nbytes))
+         :type xcb:-list)))
+
+(defclass xcb:xfixes:GetCursorImageAndName
+  (xcb:-request)
+  ((~opcode :initform 25 :type xcb:-u1)))
+(defclass xcb:xfixes:GetCursorImageAndName~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (x :initarg :x :type xcb:INT16)
+   (y :initarg :y :type xcb:INT16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (xhot :initarg :xhot :type xcb:CARD16)
+   (yhot :initarg :yhot :type xcb:CARD16)
+   (cursor-serial :initarg :cursor-serial :type xcb:CARD32)
+   (cursor-atom :initarg :cursor-atom :type xcb:ATOM)
+   (nbytes :initarg :nbytes :type xcb:CARD16)
+   (pad~1 :initform 2 :type xcb:-pad)
+   (cursor-image :initarg :cursor-image :type xcb:-ignore)
+   (cursor-image~ :initform
+                 '(name cursor-image type xcb:CARD32 size
+                        (*
+                         (xcb:-fieldref 'width)
+                         (xcb:-fieldref 'height)))
+                 :type xcb:-list)
+   (name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:char size
+                (xcb:-fieldref 'nbytes))
+         :type xcb:-list)))
+
+(defclass xcb:xfixes:ChangeCursor
+  (xcb:-request)
+  ((~opcode :initform 26 :type xcb:-u1)
+   (source :initarg :source :type xcb:CURSOR)
+   (destination :initarg :destination :type xcb:CURSOR)))
+
+(defclass xcb:xfixes:ChangeCursorByName
+  (xcb:-request)
+  ((~opcode :initform 27 :type xcb:-u1)
+   (src :initarg :src :type xcb:CURSOR)
+   (nbytes :initarg :nbytes :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:char size
+                (xcb:-fieldref 'nbytes))
+         :type xcb:-list)))
+
+(defclass xcb:xfixes:ExpandRegion
+  (xcb:-request)
+  ((~opcode :initform 28 :type xcb:-u1)
+   (source :initarg :source :type xcb:xfixes:REGION)
+   (destination :initarg :destination :type xcb:xfixes:REGION)
+   (left :initarg :left :type xcb:CARD16)
+   (right :initarg :right :type xcb:CARD16)
+   (top :initarg :top :type xcb:CARD16)
+   (bottom :initarg :bottom :type xcb:CARD16)))
+
+(defclass xcb:xfixes:HideCursor
+  (xcb:-request)
+  ((~opcode :initform 29 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)))
+
+(defclass xcb:xfixes:ShowCursor
+  (xcb:-request)
+  ((~opcode :initform 30 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)))
+
+(xcb:deftypealias 'xcb:xfixes:BARRIER 'xcb:-u4)
+
+(defconst xcb:xfixes:BarrierDirections:PositiveX 1)
+(defconst xcb:xfixes:BarrierDirections:PositiveY 2)
+(defconst xcb:xfixes:BarrierDirections:NegativeX 4)
+(defconst xcb:xfixes:BarrierDirections:NegativeY 8)
+
+(defclass xcb:xfixes:CreatePointerBarrier
+  (xcb:-request)
+  ((~opcode :initform 31 :type xcb:-u1)
+   (barrier :initarg :barrier :type xcb:xfixes:BARRIER)
+   (window :initarg :window :type xcb:WINDOW)
+   (x1 :initarg :x1 :type xcb:CARD16)
+   (y1 :initarg :y1 :type xcb:CARD16)
+   (x2 :initarg :x2 :type xcb:CARD16)
+   (y2 :initarg :y2 :type xcb:CARD16)
+   (directions :initarg :directions :type xcb:CARD32)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (num-devices :initarg :num-devices :type xcb:CARD16)
+   (devices :initarg :devices :type xcb:-ignore)
+   (devices~ :initform
+            '(name devices type xcb:CARD16 size
+                   (xcb:-fieldref 'num-devices))
+            :type xcb:-list)))
+
+(defclass xcb:xfixes:DeletePointerBarrier
+  (xcb:-request)
+  ((~opcode :initform 32 :type xcb:-u1)
+   (barrier :initarg :barrier :type xcb:xfixes:BARRIER)))
+
+(defconst xcb:xfixes:error-number-class-alist
+  '((0 . xcb:xfixes:BadRegion))
+  "(error-number . error-class) alist")
+
+(defconst xcb:xfixes:event-number-class-alist
+  '((0 . xcb:xfixes:SelectionNotify)
+    (1 . xcb:xfixes:CursorNotify))
+  "(event-number . event-class) alist")
+
+
+
+(provide 'xcb-xfixes)
diff --git a/xcb-xinerama.el b/xcb-xinerama.el
new file mode 100644
index 0000000..9cfe0ff
--- /dev/null
+++ b/xcb-xinerama.el
@@ -0,0 +1,86 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `xinerama.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:xinerama:-extension-xname "XINERAMA")
+(defconst xcb:xinerama:-extension-name "Xinerama")
+(defconst xcb:xinerama:-major-version 1)
+(defconst xcb:xinerama:-minor-version 1)
+
+(require 'xcb-xproto)
+
+(defclass xcb:xinerama:ScreenInfo
+  (xcb:-struct)
+  ((x-org :initarg :x-org :type xcb:INT16)
+   (y-org :initarg :y-org :type xcb:INT16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)))
+
+(defclass xcb:xinerama:QueryVersion
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)
+   (major :initarg :major :type xcb:CARD8)
+   (minor :initarg :minor :type xcb:CARD8)))
+(defclass xcb:xinerama:QueryVersion~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (major :initarg :major :type xcb:CARD16)
+   (minor :initarg :minor :type xcb:CARD16)))
+
+(defclass xcb:xinerama:GetState
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)))
+(defclass xcb:xinerama:GetState~reply
+  (xcb:-reply)
+  ((state :initarg :state :type xcb:BYTE)
+   (window :initarg :window :type xcb:WINDOW)))
+
+(defclass xcb:xinerama:GetScreenCount
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)))
+(defclass xcb:xinerama:GetScreenCount~reply
+  (xcb:-reply)
+  ((screen-count :initarg :screen-count :type xcb:BYTE)
+   (window :initarg :window :type xcb:WINDOW)))
+
+(defclass xcb:xinerama:GetScreenSize
+  (xcb:-request)
+  ((~opcode :initform 3 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (screen :initarg :screen :type xcb:CARD32)))
+(defclass xcb:xinerama:GetScreenSize~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (width :initarg :width :type xcb:CARD32)
+   (height :initarg :height :type xcb:CARD32)
+   (window :initarg :window :type xcb:WINDOW)
+   (screen :initarg :screen :type xcb:CARD32)))
+
+(defclass xcb:xinerama:IsActive
+  (xcb:-request)
+  ((~opcode :initform 4 :type xcb:-u1)))
+(defclass xcb:xinerama:IsActive~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (state :initarg :state :type xcb:CARD32)))
+
+(defclass xcb:xinerama:QueryScreens
+  (xcb:-request)
+  ((~opcode :initform 5 :type xcb:-u1)))
+(defclass xcb:xinerama:QueryScreens~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (number :initarg :number :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (screen-info :initarg :screen-info :type xcb:-ignore)
+   (screen-info~ :initform
+                '(name screen-info type xcb:xinerama:ScreenInfo size
+                       (xcb:-fieldref 'number))
+                :type xcb:-list)))
+
+
+
+(provide 'xcb-xinerama)
diff --git a/xcb-xinput.el b/xcb-xinput.el
new file mode 100644
index 0000000..75c992b
--- /dev/null
+++ b/xcb-xinput.el
@@ -0,0 +1,2770 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `xinput.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:xinput:-extension-xname "XInputExtension")
+(defconst xcb:xinput:-extension-name "Input")
+(defconst xcb:xinput:-major-version 2)
+(defconst xcb:xinput:-minor-version 3)
+
+(require 'xcb-xfixes)
+
+(require 'xcb-xproto)
+
+(xcb:deftypealias 'xcb:xinput:EventClass 'xcb:CARD32)
+
+(xcb:deftypealias 'xcb:xinput:KeyCode 'xcb:CARD8)
+
+(xcb:deftypealias 'xcb:xinput:DeviceId 'xcb:CARD16)
+
+(xcb:deftypealias 'xcb:xinput:FP1616 'xcb:INT32)
+
+(defclass xcb:xinput:FP3232
+  (xcb:-struct)
+  ((integral :initarg :integral :type xcb:INT32)
+   (frac :initarg :frac :type xcb:CARD32)))
+
+(defclass xcb:xinput:GetExtensionVersion
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)
+   (name-len :initarg :name-len :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:char size
+                (xcb:-fieldref 'name-len))
+         :type xcb:-list)))
+(defclass xcb:xinput:GetExtensionVersion~reply
+  (xcb:-reply)
+  ((xi-reply-type :initarg :xi-reply-type :type xcb:CARD8)
+   (server-major :initarg :server-major :type xcb:CARD16)
+   (server-minor :initarg :server-minor :type xcb:CARD16)
+   (present :initarg :present :type xcb:BOOL)
+   (pad~0 :initform 19 :type xcb:-pad)))
+
+(defconst xcb:xinput:DeviceUse:IsXPointer 0)
+(defconst xcb:xinput:DeviceUse:IsXKeyboard 1)
+(defconst xcb:xinput:DeviceUse:IsXExtensionDevice 2)
+(defconst xcb:xinput:DeviceUse:IsXExtensionKeyboard 3)
+(defconst xcb:xinput:DeviceUse:IsXExtensionPointer 4)
+
+(defconst xcb:xinput:InputClass:Key 0)
+(defconst xcb:xinput:InputClass:Button 1)
+(defconst xcb:xinput:InputClass:Valuator 2)
+(defconst xcb:xinput:InputClass:Feedback 3)
+(defconst xcb:xinput:InputClass:Proximity 4)
+(defconst xcb:xinput:InputClass:Focus 5)
+(defconst xcb:xinput:InputClass:Other 6)
+
+(defconst xcb:xinput:ValuatorMode:Relative 0)
+(defconst xcb:xinput:ValuatorMode:Absolute 1)
+
+(defclass xcb:xinput:DeviceInfo
+  (xcb:-struct)
+  ((device-type :initarg :device-type :type xcb:ATOM)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (num-class-info :initarg :num-class-info :type xcb:CARD8)
+   (device-use :initarg :device-use :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)))
+
+(defclass xcb:xinput:KeyInfo
+  (xcb:-struct)
+  ((class-id :initarg :class-id :type xcb:CARD8)
+   (len :initarg :len :type xcb:CARD8)
+   (min-keycode :initarg :min-keycode :type xcb:xinput:KeyCode)
+   (max-keycode :initarg :max-keycode :type xcb:xinput:KeyCode)
+   (num-keys :initarg :num-keys :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)))
+
+(defclass xcb:xinput:ButtonInfo
+  (xcb:-struct)
+  ((class-id :initarg :class-id :type xcb:CARD8)
+   (len :initarg :len :type xcb:CARD8)
+   (num-buttons :initarg :num-buttons :type xcb:CARD16)))
+
+(defclass xcb:xinput:AxisInfo
+  (xcb:-struct)
+  ((resolution :initarg :resolution :type xcb:CARD32)
+   (minimum :initarg :minimum :type xcb:INT32)
+   (maximum :initarg :maximum :type xcb:INT32)))
+
+(defclass xcb:xinput:ValuatorInfo
+  (xcb:-struct)
+  ((class-id :initarg :class-id :type xcb:CARD8)
+   (len :initarg :len :type xcb:CARD8)
+   (axes-len :initarg :axes-len :type xcb:CARD8)
+   (mode :initarg :mode :type xcb:CARD8)
+   (motion-size :initarg :motion-size :type xcb:CARD32)
+   (axes :initarg :axes :type xcb:-ignore)
+   (axes~ :initform
+         '(name axes type xcb:xinput:AxisInfo size
+                (xcb:-fieldref 'axes-len))
+         :type xcb:-list)))
+
+(defclass xcb:xinput:InputInfo
+  (xcb:-struct)
+  ((class-id :initarg :class-id :type xcb:CARD8)
+   (len :initarg :len :type xcb:CARD8)
+   (info :initform
+        '(expression
+          (xcb:-fieldref 'class-id)
+          cases
+          (((xcb:xinput:InputClass:Key)
+            min-keycode max-keycode num-keys pad~10)
+           ((xcb:xinput:InputClass:Button)
+            num-buttons)
+           ((xcb:xinput:InputClass:Valuator)
+            axes-len mode motion-size axes)))
+        :type xcb:-switch)
+   (min-keycode :initarg :min-keycode :type xcb:xinput:KeyCode)
+   (max-keycode :initarg :max-keycode :type xcb:xinput:KeyCode)
+   (num-keys :initarg :num-keys :type xcb:CARD16)
+   (pad~10 :initform 2 :type xcb:-pad)
+   (num-buttons :initarg :num-buttons :type xcb:CARD16)
+   (axes-len :initarg :axes-len :type xcb:CARD8)
+   (mode :initarg :mode :type xcb:CARD8)
+   (motion-size :initarg :motion-size :type xcb:CARD32)
+   (axes :initarg :axes :type xcb:-ignore)
+   (axes~ :initform
+         '(name axes type xcb:xinput:AxisInfo size
+                (xcb:-fieldref 'axes-len))
+         :type xcb:-list)))
+
+(defclass xcb:xinput:DeviceName
+  (xcb:-struct)
+  ((len :initarg :len :type xcb:CARD8)
+   (string :initarg :string :type xcb:-ignore)
+   (string~ :initform
+           '(name string type xcb:char size
+                  (xcb:-fieldref 'len))
+           :type xcb:-list)))
+
+(defclass xcb:xinput:ListInputDevices
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)))
+(defclass xcb:xinput:ListInputDevices~reply
+  (xcb:-reply)
+  ((xi-reply-type :initarg :xi-reply-type :type xcb:CARD8)
+   (devices-len :initarg :devices-len :type xcb:CARD8)
+   (pad~0 :initform 23 :type xcb:-pad)
+   (devices :initarg :devices :type xcb:-ignore)
+   (devices~ :initform
+            '(name devices type xcb:xinput:DeviceInfo size
+                   (xcb:-fieldref 'devices-len))
+            :type xcb:-list)
+   (infos :initarg :infos :type xcb:-ignore)
+   (infos~ :initform
+          '(name infos type xcb:xinput:InputInfo size
+                 (apply '+
+                        (mapcar
+                         (lambda
+                           (i)
+                           (eval
+                            '(xcb:-fieldref 'num-class-info)
+                            (list
+                             (nconc
+                              '(obj)
+                              i))))
+                         (slot-value obj 'devices))))
+          :type xcb:-list)
+   (names :initarg :names :type xcb:-ignore)
+   (names~ :initform
+          '(name names type xcb:STR size
+                 (xcb:-fieldref 'devices-len))
+          :type xcb:-list)
+   (pad~1 :initform 4 :type xcb:-pad-align)))
+
+(defclass xcb:xinput:InputClassInfo
+  (xcb:-struct)
+  ((class-id :initarg :class-id :type xcb:CARD8)
+   (event-type-base :initarg :event-type-base :type xcb:CARD8)))
+
+(defclass xcb:xinput:OpenDevice
+  (xcb:-request)
+  ((~opcode :initform 3 :type xcb:-u1)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+(defclass xcb:xinput:OpenDevice~reply
+  (xcb:-reply)
+  ((xi-reply-type :initarg :xi-reply-type :type xcb:CARD8)
+   (num-classes :initarg :num-classes :type xcb:CARD8)
+   (pad~0 :initform 23 :type xcb:-pad)
+   (class-info :initarg :class-info :type xcb:-ignore)
+   (class-info~ :initform
+               '(name class-info type xcb:xinput:InputClassInfo size
+                      (xcb:-fieldref 'num-classes))
+               :type xcb:-list)
+   (pad~1 :initform 4 :type xcb:-pad-align)))
+
+(defclass xcb:xinput:CloseDevice
+  (xcb:-request)
+  ((~opcode :initform 4 :type xcb:-u1)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:xinput:SetDeviceMode
+  (xcb:-request)
+  ((~opcode :initform 5 :type xcb:-u1)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (mode :initarg :mode :type xcb:CARD8)
+   (pad~0 :initform 2 :type xcb:-pad)))
+(defclass xcb:xinput:SetDeviceMode~reply
+  (xcb:-reply)
+  ((xi-reply-type :initarg :xi-reply-type :type xcb:CARD8)
+   (status :initarg :status :type xcb:CARD8)
+   (pad~0 :initform 23 :type xcb:-pad)))
+
+(defclass xcb:xinput:SelectExtensionEvent
+  (xcb:-request)
+  ((~opcode :initform 6 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (num-classes :initarg :num-classes :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (classes :initarg :classes :type xcb:-ignore)
+   (classes~ :initform
+            '(name classes type xcb:xinput:EventClass size
+                   (xcb:-fieldref 'num-classes))
+            :type xcb:-list)))
+
+(defclass xcb:xinput:GetSelectedExtensionEvents
+  (xcb:-request)
+  ((~opcode :initform 7 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)))
+(defclass xcb:xinput:GetSelectedExtensionEvents~reply
+  (xcb:-reply)
+  ((xi-reply-type :initarg :xi-reply-type :type xcb:CARD8)
+   (num-this-classes :initarg :num-this-classes :type xcb:CARD16)
+   (num-all-classes :initarg :num-all-classes :type xcb:CARD16)
+   (pad~0 :initform 20 :type xcb:-pad)
+   (this-classes :initarg :this-classes :type xcb:-ignore)
+   (this-classes~ :initform
+                 '(name this-classes type xcb:xinput:EventClass size
+                        (xcb:-fieldref 'num-this-classes))
+                 :type xcb:-list)
+   (all-classes :initarg :all-classes :type xcb:-ignore)
+   (all-classes~ :initform
+                '(name all-classes type xcb:xinput:EventClass size
+                       (xcb:-fieldref 'num-all-classes))
+                :type xcb:-list)))
+
+(defconst xcb:xinput:PropagateMode:AddToList 0)
+(defconst xcb:xinput:PropagateMode:DeleteFromList 1)
+
+(defclass xcb:xinput:ChangeDeviceDontPropagateList
+  (xcb:-request)
+  ((~opcode :initform 8 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (num-classes :initarg :num-classes :type xcb:CARD16)
+   (mode :initarg :mode :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (classes :initarg :classes :type xcb:-ignore)
+   (classes~ :initform
+            '(name classes type xcb:xinput:EventClass size
+                   (xcb:-fieldref 'num-classes))
+            :type xcb:-list)))
+
+(defclass xcb:xinput:GetDeviceDontPropagateList
+  (xcb:-request)
+  ((~opcode :initform 9 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)))
+(defclass xcb:xinput:GetDeviceDontPropagateList~reply
+  (xcb:-reply)
+  ((xi-reply-type :initarg :xi-reply-type :type xcb:CARD8)
+   (num-classes :initarg :num-classes :type xcb:CARD16)
+   (pad~0 :initform 22 :type xcb:-pad)
+   (classes :initarg :classes :type xcb:-ignore)
+   (classes~ :initform
+            '(name classes type xcb:xinput:EventClass size
+                   (xcb:-fieldref 'num-classes))
+            :type xcb:-list)))
+
+(defclass xcb:xinput:DeviceTimeCoord
+  (xcb:-struct)
+  ((time :initarg :time :type xcb:TIMESTAMP)
+   (axisvalues :initarg :axisvalues :type xcb:-ignore)
+   (axisvalues~ :initform
+               '(name axisvalues type xcb:INT32 size
+                      (xcb:-paramref 'num-axes))
+               :type xcb:-list)))
+
+(defclass xcb:xinput:GetDeviceMotionEvents
+  (xcb:-request)
+  ((~opcode :initform 10 :type xcb:-u1)
+   (start :initarg :start :type xcb:TIMESTAMP)
+   (stop :initarg :stop :type xcb:TIMESTAMP)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+(defclass xcb:xinput:GetDeviceMotionEvents~reply
+  (xcb:-reply)
+  ((xi-reply-type :initarg :xi-reply-type :type xcb:CARD8)
+   (num-events :initarg :num-events :type xcb:CARD32)
+   (num-axes :initarg :num-axes :type xcb:CARD8)
+   (device-mode :initarg :device-mode :type xcb:CARD8)
+   (pad~0 :initform 18 :type xcb:-pad)
+   (events :initarg :events :type xcb:-ignore)
+   (events~ :initform
+           '(name events type xcb:xinput:DeviceTimeCoord size
+                  (xcb:-fieldref 'num-events))
+           :type xcb:-list)))
+
+(defclass xcb:xinput:ChangeKeyboardDevice
+  (xcb:-request)
+  ((~opcode :initform 11 :type xcb:-u1)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+(defclass xcb:xinput:ChangeKeyboardDevice~reply
+  (xcb:-reply)
+  ((xi-reply-type :initarg :xi-reply-type :type xcb:CARD8)
+   (status :initarg :status :type xcb:CARD8)
+   (pad~0 :initform 23 :type xcb:-pad)))
+
+(defclass xcb:xinput:ChangePointerDevice
+  (xcb:-request)
+  ((~opcode :initform 12 :type xcb:-u1)
+   (x-axis :initarg :x-axis :type xcb:CARD8)
+   (y-axis :initarg :y-axis :type xcb:CARD8)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)))
+(defclass xcb:xinput:ChangePointerDevice~reply
+  (xcb:-reply)
+  ((xi-reply-type :initarg :xi-reply-type :type xcb:CARD8)
+   (status :initarg :status :type xcb:CARD8)
+   (pad~0 :initform 23 :type xcb:-pad)))
+
+(defclass xcb:xinput:GrabDevice
+  (xcb:-request)
+  ((~opcode :initform 13 :type xcb:-u1)
+   (grab-window :initarg :grab-window :type xcb:WINDOW)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (num-classes :initarg :num-classes :type xcb:CARD16)
+   (this-device-mode :initarg :this-device-mode :type xcb:CARD8)
+   (other-device-mode :initarg :other-device-mode :type xcb:CARD8)
+   (owner-events :initarg :owner-events :type xcb:BOOL)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (classes :initarg :classes :type xcb:-ignore)
+   (classes~ :initform
+            '(name classes type xcb:xinput:EventClass size
+                   (xcb:-fieldref 'num-classes))
+            :type xcb:-list)))
+(defclass xcb:xinput:GrabDevice~reply
+  (xcb:-reply)
+  ((xi-reply-type :initarg :xi-reply-type :type xcb:CARD8)
+   (status :initarg :status :type xcb:CARD8)
+   (pad~0 :initform 23 :type xcb:-pad)))
+
+(defclass xcb:xinput:UngrabDevice
+  (xcb:-request)
+  ((~opcode :initform 14 :type xcb:-u1)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defconst xcb:xinput:ModifierDevice:UseXKeyboard 255)
+
+(defclass xcb:xinput:GrabDeviceKey
+  (xcb:-request)
+  ((~opcode :initform 15 :type xcb:-u1)
+   (grab-window :initarg :grab-window :type xcb:WINDOW)
+   (num-classes :initarg :num-classes :type xcb:CARD16)
+   (modifiers :initarg :modifiers :type xcb:CARD16)
+   (modifier-device :initarg :modifier-device :type xcb:CARD8)
+   (grabbed-device :initarg :grabbed-device :type xcb:CARD8)
+   (key :initarg :key :type xcb:CARD8)
+   (this-device-mode :initarg :this-device-mode :type xcb:CARD8)
+   (other-device-mode :initarg :other-device-mode :type xcb:CARD8)
+   (owner-events :initarg :owner-events :type xcb:BOOL)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (classes :initarg :classes :type xcb:-ignore)
+   (classes~ :initform
+            '(name classes type xcb:xinput:EventClass size
+                   (xcb:-fieldref 'num-classes))
+            :type xcb:-list)))
+
+(defclass xcb:xinput:UngrabDeviceKey
+  (xcb:-request)
+  ((~opcode :initform 16 :type xcb:-u1)
+   (grabWindow :initarg :grabWindow :type xcb:WINDOW)
+   (modifiers :initarg :modifiers :type xcb:CARD16)
+   (modifier-device :initarg :modifier-device :type xcb:CARD8)
+   (key :initarg :key :type xcb:CARD8)
+   (grabbed-device :initarg :grabbed-device :type xcb:CARD8)))
+
+(defclass xcb:xinput:GrabDeviceButton
+  (xcb:-request)
+  ((~opcode :initform 17 :type xcb:-u1)
+   (grab-window :initarg :grab-window :type xcb:WINDOW)
+   (grabbed-device :initarg :grabbed-device :type xcb:CARD8)
+   (modifier-device :initarg :modifier-device :type xcb:CARD8)
+   (num-classes :initarg :num-classes :type xcb:CARD16)
+   (modifiers :initarg :modifiers :type xcb:CARD16)
+   (this-device-mode :initarg :this-device-mode :type xcb:CARD8)
+   (other-device-mode :initarg :other-device-mode :type xcb:CARD8)
+   (button :initarg :button :type xcb:CARD8)
+   (owner-events :initarg :owner-events :type xcb:BOOL)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (classes :initarg :classes :type xcb:-ignore)
+   (classes~ :initform
+            '(name classes type xcb:xinput:EventClass size
+                   (xcb:-fieldref 'num-classes))
+            :type xcb:-list)))
+
+(defclass xcb:xinput:UngrabDeviceButton
+  (xcb:-request)
+  ((~opcode :initform 18 :type xcb:-u1)
+   (grab-window :initarg :grab-window :type xcb:WINDOW)
+   (modifiers :initarg :modifiers :type xcb:CARD16)
+   (modifier-device :initarg :modifier-device :type xcb:CARD8)
+   (button :initarg :button :type xcb:CARD8)
+   (grabbed-device :initarg :grabbed-device :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defconst xcb:xinput:DeviceInputMode:AsyncThisDevice 0)
+(defconst xcb:xinput:DeviceInputMode:SyncThisDevice 1)
+(defconst xcb:xinput:DeviceInputMode:ReplayThisDevice 2)
+(defconst xcb:xinput:DeviceInputMode:AsyncOtherDevices 3)
+(defconst xcb:xinput:DeviceInputMode:AsyncAll 4)
+(defconst xcb:xinput:DeviceInputMode:SyncAll 5)
+
+(defclass xcb:xinput:AllowDeviceEvents
+  (xcb:-request)
+  ((~opcode :initform 19 :type xcb:-u1)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (mode :initarg :mode :type xcb:CARD8)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (pad~0 :initform 2 :type xcb:-pad)))
+
+(defclass xcb:xinput:GetDeviceFocus
+  (xcb:-request)
+  ((~opcode :initform 20 :type xcb:-u1)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+(defclass xcb:xinput:GetDeviceFocus~reply
+  (xcb:-reply)
+  ((xi-reply-type :initarg :xi-reply-type :type xcb:CARD8)
+   (focus :initarg :focus :type xcb:WINDOW)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (revert-to :initarg :revert-to :type xcb:CARD8)
+   (pad~0 :initform 15 :type xcb:-pad)))
+
+(defclass xcb:xinput:SetDeviceFocus
+  (xcb:-request)
+  ((~opcode :initform 21 :type xcb:-u1)
+   (focus :initarg :focus :type xcb:WINDOW)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (revert-to :initarg :revert-to :type xcb:CARD8)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (pad~0 :initform 2 :type xcb:-pad)))
+
+(defconst xcb:xinput:FeedbackClass:Keyboard 0)
+(defconst xcb:xinput:FeedbackClass:Pointer 1)
+(defconst xcb:xinput:FeedbackClass:String 2)
+(defconst xcb:xinput:FeedbackClass:Integer 3)
+(defconst xcb:xinput:FeedbackClass:Led 4)
+(defconst xcb:xinput:FeedbackClass:Bell 5)
+
+(defclass xcb:xinput:KbdFeedbackState
+  (xcb:-struct)
+  ((class-id :initarg :class-id :type xcb:CARD8)
+   (feedback-id :initarg :feedback-id :type xcb:CARD8)
+   (len :initarg :len :type xcb:CARD16)
+   (pitch :initarg :pitch :type xcb:CARD16)
+   (duration :initarg :duration :type xcb:CARD16)
+   (led-mask :initarg :led-mask :type xcb:CARD32)
+   (led-values :initarg :led-values :type xcb:CARD32)
+   (global-auto-repeat :initarg :global-auto-repeat :type xcb:BOOL)
+   (click :initarg :click :type xcb:CARD8)
+   (percent :initarg :percent :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (auto-repeats :initarg :auto-repeats :type xcb:-ignore)
+   (auto-repeats~ :initform
+                 '(name auto-repeats type xcb:CARD8 size 32)
+                 :type xcb:-list)))
+
+(defclass xcb:xinput:PtrFeedbackState
+  (xcb:-struct)
+  ((class-id :initarg :class-id :type xcb:CARD8)
+   (feedback-id :initarg :feedback-id :type xcb:CARD8)
+   (len :initarg :len :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (accel-num :initarg :accel-num :type xcb:CARD16)
+   (accel-denom :initarg :accel-denom :type xcb:CARD16)
+   (threshold :initarg :threshold :type xcb:CARD16)))
+
+(defclass xcb:xinput:IntegerFeedbackState
+  (xcb:-struct)
+  ((class-id :initarg :class-id :type xcb:CARD8)
+   (feedback-id :initarg :feedback-id :type xcb:CARD8)
+   (len :initarg :len :type xcb:CARD16)
+   (resolution :initarg :resolution :type xcb:CARD32)
+   (min-value :initarg :min-value :type xcb:INT32)
+   (max-value :initarg :max-value :type xcb:INT32)))
+
+(defclass xcb:xinput:StringFeedbackState
+  (xcb:-struct)
+  ((class-id :initarg :class-id :type xcb:CARD8)
+   (feedback-id :initarg :feedback-id :type xcb:CARD8)
+   (len :initarg :len :type xcb:CARD16)
+   (max-symbols :initarg :max-symbols :type xcb:CARD16)
+   (num-keysyms :initarg :num-keysyms :type xcb:CARD16)
+   (keysyms :initarg :keysyms :type xcb:-ignore)
+   (keysyms~ :initform
+            '(name keysyms type xcb:KEYSYM size
+                   (xcb:-fieldref 'num-keysyms))
+            :type xcb:-list)))
+
+(defclass xcb:xinput:BellFeedbackState
+  (xcb:-struct)
+  ((class-id :initarg :class-id :type xcb:CARD8)
+   (feedback-id :initarg :feedback-id :type xcb:CARD8)
+   (len :initarg :len :type xcb:CARD16)
+   (percent :initarg :percent :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (pitch :initarg :pitch :type xcb:CARD16)
+   (duration :initarg :duration :type xcb:CARD16)))
+
+(defclass xcb:xinput:LedFeedbackState
+  (xcb:-struct)
+  ((class-id :initarg :class-id :type xcb:CARD8)
+   (feedback-id :initarg :feedback-id :type xcb:CARD8)
+   (len :initarg :len :type xcb:CARD16)
+   (led-mask :initarg :led-mask :type xcb:CARD32)
+   (led-values :initarg :led-values :type xcb:CARD32)))
+
+(defclass xcb:xinput:FeedbackState
+  (xcb:-struct)
+  ((class-id :initarg :class-id :type xcb:CARD8)
+   (feedback-id :initarg :feedback-id :type xcb:CARD8)
+   (len :initarg :len :type xcb:CARD16)
+   (data :initform
+        '(expression
+          (xcb:-fieldref 'class-id)
+          cases
+          (((xcb:xinput:FeedbackClass:Keyboard)
+            pitch duration led-mask led-values global-auto-repeat click 
percent pad~10 auto-repeats)
+           ((xcb:xinput:FeedbackClass:Pointer)
+            pad~11 accel-num accel-denom threshold)
+           ((xcb:xinput:FeedbackClass:String)
+            max-symbols num-keysyms keysyms)
+           ((xcb:xinput:FeedbackClass:Integer)
+            resolution min-value max-value)
+           ((xcb:xinput:FeedbackClass:Led)
+            led-mask* led-values*)
+           ((xcb:xinput:FeedbackClass:Bell)
+            percent* pad~12 pitch* duration*)))
+        :type xcb:-switch)
+   (pitch :initarg :pitch :type xcb:CARD16)
+   (duration :initarg :duration :type xcb:CARD16)
+   (led-mask :initarg :led-mask :type xcb:CARD32)
+   (led-values :initarg :led-values :type xcb:CARD32)
+   (global-auto-repeat :initarg :global-auto-repeat :type xcb:BOOL)
+   (click :initarg :click :type xcb:CARD8)
+   (percent :initarg :percent :type xcb:CARD8)
+   (pad~10 :initform 1 :type xcb:-pad)
+   (auto-repeats :initarg :auto-repeats :type xcb:-ignore)
+   (auto-repeats~ :initform
+                 '(name auto-repeats type xcb:CARD8 size 32)
+                 :type xcb:-list)
+   (pad~11 :initform 2 :type xcb:-pad)
+   (accel-num :initarg :accel-num :type xcb:CARD16)
+   (accel-denom :initarg :accel-denom :type xcb:CARD16)
+   (threshold :initarg :threshold :type xcb:CARD16)
+   (max-symbols :initarg :max-symbols :type xcb:CARD16)
+   (num-keysyms :initarg :num-keysyms :type xcb:CARD16)
+   (keysyms :initarg :keysyms :type xcb:-ignore)
+   (keysyms~ :initform
+            '(name keysyms type xcb:KEYSYM size
+                   (xcb:-fieldref 'num-keysyms))
+            :type xcb:-list)
+   (resolution :initarg :resolution :type xcb:CARD32)
+   (min-value :initarg :min-value :type xcb:INT32)
+   (max-value :initarg :max-value :type xcb:INT32)
+   (led-mask* :initarg :led-mask* :type xcb:CARD32)
+   (led-values* :initarg :led-values* :type xcb:CARD32)
+   (percent* :initarg :percent* :type xcb:CARD8)
+   (pad~12 :initform 3 :type xcb:-pad)
+   (pitch* :initarg :pitch* :type xcb:CARD16)
+   (duration* :initarg :duration* :type xcb:CARD16)))
+
+(defclass xcb:xinput:GetFeedbackControl
+  (xcb:-request)
+  ((~opcode :initform 22 :type xcb:-u1)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+(defclass xcb:xinput:GetFeedbackControl~reply
+  (xcb:-reply)
+  ((xi-reply-type :initarg :xi-reply-type :type xcb:CARD8)
+   (num-feedbacks :initarg :num-feedbacks :type xcb:CARD16)
+   (pad~0 :initform 22 :type xcb:-pad)
+   (feedbacks :initarg :feedbacks :type xcb:-ignore)
+   (feedbacks~ :initform
+              '(name feedbacks type xcb:xinput:FeedbackState size
+                     (xcb:-fieldref 'num-feedbacks))
+              :type xcb:-list)))
+
+(defclass xcb:xinput:KbdFeedbackCtl
+  (xcb:-struct)
+  ((class-id :initarg :class-id :type xcb:CARD8)
+   (feedback-id :initarg :feedback-id :type xcb:CARD8)
+   (len :initarg :len :type xcb:CARD16)
+   (key :initarg :key :type xcb:xinput:KeyCode)
+   (auto-repeat-mode :initarg :auto-repeat-mode :type xcb:CARD8)
+   (key-click-percent :initarg :key-click-percent :type xcb:INT8)
+   (bell-percent :initarg :bell-percent :type xcb:INT8)
+   (bell-pitch :initarg :bell-pitch :type xcb:INT16)
+   (bell-duration :initarg :bell-duration :type xcb:INT16)
+   (led-mask :initarg :led-mask :type xcb:CARD32)
+   (led-values :initarg :led-values :type xcb:CARD32)))
+
+(defclass xcb:xinput:PtrFeedbackCtl
+  (xcb:-struct)
+  ((class-id :initarg :class-id :type xcb:CARD8)
+   (feedback-id :initarg :feedback-id :type xcb:CARD8)
+   (len :initarg :len :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (num :initarg :num :type xcb:INT16)
+   (denom :initarg :denom :type xcb:INT16)
+   (threshold :initarg :threshold :type xcb:INT16)))
+
+(defclass xcb:xinput:IntegerFeedbackCtl
+  (xcb:-struct)
+  ((class-id :initarg :class-id :type xcb:CARD8)
+   (feedback-id :initarg :feedback-id :type xcb:CARD8)
+   (len :initarg :len :type xcb:CARD16)
+   (int-to-display :initarg :int-to-display :type xcb:INT32)))
+
+(defclass xcb:xinput:StringFeedbackCtl
+  (xcb:-struct)
+  ((class-id :initarg :class-id :type xcb:CARD8)
+   (feedback-id :initarg :feedback-id :type xcb:CARD8)
+   (len :initarg :len :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (num-keysyms :initarg :num-keysyms :type xcb:CARD16)
+   (keysyms :initarg :keysyms :type xcb:-ignore)
+   (keysyms~ :initform
+            '(name keysyms type xcb:KEYSYM size
+                   (xcb:-fieldref 'num-keysyms))
+            :type xcb:-list)))
+
+(defclass xcb:xinput:BellFeedbackCtl
+  (xcb:-struct)
+  ((class-id :initarg :class-id :type xcb:CARD8)
+   (feedback-id :initarg :feedback-id :type xcb:CARD8)
+   (len :initarg :len :type xcb:CARD16)
+   (percent :initarg :percent :type xcb:INT8)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (pitch :initarg :pitch :type xcb:INT16)
+   (duration :initarg :duration :type xcb:INT16)))
+
+(defclass xcb:xinput:LedFeedbackCtl
+  (xcb:-struct)
+  ((class-id :initarg :class-id :type xcb:CARD8)
+   (feedback-id :initarg :feedback-id :type xcb:CARD8)
+   (len :initarg :len :type xcb:CARD16)
+   (led-mask :initarg :led-mask :type xcb:CARD32)
+   (led-values :initarg :led-values :type xcb:CARD32)))
+
+(defclass xcb:xinput:FeedbackCtl
+  (xcb:-struct)
+  ((class-id :initarg :class-id :type xcb:CARD8)
+   (feedback-id :initarg :feedback-id :type xcb:CARD8)
+   (len :initarg :len :type xcb:CARD16)
+   (data :initform
+        '(expression
+          (xcb:-fieldref 'class-id)
+          cases
+          (((xcb:xinput:FeedbackClass:Keyboard)
+            key auto-repeat-mode key-click-percent bell-percent bell-pitch 
bell-duration led-mask led-values)
+           ((xcb:xinput:FeedbackClass:Pointer)
+            pad~10 num denom threshold)
+           ((xcb:xinput:FeedbackClass:String)
+            pad~11 num-keysyms keysyms)
+           ((xcb:xinput:FeedbackClass:Integer)
+            int-to-display)
+           ((xcb:xinput:FeedbackClass:Led)
+            led-mask* led-values*)
+           ((xcb:xinput:FeedbackClass:Bell)
+            percent pad~12 pitch duration)))
+        :type xcb:-switch)
+   (key :initarg :key :type xcb:xinput:KeyCode)
+   (auto-repeat-mode :initarg :auto-repeat-mode :type xcb:CARD8)
+   (key-click-percent :initarg :key-click-percent :type xcb:INT8)
+   (bell-percent :initarg :bell-percent :type xcb:INT8)
+   (bell-pitch :initarg :bell-pitch :type xcb:INT16)
+   (bell-duration :initarg :bell-duration :type xcb:INT16)
+   (led-mask :initarg :led-mask :type xcb:CARD32)
+   (led-values :initarg :led-values :type xcb:CARD32)
+   (pad~10 :initform 2 :type xcb:-pad)
+   (num :initarg :num :type xcb:INT16)
+   (denom :initarg :denom :type xcb:INT16)
+   (threshold :initarg :threshold :type xcb:INT16)
+   (pad~11 :initform 2 :type xcb:-pad)
+   (num-keysyms :initarg :num-keysyms :type xcb:CARD16)
+   (keysyms :initarg :keysyms :type xcb:-ignore)
+   (keysyms~ :initform
+            '(name keysyms type xcb:KEYSYM size
+                   (xcb:-fieldref 'num-keysyms))
+            :type xcb:-list)
+   (int-to-display :initarg :int-to-display :type xcb:INT32)
+   (led-mask* :initarg :led-mask* :type xcb:CARD32)
+   (led-values* :initarg :led-values* :type xcb:CARD32)
+   (percent :initarg :percent :type xcb:INT8)
+   (pad~12 :initform 3 :type xcb:-pad)
+   (pitch :initarg :pitch :type xcb:INT16)
+   (duration :initarg :duration :type xcb:INT16)))
+
+(defconst xcb:xinput:ChangeFeedbackControlMask:KeyClickPercent 1)
+(defconst xcb:xinput:ChangeFeedbackControlMask:Percent 2)
+(defconst xcb:xinput:ChangeFeedbackControlMask:Pitch 4)
+(defconst xcb:xinput:ChangeFeedbackControlMask:Duration 8)
+(defconst xcb:xinput:ChangeFeedbackControlMask:Led 16)
+(defconst xcb:xinput:ChangeFeedbackControlMask:LedMode 32)
+(defconst xcb:xinput:ChangeFeedbackControlMask:Key 64)
+(defconst xcb:xinput:ChangeFeedbackControlMask:AutoRepeatMode 128)
+(defconst xcb:xinput:ChangeFeedbackControlMask:String 1)
+(defconst xcb:xinput:ChangeFeedbackControlMask:Integer 1)
+(defconst xcb:xinput:ChangeFeedbackControlMask:AccelNum 1)
+(defconst xcb:xinput:ChangeFeedbackControlMask:AccelDenom 2)
+(defconst xcb:xinput:ChangeFeedbackControlMask:Threshold 4)
+
+(defclass xcb:xinput:ChangeFeedbackControl
+  (xcb:-request)
+  ((~opcode :initform 23 :type xcb:-u1)
+   (mask :initarg :mask :type xcb:CARD32)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (feedback-id :initarg :feedback-id :type xcb:CARD8)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (feedback :initarg :feedback :type xcb:xinput:FeedbackCtl)))
+
+(defclass xcb:xinput:GetDeviceKeyMapping
+  (xcb:-request)
+  ((~opcode :initform 24 :type xcb:-u1)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (first-keycode :initarg :first-keycode :type xcb:xinput:KeyCode)
+   (count :initarg :count :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)))
+(defclass xcb:xinput:GetDeviceKeyMapping~reply
+  (xcb:-reply)
+  ((xi-reply-type :initarg :xi-reply-type :type xcb:CARD8)
+   (keysyms-per-keycode :initarg :keysyms-per-keycode :type xcb:CARD8)
+   (pad~0 :initform 23 :type xcb:-pad)
+   (keysyms :initarg :keysyms :type xcb:-ignore)
+   (keysyms~ :initform
+            '(name keysyms type xcb:KEYSYM size
+                   (xcb:-fieldref 'length))
+            :type xcb:-list)))
+
+(defclass xcb:xinput:ChangeDeviceKeyMapping
+  (xcb:-request)
+  ((~opcode :initform 25 :type xcb:-u1)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (first-keycode :initarg :first-keycode :type xcb:xinput:KeyCode)
+   (keysyms-per-keycode :initarg :keysyms-per-keycode :type xcb:CARD8)
+   (keycode-count :initarg :keycode-count :type xcb:CARD8)
+   (keysyms :initarg :keysyms :type xcb:-ignore)
+   (keysyms~ :initform
+            '(name keysyms type xcb:KEYSYM size
+                   (*
+                    (xcb:-fieldref 'keycode-count)
+                    (xcb:-fieldref 'keysyms-per-keycode)))
+            :type xcb:-list)))
+
+(defclass xcb:xinput:GetDeviceModifierMapping
+  (xcb:-request)
+  ((~opcode :initform 26 :type xcb:-u1)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+(defclass xcb:xinput:GetDeviceModifierMapping~reply
+  (xcb:-reply)
+  ((xi-reply-type :initarg :xi-reply-type :type xcb:CARD8)
+   (keycodes-per-modifier :initarg :keycodes-per-modifier :type xcb:CARD8)
+   (pad~0 :initform 23 :type xcb:-pad)
+   (keymaps :initarg :keymaps :type xcb:-ignore)
+   (keymaps~ :initform
+            '(name keymaps type xcb:CARD8 size
+                   (*
+                    (xcb:-fieldref 'keycodes-per-modifier)
+                    8))
+            :type xcb:-list)))
+
+(defclass xcb:xinput:SetDeviceModifierMapping
+  (xcb:-request)
+  ((~opcode :initform 27 :type xcb:-u1)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (keycodes-per-modifier :initarg :keycodes-per-modifier :type xcb:CARD8)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (keymaps :initarg :keymaps :type xcb:-ignore)
+   (keymaps~ :initform
+            '(name keymaps type xcb:CARD8 size
+                   (*
+                    (xcb:-fieldref 'keycodes-per-modifier)
+                    8))
+            :type xcb:-list)))
+(defclass xcb:xinput:SetDeviceModifierMapping~reply
+  (xcb:-reply)
+  ((xi-reply-type :initarg :xi-reply-type :type xcb:CARD8)
+   (status :initarg :status :type xcb:CARD8)
+   (pad~0 :initform 23 :type xcb:-pad)))
+
+(defclass xcb:xinput:GetDeviceButtonMapping
+  (xcb:-request)
+  ((~opcode :initform 28 :type xcb:-u1)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+(defclass xcb:xinput:GetDeviceButtonMapping~reply
+  (xcb:-reply)
+  ((xi-reply-type :initarg :xi-reply-type :type xcb:CARD8)
+   (map-size :initarg :map-size :type xcb:CARD8)
+   (pad~0 :initform 23 :type xcb:-pad)
+   (map :initarg :map :type xcb:-ignore)
+   (map~ :initform
+        '(name map type xcb:CARD8 size
+               (xcb:-fieldref 'map-size))
+        :type xcb:-list)
+   (pad~1 :initform 4 :type xcb:-pad-align)))
+
+(defclass xcb:xinput:SetDeviceButtonMapping
+  (xcb:-request)
+  ((~opcode :initform 29 :type xcb:-u1)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (map-size :initarg :map-size :type xcb:CARD8)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (map :initarg :map :type xcb:-ignore)
+   (map~ :initform
+        '(name map type xcb:CARD8 size
+               (xcb:-fieldref 'map-size))
+        :type xcb:-list)))
+(defclass xcb:xinput:SetDeviceButtonMapping~reply
+  (xcb:-reply)
+  ((xi-reply-type :initarg :xi-reply-type :type xcb:CARD8)
+   (status :initarg :status :type xcb:CARD8)
+   (pad~0 :initform 23 :type xcb:-pad)))
+
+(defclass xcb:xinput:KeyState
+  (xcb:-struct)
+  ((class-id :initarg :class-id :type xcb:CARD8)
+   (len :initarg :len :type xcb:CARD8)
+   (num-keys :initarg :num-keys :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (keys :initarg :keys :type xcb:-ignore)
+   (keys~ :initform
+         '(name keys type xcb:CARD8 size 32)
+         :type xcb:-list)))
+
+(defclass xcb:xinput:ButtonState
+  (xcb:-struct)
+  ((class-id :initarg :class-id :type xcb:CARD8)
+   (len :initarg :len :type xcb:CARD8)
+   (num-buttons :initarg :num-buttons :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (buttons :initarg :buttons :type xcb:-ignore)
+   (buttons~ :initform
+            '(name buttons type xcb:CARD8 size 32)
+            :type xcb:-list)))
+
+(defconst xcb:xinput:ValuatorStateModeMask:DeviceModeAbsolute 1)
+(defconst xcb:xinput:ValuatorStateModeMask:OutOfProximity 2)
+
+(defclass xcb:xinput:ValuatorState
+  (xcb:-struct)
+  ((class-id :initarg :class-id :type xcb:CARD8)
+   (len :initarg :len :type xcb:CARD8)
+   (num-valuators :initarg :num-valuators :type xcb:CARD8)
+   (mode :initarg :mode :type xcb:CARD8)
+   (valuators :initarg :valuators :type xcb:-ignore)
+   (valuators~ :initform
+              '(name valuators type xcb:INT32 size
+                     (xcb:-fieldref 'num-valuators))
+              :type xcb:-list)))
+
+(defclass xcb:xinput:InputState
+  (xcb:-struct)
+  ((class-id :initarg :class-id :type xcb:CARD8)
+   (len :initarg :len :type xcb:CARD8)
+   (data :initform
+        '(expression
+          (xcb:-fieldref 'class-id)
+          cases
+          (((xcb:xinput:InputClass:Key)
+            num-keys pad~10 keys)
+           ((xcb:xinput:InputClass:Button)
+            num-buttons pad~11 buttons)
+           ((xcb:xinput:InputClass:Valuator)
+            num-valuators mode valuators)))
+        :type xcb:-switch)
+   (num-keys :initarg :num-keys :type xcb:CARD8)
+   (pad~10 :initform 1 :type xcb:-pad)
+   (keys :initarg :keys :type xcb:-ignore)
+   (keys~ :initform
+         '(name keys type xcb:CARD8 size 32)
+         :type xcb:-list)
+   (num-buttons :initarg :num-buttons :type xcb:CARD8)
+   (pad~11 :initform 1 :type xcb:-pad)
+   (buttons :initarg :buttons :type xcb:-ignore)
+   (buttons~ :initform
+            '(name buttons type xcb:CARD8 size 32)
+            :type xcb:-list)
+   (num-valuators :initarg :num-valuators :type xcb:CARD8)
+   (mode :initarg :mode :type xcb:CARD8)
+   (valuators :initarg :valuators :type xcb:-ignore)
+   (valuators~ :initform
+              '(name valuators type xcb:INT32 size
+                     (xcb:-fieldref 'num-valuators))
+              :type xcb:-list)))
+
+(defclass xcb:xinput:QueryDeviceState
+  (xcb:-request)
+  ((~opcode :initform 30 :type xcb:-u1)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+(defclass xcb:xinput:QueryDeviceState~reply
+  (xcb:-reply)
+  ((xi-reply-type :initarg :xi-reply-type :type xcb:CARD8)
+   (num-classes :initarg :num-classes :type xcb:CARD8)
+   (pad~0 :initform 23 :type xcb:-pad)
+   (classes :initarg :classes :type xcb:-ignore)
+   (classes~ :initform
+            '(name classes type xcb:xinput:InputState size
+                   (xcb:-fieldref 'num-classes))
+            :type xcb:-list)))
+
+(defclass xcb:xinput:SendExtensionEvent
+  (xcb:-request)
+  ((~opcode :initform 31 :type xcb:-u1)
+   (destination :initarg :destination :type xcb:WINDOW)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (propagate :initarg :propagate :type xcb:BOOL)
+   (num-classes :initarg :num-classes :type xcb:CARD16)
+   (num-events :initarg :num-events :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (events :initarg :events :type xcb:-ignore)
+   (events~ :initform
+           '(name events type xcb:CARD8 size
+                  (*
+                   (xcb:-fieldref 'num-events)
+                   32))
+           :type xcb:-list)
+   (classes :initarg :classes :type xcb:-ignore)
+   (classes~ :initform
+            '(name classes type xcb:xinput:EventClass size
+                   (xcb:-fieldref 'num-classes))
+            :type xcb:-list)))
+
+(defclass xcb:xinput:DeviceBell
+  (xcb:-request)
+  ((~opcode :initform 32 :type xcb:-u1)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (feedback-id :initarg :feedback-id :type xcb:CARD8)
+   (feedback-class :initarg :feedback-class :type xcb:CARD8)
+   (percent :initarg :percent :type xcb:INT8)))
+
+(defclass xcb:xinput:SetDeviceValuators
+  (xcb:-request)
+  ((~opcode :initform 33 :type xcb:-u1)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (first-valuator :initarg :first-valuator :type xcb:CARD8)
+   (num-valuators :initarg :num-valuators :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (valuators :initarg :valuators :type xcb:-ignore)
+   (valuators~ :initform
+              '(name valuators type xcb:INT32 size
+                     (xcb:-fieldref 'num-valuators))
+              :type xcb:-list)))
+(defclass xcb:xinput:SetDeviceValuators~reply
+  (xcb:-reply)
+  ((xi-reply-type :initarg :xi-reply-type :type xcb:CARD8)
+   (status :initarg :status :type xcb:CARD8)
+   (pad~0 :initform 23 :type xcb:-pad)))
+
+(defconst xcb:xinput:DeviceControl:resolution 1)
+(defconst xcb:xinput:DeviceControl:abs_calib 2)
+(defconst xcb:xinput:DeviceControl:core 3)
+(defconst xcb:xinput:DeviceControl:enable 4)
+(defconst xcb:xinput:DeviceControl:abs_area 5)
+
+(defclass xcb:xinput:DeviceResolutionState
+  (xcb:-struct)
+  ((control-id :initarg :control-id :type xcb:CARD16)
+   (len :initarg :len :type xcb:CARD16)
+   (num-valuators :initarg :num-valuators :type xcb:CARD32)
+   (resolution-values :initarg :resolution-values :type xcb:-ignore)
+   (resolution-values~ :initform
+                      '(name resolution-values type xcb:CARD32 size
+                             (xcb:-fieldref 'num-valuators))
+                      :type xcb:-list)
+   (resolution-min :initarg :resolution-min :type xcb:-ignore)
+   (resolution-min~ :initform
+                   '(name resolution-min type xcb:CARD32 size
+                          (xcb:-fieldref 'num-valuators))
+                   :type xcb:-list)
+   (resolution-max :initarg :resolution-max :type xcb:-ignore)
+   (resolution-max~ :initform
+                   '(name resolution-max type xcb:CARD32 size
+                          (xcb:-fieldref 'num-valuators))
+                   :type xcb:-list)))
+
+(defclass xcb:xinput:DeviceAbsCalibState
+  (xcb:-struct)
+  ((control-id :initarg :control-id :type xcb:CARD16)
+   (len :initarg :len :type xcb:CARD16)
+   (min-x :initarg :min-x :type xcb:INT32)
+   (max-x :initarg :max-x :type xcb:INT32)
+   (min-y :initarg :min-y :type xcb:INT32)
+   (max-y :initarg :max-y :type xcb:INT32)
+   (flip-x :initarg :flip-x :type xcb:CARD32)
+   (flip-y :initarg :flip-y :type xcb:CARD32)
+   (rotation :initarg :rotation :type xcb:CARD32)
+   (button-threshold :initarg :button-threshold :type xcb:CARD32)))
+
+(defclass xcb:xinput:DeviceAbsAreaState
+  (xcb:-struct)
+  ((control-id :initarg :control-id :type xcb:CARD16)
+   (len :initarg :len :type xcb:CARD16)
+   (offset-x :initarg :offset-x :type xcb:CARD32)
+   (offset-y :initarg :offset-y :type xcb:CARD32)
+   (width :initarg :width :type xcb:CARD32)
+   (height :initarg :height :type xcb:CARD32)
+   (screen :initarg :screen :type xcb:CARD32)
+   (following :initarg :following :type xcb:CARD32)))
+
+(defclass xcb:xinput:DeviceCoreState
+  (xcb:-struct)
+  ((control-id :initarg :control-id :type xcb:CARD16)
+   (len :initarg :len :type xcb:CARD16)
+   (status :initarg :status :type xcb:CARD8)
+   (iscore :initarg :iscore :type xcb:CARD8)
+   (pad~0 :initform 2 :type xcb:-pad)))
+
+(defclass xcb:xinput:DeviceEnableState
+  (xcb:-struct)
+  ((control-id :initarg :control-id :type xcb:CARD16)
+   (len :initarg :len :type xcb:CARD16)
+   (enable :initarg :enable :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:xinput:DeviceState
+  (xcb:-struct)
+  ((control-id :initarg :control-id :type xcb:CARD16)
+   (len :initarg :len :type xcb:CARD16)
+   (data :initform
+        '(expression
+          (xcb:-fieldref 'control-id)
+          cases
+          (((xcb:xinput:DeviceControl:resolution)
+            num-valuators resolution-values resolution-min resolution-max)
+           ((xcb:xinput:DeviceControl:abs_calib)
+            min-x max-x min-y max-y flip-x flip-y rotation button-threshold)
+           ((xcb:xinput:DeviceControl:core)
+            status iscore pad~10)
+           ((xcb:xinput:DeviceControl:enable)
+            enable pad~11)
+           ((xcb:xinput:DeviceControl:abs_area)
+            offset-x offset-y width height screen following)))
+        :type xcb:-switch)
+   (num-valuators :initarg :num-valuators :type xcb:CARD32)
+   (resolution-values :initarg :resolution-values :type xcb:-ignore)
+   (resolution-values~ :initform
+                      '(name resolution-values type xcb:CARD32 size
+                             (xcb:-fieldref 'num-valuators))
+                      :type xcb:-list)
+   (resolution-min :initarg :resolution-min :type xcb:-ignore)
+   (resolution-min~ :initform
+                   '(name resolution-min type xcb:CARD32 size
+                          (xcb:-fieldref 'num-valuators))
+                   :type xcb:-list)
+   (resolution-max :initarg :resolution-max :type xcb:-ignore)
+   (resolution-max~ :initform
+                   '(name resolution-max type xcb:CARD32 size
+                          (xcb:-fieldref 'num-valuators))
+                   :type xcb:-list)
+   (min-x :initarg :min-x :type xcb:INT32)
+   (max-x :initarg :max-x :type xcb:INT32)
+   (min-y :initarg :min-y :type xcb:INT32)
+   (max-y :initarg :max-y :type xcb:INT32)
+   (flip-x :initarg :flip-x :type xcb:CARD32)
+   (flip-y :initarg :flip-y :type xcb:CARD32)
+   (rotation :initarg :rotation :type xcb:CARD32)
+   (button-threshold :initarg :button-threshold :type xcb:CARD32)
+   (status :initarg :status :type xcb:CARD8)
+   (iscore :initarg :iscore :type xcb:CARD8)
+   (pad~10 :initform 2 :type xcb:-pad)
+   (enable :initarg :enable :type xcb:CARD8)
+   (pad~11 :initform 3 :type xcb:-pad)
+   (offset-x :initarg :offset-x :type xcb:CARD32)
+   (offset-y :initarg :offset-y :type xcb:CARD32)
+   (width :initarg :width :type xcb:CARD32)
+   (height :initarg :height :type xcb:CARD32)
+   (screen :initarg :screen :type xcb:CARD32)
+   (following :initarg :following :type xcb:CARD32)))
+
+(defclass xcb:xinput:GetDeviceControl
+  (xcb:-request)
+  ((~opcode :initform 34 :type xcb:-u1)
+   (control-id :initarg :control-id :type xcb:CARD16)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)))
+(defclass xcb:xinput:GetDeviceControl~reply
+  (xcb:-reply)
+  ((xi-reply-type :initarg :xi-reply-type :type xcb:CARD8)
+   (status :initarg :status :type xcb:CARD8)
+   (pad~0 :initform 23 :type xcb:-pad)
+   (control :initarg :control :type xcb:xinput:DeviceState)))
+
+(defclass xcb:xinput:DeviceResolutionCtl
+  (xcb:-struct)
+  ((control-id :initarg :control-id :type xcb:CARD16)
+   (len :initarg :len :type xcb:CARD16)
+   (first-valuator :initarg :first-valuator :type xcb:CARD8)
+   (num-valuators :initarg :num-valuators :type xcb:CARD8)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (resolution-values :initarg :resolution-values :type xcb:-ignore)
+   (resolution-values~ :initform
+                      '(name resolution-values type xcb:CARD32 size
+                             (xcb:-fieldref 'num-valuators))
+                      :type xcb:-list)))
+
+(defclass xcb:xinput:DeviceAbsCalibCtl
+  (xcb:-struct)
+  ((control-id :initarg :control-id :type xcb:CARD16)
+   (len :initarg :len :type xcb:CARD16)
+   (min-x :initarg :min-x :type xcb:INT32)
+   (max-x :initarg :max-x :type xcb:INT32)
+   (min-y :initarg :min-y :type xcb:INT32)
+   (max-y :initarg :max-y :type xcb:INT32)
+   (flip-x :initarg :flip-x :type xcb:CARD32)
+   (flip-y :initarg :flip-y :type xcb:CARD32)
+   (rotation :initarg :rotation :type xcb:CARD32)
+   (button-threshold :initarg :button-threshold :type xcb:CARD32)))
+
+(defclass xcb:xinput:DeviceAbsAreaCtrl
+  (xcb:-struct)
+  ((control-id :initarg :control-id :type xcb:CARD16)
+   (len :initarg :len :type xcb:CARD16)
+   (offset-x :initarg :offset-x :type xcb:CARD32)
+   (offset-y :initarg :offset-y :type xcb:CARD32)
+   (width :initarg :width :type xcb:INT32)
+   (height :initarg :height :type xcb:INT32)
+   (screen :initarg :screen :type xcb:INT32)
+   (following :initarg :following :type xcb:CARD32)))
+
+(defclass xcb:xinput:DeviceCoreCtrl
+  (xcb:-struct)
+  ((control-id :initarg :control-id :type xcb:CARD16)
+   (len :initarg :len :type xcb:CARD16)
+   (status :initarg :status :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:xinput:DeviceEnableCtrl
+  (xcb:-struct)
+  ((control-id :initarg :control-id :type xcb:CARD16)
+   (len :initarg :len :type xcb:CARD16)
+   (enable :initarg :enable :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:xinput:DeviceCtl
+  (xcb:-struct)
+  ((control-id :initarg :control-id :type xcb:CARD16)
+   (len :initarg :len :type xcb:CARD16)
+   (data :initform
+        '(expression
+          (xcb:-fieldref 'control-id)
+          cases
+          (((xcb:xinput:DeviceControl:resolution)
+            first-valuator num-valuators pad~10 resolution-values)
+           ((xcb:xinput:DeviceControl:abs_calib)
+            min-x max-x min-y max-y flip-x flip-y rotation button-threshold)
+           ((xcb:xinput:DeviceControl:core)
+            status pad~11)
+           ((xcb:xinput:DeviceControl:enable)
+            enable pad~12)
+           ((xcb:xinput:DeviceControl:abs_area)
+            offset-x offset-y width height screen following)))
+        :type xcb:-switch)
+   (first-valuator :initarg :first-valuator :type xcb:CARD8)
+   (num-valuators :initarg :num-valuators :type xcb:CARD8)
+   (pad~10 :initform 2 :type xcb:-pad)
+   (resolution-values :initarg :resolution-values :type xcb:-ignore)
+   (resolution-values~ :initform
+                      '(name resolution-values type xcb:CARD32 size
+                             (xcb:-fieldref 'num-valuators))
+                      :type xcb:-list)
+   (min-x :initarg :min-x :type xcb:INT32)
+   (max-x :initarg :max-x :type xcb:INT32)
+   (min-y :initarg :min-y :type xcb:INT32)
+   (max-y :initarg :max-y :type xcb:INT32)
+   (flip-x :initarg :flip-x :type xcb:CARD32)
+   (flip-y :initarg :flip-y :type xcb:CARD32)
+   (rotation :initarg :rotation :type xcb:CARD32)
+   (button-threshold :initarg :button-threshold :type xcb:CARD32)
+   (status :initarg :status :type xcb:CARD8)
+   (pad~11 :initform 3 :type xcb:-pad)
+   (enable :initarg :enable :type xcb:CARD8)
+   (pad~12 :initform 3 :type xcb:-pad)
+   (offset-x :initarg :offset-x :type xcb:CARD32)
+   (offset-y :initarg :offset-y :type xcb:CARD32)
+   (width :initarg :width :type xcb:INT32)
+   (height :initarg :height :type xcb:INT32)
+   (screen :initarg :screen :type xcb:INT32)
+   (following :initarg :following :type xcb:CARD32)))
+
+(defclass xcb:xinput:ChangeDeviceControl
+  (xcb:-request)
+  ((~opcode :initform 35 :type xcb:-u1)
+   (control-id :initarg :control-id :type xcb:CARD16)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (control :initarg :control :type xcb:xinput:DeviceCtl)))
+(defclass xcb:xinput:ChangeDeviceControl~reply
+  (xcb:-reply)
+  ((xi-reply-type :initarg :xi-reply-type :type xcb:CARD8)
+   (status :initarg :status :type xcb:CARD8)
+   (pad~0 :initform 23 :type xcb:-pad)))
+
+(defclass xcb:xinput:ListDeviceProperties
+  (xcb:-request)
+  ((~opcode :initform 36 :type xcb:-u1)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+(defclass xcb:xinput:ListDeviceProperties~reply
+  (xcb:-reply)
+  ((xi-reply-type :initarg :xi-reply-type :type xcb:CARD8)
+   (num-atoms :initarg :num-atoms :type xcb:CARD16)
+   (pad~0 :initform 22 :type xcb:-pad)
+   (atoms :initarg :atoms :type xcb:-ignore)
+   (atoms~ :initform
+          '(name atoms type xcb:ATOM size
+                 (xcb:-fieldref 'num-atoms))
+          :type xcb:-list)))
+
+(defconst xcb:xinput:PropertyFormat:8Bits 8)
+(defconst xcb:xinput:PropertyFormat:16Bits 16)
+(defconst xcb:xinput:PropertyFormat:32Bits 32)
+
+(defclass xcb:xinput:ChangeDeviceProperty
+  (xcb:-request)
+  ((~opcode :initform 37 :type xcb:-u1)
+   (property :initarg :property :type xcb:ATOM)
+   (type :initarg :type :type xcb:ATOM)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (format :initarg :format :type xcb:CARD8)
+   (mode :initarg :mode :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (num-items :initarg :num-items :type xcb:CARD32)
+   (items :initform
+         '(expression
+           (xcb:-fieldref 'format)
+           cases
+           (((xcb:xinput:PropertyFormat:8Bits)
+             data8 pad~10)
+            ((xcb:xinput:PropertyFormat:16Bits)
+             data16 pad~11)
+            ((xcb:xinput:PropertyFormat:32Bits)
+             data32)))
+         :type xcb:-switch)
+   (data8 :initarg :data8 :type xcb:-ignore)
+   (data8~ :initform
+          '(name data8 type xcb:CARD8 size
+                 (xcb:-fieldref 'num-items))
+          :type xcb:-list)
+   (pad~10 :initform 4 :type xcb:-pad-align)
+   (data16 :initarg :data16 :type xcb:-ignore)
+   (data16~ :initform
+           '(name data16 type xcb:CARD16 size
+                  (xcb:-fieldref 'num-items))
+           :type xcb:-list)
+   (pad~11 :initform 4 :type xcb:-pad-align)
+   (data32 :initarg :data32 :type xcb:-ignore)
+   (data32~ :initform
+           '(name data32 type xcb:CARD32 size
+                  (xcb:-fieldref 'num-items))
+           :type xcb:-list)))
+
+(defclass xcb:xinput:DeleteDeviceProperty
+  (xcb:-request)
+  ((~opcode :initform 38 :type xcb:-u1)
+   (property :initarg :property :type xcb:ATOM)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:xinput:GetDeviceProperty
+  (xcb:-request)
+  ((~opcode :initform 39 :type xcb:-u1)
+   (property :initarg :property :type xcb:ATOM)
+   (type :initarg :type :type xcb:ATOM)
+   (offset :initarg :offset :type xcb:CARD32)
+   (len :initarg :len :type xcb:CARD32)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (delete :initarg :delete :type xcb:BOOL)
+   (pad~0 :initform 2 :type xcb:-pad)))
+(defclass xcb:xinput:GetDeviceProperty~reply
+  (xcb:-reply)
+  ((xi-reply-type :initarg :xi-reply-type :type xcb:CARD8)
+   (type :initarg :type :type xcb:ATOM)
+   (bytes-after :initarg :bytes-after :type xcb:CARD32)
+   (num-items :initarg :num-items :type xcb:CARD32)
+   (format :initarg :format :type xcb:CARD8)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (pad~0 :initform 10 :type xcb:-pad)
+   (items :initform
+         '(expression
+           (xcb:-fieldref 'format)
+           cases
+           (((xcb:xinput:PropertyFormat:8Bits)
+             data8 pad~10)
+            ((xcb:xinput:PropertyFormat:16Bits)
+             data16 pad~11)
+            ((xcb:xinput:PropertyFormat:32Bits)
+             data32)))
+         :type xcb:-switch)
+   (data8 :initarg :data8 :type xcb:-ignore)
+   (data8~ :initform
+          '(name data8 type xcb:CARD8 size
+                 (xcb:-fieldref 'num-items))
+          :type xcb:-list)
+   (pad~10 :initform 4 :type xcb:-pad-align)
+   (data16 :initarg :data16 :type xcb:-ignore)
+   (data16~ :initform
+           '(name data16 type xcb:CARD16 size
+                  (xcb:-fieldref 'num-items))
+           :type xcb:-list)
+   (pad~11 :initform 4 :type xcb:-pad-align)
+   (data32 :initarg :data32 :type xcb:-ignore)
+   (data32~ :initform
+           '(name data32 type xcb:CARD32 size
+                  (xcb:-fieldref 'num-items))
+           :type xcb:-list)))
+
+(defconst xcb:xinput:Device:All 0)
+(defconst xcb:xinput:Device:AllMaster 1)
+
+(defclass xcb:xinput:GroupInfo
+  (xcb:-struct)
+  ((base :initarg :base :type xcb:CARD8)
+   (latched :initarg :latched :type xcb:CARD8)
+   (locked :initarg :locked :type xcb:CARD8)
+   (effective :initarg :effective :type xcb:CARD8)))
+
+(defclass xcb:xinput:ModifierInfo
+  (xcb:-struct)
+  ((base :initarg :base :type xcb:CARD32)
+   (latched :initarg :latched :type xcb:CARD32)
+   (locked :initarg :locked :type xcb:CARD32)
+   (effective :initarg :effective :type xcb:CARD32)))
+
+(defclass xcb:xinput:XIQueryPointer
+  (xcb:-request)
+  ((~opcode :initform 40 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (pad~0 :initform 2 :type xcb:-pad)))
+(defclass xcb:xinput:XIQueryPointer~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (root :initarg :root :type xcb:WINDOW)
+   (child :initarg :child :type xcb:WINDOW)
+   (root-x :initarg :root-x :type xcb:xinput:FP1616)
+   (root-y :initarg :root-y :type xcb:xinput:FP1616)
+   (win-x :initarg :win-x :type xcb:xinput:FP1616)
+   (win-y :initarg :win-y :type xcb:xinput:FP1616)
+   (same-screen :initarg :same-screen :type xcb:BOOL)
+   (pad~1 :initform 1 :type xcb:-pad)
+   (buttons-len :initarg :buttons-len :type xcb:CARD16)
+   (mods :initarg :mods :type xcb:xinput:ModifierInfo)
+   (group :initarg :group :type xcb:xinput:GroupInfo)
+   (buttons :initarg :buttons :type xcb:-ignore)
+   (buttons~ :initform
+            '(name buttons type xcb:CARD32 size
+                   (xcb:-fieldref 'buttons-len))
+            :type xcb:-list)))
+
+(defclass xcb:xinput:XIWarpPointer
+  (xcb:-request)
+  ((~opcode :initform 41 :type xcb:-u1)
+   (src-win :initarg :src-win :type xcb:WINDOW)
+   (dst-win :initarg :dst-win :type xcb:WINDOW)
+   (src-x :initarg :src-x :type xcb:xinput:FP1616)
+   (src-y :initarg :src-y :type xcb:xinput:FP1616)
+   (src-width :initarg :src-width :type xcb:CARD16)
+   (src-height :initarg :src-height :type xcb:CARD16)
+   (dst-x :initarg :dst-x :type xcb:xinput:FP1616)
+   (dst-y :initarg :dst-y :type xcb:xinput:FP1616)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (pad~0 :initform 2 :type xcb:-pad)))
+
+(defclass xcb:xinput:XIChangeCursor
+  (xcb:-request)
+  ((~opcode :initform 42 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (cursor :initarg :cursor :type xcb:CURSOR)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (pad~0 :initform 2 :type xcb:-pad)))
+
+(defconst xcb:xinput:HierarchyChangeType:AddMaster 1)
+(defconst xcb:xinput:HierarchyChangeType:RemoveMaster 2)
+(defconst xcb:xinput:HierarchyChangeType:AttachSlave 3)
+(defconst xcb:xinput:HierarchyChangeType:DetachSlave 4)
+
+(defconst xcb:xinput:ChangeMode:Attach 1)
+(defconst xcb:xinput:ChangeMode:Float 2)
+
+(defclass xcb:xinput:AddMaster
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD16)
+   (len :initarg :len :type xcb:CARD16)
+   (name-len :initarg :name-len :type xcb:CARD16)
+   (send-core :initarg :send-core :type xcb:BOOL)
+   (enable :initarg :enable :type xcb:BOOL)
+   (name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:char size
+                (xcb:-fieldref 'name-len))
+         :type xcb:-list)
+   (pad~0 :initform 4 :type xcb:-pad-align)))
+
+(defclass xcb:xinput:RemoveMaster
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD16)
+   (len :initarg :len :type xcb:CARD16)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (return-mode :initarg :return-mode :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (return-pointer :initarg :return-pointer :type xcb:xinput:DeviceId)
+   (return-keyboard :initarg :return-keyboard :type xcb:xinput:DeviceId)))
+
+(defclass xcb:xinput:AttachSlave
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD16)
+   (len :initarg :len :type xcb:CARD16)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (master :initarg :master :type xcb:xinput:DeviceId)))
+
+(defclass xcb:xinput:DetachSlave
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD16)
+   (len :initarg :len :type xcb:CARD16)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (pad~0 :initform 2 :type xcb:-pad)))
+
+(defclass xcb:xinput:HierarchyChange
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD16)
+   (len :initarg :len :type xcb:CARD16)
+   (data :initform
+        '(expression
+          (xcb:-fieldref 'type)
+          cases
+          (((xcb:xinput:HierarchyChangeType:AddMaster)
+            name-len send-core enable name pad~10)
+           ((xcb:xinput:HierarchyChangeType:RemoveMaster)
+            deviceid return-mode pad~11 return-pointer return-keyboard)
+           ((xcb:xinput:HierarchyChangeType:AttachSlave)
+            deviceid* master)
+           ((xcb:xinput:HierarchyChangeType:DetachSlave)
+            deviceid** pad~12)))
+        :type xcb:-switch)
+   (name-len :initarg :name-len :type xcb:CARD16)
+   (send-core :initarg :send-core :type xcb:BOOL)
+   (enable :initarg :enable :type xcb:BOOL)
+   (name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:char size
+                (xcb:-fieldref 'name-len))
+         :type xcb:-list)
+   (pad~10 :initform 4 :type xcb:-pad-align)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (return-mode :initarg :return-mode :type xcb:CARD8)
+   (pad~11 :initform 1 :type xcb:-pad)
+   (return-pointer :initarg :return-pointer :type xcb:xinput:DeviceId)
+   (return-keyboard :initarg :return-keyboard :type xcb:xinput:DeviceId)
+   (deviceid* :initarg :deviceid* :type xcb:xinput:DeviceId)
+   (master :initarg :master :type xcb:xinput:DeviceId)
+   (deviceid** :initarg :deviceid** :type xcb:xinput:DeviceId)
+   (pad~12 :initform 2 :type xcb:-pad)))
+
+(defclass xcb:xinput:XIChangeHierarchy
+  (xcb:-request)
+  ((~opcode :initform 43 :type xcb:-u1)
+   (num-changes :initarg :num-changes :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (changes :initarg :changes :type xcb:-ignore)
+   (changes~ :initform
+            '(name changes type xcb:xinput:HierarchyChange size
+                   (xcb:-fieldref 'num-changes))
+            :type xcb:-list)))
+
+(defclass xcb:xinput:XISetClientPointer
+  (xcb:-request)
+  ((~opcode :initform 44 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (pad~0 :initform 2 :type xcb:-pad)))
+
+(defclass xcb:xinput:XIGetClientPointer
+  (xcb:-request)
+  ((~opcode :initform 45 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)))
+(defclass xcb:xinput:XIGetClientPointer~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (set :initarg :set :type xcb:BOOL)
+   (pad~1 :initform 1 :type xcb:-pad)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (pad~2 :initform 20 :type xcb:-pad)))
+
+(defconst xcb:xinput:XIEventMask:DeviceChanged 2)
+(defconst xcb:xinput:XIEventMask:KeyPress 4)
+(defconst xcb:xinput:XIEventMask:KeyRelease 8)
+(defconst xcb:xinput:XIEventMask:ButtonPress 16)
+(defconst xcb:xinput:XIEventMask:ButtonRelease 32)
+(defconst xcb:xinput:XIEventMask:Motion 64)
+(defconst xcb:xinput:XIEventMask:Enter 128)
+(defconst xcb:xinput:XIEventMask:Leave 256)
+(defconst xcb:xinput:XIEventMask:FocusIn 512)
+(defconst xcb:xinput:XIEventMask:FocusOut 1024)
+(defconst xcb:xinput:XIEventMask:Hierarchy 2048)
+(defconst xcb:xinput:XIEventMask:Property 4096)
+(defconst xcb:xinput:XIEventMask:RawKeyPress 8192)
+(defconst xcb:xinput:XIEventMask:RawKeyRelease 16384)
+(defconst xcb:xinput:XIEventMask:RawButtonPress 32768)
+(defconst xcb:xinput:XIEventMask:RawButtonRelease 65536)
+(defconst xcb:xinput:XIEventMask:RawMotion 131072)
+(defconst xcb:xinput:XIEventMask:TouchBegin 262144)
+(defconst xcb:xinput:XIEventMask:TouchUpdate 524288)
+(defconst xcb:xinput:XIEventMask:TouchEnd 1048576)
+(defconst xcb:xinput:XIEventMask:TouchOwnership 2097152)
+(defconst xcb:xinput:XIEventMask:RawTouchBegin 4194304)
+(defconst xcb:xinput:XIEventMask:RawTouchUpdate 8388608)
+(defconst xcb:xinput:XIEventMask:RawTouchEnd 16777216)
+(defconst xcb:xinput:XIEventMask:BarrierHit 33554432)
+(defconst xcb:xinput:XIEventMask:BarrierLeave 67108864)
+
+(defclass xcb:xinput:EventMask
+  (xcb:-struct)
+  ((deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (mask-len :initarg :mask-len :type xcb:CARD16)
+   (mask :initarg :mask :type xcb:-ignore)
+   (mask~ :initform
+         '(name mask type xcb:CARD32 size
+                (xcb:-fieldref 'mask-len))
+         :type xcb:-list)))
+
+(defclass xcb:xinput:XISelectEvents
+  (xcb:-request)
+  ((~opcode :initform 46 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (num-mask :initarg :num-mask :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (masks :initarg :masks :type xcb:-ignore)
+   (masks~ :initform
+          '(name masks type xcb:xinput:EventMask size
+                 (xcb:-fieldref 'num-mask))
+          :type xcb:-list)))
+
+(defclass xcb:xinput:XIQueryVersion
+  (xcb:-request)
+  ((~opcode :initform 47 :type xcb:-u1)
+   (major-version :initarg :major-version :type xcb:CARD16)
+   (minor-version :initarg :minor-version :type xcb:CARD16)))
+(defclass xcb:xinput:XIQueryVersion~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (major-version :initarg :major-version :type xcb:CARD16)
+   (minor-version :initarg :minor-version :type xcb:CARD16)
+   (pad~1 :initform 20 :type xcb:-pad)))
+
+(defconst xcb:xinput:DeviceClassType:Key 0)
+(defconst xcb:xinput:DeviceClassType:Button 1)
+(defconst xcb:xinput:DeviceClassType:Valuator 2)
+(defconst xcb:xinput:DeviceClassType:Scroll 3)
+(defconst xcb:xinput:DeviceClassType:Touch 8)
+
+(defconst xcb:xinput:DeviceType:MasterPointer 1)
+(defconst xcb:xinput:DeviceType:MasterKeyboard 2)
+(defconst xcb:xinput:DeviceType:SlavePointer 3)
+(defconst xcb:xinput:DeviceType:SlaveKeyboard 4)
+(defconst xcb:xinput:DeviceType:FloatingSlave 5)
+
+(defconst xcb:xinput:ScrollFlags:NoEmulation 1)
+(defconst xcb:xinput:ScrollFlags:Preferred 2)
+
+(defconst xcb:xinput:ScrollType:Vertical 1)
+(defconst xcb:xinput:ScrollType:Horizontal 2)
+
+(defconst xcb:xinput:TouchMode:Direct 1)
+(defconst xcb:xinput:TouchMode:Dependent 2)
+
+(defclass xcb:xinput:ButtonClass
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD16)
+   (len :initarg :len :type xcb:CARD16)
+   (sourceid :initarg :sourceid :type xcb:xinput:DeviceId)
+   (num-buttons :initarg :num-buttons :type xcb:CARD16)
+   (state :initarg :state :type xcb:-ignore)
+   (state~ :initform
+          '(name state type xcb:CARD32 size
+                 (/
+                  (+
+                   (xcb:-fieldref 'num-buttons)
+                   31)
+                  32))
+          :type xcb:-list)
+   (labels :initarg :labels :type xcb:-ignore)
+   (labels~ :initform
+           '(name labels type xcb:ATOM size
+                  (xcb:-fieldref 'num-buttons))
+           :type xcb:-list)))
+
+(defclass xcb:xinput:KeyClass
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD16)
+   (len :initarg :len :type xcb:CARD16)
+   (sourceid :initarg :sourceid :type xcb:xinput:DeviceId)
+   (num-keys :initarg :num-keys :type xcb:CARD16)
+   (keys :initarg :keys :type xcb:-ignore)
+   (keys~ :initform
+         '(name keys type xcb:CARD32 size
+                (xcb:-fieldref 'num-keys))
+         :type xcb:-list)))
+
+(defclass xcb:xinput:ScrollClass
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD16)
+   (len :initarg :len :type xcb:CARD16)
+   (sourceid :initarg :sourceid :type xcb:xinput:DeviceId)
+   (number :initarg :number :type xcb:CARD16)
+   (scroll-type :initarg :scroll-type :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (flags :initarg :flags :type xcb:CARD32)
+   (increment :initarg :increment :type xcb:xinput:FP3232)))
+
+(defclass xcb:xinput:TouchClass
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD16)
+   (len :initarg :len :type xcb:CARD16)
+   (sourceid :initarg :sourceid :type xcb:xinput:DeviceId)
+   (mode :initarg :mode :type xcb:CARD8)
+   (num-touches :initarg :num-touches :type xcb:CARD8)))
+
+(defclass xcb:xinput:ValuatorClass
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD16)
+   (len :initarg :len :type xcb:CARD16)
+   (sourceid :initarg :sourceid :type xcb:xinput:DeviceId)
+   (number :initarg :number :type xcb:CARD16)
+   (label :initarg :label :type xcb:ATOM)
+   (min :initarg :min :type xcb:xinput:FP3232)
+   (max :initarg :max :type xcb:xinput:FP3232)
+   (value :initarg :value :type xcb:xinput:FP3232)
+   (resolution :initarg :resolution :type xcb:CARD32)
+   (mode :initarg :mode :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:xinput:DeviceClass
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD16)
+   (len :initarg :len :type xcb:CARD16)
+   (sourceid :initarg :sourceid :type xcb:xinput:DeviceId)
+   (data :initform
+        '(expression
+          (xcb:-fieldref 'type)
+          cases
+          (((xcb:xinput:DeviceClassType:Key)
+            num-keys keys)
+           ((xcb:xinput:DeviceClassType:Button)
+            num-buttons state labels)
+           ((xcb:xinput:DeviceClassType:Valuator)
+            number label min max value resolution mode pad~10)
+           ((xcb:xinput:DeviceClassType:Scroll)
+            number* scroll-type pad~11 flags increment)
+           ((xcb:xinput:DeviceClassType:Touch)
+            mode* num-touches)))
+        :type xcb:-switch)
+   (num-keys :initarg :num-keys :type xcb:CARD16)
+   (keys :initarg :keys :type xcb:-ignore)
+   (keys~ :initform
+         '(name keys type xcb:CARD32 size
+                (xcb:-fieldref 'num-keys))
+         :type xcb:-list)
+   (num-buttons :initarg :num-buttons :type xcb:CARD16)
+   (state :initarg :state :type xcb:-ignore)
+   (state~ :initform
+          '(name state type xcb:CARD32 size
+                 (/
+                  (+
+                   (xcb:-fieldref 'num-buttons)
+                   31)
+                  32))
+          :type xcb:-list)
+   (labels :initarg :labels :type xcb:-ignore)
+   (labels~ :initform
+           '(name labels type xcb:ATOM size
+                  (xcb:-fieldref 'num-buttons))
+           :type xcb:-list)
+   (number :initarg :number :type xcb:CARD16)
+   (label :initarg :label :type xcb:ATOM)
+   (min :initarg :min :type xcb:xinput:FP3232)
+   (max :initarg :max :type xcb:xinput:FP3232)
+   (value :initarg :value :type xcb:xinput:FP3232)
+   (resolution :initarg :resolution :type xcb:CARD32)
+   (mode :initarg :mode :type xcb:CARD8)
+   (pad~10 :initform 3 :type xcb:-pad)
+   (number* :initarg :number* :type xcb:CARD16)
+   (scroll-type :initarg :scroll-type :type xcb:CARD16)
+   (pad~11 :initform 2 :type xcb:-pad)
+   (flags :initarg :flags :type xcb:CARD32)
+   (increment :initarg :increment :type xcb:xinput:FP3232)
+   (mode* :initarg :mode* :type xcb:CARD8)
+   (num-touches :initarg :num-touches :type xcb:CARD8)))
+
+(defclass xcb:xinput:XIDeviceInfo
+  (xcb:-struct)
+  ((deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (type :initarg :type :type xcb:CARD16)
+   (attachment :initarg :attachment :type xcb:xinput:DeviceId)
+   (num-classes :initarg :num-classes :type xcb:CARD16)
+   (name-len :initarg :name-len :type xcb:CARD16)
+   (enabled :initarg :enabled :type xcb:BOOL)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:char size
+                (xcb:-fieldref 'name-len))
+         :type xcb:-list)
+   (pad~1 :initform 4 :type xcb:-pad-align)
+   (classes :initarg :classes :type xcb:-ignore)
+   (classes~ :initform
+            '(name classes type xcb:xinput:DeviceClass size
+                   (xcb:-fieldref 'num-classes))
+            :type xcb:-list)))
+
+(defclass xcb:xinput:XIQueryDevice
+  (xcb:-request)
+  ((~opcode :initform 48 :type xcb:-u1)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (pad~0 :initform 2 :type xcb:-pad)))
+(defclass xcb:xinput:XIQueryDevice~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (num-infos :initarg :num-infos :type xcb:CARD16)
+   (pad~1 :initform 22 :type xcb:-pad)
+   (infos :initarg :infos :type xcb:-ignore)
+   (infos~ :initform
+          '(name infos type xcb:xinput:XIDeviceInfo size
+                 (xcb:-fieldref 'num-infos))
+          :type xcb:-list)))
+
+(defclass xcb:xinput:XISetFocus
+  (xcb:-request)
+  ((~opcode :initform 49 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (pad~0 :initform 2 :type xcb:-pad)))
+
+(defclass xcb:xinput:XIGetFocus
+  (xcb:-request)
+  ((~opcode :initform 50 :type xcb:-u1)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (pad~0 :initform 2 :type xcb:-pad)))
+(defclass xcb:xinput:XIGetFocus~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (focus :initarg :focus :type xcb:WINDOW)
+   (pad~1 :initform 20 :type xcb:-pad)))
+
+(defconst xcb:xinput:GrabOwner:NoOwner 0)
+(defconst xcb:xinput:GrabOwner:Owner 1)
+
+(defclass xcb:xinput:XIGrabDevice
+  (xcb:-request)
+  ((~opcode :initform 51 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (cursor :initarg :cursor :type xcb:CURSOR)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (mode :initarg :mode :type xcb:CARD8)
+   (paired-device-mode :initarg :paired-device-mode :type xcb:CARD8)
+   (owner-events :initarg :owner-events :type xcb:BOOL)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (mask-len :initarg :mask-len :type xcb:CARD16)
+   (mask :initarg :mask :type xcb:-ignore)
+   (mask~ :initform
+         '(name mask type xcb:CARD32 size
+                (xcb:-fieldref 'mask-len))
+         :type xcb:-list)))
+(defclass xcb:xinput:XIGrabDevice~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (status :initarg :status :type xcb:CARD8)
+   (pad~1 :initform 23 :type xcb:-pad)))
+
+(defclass xcb:xinput:XIUngrabDevice
+  (xcb:-request)
+  ((~opcode :initform 52 :type xcb:-u1)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (pad~0 :initform 2 :type xcb:-pad)))
+
+(defconst xcb:xinput:EventMode:AsyncDevice 0)
+(defconst xcb:xinput:EventMode:SyncDevice 1)
+(defconst xcb:xinput:EventMode:ReplayDevice 2)
+(defconst xcb:xinput:EventMode:AsyncPairedDevice 3)
+(defconst xcb:xinput:EventMode:AsyncPair 4)
+(defconst xcb:xinput:EventMode:SyncPair 5)
+(defconst xcb:xinput:EventMode:AcceptTouch 6)
+(defconst xcb:xinput:EventMode:RejectTouch 7)
+
+(defclass xcb:xinput:XIAllowEvents
+  (xcb:-request)
+  ((~opcode :initform 53 :type xcb:-u1)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (event-mode :initarg :event-mode :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (touchid :initarg :touchid :type xcb:CARD32)
+   (grab-window :initarg :grab-window :type xcb:WINDOW)))
+
+(defconst xcb:xinput:GrabMode22:Sync 0)
+(defconst xcb:xinput:GrabMode22:Async 1)
+(defconst xcb:xinput:GrabMode22:Touch 2)
+
+(defconst xcb:xinput:GrabType:Button 0)
+(defconst xcb:xinput:GrabType:Keycode 1)
+(defconst xcb:xinput:GrabType:Enter 2)
+(defconst xcb:xinput:GrabType:FocusIn 3)
+(defconst xcb:xinput:GrabType:TouchBegin 4)
+
+(defconst xcb:xinput:ModifierMask:Any 2147483648)
+
+(defclass xcb:xinput:GrabModifierInfo
+  (xcb:-struct)
+  ((modifiers :initarg :modifiers :type xcb:CARD32)
+   (status :initarg :status :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:xinput:XIPassiveGrabDevice
+  (xcb:-request)
+  ((~opcode :initform 54 :type xcb:-u1)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (grab-window :initarg :grab-window :type xcb:WINDOW)
+   (cursor :initarg :cursor :type xcb:CURSOR)
+   (detail :initarg :detail :type xcb:CARD32)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (num-modifiers :initarg :num-modifiers :type xcb:CARD16)
+   (mask-len :initarg :mask-len :type xcb:CARD16)
+   (grab-type :initarg :grab-type :type xcb:CARD8)
+   (grab-mode :initarg :grab-mode :type xcb:CARD8)
+   (paired-device-mode :initarg :paired-device-mode :type xcb:CARD8)
+   (owner-events :initarg :owner-events :type xcb:BOOL)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (mask :initarg :mask :type xcb:-ignore)
+   (mask~ :initform
+         '(name mask type xcb:CARD32 size
+                (xcb:-fieldref 'mask-len))
+         :type xcb:-list)
+   (modifiers :initarg :modifiers :type xcb:-ignore)
+   (modifiers~ :initform
+              '(name modifiers type xcb:CARD32 size
+                     (xcb:-fieldref 'num-modifiers))
+              :type xcb:-list)))
+(defclass xcb:xinput:XIPassiveGrabDevice~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (num-modifiers :initarg :num-modifiers :type xcb:CARD16)
+   (pad~1 :initform 22 :type xcb:-pad)
+   (modifiers :initarg :modifiers :type xcb:-ignore)
+   (modifiers~ :initform
+              '(name modifiers type xcb:xinput:GrabModifierInfo size
+                     (xcb:-fieldref 'num-modifiers))
+              :type xcb:-list)))
+
+(defclass xcb:xinput:XIPassiveUngrabDevice
+  (xcb:-request)
+  ((~opcode :initform 55 :type xcb:-u1)
+   (grab-window :initarg :grab-window :type xcb:WINDOW)
+   (detail :initarg :detail :type xcb:CARD32)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (num-modifiers :initarg :num-modifiers :type xcb:CARD16)
+   (grab-type :initarg :grab-type :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (modifiers :initarg :modifiers :type xcb:-ignore)
+   (modifiers~ :initform
+              '(name modifiers type xcb:CARD32 size
+                     (xcb:-fieldref 'num-modifiers))
+              :type xcb:-list)))
+
+(defclass xcb:xinput:XIListProperties
+  (xcb:-request)
+  ((~opcode :initform 56 :type xcb:-u1)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (pad~0 :initform 2 :type xcb:-pad)))
+(defclass xcb:xinput:XIListProperties~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (num-properties :initarg :num-properties :type xcb:CARD16)
+   (pad~1 :initform 22 :type xcb:-pad)
+   (properties :initarg :properties :type xcb:-ignore)
+   (properties~ :initform
+               '(name properties type xcb:ATOM size
+                      (xcb:-fieldref 'num-properties))
+               :type xcb:-list)))
+
+(defclass xcb:xinput:XIChangeProperty
+  (xcb:-request)
+  ((~opcode :initform 57 :type xcb:-u1)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (mode :initarg :mode :type xcb:CARD8)
+   (format :initarg :format :type xcb:CARD8)
+   (property :initarg :property :type xcb:ATOM)
+   (type :initarg :type :type xcb:ATOM)
+   (num-items :initarg :num-items :type xcb:CARD32)
+   (items :initform
+         '(expression
+           (xcb:-fieldref 'format)
+           cases
+           (((xcb:xinput:PropertyFormat:8Bits)
+             data8 pad~10)
+            ((xcb:xinput:PropertyFormat:16Bits)
+             data16 pad~11)
+            ((xcb:xinput:PropertyFormat:32Bits)
+             data32)))
+         :type xcb:-switch)
+   (data8 :initarg :data8 :type xcb:-ignore)
+   (data8~ :initform
+          '(name data8 type xcb:CARD8 size
+                 (xcb:-fieldref 'num-items))
+          :type xcb:-list)
+   (pad~10 :initform 4 :type xcb:-pad-align)
+   (data16 :initarg :data16 :type xcb:-ignore)
+   (data16~ :initform
+           '(name data16 type xcb:CARD16 size
+                  (xcb:-fieldref 'num-items))
+           :type xcb:-list)
+   (pad~11 :initform 4 :type xcb:-pad-align)
+   (data32 :initarg :data32 :type xcb:-ignore)
+   (data32~ :initform
+           '(name data32 type xcb:CARD32 size
+                  (xcb:-fieldref 'num-items))
+           :type xcb:-list)))
+
+(defclass xcb:xinput:XIDeleteProperty
+  (xcb:-request)
+  ((~opcode :initform 58 :type xcb:-u1)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (property :initarg :property :type xcb:ATOM)))
+
+(defclass xcb:xinput:XIGetProperty
+  (xcb:-request)
+  ((~opcode :initform 59 :type xcb:-u1)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (delete :initarg :delete :type xcb:BOOL)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (property :initarg :property :type xcb:ATOM)
+   (type :initarg :type :type xcb:ATOM)
+   (offset :initarg :offset :type xcb:CARD32)
+   (len :initarg :len :type xcb:CARD32)))
+(defclass xcb:xinput:XIGetProperty~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (type :initarg :type :type xcb:ATOM)
+   (bytes-after :initarg :bytes-after :type xcb:CARD32)
+   (num-items :initarg :num-items :type xcb:CARD32)
+   (format :initarg :format :type xcb:CARD8)
+   (pad~1 :initform 11 :type xcb:-pad)
+   (items :initform
+         '(expression
+           (xcb:-fieldref 'format)
+           cases
+           (((xcb:xinput:PropertyFormat:8Bits)
+             data8 pad~10)
+            ((xcb:xinput:PropertyFormat:16Bits)
+             data16 pad~11)
+            ((xcb:xinput:PropertyFormat:32Bits)
+             data32)))
+         :type xcb:-switch)
+   (data8 :initarg :data8 :type xcb:-ignore)
+   (data8~ :initform
+          '(name data8 type xcb:CARD8 size
+                 (xcb:-fieldref 'num-items))
+          :type xcb:-list)
+   (pad~10 :initform 4 :type xcb:-pad-align)
+   (data16 :initarg :data16 :type xcb:-ignore)
+   (data16~ :initform
+           '(name data16 type xcb:CARD16 size
+                  (xcb:-fieldref 'num-items))
+           :type xcb:-list)
+   (pad~11 :initform 4 :type xcb:-pad-align)
+   (data32 :initarg :data32 :type xcb:-ignore)
+   (data32~ :initform
+           '(name data32 type xcb:CARD32 size
+                  (xcb:-fieldref 'num-items))
+           :type xcb:-list)))
+
+(defclass xcb:xinput:XIGetSelectedEvents
+  (xcb:-request)
+  ((~opcode :initform 60 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)))
+(defclass xcb:xinput:XIGetSelectedEvents~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (num-masks :initarg :num-masks :type xcb:CARD16)
+   (pad~1 :initform 22 :type xcb:-pad)
+   (masks :initarg :masks :type xcb:-ignore)
+   (masks~ :initform
+          '(name masks type xcb:xinput:EventMask size
+                 (xcb:-fieldref 'num-masks))
+          :type xcb:-list)))
+
+(defclass xcb:xinput:BarrierReleasePointerInfo
+  (xcb:-struct)
+  ((deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (barrier :initarg :barrier :type xcb:xinput:BARRIER)
+   (eventid :initarg :eventid :type xcb:CARD32)))
+
+(defclass xcb:xinput:XIBarrierReleasePointer
+  (xcb:-request)
+  ((~opcode :initform 61 :type xcb:-u1)
+   (num-barriers :initarg :num-barriers :type xcb:CARD32)
+   (barriers :initarg :barriers :type xcb:-ignore)
+   (barriers~ :initform
+             '(name barriers type xcb:xinput:BarrierReleasePointerInfo size
+                    (xcb:-fieldref 'num-barriers))
+             :type xcb:-list)))
+
+(defclass xcb:xinput:DeviceValuator
+  (xcb:-event)
+  ((device-id :initarg :device-id :type xcb:CARD8)
+   (device-state :initarg :device-state :type xcb:CARD16)
+   (num-valuators :initarg :num-valuators :type xcb:CARD8)
+   (first-valuator :initarg :first-valuator :type xcb:CARD8)
+   (valuators :initarg :valuators :type xcb:-ignore)
+   (valuators~ :initform
+              '(name valuators type xcb:INT32 size 6)
+              :type xcb:-list)))
+
+(defconst xcb:xinput:MoreEventsMask:MoreEvents 128)
+
+(defclass xcb:xinput:DeviceKeyPress
+  (xcb:-event)
+  ((detail :initarg :detail :type xcb:BYTE)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (root :initarg :root :type xcb:WINDOW)
+   (event :initarg :event :type xcb:WINDOW)
+   (child :initarg :child :type xcb:WINDOW)
+   (root-x :initarg :root-x :type xcb:INT16)
+   (root-y :initarg :root-y :type xcb:INT16)
+   (event-x :initarg :event-x :type xcb:INT16)
+   (event-y :initarg :event-y :type xcb:INT16)
+   (state :initarg :state :type xcb:CARD16)
+   (same-screen :initarg :same-screen :type xcb:BOOL)
+   (device-id :initarg :device-id :type xcb:CARD8)))
+
+(defclass xcb:xinput:DeviceKeyRelease
+  (xcb:-event xcb:xinput:DeviceKeyPress)
+  nil)
+
+(defclass xcb:xinput:DeviceButtonPress
+  (xcb:-event xcb:xinput:DeviceKeyPress)
+  nil)
+
+(defclass xcb:xinput:DeviceButtonRelease
+  (xcb:-event xcb:xinput:DeviceKeyPress)
+  nil)
+
+(defclass xcb:xinput:DeviceMotionNotify
+  (xcb:-event xcb:xinput:DeviceKeyPress)
+  nil)
+
+(defclass xcb:xinput:DeviceFocusIn
+  (xcb:-event)
+  ((detail :initarg :detail :type xcb:BYTE)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (window :initarg :window :type xcb:WINDOW)
+   (mode :initarg :mode :type xcb:BYTE)
+   (device-id :initarg :device-id :type xcb:CARD8)
+   (pad~0 :initform 18 :type xcb:-pad)))
+
+(defclass xcb:xinput:DeviceFocusOut
+  (xcb:-event xcb:xinput:DeviceFocusIn)
+  nil)
+
+(defclass xcb:xinput:ProximityIn
+  (xcb:-event xcb:xinput:DeviceKeyPress)
+  nil)
+
+(defclass xcb:xinput:ProximityOut
+  (xcb:-event xcb:xinput:DeviceKeyPress)
+  nil)
+
+(defconst xcb:xinput:ClassesReportedMask:OutOfProximity 128)
+(defconst xcb:xinput:ClassesReportedMask:DeviceModeAbsolute 64)
+(defconst xcb:xinput:ClassesReportedMask:ReportingValuators 4)
+(defconst xcb:xinput:ClassesReportedMask:ReportingButtons 2)
+(defconst xcb:xinput:ClassesReportedMask:ReportingKeys 1)
+
+(defclass xcb:xinput:DeviceStateNotify
+  (xcb:-event)
+  ((device-id :initarg :device-id :type xcb:BYTE)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (num-keys :initarg :num-keys :type xcb:CARD8)
+   (num-buttons :initarg :num-buttons :type xcb:CARD8)
+   (num-valuators :initarg :num-valuators :type xcb:CARD8)
+   (classes-reported :initarg :classes-reported :type xcb:CARD8)
+   (buttons :initarg :buttons :type xcb:-ignore)
+   (buttons~ :initform
+            '(name buttons type xcb:CARD8 size 4)
+            :type xcb:-list)
+   (keys :initarg :keys :type xcb:-ignore)
+   (keys~ :initform
+         '(name keys type xcb:CARD8 size 4)
+         :type xcb:-list)
+   (valuators :initarg :valuators :type xcb:-ignore)
+   (valuators~ :initform
+              '(name valuators type xcb:CARD32 size 3)
+              :type xcb:-list)))
+
+(defclass xcb:xinput:DeviceMappingNotify
+  (xcb:-event)
+  ((device-id :initarg :device-id :type xcb:BYTE)
+   (request :initarg :request :type xcb:CARD8)
+   (first-keycode :initarg :first-keycode :type xcb:xinput:KeyCode)
+   (count :initarg :count :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (pad~1 :initform 20 :type xcb:-pad)))
+
+(defconst xcb:xinput:ChangeDevice:NewPointer 0)
+(defconst xcb:xinput:ChangeDevice:NewKeyboard 1)
+
+(defclass xcb:xinput:ChangeDeviceNotify
+  (xcb:-event)
+  ((device-id :initarg :device-id :type xcb:BYTE)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (request :initarg :request :type xcb:CARD8)
+   (pad~0 :initform 23 :type xcb:-pad)))
+
+(defclass xcb:xinput:DeviceKeyStateNotify
+  (xcb:-event)
+  ((device-id :initarg :device-id :type xcb:BYTE)
+   (keys :initarg :keys :type xcb:-ignore)
+   (keys~ :initform
+         '(name keys type xcb:CARD8 size 28)
+         :type xcb:-list)))
+
+(defclass xcb:xinput:DeviceButtonStateNotify
+  (xcb:-event)
+  ((device-id :initarg :device-id :type xcb:BYTE)
+   (buttons :initarg :buttons :type xcb:-ignore)
+   (buttons~ :initform
+            '(name buttons type xcb:CARD8 size 28)
+            :type xcb:-list)))
+
+(defconst xcb:xinput:DeviceChange:Added 0)
+(defconst xcb:xinput:DeviceChange:Removed 1)
+(defconst xcb:xinput:DeviceChange:Enabled 2)
+(defconst xcb:xinput:DeviceChange:Disabled 3)
+(defconst xcb:xinput:DeviceChange:Unrecoverable 4)
+(defconst xcb:xinput:DeviceChange:ControlChanged 5)
+
+(defclass xcb:xinput:DevicePresenceNotify
+  (xcb:-event)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (devchange :initarg :devchange :type xcb:BYTE)
+   (device-id :initarg :device-id :type xcb:BYTE)
+   (control :initarg :control :type xcb:CARD16)
+   (pad~1 :initform 20 :type xcb:-pad)))
+
+(defclass xcb:xinput:DevicePropertyNotify
+  (xcb:-event)
+  ((state :initarg :state :type xcb:BYTE)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (property :initarg :property :type xcb:ATOM)
+   (pad~0 :initform 19 :type xcb:-pad)
+   (device-id :initarg :device-id :type xcb:CARD8)))
+
+(defconst xcb:xinput:ChangeReason:SlaveSwitch 1)
+(defconst xcb:xinput:ChangeReason:DeviceChange 2)
+
+(defclass xcb:xinput:DeviceChanged
+  (xcb:-event)
+  ((extension :type xcb:CARD8)
+   (length :type xcb:CARD32)
+   (evtype :type xcb:CARD16)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (num-classes :initarg :num-classes :type xcb:CARD16)
+   (sourceid :initarg :sourceid :type xcb:xinput:DeviceId)
+   (reason :initarg :reason :type xcb:CARD8)
+   (pad~0 :initform 11 :type xcb:-pad)
+   (classes :initarg :classes :type xcb:-ignore)
+   (classes~ :initform
+            '(name classes type xcb:xinput:DeviceClass size
+                   (xcb:-fieldref 'num-classes))
+            :type xcb:-list)))
+
+(defconst xcb:xinput:KeyEventFlags:KeyRepeat 65536)
+
+(defclass xcb:xinput:KeyPress
+  (xcb:-event)
+  ((extension :type xcb:CARD8)
+   (length :type xcb:CARD32)
+   (evtype :type xcb:CARD16)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (detail :initarg :detail :type xcb:CARD32)
+   (root :initarg :root :type xcb:WINDOW)
+   (event :initarg :event :type xcb:WINDOW)
+   (child :initarg :child :type xcb:WINDOW)
+   (root-x :initarg :root-x :type xcb:xinput:FP1616)
+   (root-y :initarg :root-y :type xcb:xinput:FP1616)
+   (event-x :initarg :event-x :type xcb:xinput:FP1616)
+   (event-y :initarg :event-y :type xcb:xinput:FP1616)
+   (buttons-len :initarg :buttons-len :type xcb:CARD16)
+   (valuators-len :initarg :valuators-len :type xcb:CARD16)
+   (sourceid :initarg :sourceid :type xcb:xinput:DeviceId)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (flags :initarg :flags :type xcb:CARD32)
+   (mods :initarg :mods :type xcb:xinput:ModifierInfo)
+   (group :initarg :group :type xcb:xinput:GroupInfo)
+   (button-mask :initarg :button-mask :type xcb:-ignore)
+   (button-mask~ :initform
+                '(name button-mask type xcb:CARD32 size
+                       (xcb:-fieldref 'buttons-len))
+                :type xcb:-list)
+   (valuator-mask :initarg :valuator-mask :type xcb:-ignore)
+   (valuator-mask~ :initform
+                  '(name valuator-mask type xcb:CARD32 size
+                         (xcb:-fieldref 'valuators-len))
+                  :type xcb:-list)
+   (axisvalues :initarg :axisvalues :type xcb:-ignore)
+   (axisvalues~ :initform
+               '(name axisvalues type xcb:xinput:FP3232 size
+                      (apply '+
+                             (mapcar
+                              (lambda
+                                (i)
+                                (eval
+                                 '(xcb:-popcount obj)
+                                 (list
+                                  (nconc
+                                   '(obj)
+                                   i))))
+                              (slot-value obj 'valuator-mask))))
+               :type xcb:-list)))
+
+(defclass xcb:xinput:KeyRelease
+  (xcb:-event xcb:KeyPress)
+  nil)
+
+(defconst xcb:xinput:PointerEventFlags:PointerEmulated 65536)
+
+(defclass xcb:xinput:ButtonPress
+  (xcb:-event)
+  ((extension :type xcb:CARD8)
+   (length :type xcb:CARD32)
+   (evtype :type xcb:CARD16)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (detail :initarg :detail :type xcb:CARD32)
+   (root :initarg :root :type xcb:WINDOW)
+   (event :initarg :event :type xcb:WINDOW)
+   (child :initarg :child :type xcb:WINDOW)
+   (root-x :initarg :root-x :type xcb:xinput:FP1616)
+   (root-y :initarg :root-y :type xcb:xinput:FP1616)
+   (event-x :initarg :event-x :type xcb:xinput:FP1616)
+   (event-y :initarg :event-y :type xcb:xinput:FP1616)
+   (buttons-len :initarg :buttons-len :type xcb:CARD16)
+   (valuators-len :initarg :valuators-len :type xcb:CARD16)
+   (sourceid :initarg :sourceid :type xcb:xinput:DeviceId)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (flags :initarg :flags :type xcb:CARD32)
+   (mods :initarg :mods :type xcb:xinput:ModifierInfo)
+   (group :initarg :group :type xcb:xinput:GroupInfo)
+   (button-mask :initarg :button-mask :type xcb:-ignore)
+   (button-mask~ :initform
+                '(name button-mask type xcb:CARD32 size
+                       (xcb:-fieldref 'buttons-len))
+                :type xcb:-list)
+   (valuator-mask :initarg :valuator-mask :type xcb:-ignore)
+   (valuator-mask~ :initform
+                  '(name valuator-mask type xcb:CARD32 size
+                         (xcb:-fieldref 'valuators-len))
+                  :type xcb:-list)
+   (axisvalues :initarg :axisvalues :type xcb:-ignore)
+   (axisvalues~ :initform
+               '(name axisvalues type xcb:xinput:FP3232 size
+                      (apply '+
+                             (mapcar
+                              (lambda
+                                (i)
+                                (eval
+                                 '(xcb:-popcount obj)
+                                 (list
+                                  (nconc
+                                   '(obj)
+                                   i))))
+                              (slot-value obj 'valuator-mask))))
+               :type xcb:-list)))
+
+(defclass xcb:xinput:ButtonRelease
+  (xcb:-event xcb:ButtonPress)
+  nil)
+
+(defclass xcb:xinput:Motion
+  (xcb:-event xcb:ButtonPress)
+  nil)
+
+(defconst xcb:xinput:NotifyMode:Normal 0)
+(defconst xcb:xinput:NotifyMode:Grab 1)
+(defconst xcb:xinput:NotifyMode:Ungrab 2)
+(defconst xcb:xinput:NotifyMode:WhileGrabbed 3)
+(defconst xcb:xinput:NotifyMode:PassiveGrab 4)
+(defconst xcb:xinput:NotifyMode:PassiveUngrab 5)
+
+(defconst xcb:xinput:NotifyDetail:Ancestor 0)
+(defconst xcb:xinput:NotifyDetail:Virtual 1)
+(defconst xcb:xinput:NotifyDetail:Inferior 2)
+(defconst xcb:xinput:NotifyDetail:Nonlinear 3)
+(defconst xcb:xinput:NotifyDetail:NonlinearVirtual 4)
+(defconst xcb:xinput:NotifyDetail:Pointer 5)
+(defconst xcb:xinput:NotifyDetail:PointerRoot 6)
+(defconst xcb:xinput:NotifyDetail:None 7)
+
+(defclass xcb:xinput:Enter
+  (xcb:-event)
+  ((extension :type xcb:CARD8)
+   (length :type xcb:CARD32)
+   (evtype :type xcb:CARD16)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (sourceid :initarg :sourceid :type xcb:xinput:DeviceId)
+   (mode :initarg :mode :type xcb:CARD8)
+   (detail :initarg :detail :type xcb:CARD8)
+   (root :initarg :root :type xcb:WINDOW)
+   (event :initarg :event :type xcb:WINDOW)
+   (child :initarg :child :type xcb:WINDOW)
+   (root-x :initarg :root-x :type xcb:xinput:FP1616)
+   (root-y :initarg :root-y :type xcb:xinput:FP1616)
+   (event-x :initarg :event-x :type xcb:xinput:FP1616)
+   (event-y :initarg :event-y :type xcb:xinput:FP1616)
+   (same-screen :initarg :same-screen :type xcb:BOOL)
+   (focus :initarg :focus :type xcb:BOOL)
+   (buttons-len :initarg :buttons-len :type xcb:CARD16)
+   (mods :initarg :mods :type xcb:xinput:ModifierInfo)
+   (group :initarg :group :type xcb:xinput:GroupInfo)
+   (buttons :initarg :buttons :type xcb:-ignore)
+   (buttons~ :initform
+            '(name buttons type xcb:CARD32 size
+                   (xcb:-fieldref 'buttons-len))
+            :type xcb:-list)))
+
+(defclass xcb:xinput:Leave
+  (xcb:-event xcb:xinput:Enter)
+  nil)
+
+(defclass xcb:xinput:FocusIn
+  (xcb:-event xcb:xinput:Enter)
+  nil)
+
+(defclass xcb:xinput:FocusOut
+  (xcb:-event xcb:xinput:Enter)
+  nil)
+
+(defconst xcb:xinput:HierarchyMask:MasterAdded 1)
+(defconst xcb:xinput:HierarchyMask:MasterRemoved 2)
+(defconst xcb:xinput:HierarchyMask:SlaveAdded 4)
+(defconst xcb:xinput:HierarchyMask:SlaveRemoved 8)
+(defconst xcb:xinput:HierarchyMask:SlaveAttached 16)
+(defconst xcb:xinput:HierarchyMask:SlaveDetached 32)
+(defconst xcb:xinput:HierarchyMask:DeviceEnabled 64)
+(defconst xcb:xinput:HierarchyMask:DeviceDisabled 128)
+
+(defclass xcb:xinput:HierarchyInfo
+  (xcb:-struct)
+  ((deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (attachment :initarg :attachment :type xcb:xinput:DeviceId)
+   (type :initarg :type :type xcb:CARD8)
+   (enabled :initarg :enabled :type xcb:BOOL)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (flags :initarg :flags :type xcb:CARD32)))
+
+(defclass xcb:xinput:Hierarchy
+  (xcb:-event)
+  ((extension :type xcb:CARD8)
+   (length :type xcb:CARD32)
+   (evtype :type xcb:CARD16)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (flags :initarg :flags :type xcb:CARD32)
+   (num-infos :initarg :num-infos :type xcb:CARD16)
+   (pad~0 :initform 10 :type xcb:-pad)
+   (infos :initarg :infos :type xcb:-ignore)
+   (infos~ :initform
+          '(name infos type xcb:xinput:HierarchyInfo size
+                 (xcb:-fieldref 'num-infos))
+          :type xcb:-list)))
+
+(defconst xcb:xinput:PropertyFlag:Deleted 0)
+(defconst xcb:xinput:PropertyFlag:Created 1)
+(defconst xcb:xinput:PropertyFlag:Modified 2)
+
+(defclass xcb:xinput:Property
+  (xcb:-event)
+  ((extension :type xcb:CARD8)
+   (length :type xcb:CARD32)
+   (evtype :type xcb:CARD16)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (property :initarg :property :type xcb:ATOM)
+   (what :initarg :what :type xcb:CARD8)
+   (pad~0 :initform 11 :type xcb:-pad)))
+
+(defclass xcb:xinput:RawKeyPress
+  (xcb:-event)
+  ((extension :type xcb:CARD8)
+   (length :type xcb:CARD32)
+   (evtype :type xcb:CARD16)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (detail :initarg :detail :type xcb:CARD32)
+   (sourceid :initarg :sourceid :type xcb:xinput:DeviceId)
+   (valuators-len :initarg :valuators-len :type xcb:CARD16)
+   (flags :initarg :flags :type xcb:CARD32)
+   (pad~0 :initform 4 :type xcb:-pad)
+   (valuator-mask :initarg :valuator-mask :type xcb:-ignore)
+   (valuator-mask~ :initform
+                  '(name valuator-mask type xcb:CARD32 size
+                         (xcb:-fieldref 'valuators-len))
+                  :type xcb:-list)
+   (axisvalues :initarg :axisvalues :type xcb:-ignore)
+   (axisvalues~ :initform
+               '(name axisvalues type xcb:xinput:FP3232 size
+                      (apply '+
+                             (mapcar
+                              (lambda
+                                (i)
+                                (eval
+                                 '(xcb:-popcount obj)
+                                 (list
+                                  (nconc
+                                   '(obj)
+                                   i))))
+                              (slot-value obj 'valuator-mask))))
+               :type xcb:-list)
+   (axisvalues-raw :initarg :axisvalues-raw :type xcb:-ignore)
+   (axisvalues-raw~ :initform
+                   '(name axisvalues-raw type xcb:xinput:FP3232 size
+                          (apply '+
+                                 (mapcar
+                                  (lambda
+                                    (i)
+                                    (eval
+                                     '(xcb:-popcount obj)
+                                     (list
+                                      (nconc
+                                       '(obj)
+                                       i))))
+                                  (slot-value obj 'valuator-mask))))
+                   :type xcb:-list)))
+
+(defclass xcb:xinput:RawKeyRelease
+  (xcb:-event xcb:xinput:RawKeyPress)
+  nil)
+
+(defclass xcb:xinput:RawButtonPress
+  (xcb:-event)
+  ((extension :type xcb:CARD8)
+   (length :type xcb:CARD32)
+   (evtype :type xcb:CARD16)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (detail :initarg :detail :type xcb:CARD32)
+   (sourceid :initarg :sourceid :type xcb:xinput:DeviceId)
+   (valuators-len :initarg :valuators-len :type xcb:CARD16)
+   (flags :initarg :flags :type xcb:CARD32)
+   (pad~0 :initform 4 :type xcb:-pad)
+   (valuator-mask :initarg :valuator-mask :type xcb:-ignore)
+   (valuator-mask~ :initform
+                  '(name valuator-mask type xcb:CARD32 size
+                         (xcb:-fieldref 'valuators-len))
+                  :type xcb:-list)
+   (axisvalues :initarg :axisvalues :type xcb:-ignore)
+   (axisvalues~ :initform
+               '(name axisvalues type xcb:xinput:FP3232 size
+                      (apply '+
+                             (mapcar
+                              (lambda
+                                (i)
+                                (eval
+                                 '(xcb:-popcount obj)
+                                 (list
+                                  (nconc
+                                   '(obj)
+                                   i))))
+                              (slot-value obj 'valuator-mask))))
+               :type xcb:-list)
+   (axisvalues-raw :initarg :axisvalues-raw :type xcb:-ignore)
+   (axisvalues-raw~ :initform
+                   '(name axisvalues-raw type xcb:xinput:FP3232 size
+                          (apply '+
+                                 (mapcar
+                                  (lambda
+                                    (i)
+                                    (eval
+                                     '(xcb:-popcount obj)
+                                     (list
+                                      (nconc
+                                       '(obj)
+                                       i))))
+                                  (slot-value obj 'valuator-mask))))
+                   :type xcb:-list)))
+
+(defclass xcb:xinput:RawButtonRelease
+  (xcb:-event xcb:xinput:RawButtonPress)
+  nil)
+
+(defclass xcb:xinput:RawMotion
+  (xcb:-event xcb:xinput:RawButtonPress)
+  nil)
+
+(defconst xcb:xinput:TouchEventFlags:TouchPendingEnd 65536)
+(defconst xcb:xinput:TouchEventFlags:TouchEmulatingPointer 131072)
+
+(defclass xcb:xinput:TouchBegin
+  (xcb:-event)
+  ((extension :type xcb:CARD8)
+   (length :type xcb:CARD32)
+   (evtype :type xcb:CARD16)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (detail :initarg :detail :type xcb:CARD32)
+   (root :initarg :root :type xcb:WINDOW)
+   (event :initarg :event :type xcb:WINDOW)
+   (child :initarg :child :type xcb:WINDOW)
+   (root-x :initarg :root-x :type xcb:xinput:FP1616)
+   (root-y :initarg :root-y :type xcb:xinput:FP1616)
+   (event-x :initarg :event-x :type xcb:xinput:FP1616)
+   (event-y :initarg :event-y :type xcb:xinput:FP1616)
+   (buttons-len :initarg :buttons-len :type xcb:CARD16)
+   (valuators-len :initarg :valuators-len :type xcb:CARD16)
+   (sourceid :initarg :sourceid :type xcb:xinput:DeviceId)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (flags :initarg :flags :type xcb:CARD32)
+   (mods :initarg :mods :type xcb:xinput:ModifierInfo)
+   (group :initarg :group :type xcb:xinput:GroupInfo)
+   (button-mask :initarg :button-mask :type xcb:-ignore)
+   (button-mask~ :initform
+                '(name button-mask type xcb:CARD32 size
+                       (xcb:-fieldref 'buttons-len))
+                :type xcb:-list)
+   (valuator-mask :initarg :valuator-mask :type xcb:-ignore)
+   (valuator-mask~ :initform
+                  '(name valuator-mask type xcb:CARD32 size
+                         (xcb:-fieldref 'valuators-len))
+                  :type xcb:-list)
+   (axisvalues :initarg :axisvalues :type xcb:-ignore)
+   (axisvalues~ :initform
+               '(name axisvalues type xcb:xinput:FP3232 size
+                      (apply '+
+                             (mapcar
+                              (lambda
+                                (i)
+                                (eval
+                                 '(xcb:-popcount obj)
+                                 (list
+                                  (nconc
+                                   '(obj)
+                                   i))))
+                              (slot-value obj 'valuator-mask))))
+               :type xcb:-list)))
+
+(defclass xcb:xinput:TouchUpdate
+  (xcb:-event xcb:xinput:TouchBegin)
+  nil)
+
+(defclass xcb:xinput:TouchEnd
+  (xcb:-event xcb:xinput:TouchBegin)
+  nil)
+
+(defconst xcb:xinput:TouchOwnershipFlags:None 0)
+
+(defclass xcb:xinput:TouchOwnership
+  (xcb:-event)
+  ((extension :type xcb:CARD8)
+   (length :type xcb:CARD32)
+   (evtype :type xcb:CARD16)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (touchid :initarg :touchid :type xcb:CARD32)
+   (root :initarg :root :type xcb:WINDOW)
+   (event :initarg :event :type xcb:WINDOW)
+   (child :initarg :child :type xcb:WINDOW)
+   (sourceid :initarg :sourceid :type xcb:xinput:DeviceId)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (flags :initarg :flags :type xcb:CARD32)
+   (pad~1 :initform 8 :type xcb:-pad)))
+
+(defclass xcb:xinput:RawTouchBegin
+  (xcb:-event)
+  ((extension :type xcb:CARD8)
+   (length :type xcb:CARD32)
+   (evtype :type xcb:CARD16)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (detail :initarg :detail :type xcb:CARD32)
+   (sourceid :initarg :sourceid :type xcb:xinput:DeviceId)
+   (valuators-len :initarg :valuators-len :type xcb:CARD16)
+   (flags :initarg :flags :type xcb:CARD32)
+   (pad~0 :initform 4 :type xcb:-pad)
+   (valuator-mask :initarg :valuator-mask :type xcb:-ignore)
+   (valuator-mask~ :initform
+                  '(name valuator-mask type xcb:CARD32 size
+                         (xcb:-fieldref 'valuators-len))
+                  :type xcb:-list)
+   (axisvalues :initarg :axisvalues :type xcb:-ignore)
+   (axisvalues~ :initform
+               '(name axisvalues type xcb:xinput:FP3232 size
+                      (apply '+
+                             (mapcar
+                              (lambda
+                                (i)
+                                (eval
+                                 '(xcb:-popcount obj)
+                                 (list
+                                  (nconc
+                                   '(obj)
+                                   i))))
+                              (slot-value obj 'valuator-mask))))
+               :type xcb:-list)
+   (axisvalues-raw :initarg :axisvalues-raw :type xcb:-ignore)
+   (axisvalues-raw~ :initform
+                   '(name axisvalues-raw type xcb:xinput:FP3232 size
+                          (apply '+
+                                 (mapcar
+                                  (lambda
+                                    (i)
+                                    (eval
+                                     '(xcb:-popcount obj)
+                                     (list
+                                      (nconc
+                                       '(obj)
+                                       i))))
+                                  (slot-value obj 'valuator-mask))))
+                   :type xcb:-list)))
+
+(defclass xcb:xinput:RawTouchUpdate
+  (xcb:-event xcb:xinput:RawTouchBegin)
+  nil)
+
+(defclass xcb:xinput:RawTouchEnd
+  (xcb:-event xcb:xinput:RawTouchBegin)
+  nil)
+
+(defconst xcb:xinput:BarrierFlags:PointerReleased 1)
+(defconst xcb:xinput:BarrierFlags:DeviceIsGrabbed 2)
+
+(defclass xcb:xinput:BarrierHit
+  (xcb:-event)
+  ((extension :type xcb:CARD8)
+   (length :type xcb:CARD32)
+   (evtype :type xcb:CARD16)
+   (deviceid :initarg :deviceid :type xcb:xinput:DeviceId)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (eventid :initarg :eventid :type xcb:CARD32)
+   (root :initarg :root :type xcb:WINDOW)
+   (event :initarg :event :type xcb:WINDOW)
+   (barrier :initarg :barrier :type xcb:xinput:BARRIER)
+   (dtime :initarg :dtime :type xcb:CARD32)
+   (flags :initarg :flags :type xcb:CARD32)
+   (sourceid :initarg :sourceid :type xcb:xinput:DeviceId)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (root-x :initarg :root-x :type xcb:xinput:FP1616)
+   (root-y :initarg :root-y :type xcb:xinput:FP1616)
+   (dx :initarg :dx :type xcb:xinput:FP3232)
+   (dy :initarg :dy :type xcb:xinput:FP3232)))
+
+(defclass xcb:xinput:BarrierLeave
+  (xcb:-event xcb:xinput:BarrierHit)
+  nil)
+
+(defclass xcb:xinput:Device
+  (xcb:-error)
+  nil)
+
+(defclass xcb:xinput:Event
+  (xcb:-error)
+  nil)
+
+(defclass xcb:xinput:Mode
+  (xcb:-error)
+  nil)
+
+(defclass xcb:xinput:DeviceBusy
+  (xcb:-error)
+  nil)
+
+(defclass xcb:xinput:Class
+  (xcb:-error)
+  nil)
+
+(defconst xcb:xinput:error-number-class-alist
+  '((0 . xcb:xinput:Device)
+    (1 . xcb:xinput:Event)
+    (2 . xcb:xinput:Mode)
+    (3 . xcb:xinput:DeviceBusy)
+    (4 . xcb:xinput:Class))
+  "(error-number . error-class) alist")
+
+(defconst xcb:xinput:event-number-class-alist
+  '((0 . xcb:xinput:DeviceValuator)
+    (1 . xcb:xinput:DeviceKeyPress)
+    (2 . xcb:xinput:DeviceKeyRelease)
+    (3 . xcb:xinput:DeviceButtonPress)
+    (4 . xcb:xinput:DeviceButtonRelease)
+    (5 . xcb:xinput:DeviceMotionNotify)
+    (6 . xcb:xinput:DeviceFocusIn)
+    (7 . xcb:xinput:DeviceFocusOut)
+    (8 . xcb:xinput:ProximityIn)
+    (9 . xcb:xinput:ProximityOut)
+    (10 . xcb:xinput:DeviceStateNotify)
+    (11 . xcb:xinput:DeviceMappingNotify)
+    (12 . xcb:xinput:ChangeDeviceNotify)
+    (13 . xcb:xinput:DeviceKeyStateNotify)
+    (14 . xcb:xinput:DeviceButtonStateNotify)
+    (15 . xcb:xinput:DevicePresenceNotify)
+    (16 . xcb:xinput:DevicePropertyNotify)
+    (1 . xcb:xinput:DeviceChanged)
+    (2 . xcb:xinput:KeyPress)
+    (3 . xcb:xinput:KeyRelease)
+    (4 . xcb:xinput:ButtonPress)
+    (5 . xcb:xinput:ButtonRelease)
+    (6 . xcb:xinput:Motion)
+    (7 . xcb:xinput:Enter)
+    (8 . xcb:xinput:Leave)
+    (9 . xcb:xinput:FocusIn)
+    (10 . xcb:xinput:FocusOut)
+    (11 . xcb:xinput:Hierarchy)
+    (12 . xcb:xinput:Property)
+    (13 . xcb:xinput:RawKeyPress)
+    (14 . xcb:xinput:RawKeyRelease)
+    (15 . xcb:xinput:RawButtonPress)
+    (16 . xcb:xinput:RawButtonRelease)
+    (17 . xcb:xinput:RawMotion)
+    (18 . xcb:xinput:TouchBegin)
+    (19 . xcb:xinput:TouchUpdate)
+    (20 . xcb:xinput:TouchEnd)
+    (21 . xcb:xinput:TouchOwnership)
+    (22 . xcb:xinput:RawTouchBegin)
+    (23 . xcb:xinput:RawTouchUpdate)
+    (24 . xcb:xinput:RawTouchEnd)
+    (25 . xcb:xinput:BarrierHit)
+    (26 . xcb:xinput:BarrierLeave))
+  "(event-number . event-class) alist")
+
+
+
+(provide 'xcb-xinput)
diff --git a/xcb-xkb.el b/xcb-xkb.el
new file mode 100644
index 0000000..71583ef
--- /dev/null
+++ b/xcb-xkb.el
@@ -0,0 +1,2246 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `xkb.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:xkb:-extension-xname "XKEYBOARD")
+(defconst xcb:xkb:-extension-name "xkb")
+(defconst xcb:xkb:-major-version 1)
+(defconst xcb:xkb:-minor-version 0)
+
+(require 'xcb-xproto)
+
+(defconst xcb:xkb:Const:MaxLegalKeyCode 255)
+(defconst xcb:xkb:Const:PerKeyBitArraySize 32)
+(defconst xcb:xkb:Const:KeyNameLength 4)
+
+(defconst xcb:xkb:EventType:NewKeyboardNotify 1)
+(defconst xcb:xkb:EventType:MapNotify 2)
+(defconst xcb:xkb:EventType:StateNotify 4)
+(defconst xcb:xkb:EventType:ControlsNotify 8)
+(defconst xcb:xkb:EventType:IndicatorStateNotify 16)
+(defconst xcb:xkb:EventType:IndicatorMapNotify 32)
+(defconst xcb:xkb:EventType:NamesNotify 64)
+(defconst xcb:xkb:EventType:CompatMapNotify 128)
+(defconst xcb:xkb:EventType:BellNotify 256)
+(defconst xcb:xkb:EventType:ActionMessage 512)
+(defconst xcb:xkb:EventType:AccessXNotify 1024)
+(defconst xcb:xkb:EventType:ExtensionDeviceNotify 2048)
+
+(defconst xcb:xkb:NKNDetail:Keycodes 1)
+(defconst xcb:xkb:NKNDetail:Geometry 2)
+(defconst xcb:xkb:NKNDetail:DeviceID 4)
+
+(defconst xcb:xkb:AXNDetail:SKPress 1)
+(defconst xcb:xkb:AXNDetail:SKAccept 2)
+(defconst xcb:xkb:AXNDetail:SKReject 4)
+(defconst xcb:xkb:AXNDetail:SKRelease 8)
+(defconst xcb:xkb:AXNDetail:BKAccept 16)
+(defconst xcb:xkb:AXNDetail:BKReject 32)
+(defconst xcb:xkb:AXNDetail:AXKWarning 64)
+
+(defconst xcb:xkb:MapPart:KeyTypes 1)
+(defconst xcb:xkb:MapPart:KeySyms 2)
+(defconst xcb:xkb:MapPart:ModifierMap 4)
+(defconst xcb:xkb:MapPart:ExplicitComponents 8)
+(defconst xcb:xkb:MapPart:KeyActions 16)
+(defconst xcb:xkb:MapPart:KeyBehaviors 32)
+(defconst xcb:xkb:MapPart:VirtualMods 64)
+(defconst xcb:xkb:MapPart:VirtualModMap 128)
+
+(defconst xcb:xkb:SetMapFlags:ResizeTypes 1)
+(defconst xcb:xkb:SetMapFlags:RecomputeActions 2)
+
+(defconst xcb:xkb:StatePart:ModifierState 1)
+(defconst xcb:xkb:StatePart:ModifierBase 2)
+(defconst xcb:xkb:StatePart:ModifierLatch 4)
+(defconst xcb:xkb:StatePart:ModifierLock 8)
+(defconst xcb:xkb:StatePart:GroupState 16)
+(defconst xcb:xkb:StatePart:GroupBase 32)
+(defconst xcb:xkb:StatePart:GroupLatch 64)
+(defconst xcb:xkb:StatePart:GroupLock 128)
+(defconst xcb:xkb:StatePart:CompatState 256)
+(defconst xcb:xkb:StatePart:GrabMods 512)
+(defconst xcb:xkb:StatePart:CompatGrabMods 1024)
+(defconst xcb:xkb:StatePart:LookupMods 2048)
+(defconst xcb:xkb:StatePart:CompatLookupMods 4096)
+(defconst xcb:xkb:StatePart:PointerButtons 8192)
+
+(defconst xcb:xkb:BoolCtrl:RepeatKeys 1)
+(defconst xcb:xkb:BoolCtrl:SlowKeys 2)
+(defconst xcb:xkb:BoolCtrl:BounceKeys 4)
+(defconst xcb:xkb:BoolCtrl:StickyKeys 8)
+(defconst xcb:xkb:BoolCtrl:MouseKeys 16)
+(defconst xcb:xkb:BoolCtrl:MouseKeysAccel 32)
+(defconst xcb:xkb:BoolCtrl:AccessXKeys 64)
+(defconst xcb:xkb:BoolCtrl:AccessXTimeoutMask 128)
+(defconst xcb:xkb:BoolCtrl:AccessXFeedbackMask 256)
+(defconst xcb:xkb:BoolCtrl:AudibleBellMask 512)
+(defconst xcb:xkb:BoolCtrl:Overlay1Mask 1024)
+(defconst xcb:xkb:BoolCtrl:Overlay2Mask 2048)
+(defconst xcb:xkb:BoolCtrl:IgnoreGroupLockMask 4096)
+
+(defconst xcb:xkb:Control:GroupsWrap 134217728)
+(defconst xcb:xkb:Control:InternalMods 268435456)
+(defconst xcb:xkb:Control:IgnoreLockMods 536870912)
+(defconst xcb:xkb:Control:PerKeyRepeat 1073741824)
+(defconst xcb:xkb:Control:ControlsEnabled 2147483648)
+
+(defconst xcb:xkb:AXOption:SKPressFB 1)
+(defconst xcb:xkb:AXOption:SKAcceptFB 2)
+(defconst xcb:xkb:AXOption:FeatureFB 4)
+(defconst xcb:xkb:AXOption:SlowWarnFB 8)
+(defconst xcb:xkb:AXOption:IndicatorFB 16)
+(defconst xcb:xkb:AXOption:StickyKeysFB 32)
+(defconst xcb:xkb:AXOption:TwoKeys 64)
+(defconst xcb:xkb:AXOption:LatchToLock 128)
+(defconst xcb:xkb:AXOption:SKReleaseFB 256)
+(defconst xcb:xkb:AXOption:SKRejectFB 512)
+(defconst xcb:xkb:AXOption:BKRejectFB 1024)
+(defconst xcb:xkb:AXOption:DumbBell 2048)
+
+(xcb:deftypealias 'xcb:xkb:DeviceSpec 'xcb:CARD16)
+
+(defconst xcb:xkb:LedClassResult:KbdFeedbackClass 0)
+(defconst xcb:xkb:LedClassResult:LedFeedbackClass 4)
+
+(defconst xcb:xkb:LedClass:KbdFeedbackClass 0)
+(defconst xcb:xkb:LedClass:LedFeedbackClass 4)
+(defconst xcb:xkb:LedClass:DfltXIClass 768)
+(defconst xcb:xkb:LedClass:AllXIClasses 1280)
+
+(xcb:deftypealias 'xcb:xkb:LedClassSpec 'xcb:CARD16)
+
+(defconst xcb:xkb:BellClassResult:KbdFeedbackClass 0)
+(defconst xcb:xkb:BellClassResult:BellFeedbackClass 5)
+
+(defconst xcb:xkb:BellClass:KbdFeedbackClass 0)
+(defconst xcb:xkb:BellClass:BellFeedbackClass 5)
+(defconst xcb:xkb:BellClass:DfltXIClass 768)
+
+(xcb:deftypealias 'xcb:xkb:BellClassSpec 'xcb:CARD16)
+
+(defconst xcb:xkb:ID:UseCoreKbd 256)
+(defconst xcb:xkb:ID:UseCorePtr 512)
+(defconst xcb:xkb:ID:DfltXIClass 768)
+(defconst xcb:xkb:ID:DfltXIId 1024)
+(defconst xcb:xkb:ID:AllXIClass 1280)
+(defconst xcb:xkb:ID:AllXIId 1536)
+(defconst xcb:xkb:ID:XINone 65280)
+
+(xcb:deftypealias 'xcb:xkb:IDSpec 'xcb:CARD16)
+
+(defconst xcb:xkb:Group:1 0)
+(defconst xcb:xkb:Group:2 1)
+(defconst xcb:xkb:Group:3 2)
+(defconst xcb:xkb:Group:4 3)
+
+(defconst xcb:xkb:Groups:Any 254)
+(defconst xcb:xkb:Groups:All 255)
+
+(defconst xcb:xkb:SetOfGroup:Group1 1)
+(defconst xcb:xkb:SetOfGroup:Group2 2)
+(defconst xcb:xkb:SetOfGroup:Group3 4)
+(defconst xcb:xkb:SetOfGroup:Group4 8)
+
+(defconst xcb:xkb:SetOfGroups:Any 128)
+
+(defconst xcb:xkb:GroupsWrap:WrapIntoRange 0)
+(defconst xcb:xkb:GroupsWrap:ClampIntoRange 64)
+(defconst xcb:xkb:GroupsWrap:RedirectIntoRange 128)
+
+(defconst xcb:xkb:VModsHigh:15 128)
+(defconst xcb:xkb:VModsHigh:14 64)
+(defconst xcb:xkb:VModsHigh:13 32)
+(defconst xcb:xkb:VModsHigh:12 16)
+(defconst xcb:xkb:VModsHigh:11 8)
+(defconst xcb:xkb:VModsHigh:10 4)
+(defconst xcb:xkb:VModsHigh:9 2)
+(defconst xcb:xkb:VModsHigh:8 1)
+
+(defconst xcb:xkb:VModsLow:7 128)
+(defconst xcb:xkb:VModsLow:6 64)
+(defconst xcb:xkb:VModsLow:5 32)
+(defconst xcb:xkb:VModsLow:4 16)
+(defconst xcb:xkb:VModsLow:3 8)
+(defconst xcb:xkb:VModsLow:2 4)
+(defconst xcb:xkb:VModsLow:1 2)
+(defconst xcb:xkb:VModsLow:0 1)
+
+(defconst xcb:xkb:VMod:15 32768)
+(defconst xcb:xkb:VMod:14 16384)
+(defconst xcb:xkb:VMod:13 8192)
+(defconst xcb:xkb:VMod:12 4096)
+(defconst xcb:xkb:VMod:11 2048)
+(defconst xcb:xkb:VMod:10 1024)
+(defconst xcb:xkb:VMod:9 512)
+(defconst xcb:xkb:VMod:8 256)
+(defconst xcb:xkb:VMod:7 128)
+(defconst xcb:xkb:VMod:6 64)
+(defconst xcb:xkb:VMod:5 32)
+(defconst xcb:xkb:VMod:4 16)
+(defconst xcb:xkb:VMod:3 8)
+(defconst xcb:xkb:VMod:2 4)
+(defconst xcb:xkb:VMod:1 2)
+(defconst xcb:xkb:VMod:0 1)
+
+(defconst xcb:xkb:Explicit:VModMap 128)
+(defconst xcb:xkb:Explicit:Behavior 64)
+(defconst xcb:xkb:Explicit:AutoRepeat 32)
+(defconst xcb:xkb:Explicit:Interpret 16)
+(defconst xcb:xkb:Explicit:KeyType4 8)
+(defconst xcb:xkb:Explicit:KeyType3 4)
+(defconst xcb:xkb:Explicit:KeyType2 2)
+(defconst xcb:xkb:Explicit:KeyType1 1)
+
+(defconst xcb:xkb:SymInterpretMatch:NoneOf 0)
+(defconst xcb:xkb:SymInterpretMatch:AnyOfOrNone 1)
+(defconst xcb:xkb:SymInterpretMatch:AnyOf 2)
+(defconst xcb:xkb:SymInterpretMatch:AllOf 3)
+(defconst xcb:xkb:SymInterpretMatch:Exactly 4)
+
+(defconst xcb:xkb:SymInterpMatch:LevelOneOnly 128)
+(defconst xcb:xkb:SymInterpMatch:OpMask 127)
+
+(defconst xcb:xkb:IMFlag:NoExplicit 128)
+(defconst xcb:xkb:IMFlag:NoAutomatic 64)
+(defconst xcb:xkb:IMFlag:LEDDrivesKB 32)
+
+(defconst xcb:xkb:IMModsWhich:UseCompat 16)
+(defconst xcb:xkb:IMModsWhich:UseEffective 8)
+(defconst xcb:xkb:IMModsWhich:UseLocked 4)
+(defconst xcb:xkb:IMModsWhich:UseLatched 2)
+(defconst xcb:xkb:IMModsWhich:UseBase 1)
+
+(defconst xcb:xkb:IMGroupsWhich:UseCompat 16)
+(defconst xcb:xkb:IMGroupsWhich:UseEffective 8)
+(defconst xcb:xkb:IMGroupsWhich:UseLocked 4)
+(defconst xcb:xkb:IMGroupsWhich:UseLatched 2)
+(defconst xcb:xkb:IMGroupsWhich:UseBase 1)
+
+(defclass xcb:xkb:IndicatorMap
+  (xcb:-struct)
+  ((flags :initarg :flags :type xcb:CARD8)
+   (whichGroups :initarg :whichGroups :type xcb:CARD8)
+   (groups :initarg :groups :type xcb:CARD8)
+   (whichMods :initarg :whichMods :type xcb:CARD8)
+   (mods :initarg :mods :type xcb:CARD8)
+   (realMods :initarg :realMods :type xcb:CARD8)
+   (vmods :initarg :vmods :type xcb:CARD16)
+   (ctrls :initarg :ctrls :type xcb:CARD32)))
+
+(defconst xcb:xkb:CMDetail:SymInterp 1)
+(defconst xcb:xkb:CMDetail:GroupCompat 2)
+
+(defconst xcb:xkb:NameDetail:Keycodes 1)
+(defconst xcb:xkb:NameDetail:Geometry 2)
+(defconst xcb:xkb:NameDetail:Symbols 4)
+(defconst xcb:xkb:NameDetail:PhysSymbols 8)
+(defconst xcb:xkb:NameDetail:Types 16)
+(defconst xcb:xkb:NameDetail:Compat 32)
+(defconst xcb:xkb:NameDetail:KeyTypeNames 64)
+(defconst xcb:xkb:NameDetail:KTLevelNames 128)
+(defconst xcb:xkb:NameDetail:IndicatorNames 256)
+(defconst xcb:xkb:NameDetail:KeyNames 512)
+(defconst xcb:xkb:NameDetail:KeyAliases 1024)
+(defconst xcb:xkb:NameDetail:VirtualModNames 2048)
+(defconst xcb:xkb:NameDetail:GroupNames 4096)
+(defconst xcb:xkb:NameDetail:RGNames 8192)
+
+(defconst xcb:xkb:GBNDetail:Types 1)
+(defconst xcb:xkb:GBNDetail:CompatMap 2)
+(defconst xcb:xkb:GBNDetail:ClientSymbols 4)
+(defconst xcb:xkb:GBNDetail:ServerSymbols 8)
+(defconst xcb:xkb:GBNDetail:IndicatorMaps 16)
+(defconst xcb:xkb:GBNDetail:KeyNames 32)
+(defconst xcb:xkb:GBNDetail:Geometry 64)
+(defconst xcb:xkb:GBNDetail:OtherNames 128)
+
+(defconst xcb:xkb:XIFeature:Keyboards 1)
+(defconst xcb:xkb:XIFeature:ButtonActions 2)
+(defconst xcb:xkb:XIFeature:IndicatorNames 4)
+(defconst xcb:xkb:XIFeature:IndicatorMaps 8)
+(defconst xcb:xkb:XIFeature:IndicatorState 16)
+
+(defconst xcb:xkb:PerClientFlag:DetectableAutoRepeat 1)
+(defconst xcb:xkb:PerClientFlag:GrabsUseXKBState 2)
+(defconst xcb:xkb:PerClientFlag:AutoResetControls 4)
+(defconst xcb:xkb:PerClientFlag:LookupStateWhenGrabbed 8)
+(defconst xcb:xkb:PerClientFlag:SendEventUsesXKBState 16)
+
+(defclass xcb:xkb:ModDef
+  (xcb:-struct)
+  ((mask :initarg :mask :type xcb:CARD8)
+   (realMods :initarg :realMods :type xcb:CARD8)
+   (vmods :initarg :vmods :type xcb:CARD16)))
+
+(defclass xcb:xkb:KeyName
+  (xcb:-struct)
+  ((name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:char size 4)
+         :type xcb:-list)))
+
+(defclass xcb:xkb:KeyAlias
+  (xcb:-struct)
+  ((real :initarg :real :type xcb:-ignore)
+   (real~ :initform
+         '(name real type xcb:char size 4)
+         :type xcb:-list)
+   (alias :initarg :alias :type xcb:-ignore)
+   (alias~ :initform
+          '(name alias type xcb:char size 4)
+          :type xcb:-list)))
+
+(defclass xcb:xkb:CountedString16
+  (xcb:-struct)
+  ((length :initarg :length :type xcb:CARD16)
+   (string :initarg :string :type xcb:-ignore)
+   (string~ :initform
+           '(name string type xcb:char size
+                  (xcb:-fieldref 'length))
+           :type xcb:-list)
+   (alignment-pad :initarg :alignment-pad :type xcb:-ignore)
+   (alignment-pad~ :initform
+                  '(name alignment-pad type xcb:void size
+                         (-
+                          (logand
+                           (+
+                            (xcb:-fieldref 'length)
+                            5)
+                           (lognot
+                            (parse-expression
+                             (node-subnode node))))
+                          (+
+                           (xcb:-fieldref 'length)
+                           2)))
+                  :type xcb:-list)))
+
+(defclass xcb:xkb:KTMapEntry
+  (xcb:-struct)
+  ((active :initarg :active :type xcb:BOOL)
+   (mods-mask :initarg :mods-mask :type xcb:CARD8)
+   (level :initarg :level :type xcb:CARD8)
+   (mods-mods :initarg :mods-mods :type xcb:CARD8)
+   (mods-vmods :initarg :mods-vmods :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)))
+
+(defclass xcb:xkb:KeyType
+  (xcb:-struct)
+  ((mods-mask :initarg :mods-mask :type xcb:CARD8)
+   (mods-mods :initarg :mods-mods :type xcb:CARD8)
+   (mods-vmods :initarg :mods-vmods :type xcb:CARD16)
+   (numLevels :initarg :numLevels :type xcb:CARD8)
+   (nMapEntries :initarg :nMapEntries :type xcb:CARD8)
+   (hasPreserve :initarg :hasPreserve :type xcb:BOOL)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (map :initarg :map :type xcb:-ignore)
+   (map~ :initform
+        '(name map type xcb:xkb:KTMapEntry size
+               (xcb:-fieldref 'nMapEntries))
+        :type xcb:-list)
+   (preserve :initarg :preserve :type xcb:-ignore)
+   (preserve~ :initform
+             '(name preserve type xcb:xkb:ModDef size
+                    (*
+                     (xcb:-fieldref 'hasPreserve)
+                     (xcb:-fieldref 'nMapEntries)))
+             :type xcb:-list)))
+
+(defclass xcb:xkb:KeySymMap
+  (xcb:-struct)
+  ((kt-index :initarg :kt-index :type xcb:-ignore)
+   (kt-index~ :initform
+             '(name kt-index type xcb:CARD8 size 4)
+             :type xcb:-list)
+   (groupInfo :initarg :groupInfo :type xcb:CARD8)
+   (width :initarg :width :type xcb:CARD8)
+   (nSyms :initarg :nSyms :type xcb:CARD16)
+   (syms :initarg :syms :type xcb:-ignore)
+   (syms~ :initform
+         '(name syms type xcb:KEYSYM size
+                (xcb:-fieldref 'nSyms))
+         :type xcb:-list)))
+
+(defclass xcb:xkb:CommonBehavior
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD8)
+   (data :initarg :data :type xcb:CARD8)))
+
+(defclass xcb:xkb:DefaultBehavior
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)))
+
+(xcb:deftypealias 'xcb:xkb:LockBehavior 'xcb:xkb:DefaultBehavior)
+
+(defclass xcb:xkb:RadioGroupBehavior
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD8)
+   (group :initarg :group :type xcb:CARD8)))
+
+(defclass xcb:xkb:OverlayBehavior
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD8)
+   (key :initarg :key :type xcb:KEYCODE)))
+
+(xcb:deftypealias 'xcb:xkb:PermamentLockBehavior 'xcb:xkb:LockBehavior)
+
+(xcb:deftypealias 'xcb:xkb:PermamentRadioGroupBehavior 
'xcb:xkb:RadioGroupBehavior)
+
+(xcb:deftypealias 'xcb:xkb:PermamentOverlayBehavior 'xcb:xkb:OverlayBehavior)
+
+(defclass xcb:xkb:Behavior
+  (xcb:-union)
+  ((common :initarg :common :type xcb:xkb:CommonBehavior)
+   (default :initarg :default :type xcb:xkb:DefaultBehavior)
+   (lock :initarg :lock :type xcb:xkb:LockBehavior)
+   (radioGroup :initarg :radioGroup :type xcb:xkb:RadioGroupBehavior)
+   (overlay1 :initarg :overlay1 :type xcb:xkb:OverlayBehavior)
+   (overlay2 :initarg :overlay2 :type xcb:xkb:OverlayBehavior)
+   (permamentLock :initarg :permamentLock :type xcb:xkb:PermamentLockBehavior)
+   (permamentRadioGroup :initarg :permamentRadioGroup :type 
xcb:xkb:PermamentRadioGroupBehavior)
+   (permamentOverlay1 :initarg :permamentOverlay1 :type 
xcb:xkb:PermamentOverlayBehavior)
+   (permamentOverlay2 :initarg :permamentOverlay2 :type 
xcb:xkb:PermamentOverlayBehavior)
+   (type :initarg :type :type xcb:CARD8)))
+
+(defconst xcb:xkb:BehaviorType:Default 0)
+(defconst xcb:xkb:BehaviorType:Lock 1)
+(defconst xcb:xkb:BehaviorType:RadioGroup 2)
+(defconst xcb:xkb:BehaviorType:Overlay1 3)
+(defconst xcb:xkb:BehaviorType:Overlay2 4)
+(defconst xcb:xkb:BehaviorType:PermamentLock 129)
+(defconst xcb:xkb:BehaviorType:PermamentRadioGroup 130)
+(defconst xcb:xkb:BehaviorType:PermamentOverlay1 131)
+(defconst xcb:xkb:BehaviorType:PermamentOverlay2 132)
+
+(defclass xcb:xkb:SetBehavior
+  (xcb:-struct)
+  ((keycode :initarg :keycode :type xcb:KEYCODE)
+   (behavior :initarg :behavior :type xcb:xkb:Behavior)
+   (pad~0 :initform 1 :type xcb:-pad)))
+
+(defclass xcb:xkb:SetExplicit
+  (xcb:-struct)
+  ((keycode :initarg :keycode :type xcb:KEYCODE)
+   (explicit :initarg :explicit :type xcb:CARD8)))
+
+(defclass xcb:xkb:KeyModMap
+  (xcb:-struct)
+  ((keycode :initarg :keycode :type xcb:KEYCODE)
+   (mods :initarg :mods :type xcb:CARD8)))
+
+(defclass xcb:xkb:KeyVModMap
+  (xcb:-struct)
+  ((keycode :initarg :keycode :type xcb:KEYCODE)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (vmods :initarg :vmods :type xcb:CARD16)))
+
+(defclass xcb:xkb:KTSetMapEntry
+  (xcb:-struct)
+  ((level :initarg :level :type xcb:CARD8)
+   (realMods :initarg :realMods :type xcb:CARD8)
+   (virtualMods :initarg :virtualMods :type xcb:CARD16)))
+
+(defclass xcb:xkb:SetKeyType
+  (xcb:-struct)
+  ((mask :initarg :mask :type xcb:CARD8)
+   (realMods :initarg :realMods :type xcb:CARD8)
+   (virtualMods :initarg :virtualMods :type xcb:CARD16)
+   (numLevels :initarg :numLevels :type xcb:CARD8)
+   (nMapEntries :initarg :nMapEntries :type xcb:CARD8)
+   (preserve :initarg :preserve :type xcb:BOOL)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (entries :initarg :entries :type xcb:-ignore)
+   (entries~ :initform
+            '(name entries type xcb:xkb:KTSetMapEntry size
+                   (xcb:-fieldref 'nMapEntries))
+            :type xcb:-list)
+   (preserve-entries :initarg :preserve-entries :type xcb:-ignore)
+   (preserve-entries~ :initform
+                     '(name preserve-entries type xcb:xkb:KTSetMapEntry size
+                            (*
+                             (xcb:-fieldref 'preserve)
+                             (xcb:-fieldref 'nMapEntries)))
+                     :type xcb:-list)))
+
+(xcb:deftypealias 'xcb:xkb:STRING8 'xcb:char)
+
+(defclass xcb:xkb:Outline
+  (xcb:-struct)
+  ((nPoints :initarg :nPoints :type xcb:CARD8)
+   (cornerRadius :initarg :cornerRadius :type xcb:CARD8)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (points :initarg :points :type xcb:-ignore)
+   (points~ :initform
+           '(name points type xcb:POINT size
+                  (xcb:-fieldref 'nPoints))
+           :type xcb:-list)))
+
+(defclass xcb:xkb:Shape
+  (xcb:-struct)
+  ((name :initarg :name :type xcb:ATOM)
+   (nOutlines :initarg :nOutlines :type xcb:CARD8)
+   (primaryNdx :initarg :primaryNdx :type xcb:CARD8)
+   (approxNdx :initarg :approxNdx :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (outlines :initarg :outlines :type xcb:-ignore)
+   (outlines~ :initform
+             '(name outlines type xcb:xkb:Outline size
+                    (xcb:-fieldref 'nOutlines))
+             :type xcb:-list)))
+
+(defclass xcb:xkb:Key
+  (xcb:-struct)
+  ((name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:xkb:STRING8 size 4)
+         :type xcb:-list)
+   (gap :initarg :gap :type xcb:INT16)
+   (shapeNdx :initarg :shapeNdx :type xcb:CARD8)
+   (colorNdx :initarg :colorNdx :type xcb:CARD8)))
+
+(defclass xcb:xkb:OverlayKey
+  (xcb:-struct)
+  ((over :initarg :over :type xcb:-ignore)
+   (over~ :initform
+         '(name over type xcb:xkb:STRING8 size 4)
+         :type xcb:-list)
+   (under :initarg :under :type xcb:-ignore)
+   (under~ :initform
+          '(name under type xcb:xkb:STRING8 size 4)
+          :type xcb:-list)))
+
+(defclass xcb:xkb:OverlayRow
+  (xcb:-struct)
+  ((rowUnder :initarg :rowUnder :type xcb:CARD8)
+   (nKeys :initarg :nKeys :type xcb:CARD8)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (keys :initarg :keys :type xcb:-ignore)
+   (keys~ :initform
+         '(name keys type xcb:xkb:OverlayKey size
+                (xcb:-fieldref 'nKeys))
+         :type xcb:-list)))
+
+(defclass xcb:xkb:Overlay
+  (xcb:-struct)
+  ((name :initarg :name :type xcb:ATOM)
+   (nRows :initarg :nRows :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (rows :initarg :rows :type xcb:-ignore)
+   (rows~ :initform
+         '(name rows type xcb:xkb:OverlayRow size
+                (xcb:-fieldref 'nRows))
+         :type xcb:-list)))
+
+(defclass xcb:xkb:Row
+  (xcb:-struct)
+  ((top :initarg :top :type xcb:INT16)
+   (left :initarg :left :type xcb:INT16)
+   (nKeys :initarg :nKeys :type xcb:CARD8)
+   (vertical :initarg :vertical :type xcb:BOOL)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (keys :initarg :keys :type xcb:-ignore)
+   (keys~ :initform
+         '(name keys type xcb:xkb:Key size
+                (xcb:-fieldref 'nKeys))
+         :type xcb:-list)))
+
+(defconst xcb:xkb:DoodadType:Outline 1)
+(defconst xcb:xkb:DoodadType:Solid 2)
+(defconst xcb:xkb:DoodadType:Text 3)
+(defconst xcb:xkb:DoodadType:Indicator 4)
+(defconst xcb:xkb:DoodadType:Logo 5)
+
+(defclass xcb:xkb:Listing
+  (xcb:-struct)
+  ((flags :initarg :flags :type xcb:CARD16)
+   (length :initarg :length :type xcb:CARD16)
+   (string :initarg :string :type xcb:-ignore)
+   (string~ :initform
+           '(name string type xcb:xkb:STRING8 size
+                  (xcb:-fieldref 'length))
+           :type xcb:-list)))
+
+(defclass xcb:xkb:DeviceLedInfo
+  (xcb:-struct)
+  ((ledClass :initarg :ledClass :type xcb:xkb:LedClassSpec)
+   (ledID :initarg :ledID :type xcb:xkb:IDSpec)
+   (namesPresent :initarg :namesPresent :type xcb:CARD32)
+   (mapsPresent :initarg :mapsPresent :type xcb:CARD32)
+   (physIndicators :initarg :physIndicators :type xcb:CARD32)
+   (state :initarg :state :type xcb:CARD32)
+   (names :initarg :names :type xcb:-ignore)
+   (names~ :initform
+          '(name names type xcb:ATOM size
+                 (xcb:-popcount
+                  (xcb:-fieldref 'namesPresent)))
+          :type xcb:-list)
+   (maps :initarg :maps :type xcb:-ignore)
+   (maps~ :initform
+         '(name maps type xcb:xkb:IndicatorMap size
+                (xcb:-popcount
+                 (xcb:-fieldref 'mapsPresent)))
+         :type xcb:-list)))
+
+(defconst xcb:xkb:Error:BadDevice 255)
+(defconst xcb:xkb:Error:BadClass 254)
+(defconst xcb:xkb:Error:BadId 253)
+
+(defclass xcb:xkb:Keyboard
+  (xcb:-error)
+  ((value :initarg :value :type xcb:CARD32)
+   (minorOpcode :initarg :minorOpcode :type xcb:CARD16)
+   (majorOpcode :initarg :majorOpcode :type xcb:CARD8)
+   (pad~0 :initform 21 :type xcb:-pad)))
+
+(defconst xcb:xkb:SA:ClearLocks 1)
+(defconst xcb:xkb:SA:LatchToLock 2)
+(defconst xcb:xkb:SA:UseModMapMods 4)
+(defconst xcb:xkb:SA:GroupAbsolute 4)
+
+(defconst xcb:xkb:SAType:NoAction 0)
+(defconst xcb:xkb:SAType:SetMods 1)
+(defconst xcb:xkb:SAType:LatchMods 2)
+(defconst xcb:xkb:SAType:LockMods 3)
+(defconst xcb:xkb:SAType:SetGroup 4)
+(defconst xcb:xkb:SAType:LatchGroup 5)
+(defconst xcb:xkb:SAType:LockGroup 6)
+(defconst xcb:xkb:SAType:MovePtr 7)
+(defconst xcb:xkb:SAType:PtrBtn 8)
+(defconst xcb:xkb:SAType:LockPtrBtn 9)
+(defconst xcb:xkb:SAType:SetPtrDflt 10)
+(defconst xcb:xkb:SAType:ISOLock 11)
+(defconst xcb:xkb:SAType:Terminate 12)
+(defconst xcb:xkb:SAType:SwitchScreen 13)
+(defconst xcb:xkb:SAType:SetControls 14)
+(defconst xcb:xkb:SAType:LockControls 15)
+(defconst xcb:xkb:SAType:ActionMessage 16)
+(defconst xcb:xkb:SAType:RedirectKey 17)
+(defconst xcb:xkb:SAType:DeviceBtn 18)
+(defconst xcb:xkb:SAType:LockDeviceBtn 19)
+(defconst xcb:xkb:SAType:DeviceValuator 20)
+
+(defclass xcb:xkb:SANoAction
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD8)
+   (pad~0 :initform 7 :type xcb:-pad)))
+
+(defclass xcb:xkb:SASetMods
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD8)
+   (flags :initarg :flags :type xcb:CARD8)
+   (mask :initarg :mask :type xcb:CARD8)
+   (realMods :initarg :realMods :type xcb:CARD8)
+   (vmodsHigh :initarg :vmodsHigh :type xcb:CARD8)
+   (vmodsLow :initarg :vmodsLow :type xcb:CARD8)
+   (pad~0 :initform 2 :type xcb:-pad)))
+
+(xcb:deftypealias 'xcb:xkb:SALatchMods 'xcb:xkb:SASetMods)
+
+(xcb:deftypealias 'xcb:xkb:SALockMods 'xcb:xkb:SASetMods)
+
+(defclass xcb:xkb:SASetGroup
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD8)
+   (flags :initarg :flags :type xcb:CARD8)
+   (group :initarg :group :type xcb:INT8)
+   (pad~0 :initform 5 :type xcb:-pad)))
+
+(xcb:deftypealias 'xcb:xkb:SALatchGroup 'xcb:xkb:SASetGroup)
+
+(xcb:deftypealias 'xcb:xkb:SALockGroup 'xcb:xkb:SASetGroup)
+
+(defconst xcb:xkb:SAMovePtrFlag:NoAcceleration 1)
+(defconst xcb:xkb:SAMovePtrFlag:MoveAbsoluteX 2)
+(defconst xcb:xkb:SAMovePtrFlag:MoveAbsoluteY 4)
+
+(defclass xcb:xkb:SAMovePtr
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD8)
+   (flags :initarg :flags :type xcb:CARD8)
+   (xHigh :initarg :xHigh :type xcb:INT8)
+   (xLow :initarg :xLow :type xcb:CARD8)
+   (yHigh :initarg :yHigh :type xcb:INT8)
+   (yLow :initarg :yLow :type xcb:CARD8)
+   (pad~0 :initform 2 :type xcb:-pad)))
+
+(defclass xcb:xkb:SAPtrBtn
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD8)
+   (flags :initarg :flags :type xcb:CARD8)
+   (count :initarg :count :type xcb:CARD8)
+   (button :initarg :button :type xcb:CARD8)
+   (pad~0 :initform 4 :type xcb:-pad)))
+
+(defclass xcb:xkb:SALockPtrBtn
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD8)
+   (flags :initarg :flags :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (button :initarg :button :type xcb:CARD8)
+   (pad~1 :initform 4 :type xcb:-pad)))
+
+(defconst xcb:xkb:SASetPtrDfltFlag:DfltBtnAbsolute 4)
+(defconst xcb:xkb:SASetPtrDfltFlag:AffectDfltButton 1)
+
+(defclass xcb:xkb:SASetPtrDflt
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD8)
+   (flags :initarg :flags :type xcb:CARD8)
+   (affect :initarg :affect :type xcb:CARD8)
+   (value :initarg :value :type xcb:INT8)
+   (pad~0 :initform 4 :type xcb:-pad)))
+
+(defconst xcb:xkb:SAIsoLockFlag:NoLock 1)
+(defconst xcb:xkb:SAIsoLockFlag:NoUnlock 2)
+(defconst xcb:xkb:SAIsoLockFlag:UseModMapMods 4)
+(defconst xcb:xkb:SAIsoLockFlag:GroupAbsolute 4)
+(defconst xcb:xkb:SAIsoLockFlag:ISODfltIsGroup 8)
+
+(defconst xcb:xkb:SAIsoLockNoAffect:Ctrls 8)
+(defconst xcb:xkb:SAIsoLockNoAffect:Ptr 16)
+(defconst xcb:xkb:SAIsoLockNoAffect:Group 32)
+(defconst xcb:xkb:SAIsoLockNoAffect:Mods 64)
+
+(defclass xcb:xkb:SAIsoLock
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD8)
+   (flags :initarg :flags :type xcb:CARD8)
+   (mask :initarg :mask :type xcb:CARD8)
+   (realMods :initarg :realMods :type xcb:CARD8)
+   (group :initarg :group :type xcb:INT8)
+   (affect :initarg :affect :type xcb:CARD8)
+   (vmodsHigh :initarg :vmodsHigh :type xcb:CARD8)
+   (vmodsLow :initarg :vmodsLow :type xcb:CARD8)))
+
+(defclass xcb:xkb:SATerminate
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD8)
+   (pad~0 :initform 7 :type xcb:-pad)))
+
+(defconst xcb:xkb:SwitchScreenFlag:Application 1)
+(defconst xcb:xkb:SwitchScreenFlag:Absolute 4)
+
+(defclass xcb:xkb:SASwitchScreen
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD8)
+   (flags :initarg :flags :type xcb:CARD8)
+   (newScreen :initarg :newScreen :type xcb:INT8)
+   (pad~0 :initform 5 :type xcb:-pad)))
+
+(defconst xcb:xkb:BoolCtrlsHigh:AccessXFeedback 1)
+(defconst xcb:xkb:BoolCtrlsHigh:AudibleBell 2)
+(defconst xcb:xkb:BoolCtrlsHigh:Overlay1 4)
+(defconst xcb:xkb:BoolCtrlsHigh:Overlay2 8)
+(defconst xcb:xkb:BoolCtrlsHigh:IgnoreGroupLock 16)
+
+(defconst xcb:xkb:BoolCtrlsLow:RepeatKeys 1)
+(defconst xcb:xkb:BoolCtrlsLow:SlowKeys 2)
+(defconst xcb:xkb:BoolCtrlsLow:BounceKeys 4)
+(defconst xcb:xkb:BoolCtrlsLow:StickyKeys 8)
+(defconst xcb:xkb:BoolCtrlsLow:MouseKeys 16)
+(defconst xcb:xkb:BoolCtrlsLow:MouseKeysAccel 32)
+(defconst xcb:xkb:BoolCtrlsLow:AccessXKeys 64)
+(defconst xcb:xkb:BoolCtrlsLow:AccessXTimeout 128)
+
+(defclass xcb:xkb:SASetControls
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (boolCtrlsHigh :initarg :boolCtrlsHigh :type xcb:CARD8)
+   (boolCtrlsLow :initarg :boolCtrlsLow :type xcb:CARD8)
+   (pad~1 :initform 2 :type xcb:-pad)))
+
+(xcb:deftypealias 'xcb:xkb:SALockControls 'xcb:xkb:SASetControls)
+
+(defconst xcb:xkb:ActionMessageFlag:OnPress 1)
+(defconst xcb:xkb:ActionMessageFlag:OnRelease 2)
+(defconst xcb:xkb:ActionMessageFlag:GenKeyEvent 4)
+
+(defclass xcb:xkb:SAActionMessage
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD8)
+   (flags :initarg :flags :type xcb:CARD8)
+   (message :initarg :message :type xcb:-ignore)
+   (message~ :initform
+            '(name message type xcb:CARD8 size 6)
+            :type xcb:-list)))
+
+(defclass xcb:xkb:SARedirectKey
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD8)
+   (newkey :initarg :newkey :type xcb:KEYCODE)
+   (mask :initarg :mask :type xcb:CARD8)
+   (realModifiers :initarg :realModifiers :type xcb:CARD8)
+   (vmodsMaskHigh :initarg :vmodsMaskHigh :type xcb:CARD8)
+   (vmodsMaskLow :initarg :vmodsMaskLow :type xcb:CARD8)
+   (vmodsHigh :initarg :vmodsHigh :type xcb:CARD8)
+   (vmodsLow :initarg :vmodsLow :type xcb:CARD8)))
+
+(defclass xcb:xkb:SADeviceBtn
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD8)
+   (flags :initarg :flags :type xcb:CARD8)
+   (count :initarg :count :type xcb:CARD8)
+   (button :initarg :button :type xcb:CARD8)
+   (device :initarg :device :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defconst xcb:xkb:LockDeviceFlags:NoLock 1)
+(defconst xcb:xkb:LockDeviceFlags:NoUnlock 2)
+
+(defclass xcb:xkb:SALockDeviceBtn
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD8)
+   (flags :initarg :flags :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (button :initarg :button :type xcb:CARD8)
+   (device :initarg :device :type xcb:CARD8)
+   (pad~1 :initform 3 :type xcb:-pad)))
+
+(defconst xcb:xkb:SAValWhat:IgnoreVal 0)
+(defconst xcb:xkb:SAValWhat:SetValMin 1)
+(defconst xcb:xkb:SAValWhat:SetValCenter 2)
+(defconst xcb:xkb:SAValWhat:SetValMax 3)
+(defconst xcb:xkb:SAValWhat:SetValRelative 4)
+(defconst xcb:xkb:SAValWhat:SetValAbsolute 5)
+
+(defclass xcb:xkb:SADeviceValuator
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD8)
+   (device :initarg :device :type xcb:CARD8)
+   (val1what :initarg :val1what :type xcb:CARD8)
+   (val1index :initarg :val1index :type xcb:CARD8)
+   (val1value :initarg :val1value :type xcb:CARD8)
+   (val2what :initarg :val2what :type xcb:CARD8)
+   (val2index :initarg :val2index :type xcb:CARD8)
+   (val2value :initarg :val2value :type xcb:CARD8)))
+
+(defclass xcb:xkb:SIAction
+  (xcb:-struct)
+  ((type :initarg :type :type xcb:CARD8)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:CARD8 size 7)
+         :type xcb:-list)))
+
+(defclass xcb:xkb:SymInterpret
+  (xcb:-struct)
+  ((sym :initarg :sym :type xcb:KEYSYM)
+   (mods :initarg :mods :type xcb:CARD8)
+   (match :initarg :match :type xcb:CARD8)
+   (virtualMod :initarg :virtualMod :type xcb:CARD8)
+   (flags :initarg :flags :type xcb:CARD8)
+   (action :initarg :action :type xcb:xkb:SIAction)))
+
+(defclass xcb:xkb:Action
+  (xcb:-union)
+  ((noaction :initarg :noaction :type xcb:xkb:SANoAction)
+   (setmods :initarg :setmods :type xcb:xkb:SASetMods)
+   (latchmods :initarg :latchmods :type xcb:xkb:SALatchMods)
+   (lockmods :initarg :lockmods :type xcb:xkb:SALockMods)
+   (setgroup :initarg :setgroup :type xcb:xkb:SASetGroup)
+   (latchgroup :initarg :latchgroup :type xcb:xkb:SALatchGroup)
+   (lockgroup :initarg :lockgroup :type xcb:xkb:SALockGroup)
+   (moveptr :initarg :moveptr :type xcb:xkb:SAMovePtr)
+   (ptrbtn :initarg :ptrbtn :type xcb:xkb:SAPtrBtn)
+   (lockptrbtn :initarg :lockptrbtn :type xcb:xkb:SALockPtrBtn)
+   (setptrdflt :initarg :setptrdflt :type xcb:xkb:SASetPtrDflt)
+   (isolock :initarg :isolock :type xcb:xkb:SAIsoLock)
+   (terminate :initarg :terminate :type xcb:xkb:SATerminate)
+   (switchscreen :initarg :switchscreen :type xcb:xkb:SASwitchScreen)
+   (setcontrols :initarg :setcontrols :type xcb:xkb:SASetControls)
+   (lockcontrols :initarg :lockcontrols :type xcb:xkb:SALockControls)
+   (message :initarg :message :type xcb:xkb:SAActionMessage)
+   (redirect :initarg :redirect :type xcb:xkb:SARedirectKey)
+   (devbtn :initarg :devbtn :type xcb:xkb:SADeviceBtn)
+   (lockdevbtn :initarg :lockdevbtn :type xcb:xkb:SALockDeviceBtn)
+   (devval :initarg :devval :type xcb:xkb:SADeviceValuator)
+   (type :initarg :type :type xcb:CARD8)))
+
+(defclass xcb:xkb:UseExtension
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)
+   (wantedMajor :initarg :wantedMajor :type xcb:CARD16)
+   (wantedMinor :initarg :wantedMinor :type xcb:CARD16)))
+(defclass xcb:xkb:UseExtension~reply
+  (xcb:-reply)
+  ((supported :initarg :supported :type xcb:BOOL)
+   (serverMajor :initarg :serverMajor :type xcb:CARD16)
+   (serverMinor :initarg :serverMinor :type xcb:CARD16)
+   (pad~0 :initform 20 :type xcb:-pad)))
+
+(defclass xcb:xkb:SelectEvents
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)
+   (deviceSpec :initarg :deviceSpec :type xcb:xkb:DeviceSpec)
+   (affectWhich :initarg :affectWhich :type xcb:CARD16)
+   (clear :initarg :clear :type xcb:CARD16)
+   (selectAll :initarg :selectAll :type xcb:CARD16)
+   (affectMap :initarg :affectMap :type xcb:CARD16)
+   (map :initarg :map :type xcb:CARD16)
+   (details :initform
+           '(expression
+             (logand
+              (xcb:-fieldref 'affectWhich)
+              (logand
+               (lognot
+                (parse-expression
+                 (node-subnode node)))
+               (lognot
+                (parse-expression
+                 (node-subnode node)))))
+             cases
+             ((xcb:xkb:EventType:NewKeyboardNotify affectNewKeyboard 
newKeyboardDetails)
+              (xcb:xkb:EventType:StateNotify affectState stateDetails)
+              (xcb:xkb:EventType:ControlsNotify affectCtrls ctrlDetails)
+              (xcb:xkb:EventType:IndicatorStateNotify affectIndicatorState 
indicatorStateDetails)
+              (xcb:xkb:EventType:IndicatorMapNotify affectIndicatorMap 
indicatorMapDetails)
+              (xcb:xkb:EventType:NamesNotify affectNames namesDetails)
+              (xcb:xkb:EventType:CompatMapNotify affectCompat compatDetails)
+              (xcb:xkb:EventType:BellNotify affectBell bellDetails)
+              (xcb:xkb:EventType:ActionMessage affectMsgDetails msgDetails)
+              (xcb:xkb:EventType:AccessXNotify affectAccessX accessXDetails)
+              (xcb:xkb:EventType:ExtensionDeviceNotify affectExtDev 
extdevDetails)))
+           :type xcb:-switch)
+   (affectNewKeyboard :initarg :affectNewKeyboard :type xcb:CARD16)
+   (newKeyboardDetails :initarg :newKeyboardDetails :type xcb:CARD16)
+   (affectState :initarg :affectState :type xcb:CARD16)
+   (stateDetails :initarg :stateDetails :type xcb:CARD16)
+   (affectCtrls :initarg :affectCtrls :type xcb:CARD32)
+   (ctrlDetails :initarg :ctrlDetails :type xcb:CARD32)
+   (affectIndicatorState :initarg :affectIndicatorState :type xcb:CARD32)
+   (indicatorStateDetails :initarg :indicatorStateDetails :type xcb:CARD32)
+   (affectIndicatorMap :initarg :affectIndicatorMap :type xcb:CARD32)
+   (indicatorMapDetails :initarg :indicatorMapDetails :type xcb:CARD32)
+   (affectNames :initarg :affectNames :type xcb:CARD16)
+   (namesDetails :initarg :namesDetails :type xcb:CARD16)
+   (affectCompat :initarg :affectCompat :type xcb:CARD8)
+   (compatDetails :initarg :compatDetails :type xcb:CARD8)
+   (affectBell :initarg :affectBell :type xcb:CARD8)
+   (bellDetails :initarg :bellDetails :type xcb:CARD8)
+   (affectMsgDetails :initarg :affectMsgDetails :type xcb:CARD8)
+   (msgDetails :initarg :msgDetails :type xcb:CARD8)
+   (affectAccessX :initarg :affectAccessX :type xcb:CARD16)
+   (accessXDetails :initarg :accessXDetails :type xcb:CARD16)
+   (affectExtDev :initarg :affectExtDev :type xcb:CARD16)
+   (extdevDetails :initarg :extdevDetails :type xcb:CARD16)))
+
+(defclass xcb:xkb:Bell
+  (xcb:-request)
+  ((~opcode :initform 3 :type xcb:-u1)
+   (deviceSpec :initarg :deviceSpec :type xcb:xkb:DeviceSpec)
+   (bellClass :initarg :bellClass :type xcb:xkb:BellClassSpec)
+   (bellID :initarg :bellID :type xcb:xkb:IDSpec)
+   (percent :initarg :percent :type xcb:INT8)
+   (forceSound :initarg :forceSound :type xcb:BOOL)
+   (eventOnly :initarg :eventOnly :type xcb:BOOL)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (pitch :initarg :pitch :type xcb:INT16)
+   (duration :initarg :duration :type xcb:INT16)
+   (pad~1 :initform 2 :type xcb:-pad)
+   (name :initarg :name :type xcb:ATOM)
+   (window :initarg :window :type xcb:WINDOW)))
+
+(defclass xcb:xkb:GetState
+  (xcb:-request)
+  ((~opcode :initform 4 :type xcb:-u1)
+   (deviceSpec :initarg :deviceSpec :type xcb:xkb:DeviceSpec)
+   (pad~0 :initform 2 :type xcb:-pad)))
+(defclass xcb:xkb:GetState~reply
+  (xcb:-reply)
+  ((deviceID :initarg :deviceID :type xcb:CARD8)
+   (mods :initarg :mods :type xcb:CARD8)
+   (baseMods :initarg :baseMods :type xcb:CARD8)
+   (latchedMods :initarg :latchedMods :type xcb:CARD8)
+   (lockedMods :initarg :lockedMods :type xcb:CARD8)
+   (group :initarg :group :type xcb:CARD8)
+   (lockedGroup :initarg :lockedGroup :type xcb:CARD8)
+   (baseGroup :initarg :baseGroup :type xcb:INT16)
+   (latchedGroup :initarg :latchedGroup :type xcb:INT16)
+   (compatState :initarg :compatState :type xcb:CARD8)
+   (grabMods :initarg :grabMods :type xcb:CARD8)
+   (compatGrabMods :initarg :compatGrabMods :type xcb:CARD8)
+   (lookupMods :initarg :lookupMods :type xcb:CARD8)
+   (compatLookupMods :initarg :compatLookupMods :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (ptrBtnState :initarg :ptrBtnState :type xcb:CARD16)
+   (pad~1 :initform 6 :type xcb:-pad)))
+
+(defclass xcb:xkb:LatchLockState
+  (xcb:-request)
+  ((~opcode :initform 5 :type xcb:-u1)
+   (deviceSpec :initarg :deviceSpec :type xcb:xkb:DeviceSpec)
+   (affectModLocks :initarg :affectModLocks :type xcb:CARD8)
+   (modLocks :initarg :modLocks :type xcb:CARD8)
+   (lockGroup :initarg :lockGroup :type xcb:BOOL)
+   (groupLock :initarg :groupLock :type xcb:CARD8)
+   (affectModLatches :initarg :affectModLatches :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 1 :type xcb:-pad)
+   (latchGroup :initarg :latchGroup :type xcb:BOOL)
+   (groupLatch :initarg :groupLatch :type xcb:CARD16)))
+
+(defclass xcb:xkb:GetControls
+  (xcb:-request)
+  ((~opcode :initform 6 :type xcb:-u1)
+   (deviceSpec :initarg :deviceSpec :type xcb:xkb:DeviceSpec)
+   (pad~0 :initform 2 :type xcb:-pad)))
+(defclass xcb:xkb:GetControls~reply
+  (xcb:-reply)
+  ((deviceID :initarg :deviceID :type xcb:CARD8)
+   (mouseKeysDfltBtn :initarg :mouseKeysDfltBtn :type xcb:CARD8)
+   (numGroups :initarg :numGroups :type xcb:CARD8)
+   (groupsWrap :initarg :groupsWrap :type xcb:CARD8)
+   (internalModsMask :initarg :internalModsMask :type xcb:CARD8)
+   (ignoreLockModsMask :initarg :ignoreLockModsMask :type xcb:CARD8)
+   (internalModsRealMods :initarg :internalModsRealMods :type xcb:CARD8)
+   (ignoreLockModsRealMods :initarg :ignoreLockModsRealMods :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (internalModsVmods :initarg :internalModsVmods :type xcb:CARD16)
+   (ignoreLockModsVmods :initarg :ignoreLockModsVmods :type xcb:CARD16)
+   (repeatDelay :initarg :repeatDelay :type xcb:CARD16)
+   (repeatInterval :initarg :repeatInterval :type xcb:CARD16)
+   (slowKeysDelay :initarg :slowKeysDelay :type xcb:CARD16)
+   (debounceDelay :initarg :debounceDelay :type xcb:CARD16)
+   (mouseKeysDelay :initarg :mouseKeysDelay :type xcb:CARD16)
+   (mouseKeysInterval :initarg :mouseKeysInterval :type xcb:CARD16)
+   (mouseKeysTimeToMax :initarg :mouseKeysTimeToMax :type xcb:CARD16)
+   (mouseKeysMaxSpeed :initarg :mouseKeysMaxSpeed :type xcb:CARD16)
+   (mouseKeysCurve :initarg :mouseKeysCurve :type xcb:INT16)
+   (accessXOption :initarg :accessXOption :type xcb:CARD16)
+   (accessXTimeout :initarg :accessXTimeout :type xcb:CARD16)
+   (accessXTimeoutOptionsMask :initarg :accessXTimeoutOptionsMask :type 
xcb:CARD16)
+   (accessXTimeoutOptionsValues :initarg :accessXTimeoutOptionsValues :type 
xcb:CARD16)
+   (pad~1 :initform 2 :type xcb:-pad)
+   (accessXTimeoutMask :initarg :accessXTimeoutMask :type xcb:CARD32)
+   (accessXTimeoutValues :initarg :accessXTimeoutValues :type xcb:CARD32)
+   (enabledControls :initarg :enabledControls :type xcb:CARD32)
+   (perKeyRepeat :initarg :perKeyRepeat :type xcb:-ignore)
+   (perKeyRepeat~ :initform
+                 '(name perKeyRepeat type xcb:CARD8 size 32)
+                 :type xcb:-list)))
+
+(defclass xcb:xkb:SetControls
+  (xcb:-request)
+  ((~opcode :initform 7 :type xcb:-u1)
+   (deviceSpec :initarg :deviceSpec :type xcb:xkb:DeviceSpec)
+   (affectInternalRealMods :initarg :affectInternalRealMods :type xcb:CARD8)
+   (internalRealMods :initarg :internalRealMods :type xcb:CARD8)
+   (affectIgnoreLockRealMods :initarg :affectIgnoreLockRealMods :type 
xcb:CARD8)
+   (ignoreLockRealMods :initarg :ignoreLockRealMods :type xcb:CARD8)
+   (affectInternalVirtualMods :initarg :affectInternalVirtualMods :type 
xcb:CARD16)
+   (internalVirtualMods :initarg :internalVirtualMods :type xcb:CARD16)
+   (affectIgnoreLockVirtualMods :initarg :affectIgnoreLockVirtualMods :type 
xcb:CARD16)
+   (ignoreLockVirtualMods :initarg :ignoreLockVirtualMods :type xcb:CARD16)
+   (mouseKeysDfltBtn :initarg :mouseKeysDfltBtn :type xcb:CARD8)
+   (groupsWrap :initarg :groupsWrap :type xcb:CARD8)
+   (accessXOptions :initarg :accessXOptions :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (affectEnabledControls :initarg :affectEnabledControls :type xcb:CARD32)
+   (enabledControls :initarg :enabledControls :type xcb:CARD32)
+   (changeControls :initarg :changeControls :type xcb:CARD32)
+   (repeatDelay :initarg :repeatDelay :type xcb:CARD16)
+   (repeatInterval :initarg :repeatInterval :type xcb:CARD16)
+   (slowKeysDelay :initarg :slowKeysDelay :type xcb:CARD16)
+   (debounceDelay :initarg :debounceDelay :type xcb:CARD16)
+   (mouseKeysDelay :initarg :mouseKeysDelay :type xcb:CARD16)
+   (mouseKeysInterval :initarg :mouseKeysInterval :type xcb:CARD16)
+   (mouseKeysTimeToMax :initarg :mouseKeysTimeToMax :type xcb:CARD16)
+   (mouseKeysMaxSpeed :initarg :mouseKeysMaxSpeed :type xcb:CARD16)
+   (mouseKeysCurve :initarg :mouseKeysCurve :type xcb:INT16)
+   (accessXTimeout :initarg :accessXTimeout :type xcb:CARD16)
+   (accessXTimeoutMask :initarg :accessXTimeoutMask :type xcb:CARD32)
+   (accessXTimeoutValues :initarg :accessXTimeoutValues :type xcb:CARD32)
+   (accessXTimeoutOptionsMask :initarg :accessXTimeoutOptionsMask :type 
xcb:CARD16)
+   (accessXTimeoutOptionsValues :initarg :accessXTimeoutOptionsValues :type 
xcb:CARD16)
+   (perKeyRepeat :initarg :perKeyRepeat :type xcb:-ignore)
+   (perKeyRepeat~ :initform
+                 '(name perKeyRepeat type xcb:CARD8 size 32)
+                 :type xcb:-list)))
+
+(defclass xcb:xkb:GetMap
+  (xcb:-request)
+  ((~opcode :initform 8 :type xcb:-u1)
+   (deviceSpec :initarg :deviceSpec :type xcb:xkb:DeviceSpec)
+   (full :initarg :full :type xcb:CARD16)
+   (partial :initarg :partial :type xcb:CARD16)
+   (firstType :initarg :firstType :type xcb:CARD8)
+   (nTypes :initarg :nTypes :type xcb:CARD8)
+   (firstKeySym :initarg :firstKeySym :type xcb:KEYCODE)
+   (nKeySyms :initarg :nKeySyms :type xcb:CARD8)
+   (firstKeyAction :initarg :firstKeyAction :type xcb:KEYCODE)
+   (nKeyActions :initarg :nKeyActions :type xcb:CARD8)
+   (firstKeyBehavior :initarg :firstKeyBehavior :type xcb:KEYCODE)
+   (nKeyBehaviors :initarg :nKeyBehaviors :type xcb:CARD8)
+   (virtualMods :initarg :virtualMods :type xcb:CARD16)
+   (firstKeyExplicit :initarg :firstKeyExplicit :type xcb:KEYCODE)
+   (nKeyExplicit :initarg :nKeyExplicit :type xcb:CARD8)
+   (firstModMapKey :initarg :firstModMapKey :type xcb:KEYCODE)
+   (nModMapKeys :initarg :nModMapKeys :type xcb:CARD8)
+   (firstVModMapKey :initarg :firstVModMapKey :type xcb:KEYCODE)
+   (nVModMapKeys :initarg :nVModMapKeys :type xcb:CARD8)
+   (pad~0 :initform 2 :type xcb:-pad)))
+(defclass xcb:xkb:GetMap~reply
+  (xcb:-reply)
+  ((deviceID :initarg :deviceID :type xcb:CARD8)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (minKeyCode :initarg :minKeyCode :type xcb:KEYCODE)
+   (maxKeyCode :initarg :maxKeyCode :type xcb:KEYCODE)
+   (present :initarg :present :type xcb:CARD16)
+   (firstType :initarg :firstType :type xcb:CARD8)
+   (nTypes :initarg :nTypes :type xcb:CARD8)
+   (totalTypes :initarg :totalTypes :type xcb:CARD8)
+   (firstKeySym :initarg :firstKeySym :type xcb:KEYCODE)
+   (totalSyms :initarg :totalSyms :type xcb:CARD16)
+   (nKeySyms :initarg :nKeySyms :type xcb:CARD8)
+   (firstKeyAction :initarg :firstKeyAction :type xcb:KEYCODE)
+   (totalActions :initarg :totalActions :type xcb:CARD16)
+   (nKeyActions :initarg :nKeyActions :type xcb:CARD8)
+   (firstKeyBehavior :initarg :firstKeyBehavior :type xcb:KEYCODE)
+   (nKeyBehaviors :initarg :nKeyBehaviors :type xcb:CARD8)
+   (totalKeyBehaviors :initarg :totalKeyBehaviors :type xcb:CARD8)
+   (firstKeyExplicit :initarg :firstKeyExplicit :type xcb:KEYCODE)
+   (nKeyExplicit :initarg :nKeyExplicit :type xcb:CARD8)
+   (totalKeyExplicit :initarg :totalKeyExplicit :type xcb:CARD8)
+   (firstModMapKey :initarg :firstModMapKey :type xcb:KEYCODE)
+   (nModMapKeys :initarg :nModMapKeys :type xcb:CARD8)
+   (totalModMapKeys :initarg :totalModMapKeys :type xcb:CARD8)
+   (firstVModMapKey :initarg :firstVModMapKey :type xcb:KEYCODE)
+   (nVModMapKeys :initarg :nVModMapKeys :type xcb:CARD8)
+   (totalVModMapKeys :initarg :totalVModMapKeys :type xcb:CARD8)
+   (pad~1 :initform 1 :type xcb:-pad)
+   (virtualMods :initarg :virtualMods :type xcb:CARD16)
+   (map :initform
+       '(expression
+         (xcb:-fieldref 'present)
+         cases
+         ((xcb:xkb:MapPart:KeyTypes types-rtrn)
+          (xcb:xkb:MapPart:KeySyms syms-rtrn)
+          (xcb:xkb:MapPart:KeyActions acts-rtrn-count pad~10 acts-rtrn-acts)
+          (xcb:xkb:MapPart:KeyBehaviors behaviors-rtrn)
+          (xcb:xkb:MapPart:VirtualMods vmods-rtrn pad~11)
+          (xcb:xkb:MapPart:ExplicitComponents explicit-rtrn pad~12)
+          (xcb:xkb:MapPart:ModifierMap modmap-rtrn pad~13)
+          (xcb:xkb:MapPart:VirtualModMap vmodmap-rtrn)))
+       :type xcb:-switch)
+   (types-rtrn :initarg :types-rtrn :type xcb:-ignore)
+   (types-rtrn~ :initform
+               '(name types-rtrn type xcb:xkb:KeyType size
+                      (xcb:-fieldref 'nTypes))
+               :type xcb:-list)
+   (syms-rtrn :initarg :syms-rtrn :type xcb:-ignore)
+   (syms-rtrn~ :initform
+              '(name syms-rtrn type xcb:xkb:KeySymMap size
+                     (xcb:-fieldref 'nKeySyms))
+              :type xcb:-list)
+   (acts-rtrn-count :initarg :acts-rtrn-count :type xcb:-ignore)
+   (acts-rtrn-count~ :initform
+                    '(name acts-rtrn-count type xcb:CARD8 size
+                           (xcb:-fieldref 'nKeyActions))
+                    :type xcb:-list)
+   (pad~10 :initform 4 :type xcb:-pad-align)
+   (acts-rtrn-acts :initarg :acts-rtrn-acts :type xcb:-ignore)
+   (acts-rtrn-acts~ :initform
+                   '(name acts-rtrn-acts type xcb:xkb:Action size
+                          (xcb:-fieldref 'totalActions))
+                   :type xcb:-list)
+   (behaviors-rtrn :initarg :behaviors-rtrn :type xcb:-ignore)
+   (behaviors-rtrn~ :initform
+                   '(name behaviors-rtrn type xcb:xkb:SetBehavior size
+                          (xcb:-fieldref 'totalKeyBehaviors))
+                   :type xcb:-list)
+   (vmods-rtrn :initarg :vmods-rtrn :type xcb:-ignore)
+   (vmods-rtrn~ :initform
+               '(name vmods-rtrn type xcb:CARD8 size
+                      (xcb:-popcount
+                       (xcb:-fieldref 'virtualMods)))
+               :type xcb:-list)
+   (pad~11 :initform 4 :type xcb:-pad-align)
+   (explicit-rtrn :initarg :explicit-rtrn :type xcb:-ignore)
+   (explicit-rtrn~ :initform
+                  '(name explicit-rtrn type xcb:xkb:SetExplicit size
+                         (xcb:-fieldref 'totalKeyExplicit))
+                  :type xcb:-list)
+   (pad~12 :initform 4 :type xcb:-pad-align)
+   (modmap-rtrn :initarg :modmap-rtrn :type xcb:-ignore)
+   (modmap-rtrn~ :initform
+                '(name modmap-rtrn type xcb:xkb:KeyModMap size
+                       (xcb:-fieldref 'totalModMapKeys))
+                :type xcb:-list)
+   (pad~13 :initform 4 :type xcb:-pad-align)
+   (vmodmap-rtrn :initarg :vmodmap-rtrn :type xcb:-ignore)
+   (vmodmap-rtrn~ :initform
+                 '(name vmodmap-rtrn type xcb:xkb:KeyVModMap size
+                        (xcb:-fieldref 'totalVModMapKeys))
+                 :type xcb:-list)))
+
+(defclass xcb:xkb:SetMap
+  (xcb:-request)
+  ((~opcode :initform 9 :type xcb:-u1)
+   (deviceSpec :initarg :deviceSpec :type xcb:xkb:DeviceSpec)
+   (present :initarg :present :type xcb:CARD16)
+   (flags :initarg :flags :type xcb:CARD16)
+   (minKeyCode :initarg :minKeyCode :type xcb:KEYCODE)
+   (maxKeyCode :initarg :maxKeyCode :type xcb:KEYCODE)
+   (firstType :initarg :firstType :type xcb:CARD8)
+   (nTypes :initarg :nTypes :type xcb:CARD8)
+   (firstKeySym :initarg :firstKeySym :type xcb:KEYCODE)
+   (nKeySyms :initarg :nKeySyms :type xcb:CARD8)
+   (totalSyms :initarg :totalSyms :type xcb:CARD16)
+   (firstKeyAction :initarg :firstKeyAction :type xcb:KEYCODE)
+   (nKeyActions :initarg :nKeyActions :type xcb:CARD8)
+   (totalActions :initarg :totalActions :type xcb:CARD16)
+   (firstKeyBehavior :initarg :firstKeyBehavior :type xcb:KEYCODE)
+   (nKeyBehaviors :initarg :nKeyBehaviors :type xcb:CARD8)
+   (totalKeyBehaviors :initarg :totalKeyBehaviors :type xcb:CARD8)
+   (firstKeyExplicit :initarg :firstKeyExplicit :type xcb:KEYCODE)
+   (nKeyExplicit :initarg :nKeyExplicit :type xcb:CARD8)
+   (totalKeyExplicit :initarg :totalKeyExplicit :type xcb:CARD8)
+   (firstModMapKey :initarg :firstModMapKey :type xcb:KEYCODE)
+   (nModMapKeys :initarg :nModMapKeys :type xcb:CARD8)
+   (totalModMapKeys :initarg :totalModMapKeys :type xcb:CARD8)
+   (firstVModMapKey :initarg :firstVModMapKey :type xcb:KEYCODE)
+   (nVModMapKeys :initarg :nVModMapKeys :type xcb:CARD8)
+   (totalVModMapKeys :initarg :totalVModMapKeys :type xcb:CARD8)
+   (virtualMods :initarg :virtualMods :type xcb:CARD16)
+   (values :initform
+          '(expression
+            (xcb:-fieldref 'present)
+            cases
+            ((xcb:xkb:MapPart:KeyTypes types)
+             (xcb:xkb:MapPart:KeySyms syms)
+             (xcb:xkb:MapPart:KeyActions actionsCount actions)
+             (xcb:xkb:MapPart:KeyBehaviors behaviors)
+             (xcb:xkb:MapPart:VirtualMods vmods)
+             (xcb:xkb:MapPart:ExplicitComponents explicit)
+             (xcb:xkb:MapPart:ModifierMap modmap)
+             (xcb:xkb:MapPart:VirtualModMap vmodmap)))
+          :type xcb:-switch)
+   (types :initarg :types :type xcb:-ignore)
+   (types~ :initform
+          '(name types type xcb:xkb:SetKeyType size
+                 (xcb:-fieldref 'nTypes))
+          :type xcb:-list)
+   (syms :initarg :syms :type xcb:-ignore)
+   (syms~ :initform
+         '(name syms type xcb:xkb:KeySymMap size
+                (xcb:-fieldref 'nKeySyms))
+         :type xcb:-list)
+   (actionsCount :initarg :actionsCount :type xcb:-ignore)
+   (actionsCount~ :initform
+                 '(name actionsCount type xcb:CARD8 size
+                        (xcb:-fieldref 'nKeyActions))
+                 :type xcb:-list)
+   (actions :initarg :actions :type xcb:-ignore)
+   (actions~ :initform
+            '(name actions type xcb:xkb:Action size
+                   (xcb:-fieldref 'totalActions))
+            :type xcb:-list)
+   (behaviors :initarg :behaviors :type xcb:-ignore)
+   (behaviors~ :initform
+              '(name behaviors type xcb:xkb:SetBehavior size
+                     (xcb:-fieldref 'totalKeyBehaviors))
+              :type xcb:-list)
+   (vmods :initarg :vmods :type xcb:-ignore)
+   (vmods~ :initform
+          '(name vmods type xcb:CARD8 size
+                 (xcb:-popcount
+                  (xcb:-fieldref 'virtualMods)))
+          :type xcb:-list)
+   (explicit :initarg :explicit :type xcb:-ignore)
+   (explicit~ :initform
+             '(name explicit type xcb:xkb:SetExplicit size
+                    (xcb:-fieldref 'totalKeyExplicit))
+             :type xcb:-list)
+   (modmap :initarg :modmap :type xcb:-ignore)
+   (modmap~ :initform
+           '(name modmap type xcb:xkb:KeyModMap size
+                  (xcb:-fieldref 'totalModMapKeys))
+           :type xcb:-list)
+   (vmodmap :initarg :vmodmap :type xcb:-ignore)
+   (vmodmap~ :initform
+            '(name vmodmap type xcb:xkb:KeyVModMap size
+                   (xcb:-fieldref 'totalVModMapKeys))
+            :type xcb:-list)))
+
+(defclass xcb:xkb:GetCompatMap
+  (xcb:-request)
+  ((~opcode :initform 10 :type xcb:-u1)
+   (deviceSpec :initarg :deviceSpec :type xcb:xkb:DeviceSpec)
+   (groups :initarg :groups :type xcb:CARD8)
+   (getAllSI :initarg :getAllSI :type xcb:BOOL)
+   (firstSI :initarg :firstSI :type xcb:CARD16)
+   (nSI :initarg :nSI :type xcb:CARD16)))
+(defclass xcb:xkb:GetCompatMap~reply
+  (xcb:-reply)
+  ((deviceID :initarg :deviceID :type xcb:CARD8)
+   (groupsRtrn :initarg :groupsRtrn :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (firstSIRtrn :initarg :firstSIRtrn :type xcb:CARD16)
+   (nSIRtrn :initarg :nSIRtrn :type xcb:CARD16)
+   (nTotalSI :initarg :nTotalSI :type xcb:CARD16)
+   (pad~1 :initform 16 :type xcb:-pad)
+   (si-rtrn :initarg :si-rtrn :type xcb:-ignore)
+   (si-rtrn~ :initform
+            '(name si-rtrn type xcb:xkb:SymInterpret size
+                   (xcb:-fieldref 'nSIRtrn))
+            :type xcb:-list)
+   (group-rtrn :initarg :group-rtrn :type xcb:-ignore)
+   (group-rtrn~ :initform
+               '(name group-rtrn type xcb:xkb:ModDef size
+                      (xcb:-popcount
+                       (xcb:-fieldref 'groupsRtrn)))
+               :type xcb:-list)))
+
+(defclass xcb:xkb:SetCompatMap
+  (xcb:-request)
+  ((~opcode :initform 11 :type xcb:-u1)
+   (deviceSpec :initarg :deviceSpec :type xcb:xkb:DeviceSpec)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (recomputeActions :initarg :recomputeActions :type xcb:BOOL)
+   (truncateSI :initarg :truncateSI :type xcb:BOOL)
+   (groups :initarg :groups :type xcb:CARD8)
+   (firstSI :initarg :firstSI :type xcb:CARD16)
+   (nSI :initarg :nSI :type xcb:CARD16)
+   (pad~1 :initform 2 :type xcb:-pad)
+   (si :initarg :si :type xcb:-ignore)
+   (si~ :initform
+       '(name si type xcb:xkb:SymInterpret size
+              (xcb:-fieldref 'nSI))
+       :type xcb:-list)
+   (groupMaps :initarg :groupMaps :type xcb:-ignore)
+   (groupMaps~ :initform
+              '(name groupMaps type xcb:xkb:ModDef size
+                     (xcb:-popcount
+                      (xcb:-fieldref 'groups)))
+              :type xcb:-list)))
+
+(defclass xcb:xkb:GetIndicatorState
+  (xcb:-request)
+  ((~opcode :initform 12 :type xcb:-u1)
+   (deviceSpec :initarg :deviceSpec :type xcb:xkb:DeviceSpec)
+   (pad~0 :initform 2 :type xcb:-pad)))
+(defclass xcb:xkb:GetIndicatorState~reply
+  (xcb:-reply)
+  ((deviceID :initarg :deviceID :type xcb:CARD8)
+   (state :initarg :state :type xcb:CARD32)
+   (pad~0 :initform 20 :type xcb:-pad)))
+
+(defclass xcb:xkb:GetIndicatorMap
+  (xcb:-request)
+  ((~opcode :initform 13 :type xcb:-u1)
+   (deviceSpec :initarg :deviceSpec :type xcb:xkb:DeviceSpec)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (which :initarg :which :type xcb:CARD32)))
+(defclass xcb:xkb:GetIndicatorMap~reply
+  (xcb:-reply)
+  ((deviceID :initarg :deviceID :type xcb:CARD8)
+   (which :initarg :which :type xcb:CARD32)
+   (realIndicators :initarg :realIndicators :type xcb:CARD32)
+   (nIndicators :initarg :nIndicators :type xcb:CARD8)
+   (pad~0 :initform 15 :type xcb:-pad)
+   (maps :initarg :maps :type xcb:-ignore)
+   (maps~ :initform
+         '(name maps type xcb:xkb:IndicatorMap size
+                (xcb:-popcount
+                 (xcb:-fieldref 'which)))
+         :type xcb:-list)))
+
+(defclass xcb:xkb:SetIndicatorMap
+  (xcb:-request)
+  ((~opcode :initform 14 :type xcb:-u1)
+   (deviceSpec :initarg :deviceSpec :type xcb:xkb:DeviceSpec)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (which :initarg :which :type xcb:CARD32)
+   (maps :initarg :maps :type xcb:-ignore)
+   (maps~ :initform
+         '(name maps type xcb:xkb:IndicatorMap size
+                (xcb:-popcount
+                 (xcb:-fieldref 'which)))
+         :type xcb:-list)))
+
+(defclass xcb:xkb:GetNamedIndicator
+  (xcb:-request)
+  ((~opcode :initform 15 :type xcb:-u1)
+   (deviceSpec :initarg :deviceSpec :type xcb:xkb:DeviceSpec)
+   (ledClass :initarg :ledClass :type xcb:xkb:LedClassSpec)
+   (ledID :initarg :ledID :type xcb:xkb:IDSpec)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (indicator :initarg :indicator :type xcb:ATOM)))
+(defclass xcb:xkb:GetNamedIndicator~reply
+  (xcb:-reply)
+  ((deviceID :initarg :deviceID :type xcb:CARD8)
+   (indicator :initarg :indicator :type xcb:ATOM)
+   (found :initarg :found :type xcb:BOOL)
+   (on :initarg :on :type xcb:BOOL)
+   (realIndicator :initarg :realIndicator :type xcb:BOOL)
+   (ndx :initarg :ndx :type xcb:CARD8)
+   (map-flags :initarg :map-flags :type xcb:CARD8)
+   (map-whichGroups :initarg :map-whichGroups :type xcb:CARD8)
+   (map-groups :initarg :map-groups :type xcb:CARD8)
+   (map-whichMods :initarg :map-whichMods :type xcb:CARD8)
+   (map-mods :initarg :map-mods :type xcb:CARD8)
+   (map-realMods :initarg :map-realMods :type xcb:CARD8)
+   (map-vmod :initarg :map-vmod :type xcb:CARD16)
+   (map-ctrls :initarg :map-ctrls :type xcb:CARD32)
+   (supported :initarg :supported :type xcb:BOOL)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:xkb:SetNamedIndicator
+  (xcb:-request)
+  ((~opcode :initform 16 :type xcb:-u1)
+   (deviceSpec :initarg :deviceSpec :type xcb:xkb:DeviceSpec)
+   (ledClass :initarg :ledClass :type xcb:xkb:LedClassSpec)
+   (ledID :initarg :ledID :type xcb:xkb:IDSpec)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (indicator :initarg :indicator :type xcb:ATOM)
+   (setState :initarg :setState :type xcb:BOOL)
+   (on :initarg :on :type xcb:BOOL)
+   (setMap :initarg :setMap :type xcb:BOOL)
+   (createMap :initarg :createMap :type xcb:BOOL)
+   (pad~1 :initform 1 :type xcb:-pad)
+   (map-flags :initarg :map-flags :type xcb:CARD8)
+   (map-whichGroups :initarg :map-whichGroups :type xcb:CARD8)
+   (map-groups :initarg :map-groups :type xcb:CARD8)
+   (map-whichMods :initarg :map-whichMods :type xcb:CARD8)
+   (map-realMods :initarg :map-realMods :type xcb:CARD8)
+   (map-vmods :initarg :map-vmods :type xcb:CARD16)
+   (map-ctrls :initarg :map-ctrls :type xcb:CARD32)))
+
+(defclass xcb:xkb:GetNames
+  (xcb:-request)
+  ((~opcode :initform 17 :type xcb:-u1)
+   (deviceSpec :initarg :deviceSpec :type xcb:xkb:DeviceSpec)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (which :initarg :which :type xcb:CARD32)))
+(defclass xcb:xkb:GetNames~reply
+  (xcb:-reply)
+  ((deviceID :initarg :deviceID :type xcb:CARD8)
+   (which :initarg :which :type xcb:CARD32)
+   (minKeyCode :initarg :minKeyCode :type xcb:KEYCODE)
+   (maxKeyCode :initarg :maxKeyCode :type xcb:KEYCODE)
+   (nTypes :initarg :nTypes :type xcb:CARD8)
+   (groupNames :initarg :groupNames :type xcb:CARD8)
+   (virtualMods :initarg :virtualMods :type xcb:CARD16)
+   (firstKey :initarg :firstKey :type xcb:KEYCODE)
+   (nKeys :initarg :nKeys :type xcb:CARD8)
+   (indicators :initarg :indicators :type xcb:CARD32)
+   (nRadioGroups :initarg :nRadioGroups :type xcb:CARD8)
+   (nKeyAliases :initarg :nKeyAliases :type xcb:CARD8)
+   (nKTLevels :initarg :nKTLevels :type xcb:CARD16)
+   (pad~0 :initform 4 :type xcb:-pad)
+   (valueList :initform
+             '(expression
+               (xcb:-fieldref 'which)
+               cases
+               ((xcb:xkb:NameDetail:Keycodes keycodesName)
+                (xcb:xkb:NameDetail:Geometry geometryName)
+                (xcb:xkb:NameDetail:Symbols symbolsName)
+                (xcb:xkb:NameDetail:PhysSymbols physSymbolsName)
+                (xcb:xkb:NameDetail:Types typesName)
+                (xcb:xkb:NameDetail:Compat compatName)
+                (xcb:xkb:NameDetail:KeyTypeNames typeNames)
+                (xcb:xkb:NameDetail:KTLevelNames nLevelsPerType alignment-pad 
ktLevelNames)
+                (xcb:xkb:NameDetail:IndicatorNames indicatorNames)
+                (xcb:xkb:NameDetail:VirtualModNames virtualModNames)
+                (xcb:xkb:NameDetail:GroupNames groups)
+                (xcb:xkb:NameDetail:KeyNames keyNames)
+                (xcb:xkb:NameDetail:KeyAliases keyAliases)
+                (xcb:xkb:NameDetail:RGNames radioGroupNames)))
+             :type xcb:-switch)
+   (keycodesName :initarg :keycodesName :type xcb:ATOM)
+   (geometryName :initarg :geometryName :type xcb:ATOM)
+   (symbolsName :initarg :symbolsName :type xcb:ATOM)
+   (physSymbolsName :initarg :physSymbolsName :type xcb:ATOM)
+   (typesName :initarg :typesName :type xcb:ATOM)
+   (compatName :initarg :compatName :type xcb:ATOM)
+   (typeNames :initarg :typeNames :type xcb:-ignore)
+   (typeNames~ :initform
+              '(name typeNames type xcb:ATOM size
+                     (xcb:-fieldref 'nTypes))
+              :type xcb:-list)
+   (nLevelsPerType :initarg :nLevelsPerType :type xcb:-ignore)
+   (nLevelsPerType~ :initform
+                   '(name nLevelsPerType type xcb:CARD8 size
+                          (xcb:-fieldref 'nTypes))
+                   :type xcb:-list)
+   (alignment-pad :initarg :alignment-pad :type xcb:-ignore)
+   (alignment-pad~ :initform
+                  '(name alignment-pad type xcb:CARD8 size
+                         (-
+                          (logand
+                           (+
+                            (xcb:-fieldref 'nTypes)
+                            3)
+                           (lognot
+                            (parse-expression
+                             (node-subnode node))))
+                          (xcb:-fieldref 'nTypes)))
+                  :type xcb:-list)
+   (ktLevelNames :initarg :ktLevelNames :type xcb:-ignore)
+   (ktLevelNames~ :initform
+                 '(name ktLevelNames type xcb:ATOM size
+                        (apply '+
+                               (slot-value obj 'nLevelsPerType)))
+                 :type xcb:-list)
+   (indicatorNames :initarg :indicatorNames :type xcb:-ignore)
+   (indicatorNames~ :initform
+                   '(name indicatorNames type xcb:ATOM size
+                          (xcb:-popcount
+                           (xcb:-fieldref 'indicators)))
+                   :type xcb:-list)
+   (virtualModNames :initarg :virtualModNames :type xcb:-ignore)
+   (virtualModNames~ :initform
+                    '(name virtualModNames type xcb:ATOM size
+                           (xcb:-popcount
+                            (xcb:-fieldref 'virtualMods)))
+                    :type xcb:-list)
+   (groups :initarg :groups :type xcb:-ignore)
+   (groups~ :initform
+           '(name groups type xcb:ATOM size
+                  (xcb:-popcount
+                   (xcb:-fieldref 'groupNames)))
+           :type xcb:-list)
+   (keyNames :initarg :keyNames :type xcb:-ignore)
+   (keyNames~ :initform
+             '(name keyNames type xcb:xkb:KeyName size
+                    (xcb:-fieldref 'nKeys))
+             :type xcb:-list)
+   (keyAliases :initarg :keyAliases :type xcb:-ignore)
+   (keyAliases~ :initform
+               '(name keyAliases type xcb:xkb:KeyAlias size
+                      (xcb:-fieldref 'nKeyAliases))
+               :type xcb:-list)
+   (radioGroupNames :initarg :radioGroupNames :type xcb:-ignore)
+   (radioGroupNames~ :initform
+                    '(name radioGroupNames type xcb:ATOM size
+                           (xcb:-fieldref 'nRadioGroups))
+                    :type xcb:-list)))
+
+(defclass xcb:xkb:SetNames
+  (xcb:-request)
+  ((~opcode :initform 18 :type xcb:-u1)
+   (deviceSpec :initarg :deviceSpec :type xcb:xkb:DeviceSpec)
+   (virtualMods :initarg :virtualMods :type xcb:CARD16)
+   (which :initarg :which :type xcb:CARD32)
+   (firstType :initarg :firstType :type xcb:CARD8)
+   (nTypes :initarg :nTypes :type xcb:CARD8)
+   (firstKTLevelt :initarg :firstKTLevelt :type xcb:CARD8)
+   (nKTLevels :initarg :nKTLevels :type xcb:CARD8)
+   (indicators :initarg :indicators :type xcb:CARD32)
+   (groupNames :initarg :groupNames :type xcb:CARD8)
+   (nRadioGroups :initarg :nRadioGroups :type xcb:CARD8)
+   (firstKey :initarg :firstKey :type xcb:KEYCODE)
+   (nKeys :initarg :nKeys :type xcb:CARD8)
+   (nKeyAliases :initarg :nKeyAliases :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (totalKTLevelNames :initarg :totalKTLevelNames :type xcb:CARD16)
+   (values :initform
+          '(expression
+            (xcb:-fieldref 'which)
+            cases
+            ((xcb:xkb:NameDetail:Keycodes keycodesName)
+             (xcb:xkb:NameDetail:Geometry geometryName)
+             (xcb:xkb:NameDetail:Symbols symbolsName)
+             (xcb:xkb:NameDetail:PhysSymbols physSymbolsName)
+             (xcb:xkb:NameDetail:Types typesName)
+             (xcb:xkb:NameDetail:Compat compatName)
+             (xcb:xkb:NameDetail:KeyTypeNames typeNames)
+             (xcb:xkb:NameDetail:KTLevelNames nLevelsPerType ktLevelNames)
+             (xcb:xkb:NameDetail:IndicatorNames indicatorNames)
+             (xcb:xkb:NameDetail:VirtualModNames virtualModNames)
+             (xcb:xkb:NameDetail:GroupNames groups)
+             (xcb:xkb:NameDetail:KeyNames keyNames)
+             (xcb:xkb:NameDetail:KeyAliases keyAliases)
+             (xcb:xkb:NameDetail:RGNames radioGroupNames)))
+          :type xcb:-switch)
+   (keycodesName :initarg :keycodesName :type xcb:ATOM)
+   (geometryName :initarg :geometryName :type xcb:ATOM)
+   (symbolsName :initarg :symbolsName :type xcb:ATOM)
+   (physSymbolsName :initarg :physSymbolsName :type xcb:ATOM)
+   (typesName :initarg :typesName :type xcb:ATOM)
+   (compatName :initarg :compatName :type xcb:ATOM)
+   (typeNames :initarg :typeNames :type xcb:-ignore)
+   (typeNames~ :initform
+              '(name typeNames type xcb:ATOM size
+                     (xcb:-fieldref 'nTypes))
+              :type xcb:-list)
+   (nLevelsPerType :initarg :nLevelsPerType :type xcb:-ignore)
+   (nLevelsPerType~ :initform
+                   '(name nLevelsPerType type xcb:CARD8 size
+                          (xcb:-fieldref 'nTypes))
+                   :type xcb:-list)
+   (ktLevelNames :initarg :ktLevelNames :type xcb:-ignore)
+   (ktLevelNames~ :initform
+                 '(name ktLevelNames type xcb:ATOM size
+                        (apply '+
+                               (slot-value obj 'nLevelsPerType)))
+                 :type xcb:-list)
+   (indicatorNames :initarg :indicatorNames :type xcb:-ignore)
+   (indicatorNames~ :initform
+                   '(name indicatorNames type xcb:ATOM size
+                          (xcb:-popcount
+                           (xcb:-fieldref 'indicators)))
+                   :type xcb:-list)
+   (virtualModNames :initarg :virtualModNames :type xcb:-ignore)
+   (virtualModNames~ :initform
+                    '(name virtualModNames type xcb:ATOM size
+                           (xcb:-popcount
+                            (xcb:-fieldref 'virtualMods)))
+                    :type xcb:-list)
+   (groups :initarg :groups :type xcb:-ignore)
+   (groups~ :initform
+           '(name groups type xcb:ATOM size
+                  (xcb:-popcount
+                   (xcb:-fieldref 'groupNames)))
+           :type xcb:-list)
+   (keyNames :initarg :keyNames :type xcb:-ignore)
+   (keyNames~ :initform
+             '(name keyNames type xcb:xkb:KeyName size
+                    (xcb:-fieldref 'nKeys))
+             :type xcb:-list)
+   (keyAliases :initarg :keyAliases :type xcb:-ignore)
+   (keyAliases~ :initform
+               '(name keyAliases type xcb:xkb:KeyAlias size
+                      (xcb:-fieldref 'nKeyAliases))
+               :type xcb:-list)
+   (radioGroupNames :initarg :radioGroupNames :type xcb:-ignore)
+   (radioGroupNames~ :initform
+                    '(name radioGroupNames type xcb:ATOM size
+                           (xcb:-fieldref 'nRadioGroups))
+                    :type xcb:-list)))
+
+(defclass xcb:xkb:PerClientFlags
+  (xcb:-request)
+  ((~opcode :initform 21 :type xcb:-u1)
+   (deviceSpec :initarg :deviceSpec :type xcb:xkb:DeviceSpec)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (change :initarg :change :type xcb:CARD32)
+   (value :initarg :value :type xcb:CARD32)
+   (ctrlsToChange :initarg :ctrlsToChange :type xcb:CARD32)
+   (autoCtrls :initarg :autoCtrls :type xcb:CARD32)
+   (autoCtrlsValues :initarg :autoCtrlsValues :type xcb:CARD32)))
+(defclass xcb:xkb:PerClientFlags~reply
+  (xcb:-reply)
+  ((deviceID :initarg :deviceID :type xcb:CARD8)
+   (supported :initarg :supported :type xcb:CARD32)
+   (value :initarg :value :type xcb:CARD32)
+   (autoCtrls :initarg :autoCtrls :type xcb:CARD32)
+   (autoCtrlsValues :initarg :autoCtrlsValues :type xcb:CARD32)
+   (pad~0 :initform 8 :type xcb:-pad)))
+
+(defclass xcb:xkb:ListComponents
+  (xcb:-request)
+  ((~opcode :initform 22 :type xcb:-u1)
+   (deviceSpec :initarg :deviceSpec :type xcb:xkb:DeviceSpec)
+   (maxNames :initarg :maxNames :type xcb:CARD16)))
+(defclass xcb:xkb:ListComponents~reply
+  (xcb:-reply)
+  ((deviceID :initarg :deviceID :type xcb:CARD8)
+   (nKeymaps :initarg :nKeymaps :type xcb:CARD16)
+   (nKeycodes :initarg :nKeycodes :type xcb:CARD16)
+   (nTypes :initarg :nTypes :type xcb:CARD16)
+   (nCompatMaps :initarg :nCompatMaps :type xcb:CARD16)
+   (nSymbols :initarg :nSymbols :type xcb:CARD16)
+   (nGeometries :initarg :nGeometries :type xcb:CARD16)
+   (extra :initarg :extra :type xcb:CARD16)
+   (pad~0 :initform 10 :type xcb:-pad)
+   (keymaps :initarg :keymaps :type xcb:-ignore)
+   (keymaps~ :initform
+            '(name keymaps type xcb:xkb:Listing size
+                   (xcb:-fieldref 'nKeymaps))
+            :type xcb:-list)
+   (keycodes :initarg :keycodes :type xcb:-ignore)
+   (keycodes~ :initform
+             '(name keycodes type xcb:xkb:Listing size
+                    (xcb:-fieldref 'nKeycodes))
+             :type xcb:-list)
+   (types :initarg :types :type xcb:-ignore)
+   (types~ :initform
+          '(name types type xcb:xkb:Listing size
+                 (xcb:-fieldref 'nTypes))
+          :type xcb:-list)
+   (compatMaps :initarg :compatMaps :type xcb:-ignore)
+   (compatMaps~ :initform
+               '(name compatMaps type xcb:xkb:Listing size
+                      (xcb:-fieldref 'nCompatMaps))
+               :type xcb:-list)
+   (symbols :initarg :symbols :type xcb:-ignore)
+   (symbols~ :initform
+            '(name symbols type xcb:xkb:Listing size
+                   (xcb:-fieldref 'nSymbols))
+            :type xcb:-list)
+   (geometries :initarg :geometries :type xcb:-ignore)
+   (geometries~ :initform
+               '(name geometries type xcb:xkb:Listing size
+                      (xcb:-fieldref 'nGeometries))
+               :type xcb:-list)))
+
+(defclass xcb:xkb:GetKbdByName
+  (xcb:-request)
+  ((~opcode :initform 23 :type xcb:-u1)
+   (deviceSpec :initarg :deviceSpec :type xcb:xkb:DeviceSpec)
+   (need :initarg :need :type xcb:CARD16)
+   (want :initarg :want :type xcb:CARD16)
+   (load :initarg :load :type xcb:BOOL)
+   (pad~0 :initform 1 :type xcb:-pad)))
+(defclass xcb:xkb:GetKbdByName~reply
+  (xcb:-reply)
+  ((deviceID :initarg :deviceID :type xcb:CARD8)
+   (minKeyCode :initarg :minKeyCode :type xcb:KEYCODE)
+   (maxKeyCode :initarg :maxKeyCode :type xcb:KEYCODE)
+   (loaded :initarg :loaded :type xcb:BOOL)
+   (newKeyboard :initarg :newKeyboard :type xcb:BOOL)
+   (found :initarg :found :type xcb:CARD16)
+   (reported :initarg :reported :type xcb:CARD16)
+   (pad~0 :initform 16 :type xcb:-pad)
+   (replies :initform
+           '(expression
+             (xcb:-fieldref 'reported)
+             cases
+             (((logior xcb:xkb:GBNDetail:Types xcb:xkb:GBNDetail:ClientSymbols 
xcb:xkb:GBNDetail:ServerSymbols)
+               nil getmap-type nil typeDeviceID nil getmap-sequence 
getmap-length nil pad~10 typeMinKeyCode typeMaxKeyCode present firstType nTypes 
totalTypes firstKeySym totalSyms nKeySyms firstKeyAction totalActions 
nKeyActions firstKeyBehavior nKeyBehaviors totalKeyBehaviors firstKeyExplicit 
nKeyExplicit totalKeyExplicit firstModMapKey nModMapKeys totalModMapKeys 
firstVModMapKey nVModMapKeys totalVModMapKeys pad~11 virtualMods map)
+              (xcb:xkb:GBNDetail:CompatMap nil compatmap-type compatDeviceID 
compatmap-sequence compatmap-length nil groupsRtrn pad~12 firstSIRtrn nSIRtrn 
nTotalSI pad~13 si-rtrn group-rtrn)
+              (xcb:xkb:GBNDetail:IndicatorMaps nil indicatormap-type 
indicatorDeviceID indicatormap-sequence indicatormap-length nil which 
realIndicators nIndicators pad~14 maps)
+              ((logior xcb:xkb:GBNDetail:KeyNames xcb:xkb:GBNDetail:OtherNames)
+               nil keyname-type keyDeviceID keyname-sequence keyname-length 
nil which* keyMinKeyCode keyMaxKeyCode nTypes* groupNames virtualMods* firstKey 
nKeys indicators nRadioGroups nKeyAliases nKTLevels pad~15 valueList)
+              (xcb:xkb:GBNDetail:Geometry nil geometry-type geometryDeviceID 
geometry-sequence geometry-length nil name geometryFound pad~16 widthMM 
heightMM nProperties nColors nShapes nSections nDoodads nKeyAliases* 
baseColorNdx labelColorNdx labelFont nil nil)))
+           :type xcb:-switch)
+   (getmap-type :initarg :getmap-type :type xcb:CARD8)
+   (typeDeviceID :initarg :typeDeviceID :type xcb:CARD8)
+   (getmap-sequence :initarg :getmap-sequence :type xcb:CARD16)
+   (getmap-length :initarg :getmap-length :type xcb:CARD32)
+   (pad~10 :initform 2 :type xcb:-pad)
+   (typeMinKeyCode :initarg :typeMinKeyCode :type xcb:KEYCODE)
+   (typeMaxKeyCode :initarg :typeMaxKeyCode :type xcb:KEYCODE)
+   (present :initarg :present :type xcb:CARD16)
+   (firstType :initarg :firstType :type xcb:CARD8)
+   (nTypes :initarg :nTypes :type xcb:CARD8)
+   (totalTypes :initarg :totalTypes :type xcb:CARD8)
+   (firstKeySym :initarg :firstKeySym :type xcb:KEYCODE)
+   (totalSyms :initarg :totalSyms :type xcb:CARD16)
+   (nKeySyms :initarg :nKeySyms :type xcb:CARD8)
+   (firstKeyAction :initarg :firstKeyAction :type xcb:KEYCODE)
+   (totalActions :initarg :totalActions :type xcb:CARD16)
+   (nKeyActions :initarg :nKeyActions :type xcb:CARD8)
+   (firstKeyBehavior :initarg :firstKeyBehavior :type xcb:KEYCODE)
+   (nKeyBehaviors :initarg :nKeyBehaviors :type xcb:CARD8)
+   (totalKeyBehaviors :initarg :totalKeyBehaviors :type xcb:CARD8)
+   (firstKeyExplicit :initarg :firstKeyExplicit :type xcb:KEYCODE)
+   (nKeyExplicit :initarg :nKeyExplicit :type xcb:CARD8)
+   (totalKeyExplicit :initarg :totalKeyExplicit :type xcb:CARD8)
+   (firstModMapKey :initarg :firstModMapKey :type xcb:KEYCODE)
+   (nModMapKeys :initarg :nModMapKeys :type xcb:CARD8)
+   (totalModMapKeys :initarg :totalModMapKeys :type xcb:CARD8)
+   (firstVModMapKey :initarg :firstVModMapKey :type xcb:KEYCODE)
+   (nVModMapKeys :initarg :nVModMapKeys :type xcb:CARD8)
+   (totalVModMapKeys :initarg :totalVModMapKeys :type xcb:CARD8)
+   (pad~11 :initform 1 :type xcb:-pad)
+   (virtualMods :initarg :virtualMods :type xcb:CARD16)
+   (map :initform
+       '(expression
+         (xcb:-fieldref 'present)
+         cases
+         ((xcb:xkb:MapPart:KeyTypes types-rtrn)
+          (xcb:xkb:MapPart:KeySyms syms-rtrn)
+          (xcb:xkb:MapPart:KeyActions acts-rtrn-count acts-rtrn-acts)
+          (xcb:xkb:MapPart:KeyBehaviors behaviors-rtrn)
+          (xcb:xkb:MapPart:VirtualMods vmods-rtrn)
+          (xcb:xkb:MapPart:ExplicitComponents explicit-rtrn)
+          (xcb:xkb:MapPart:ModifierMap modmap-rtrn)
+          (xcb:xkb:MapPart:VirtualModMap vmodmap-rtrn)))
+       :type xcb:-switch)
+   (types-rtrn :initarg :types-rtrn :type xcb:-ignore)
+   (types-rtrn~ :initform
+               '(name types-rtrn type xcb:xkb:KeyType size
+                      (xcb:-fieldref 'nTypes))
+               :type xcb:-list)
+   (syms-rtrn :initarg :syms-rtrn :type xcb:-ignore)
+   (syms-rtrn~ :initform
+              '(name syms-rtrn type xcb:xkb:KeySymMap size
+                     (xcb:-fieldref 'nKeySyms))
+              :type xcb:-list)
+   (acts-rtrn-count :initarg :acts-rtrn-count :type xcb:-ignore)
+   (acts-rtrn-count~ :initform
+                    '(name acts-rtrn-count type xcb:CARD8 size
+                           (xcb:-fieldref 'nKeyActions))
+                    :type xcb:-list)
+   (acts-rtrn-acts :initarg :acts-rtrn-acts :type xcb:-ignore)
+   (acts-rtrn-acts~ :initform
+                   '(name acts-rtrn-acts type xcb:xkb:Action size
+                          (xcb:-fieldref 'totalActions))
+                   :type xcb:-list)
+   (behaviors-rtrn :initarg :behaviors-rtrn :type xcb:-ignore)
+   (behaviors-rtrn~ :initform
+                   '(name behaviors-rtrn type xcb:xkb:SetBehavior size
+                          (xcb:-fieldref 'totalKeyBehaviors))
+                   :type xcb:-list)
+   (vmods-rtrn :initarg :vmods-rtrn :type xcb:-ignore)
+   (vmods-rtrn~ :initform
+               '(name vmods-rtrn type xcb:CARD8 size
+                      (xcb:-popcount
+                       (xcb:-fieldref 'virtualMods)))
+               :type xcb:-list)
+   (explicit-rtrn :initarg :explicit-rtrn :type xcb:-ignore)
+   (explicit-rtrn~ :initform
+                  '(name explicit-rtrn type xcb:xkb:SetExplicit size
+                         (xcb:-fieldref 'totalKeyExplicit))
+                  :type xcb:-list)
+   (modmap-rtrn :initarg :modmap-rtrn :type xcb:-ignore)
+   (modmap-rtrn~ :initform
+                '(name modmap-rtrn type xcb:xkb:KeyModMap size
+                       (xcb:-fieldref 'totalModMapKeys))
+                :type xcb:-list)
+   (vmodmap-rtrn :initarg :vmodmap-rtrn :type xcb:-ignore)
+   (vmodmap-rtrn~ :initform
+                 '(name vmodmap-rtrn type xcb:xkb:KeyVModMap size
+                        (xcb:-fieldref 'totalVModMapKeys))
+                 :type xcb:-list)
+   (compatmap-type :initarg :compatmap-type :type xcb:CARD8)
+   (compatDeviceID :initarg :compatDeviceID :type xcb:CARD8)
+   (compatmap-sequence :initarg :compatmap-sequence :type xcb:CARD16)
+   (compatmap-length :initarg :compatmap-length :type xcb:CARD32)
+   (groupsRtrn :initarg :groupsRtrn :type xcb:CARD8)
+   (pad~12 :initform 1 :type xcb:-pad)
+   (firstSIRtrn :initarg :firstSIRtrn :type xcb:CARD16)
+   (nSIRtrn :initarg :nSIRtrn :type xcb:CARD16)
+   (nTotalSI :initarg :nTotalSI :type xcb:CARD16)
+   (pad~13 :initform 16 :type xcb:-pad)
+   (si-rtrn :initarg :si-rtrn :type xcb:-ignore)
+   (si-rtrn~ :initform
+            '(name si-rtrn type xcb:xkb:SymInterpret size
+                   (xcb:-fieldref 'nSIRtrn))
+            :type xcb:-list)
+   (group-rtrn :initarg :group-rtrn :type xcb:-ignore)
+   (group-rtrn~ :initform
+               '(name group-rtrn type xcb:xkb:ModDef size
+                      (xcb:-popcount
+                       (xcb:-fieldref 'groupsRtrn)))
+               :type xcb:-list)
+   (indicatormap-type :initarg :indicatormap-type :type xcb:CARD8)
+   (indicatorDeviceID :initarg :indicatorDeviceID :type xcb:CARD8)
+   (indicatormap-sequence :initarg :indicatormap-sequence :type xcb:CARD16)
+   (indicatormap-length :initarg :indicatormap-length :type xcb:CARD32)
+   (which :initarg :which :type xcb:CARD32)
+   (realIndicators :initarg :realIndicators :type xcb:CARD32)
+   (nIndicators :initarg :nIndicators :type xcb:CARD8)
+   (pad~14 :initform 15 :type xcb:-pad)
+   (maps :initarg :maps :type xcb:-ignore)
+   (maps~ :initform
+         '(name maps type xcb:xkb:IndicatorMap size
+                (xcb:-fieldref 'nIndicators))
+         :type xcb:-list)
+   (keyname-type :initarg :keyname-type :type xcb:CARD8)
+   (keyDeviceID :initarg :keyDeviceID :type xcb:CARD8)
+   (keyname-sequence :initarg :keyname-sequence :type xcb:CARD16)
+   (keyname-length :initarg :keyname-length :type xcb:CARD32)
+   (which* :initarg :which* :type xcb:CARD32)
+   (keyMinKeyCode :initarg :keyMinKeyCode :type xcb:KEYCODE)
+   (keyMaxKeyCode :initarg :keyMaxKeyCode :type xcb:KEYCODE)
+   (nTypes* :initarg :nTypes* :type xcb:CARD8)
+   (groupNames :initarg :groupNames :type xcb:CARD8)
+   (virtualMods* :initarg :virtualMods* :type xcb:CARD16)
+   (firstKey :initarg :firstKey :type xcb:KEYCODE)
+   (nKeys :initarg :nKeys :type xcb:CARD8)
+   (indicators :initarg :indicators :type xcb:CARD32)
+   (nRadioGroups :initarg :nRadioGroups :type xcb:CARD8)
+   (nKeyAliases :initarg :nKeyAliases :type xcb:CARD8)
+   (nKTLevels :initarg :nKTLevels :type xcb:CARD16)
+   (pad~15 :initform 4 :type xcb:-pad)
+   (valueList :initform
+             '(expression
+               (xcb:-fieldref 'which)
+               cases
+               ((xcb:xkb:NameDetail:Keycodes keycodesName)
+                (xcb:xkb:NameDetail:Geometry geometryName)
+                (xcb:xkb:NameDetail:Symbols symbolsName)
+                (xcb:xkb:NameDetail:PhysSymbols physSymbolsName)
+                (xcb:xkb:NameDetail:Types typesName)
+                (xcb:xkb:NameDetail:Compat compatName)
+                (xcb:xkb:NameDetail:KeyTypeNames typeNames)
+                (xcb:xkb:NameDetail:KTLevelNames nLevelsPerType ktLevelNames)
+                (xcb:xkb:NameDetail:IndicatorNames indicatorNames)
+                (xcb:xkb:NameDetail:VirtualModNames virtualModNames)
+                (xcb:xkb:NameDetail:GroupNames groups)
+                (xcb:xkb:NameDetail:KeyNames keyNames)
+                (xcb:xkb:NameDetail:KeyAliases keyAliases)
+                (xcb:xkb:NameDetail:RGNames radioGroupNames)))
+             :type xcb:-switch)
+   (keycodesName :initarg :keycodesName :type xcb:ATOM)
+   (geometryName :initarg :geometryName :type xcb:ATOM)
+   (symbolsName :initarg :symbolsName :type xcb:ATOM)
+   (physSymbolsName :initarg :physSymbolsName :type xcb:ATOM)
+   (typesName :initarg :typesName :type xcb:ATOM)
+   (compatName :initarg :compatName :type xcb:ATOM)
+   (typeNames :initarg :typeNames :type xcb:-ignore)
+   (typeNames~ :initform
+              '(name typeNames type xcb:ATOM size
+                     (xcb:-fieldref 'nTypes))
+              :type xcb:-list)
+   (nLevelsPerType :initarg :nLevelsPerType :type xcb:-ignore)
+   (nLevelsPerType~ :initform
+                   '(name nLevelsPerType type xcb:CARD8 size
+                          (xcb:-fieldref 'nTypes))
+                   :type xcb:-list)
+   (ktLevelNames :initarg :ktLevelNames :type xcb:-ignore)
+   (ktLevelNames~ :initform
+                 '(name ktLevelNames type xcb:ATOM size
+                        (apply '+
+                               (slot-value obj 'nLevelsPerType)))
+                 :type xcb:-list)
+   (indicatorNames :initarg :indicatorNames :type xcb:-ignore)
+   (indicatorNames~ :initform
+                   '(name indicatorNames type xcb:ATOM size
+                          (xcb:-popcount
+                           (xcb:-fieldref 'indicators)))
+                   :type xcb:-list)
+   (virtualModNames :initarg :virtualModNames :type xcb:-ignore)
+   (virtualModNames~ :initform
+                    '(name virtualModNames type xcb:ATOM size
+                           (xcb:-popcount
+                            (xcb:-fieldref 'virtualMods)))
+                    :type xcb:-list)
+   (groups :initarg :groups :type xcb:-ignore)
+   (groups~ :initform
+           '(name groups type xcb:ATOM size
+                  (xcb:-popcount
+                   (xcb:-fieldref 'groupNames)))
+           :type xcb:-list)
+   (keyNames :initarg :keyNames :type xcb:-ignore)
+   (keyNames~ :initform
+             '(name keyNames type xcb:xkb:KeyName size
+                    (xcb:-fieldref 'nKeys))
+             :type xcb:-list)
+   (keyAliases :initarg :keyAliases :type xcb:-ignore)
+   (keyAliases~ :initform
+               '(name keyAliases type xcb:xkb:KeyAlias size
+                      (xcb:-fieldref 'nKeyAliases))
+               :type xcb:-list)
+   (radioGroupNames :initarg :radioGroupNames :type xcb:-ignore)
+   (radioGroupNames~ :initform
+                    '(name radioGroupNames type xcb:ATOM size
+                           (xcb:-fieldref 'nRadioGroups))
+                    :type xcb:-list)
+   (geometry-type :initarg :geometry-type :type xcb:CARD8)
+   (geometryDeviceID :initarg :geometryDeviceID :type xcb:CARD8)
+   (geometry-sequence :initarg :geometry-sequence :type xcb:CARD16)
+   (geometry-length :initarg :geometry-length :type xcb:CARD32)
+   (name :initarg :name :type xcb:ATOM)
+   (geometryFound :initarg :geometryFound :type xcb:BOOL)
+   (pad~16 :initform 1 :type xcb:-pad)
+   (widthMM :initarg :widthMM :type xcb:CARD16)
+   (heightMM :initarg :heightMM :type xcb:CARD16)
+   (nProperties :initarg :nProperties :type xcb:CARD16)
+   (nColors :initarg :nColors :type xcb:CARD16)
+   (nShapes :initarg :nShapes :type xcb:CARD16)
+   (nSections :initarg :nSections :type xcb:CARD16)
+   (nDoodads :initarg :nDoodads :type xcb:CARD16)
+   (nKeyAliases* :initarg :nKeyAliases* :type xcb:CARD16)
+   (baseColorNdx :initarg :baseColorNdx :type xcb:CARD8)
+   (labelColorNdx :initarg :labelColorNdx :type xcb:CARD8)
+   (labelFont :initarg :labelFont :type xcb:xkb:CountedString16)))
+
+(defclass xcb:xkb:GetDeviceInfo
+  (xcb:-request)
+  ((~opcode :initform 24 :type xcb:-u1)
+   (deviceSpec :initarg :deviceSpec :type xcb:xkb:DeviceSpec)
+   (wanted :initarg :wanted :type xcb:CARD16)
+   (allButtons :initarg :allButtons :type xcb:BOOL)
+   (firstButton :initarg :firstButton :type xcb:CARD8)
+   (nButtons :initarg :nButtons :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (ledClass :initarg :ledClass :type xcb:xkb:LedClassSpec)
+   (ledID :initarg :ledID :type xcb:xkb:IDSpec)))
+(defclass xcb:xkb:GetDeviceInfo~reply
+  (xcb:-reply)
+  ((deviceID :initarg :deviceID :type xcb:CARD8)
+   (present :initarg :present :type xcb:CARD16)
+   (supported :initarg :supported :type xcb:CARD16)
+   (unsupported :initarg :unsupported :type xcb:CARD16)
+   (nDeviceLedFBs :initarg :nDeviceLedFBs :type xcb:CARD16)
+   (firstBtnWanted :initarg :firstBtnWanted :type xcb:CARD8)
+   (nBtnsWanted :initarg :nBtnsWanted :type xcb:CARD8)
+   (firstBtnRtrn :initarg :firstBtnRtrn :type xcb:CARD8)
+   (nBtnsRtrn :initarg :nBtnsRtrn :type xcb:CARD8)
+   (totalBtns :initarg :totalBtns :type xcb:CARD8)
+   (hasOwnState :initarg :hasOwnState :type xcb:BOOL)
+   (dfltKbdFB :initarg :dfltKbdFB :type xcb:CARD16)
+   (dfltLedFB :initarg :dfltLedFB :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (devType :initarg :devType :type xcb:ATOM)
+   (nameLen :initarg :nameLen :type xcb:CARD16)
+   (name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:xkb:STRING8 size
+                (xcb:-fieldref 'nameLen))
+         :type xcb:-list)
+   (btnActions :initarg :btnActions :type xcb:-ignore)
+   (btnActions~ :initform
+               '(name btnActions type xcb:xkb:Action size
+                      (xcb:-fieldref 'nBtnsRtrn))
+               :type xcb:-list)
+   (leds :initarg :leds :type xcb:-ignore)
+   (leds~ :initform
+         '(name leds type xcb:xkb:DeviceLedInfo size
+                (xcb:-fieldref 'nDeviceLedFBs))
+         :type xcb:-list)))
+
+(defclass xcb:xkb:SetDeviceInfo
+  (xcb:-request)
+  ((~opcode :initform 25 :type xcb:-u1)
+   (deviceSpec :initarg :deviceSpec :type xcb:xkb:DeviceSpec)
+   (firstBtn :initarg :firstBtn :type xcb:CARD8)
+   (nBtns :initarg :nBtns :type xcb:CARD8)
+   (change :initarg :change :type xcb:CARD16)
+   (nDeviceLedFBs :initarg :nDeviceLedFBs :type xcb:CARD16)
+   (btnActions :initarg :btnActions :type xcb:-ignore)
+   (btnActions~ :initform
+               '(name btnActions type xcb:xkb:Action size
+                      (xcb:-fieldref 'nBtns))
+               :type xcb:-list)
+   (leds :initarg :leds :type xcb:-ignore)
+   (leds~ :initform
+         '(name leds type xcb:xkb:DeviceLedInfo size
+                (xcb:-fieldref 'nDeviceLedFBs))
+         :type xcb:-list)))
+
+(defclass xcb:xkb:SetDebuggingFlags
+  (xcb:-request)
+  ((~opcode :initform 101 :type xcb:-u1)
+   (msgLength :initarg :msgLength :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (affectFlags :initarg :affectFlags :type xcb:CARD32)
+   (flags :initarg :flags :type xcb:CARD32)
+   (affectCtrls :initarg :affectCtrls :type xcb:CARD32)
+   (ctrls :initarg :ctrls :type xcb:CARD32)
+   (message :initarg :message :type xcb:-ignore)
+   (message~ :initform
+            '(name message type xcb:xkb:STRING8 size
+                   (xcb:-fieldref 'msgLength))
+            :type xcb:-list)))
+(defclass xcb:xkb:SetDebuggingFlags~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (currentFlags :initarg :currentFlags :type xcb:CARD32)
+   (currentCtrls :initarg :currentCtrls :type xcb:CARD32)
+   (supportedFlags :initarg :supportedFlags :type xcb:CARD32)
+   (supportedCtrls :initarg :supportedCtrls :type xcb:CARD32)
+   (pad~1 :initform 8 :type xcb:-pad)))
+
+(defclass xcb:xkb:NewKeyboardNotify
+  (xcb:-event)
+  ((xkbType :initarg :xkbType :type xcb:CARD8)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (deviceID :initarg :deviceID :type xcb:CARD8)
+   (oldDeviceID :initarg :oldDeviceID :type xcb:CARD8)
+   (minKeyCode :initarg :minKeyCode :type xcb:KEYCODE)
+   (maxKeyCode :initarg :maxKeyCode :type xcb:KEYCODE)
+   (oldMinKeyCode :initarg :oldMinKeyCode :type xcb:KEYCODE)
+   (oldMaxKeyCode :initarg :oldMaxKeyCode :type xcb:KEYCODE)
+   (requestMajor :initarg :requestMajor :type xcb:CARD8)
+   (requestMinor :initarg :requestMinor :type xcb:CARD8)
+   (changed :initarg :changed :type xcb:CARD16)
+   (pad~0 :initform 14 :type xcb:-pad)))
+
+(defclass xcb:xkb:MapNotify
+  (xcb:-event)
+  ((xkbType :initarg :xkbType :type xcb:CARD8)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (deviceID :initarg :deviceID :type xcb:CARD8)
+   (ptrBtnActions :initarg :ptrBtnActions :type xcb:CARD8)
+   (changed :initarg :changed :type xcb:CARD16)
+   (minKeyCode :initarg :minKeyCode :type xcb:KEYCODE)
+   (maxKeyCode :initarg :maxKeyCode :type xcb:KEYCODE)
+   (firstType :initarg :firstType :type xcb:CARD8)
+   (nTypes :initarg :nTypes :type xcb:CARD8)
+   (firstKeySym :initarg :firstKeySym :type xcb:KEYCODE)
+   (nKeySyms :initarg :nKeySyms :type xcb:CARD8)
+   (firstKeyAct :initarg :firstKeyAct :type xcb:KEYCODE)
+   (nKeyActs :initarg :nKeyActs :type xcb:CARD8)
+   (firstKeyBehavior :initarg :firstKeyBehavior :type xcb:KEYCODE)
+   (nKeyBehavior :initarg :nKeyBehavior :type xcb:CARD8)
+   (firstKeyExplicit :initarg :firstKeyExplicit :type xcb:KEYCODE)
+   (nKeyExplicit :initarg :nKeyExplicit :type xcb:CARD8)
+   (firstModMapKey :initarg :firstModMapKey :type xcb:KEYCODE)
+   (nModMapKeys :initarg :nModMapKeys :type xcb:CARD8)
+   (firstVModMapKey :initarg :firstVModMapKey :type xcb:KEYCODE)
+   (nVModMapKeys :initarg :nVModMapKeys :type xcb:CARD8)
+   (virtualMods :initarg :virtualMods :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)))
+
+(defclass xcb:xkb:StateNotify
+  (xcb:-event)
+  ((xkbType :initarg :xkbType :type xcb:CARD8)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (deviceID :initarg :deviceID :type xcb:CARD8)
+   (mods :initarg :mods :type xcb:CARD8)
+   (baseMods :initarg :baseMods :type xcb:CARD8)
+   (latchedMods :initarg :latchedMods :type xcb:CARD8)
+   (lockedMods :initarg :lockedMods :type xcb:CARD8)
+   (group :initarg :group :type xcb:CARD8)
+   (baseGroup :initarg :baseGroup :type xcb:INT16)
+   (latchedGroup :initarg :latchedGroup :type xcb:INT16)
+   (lockedGroup :initarg :lockedGroup :type xcb:CARD8)
+   (compatState :initarg :compatState :type xcb:CARD8)
+   (grabMods :initarg :grabMods :type xcb:CARD8)
+   (compatGrabMods :initarg :compatGrabMods :type xcb:CARD8)
+   (lookupMods :initarg :lookupMods :type xcb:CARD8)
+   (compatLoockupMods :initarg :compatLoockupMods :type xcb:CARD8)
+   (ptrBtnState :initarg :ptrBtnState :type xcb:CARD16)
+   (changed :initarg :changed :type xcb:CARD16)
+   (keycode :initarg :keycode :type xcb:KEYCODE)
+   (eventType :initarg :eventType :type xcb:CARD8)
+   (requestMajor :initarg :requestMajor :type xcb:CARD8)
+   (requestMinor :initarg :requestMinor :type xcb:CARD8)))
+
+(defclass xcb:xkb:ControlsNotify
+  (xcb:-event)
+  ((xkbType :initarg :xkbType :type xcb:CARD8)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (deviceID :initarg :deviceID :type xcb:CARD8)
+   (numGroups :initarg :numGroups :type xcb:CARD8)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (changedControls :initarg :changedControls :type xcb:CARD32)
+   (enabledControls :initarg :enabledControls :type xcb:CARD32)
+   (enabledControlChanges :initarg :enabledControlChanges :type xcb:CARD32)
+   (keycode :initarg :keycode :type xcb:KEYCODE)
+   (eventType :initarg :eventType :type xcb:CARD8)
+   (requestMajor :initarg :requestMajor :type xcb:CARD8)
+   (requestMinor :initarg :requestMinor :type xcb:CARD8)
+   (pad~1 :initform 4 :type xcb:-pad)))
+
+(defclass xcb:xkb:IndicatorStateNotify
+  (xcb:-event)
+  ((xkbType :initarg :xkbType :type xcb:CARD8)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (deviceID :initarg :deviceID :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (state :initarg :state :type xcb:CARD32)
+   (stateChanged :initarg :stateChanged :type xcb:CARD32)
+   (pad~1 :initform 12 :type xcb:-pad)))
+
+(defclass xcb:xkb:IndicatorMapNotify
+  (xcb:-event)
+  ((xkbType :initarg :xkbType :type xcb:CARD8)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (deviceID :initarg :deviceID :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (state :initarg :state :type xcb:CARD32)
+   (mapChanged :initarg :mapChanged :type xcb:CARD32)
+   (pad~1 :initform 12 :type xcb:-pad)))
+
+(defclass xcb:xkb:NamesNotify
+  (xcb:-event)
+  ((xkbType :initarg :xkbType :type xcb:CARD8)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (deviceID :initarg :deviceID :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (changed :initarg :changed :type xcb:CARD16)
+   (firstType :initarg :firstType :type xcb:CARD8)
+   (nTypes :initarg :nTypes :type xcb:CARD8)
+   (firstLevelName :initarg :firstLevelName :type xcb:CARD8)
+   (nLevelNames :initarg :nLevelNames :type xcb:CARD8)
+   (pad~1 :initform 1 :type xcb:-pad)
+   (nRadioGroups :initarg :nRadioGroups :type xcb:CARD8)
+   (nKeyAliases :initarg :nKeyAliases :type xcb:CARD8)
+   (changedGroupNames :initarg :changedGroupNames :type xcb:CARD8)
+   (changedVirtualMods :initarg :changedVirtualMods :type xcb:CARD16)
+   (firstKey :initarg :firstKey :type xcb:KEYCODE)
+   (nKeys :initarg :nKeys :type xcb:CARD8)
+   (changedIndicators :initarg :changedIndicators :type xcb:CARD32)
+   (pad~2 :initform 4 :type xcb:-pad)))
+
+(defclass xcb:xkb:CompatMapNotify
+  (xcb:-event)
+  ((xkbType :initarg :xkbType :type xcb:CARD8)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (deviceID :initarg :deviceID :type xcb:CARD8)
+   (changedGroups :initarg :changedGroups :type xcb:CARD8)
+   (firstSI :initarg :firstSI :type xcb:CARD16)
+   (nSI :initarg :nSI :type xcb:CARD16)
+   (nTotalSI :initarg :nTotalSI :type xcb:CARD16)
+   (pad~0 :initform 16 :type xcb:-pad)))
+
+(defclass xcb:xkb:BellNotify
+  (xcb:-event)
+  ((xkbType :initarg :xkbType :type xcb:CARD8)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (deviceID :initarg :deviceID :type xcb:CARD8)
+   (bellClass :initarg :bellClass :type xcb:CARD8)
+   (bellID :initarg :bellID :type xcb:CARD8)
+   (percent :initarg :percent :type xcb:CARD8)
+   (pitch :initarg :pitch :type xcb:CARD16)
+   (duration :initarg :duration :type xcb:CARD16)
+   (name :initarg :name :type xcb:ATOM)
+   (window :initarg :window :type xcb:WINDOW)
+   (eventOnly :initarg :eventOnly :type xcb:BOOL)
+   (pad~0 :initform 7 :type xcb:-pad)))
+
+(defclass xcb:xkb:ActionMessage
+  (xcb:-event)
+  ((xkbType :initarg :xkbType :type xcb:CARD8)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (deviceID :initarg :deviceID :type xcb:CARD8)
+   (keycode :initarg :keycode :type xcb:KEYCODE)
+   (press :initarg :press :type xcb:BOOL)
+   (keyEventFollows :initarg :keyEventFollows :type xcb:BOOL)
+   (mods :initarg :mods :type xcb:CARD8)
+   (group :initarg :group :type xcb:CARD8)
+   (message :initarg :message :type xcb:-ignore)
+   (message~ :initform
+            '(name message type xcb:xkb:STRING8 size 8)
+            :type xcb:-list)
+   (pad~0 :initform 10 :type xcb:-pad)))
+
+(defclass xcb:xkb:AccessXNotify
+  (xcb:-event)
+  ((xkbType :initarg :xkbType :type xcb:CARD8)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (deviceID :initarg :deviceID :type xcb:CARD8)
+   (keycode :initarg :keycode :type xcb:KEYCODE)
+   (detailt :initarg :detailt :type xcb:CARD16)
+   (slowKeysDelay :initarg :slowKeysDelay :type xcb:CARD16)
+   (debounceDelay :initarg :debounceDelay :type xcb:CARD16)
+   (pad~0 :initform 16 :type xcb:-pad)))
+
+(defclass xcb:xkb:ExtensionDeviceNotify
+  (xcb:-event)
+  ((xkbType :initarg :xkbType :type xcb:CARD8)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (deviceID :initarg :deviceID :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (reason :initarg :reason :type xcb:CARD16)
+   (ledClass :initarg :ledClass :type xcb:CARD16)
+   (ledID :initarg :ledID :type xcb:CARD16)
+   (ledsDefined :initarg :ledsDefined :type xcb:CARD32)
+   (ledState :initarg :ledState :type xcb:CARD32)
+   (firstButton :initarg :firstButton :type xcb:CARD8)
+   (nButtons :initarg :nButtons :type xcb:CARD8)
+   (supported :initarg :supported :type xcb:CARD16)
+   (unsupported :initarg :unsupported :type xcb:CARD16)
+   (pad~1 :initform 2 :type xcb:-pad)))
+
+(defconst xcb:xkb:error-number-class-alist
+  '((0 . xcb:xkb:Keyboard))
+  "(error-number . error-class) alist")
+
+(defconst xcb:xkb:event-number-class-alist
+  '((0 . xcb:xkb:NewKeyboardNotify)
+    (1 . xcb:xkb:MapNotify)
+    (2 . xcb:xkb:StateNotify)
+    (3 . xcb:xkb:ControlsNotify)
+    (4 . xcb:xkb:IndicatorStateNotify)
+    (5 . xcb:xkb:IndicatorMapNotify)
+    (6 . xcb:xkb:NamesNotify)
+    (7 . xcb:xkb:CompatMapNotify)
+    (8 . xcb:xkb:BellNotify)
+    (9 . xcb:xkb:ActionMessage)
+    (10 . xcb:xkb:AccessXNotify)
+    (11 . xcb:xkb:ExtensionDeviceNotify))
+  "(event-number . event-class) alist")
+
+
+
+(provide 'xcb-xkb)
diff --git a/xcb-xprint.el b/xcb-xprint.el
new file mode 100644
index 0000000..1b95229
--- /dev/null
+++ b/xcb-xprint.el
@@ -0,0 +1,354 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `xprint.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:xprint:-extension-xname "XpExtension")
+(defconst xcb:xprint:-extension-name "XPrint")
+(defconst xcb:xprint:-major-version 1)
+(defconst xcb:xprint:-minor-version 0)
+
+(require 'xcb-xproto)
+
+(xcb:deftypealias 'xcb:xprint:STRING8 'xcb:char)
+
+(defclass xcb:xprint:PRINTER
+  (xcb:-struct)
+  ((nameLen :initarg :nameLen :type xcb:CARD32)
+   (name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:xprint:STRING8 size
+                (xcb:-fieldref 'nameLen))
+         :type xcb:-list)
+   (descLen :initarg :descLen :type xcb:CARD32)
+   (description :initarg :description :type xcb:-ignore)
+   (description~ :initform
+                '(name description type xcb:xprint:STRING8 size
+                       (xcb:-fieldref 'descLen))
+                :type xcb:-list)))
+
+(xcb:deftypealias 'xcb:xprint:PCONTEXT 'xcb:-u4)
+
+(defconst xcb:xprint:GetDoc:Finished 0)
+(defconst xcb:xprint:GetDoc:SecondConsumer 1)
+
+(defconst xcb:xprint:EvMask:NoEventMask 0)
+(defconst xcb:xprint:EvMask:PrintMask 1)
+(defconst xcb:xprint:EvMask:AttributeMask 2)
+
+(defconst xcb:xprint:Detail:StartJobNotify 1)
+(defconst xcb:xprint:Detail:EndJobNotify 2)
+(defconst xcb:xprint:Detail:StartDocNotify 3)
+(defconst xcb:xprint:Detail:EndDocNotify 4)
+(defconst xcb:xprint:Detail:StartPageNotify 5)
+(defconst xcb:xprint:Detail:EndPageNotify 6)
+
+(defconst xcb:xprint:Attr:JobAttr 1)
+(defconst xcb:xprint:Attr:DocAttr 2)
+(defconst xcb:xprint:Attr:PageAttr 3)
+(defconst xcb:xprint:Attr:PrinterAttr 4)
+(defconst xcb:xprint:Attr:ServerAttr 5)
+(defconst xcb:xprint:Attr:MediumAttr 6)
+(defconst xcb:xprint:Attr:SpoolerAttr 7)
+
+(defclass xcb:xprint:PrintQueryVersion
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)))
+(defclass xcb:xprint:PrintQueryVersion~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (major-version :initarg :major-version :type xcb:CARD16)
+   (minor-version :initarg :minor-version :type xcb:CARD16)))
+
+(defclass xcb:xprint:PrintGetPrinterList
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)
+   (printerNameLen :initarg :printerNameLen :type xcb:CARD32)
+   (localeLen :initarg :localeLen :type xcb:CARD32)
+   (printer-name :initarg :printer-name :type xcb:-ignore)
+   (printer-name~ :initform
+                 '(name printer-name type xcb:xprint:STRING8 size
+                        (xcb:-fieldref 'printerNameLen))
+                 :type xcb:-list)
+   (locale :initarg :locale :type xcb:-ignore)
+   (locale~ :initform
+           '(name locale type xcb:xprint:STRING8 size
+                  (xcb:-fieldref 'localeLen))
+           :type xcb:-list)))
+(defclass xcb:xprint:PrintGetPrinterList~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (listCount :initarg :listCount :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (printers :initarg :printers :type xcb:-ignore)
+   (printers~ :initform
+             '(name printers type xcb:xprint:PRINTER size
+                    (xcb:-fieldref 'listCount))
+             :type xcb:-list)))
+
+(defclass xcb:xprint:PrintRehashPrinterList
+  (xcb:-request)
+  ((~opcode :initform 20 :type xcb:-u1)))
+
+(defclass xcb:xprint:CreateContext
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)
+   (context-id :initarg :context-id :type xcb:CARD32)
+   (printerNameLen :initarg :printerNameLen :type xcb:CARD32)
+   (localeLen :initarg :localeLen :type xcb:CARD32)
+   (printerName :initarg :printerName :type xcb:-ignore)
+   (printerName~ :initform
+                '(name printerName type xcb:xprint:STRING8 size
+                       (xcb:-fieldref 'printerNameLen))
+                :type xcb:-list)
+   (locale :initarg :locale :type xcb:-ignore)
+   (locale~ :initform
+           '(name locale type xcb:xprint:STRING8 size
+                  (xcb:-fieldref 'localeLen))
+           :type xcb:-list)))
+
+(defclass xcb:xprint:PrintSetContext
+  (xcb:-request)
+  ((~opcode :initform 3 :type xcb:-u1)
+   (context :initarg :context :type xcb:CARD32)))
+
+(defclass xcb:xprint:PrintGetContext
+  (xcb:-request)
+  ((~opcode :initform 4 :type xcb:-u1)))
+(defclass xcb:xprint:PrintGetContext~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (context :initarg :context :type xcb:CARD32)))
+
+(defclass xcb:xprint:PrintDestroyContext
+  (xcb:-request)
+  ((~opcode :initform 5 :type xcb:-u1)
+   (context :initarg :context :type xcb:CARD32)))
+
+(defclass xcb:xprint:PrintGetScreenOfContext
+  (xcb:-request)
+  ((~opcode :initform 6 :type xcb:-u1)))
+(defclass xcb:xprint:PrintGetScreenOfContext~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (root :initarg :root :type xcb:WINDOW)))
+
+(defclass xcb:xprint:PrintStartJob
+  (xcb:-request)
+  ((~opcode :initform 7 :type xcb:-u1)
+   (output-mode :initarg :output-mode :type xcb:CARD8)))
+
+(defclass xcb:xprint:PrintEndJob
+  (xcb:-request)
+  ((~opcode :initform 8 :type xcb:-u1)
+   (cancel :initarg :cancel :type xcb:BOOL)))
+
+(defclass xcb:xprint:PrintStartDoc
+  (xcb:-request)
+  ((~opcode :initform 9 :type xcb:-u1)
+   (driver-mode :initarg :driver-mode :type xcb:CARD8)))
+
+(defclass xcb:xprint:PrintEndDoc
+  (xcb:-request)
+  ((~opcode :initform 10 :type xcb:-u1)
+   (cancel :initarg :cancel :type xcb:BOOL)))
+
+(defclass xcb:xprint:PrintPutDocumentData
+  (xcb:-request)
+  ((~opcode :initform 11 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (len-data :initarg :len-data :type xcb:CARD32)
+   (len-fmt :initarg :len-fmt :type xcb:CARD16)
+   (len-options :initarg :len-options :type xcb:CARD16)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:BYTE size
+                (xcb:-fieldref 'len-data))
+         :type xcb:-list)
+   (doc-format :initarg :doc-format :type xcb:-ignore)
+   (doc-format~ :initform
+               '(name doc-format type xcb:xprint:STRING8 size
+                      (xcb:-fieldref 'len-fmt))
+               :type xcb:-list)
+   (options :initarg :options :type xcb:-ignore)
+   (options~ :initform
+            '(name options type xcb:xprint:STRING8 size
+                   (xcb:-fieldref 'len-options))
+            :type xcb:-list)))
+
+(defclass xcb:xprint:PrintGetDocumentData
+  (xcb:-request)
+  ((~opcode :initform 12 :type xcb:-u1)
+   (context :initarg :context :type xcb:xprint:PCONTEXT)
+   (max-bytes :initarg :max-bytes :type xcb:CARD32)))
+(defclass xcb:xprint:PrintGetDocumentData~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (status-code :initarg :status-code :type xcb:CARD32)
+   (finished-flag :initarg :finished-flag :type xcb:CARD32)
+   (dataLen :initarg :dataLen :type xcb:CARD32)
+   (pad~1 :initform 12 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:BYTE size
+                (xcb:-fieldref 'dataLen))
+         :type xcb:-list)))
+
+(defclass xcb:xprint:PrintStartPage
+  (xcb:-request)
+  ((~opcode :initform 13 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)))
+
+(defclass xcb:xprint:PrintEndPage
+  (xcb:-request)
+  ((~opcode :initform 14 :type xcb:-u1)
+   (cancel :initarg :cancel :type xcb:BOOL)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:xprint:PrintSelectInput
+  (xcb:-request)
+  ((~opcode :initform 15 :type xcb:-u1)
+   (context :initarg :context :type xcb:xprint:PCONTEXT)
+   (event-mask :initarg :event-mask :type xcb:CARD32)))
+
+(defclass xcb:xprint:PrintInputSelected
+  (xcb:-request)
+  ((~opcode :initform 16 :type xcb:-u1)
+   (context :initarg :context :type xcb:xprint:PCONTEXT)))
+(defclass xcb:xprint:PrintInputSelected~reply
+  (xcb:-reply)
+  ((event-mask :initarg :event-mask :type xcb:CARD32)
+   (all-events-mask :initarg :all-events-mask :type xcb:CARD32)))
+
+(defclass xcb:xprint:PrintGetAttributes
+  (xcb:-request)
+  ((~opcode :initform 17 :type xcb:-u1)
+   (context :initarg :context :type xcb:xprint:PCONTEXT)
+   (pool :initarg :pool :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+(defclass xcb:xprint:PrintGetAttributes~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (stringLen :initarg :stringLen :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (attributes :initarg :attributes :type xcb:-ignore)
+   (attributes~ :initform
+               '(name attributes type xcb:xprint:STRING8 size
+                      (xcb:-fieldref 'stringLen))
+               :type xcb:-list)))
+
+(defclass xcb:xprint:PrintGetOneAttributes
+  (xcb:-request)
+  ((~opcode :initform 19 :type xcb:-u1)
+   (context :initarg :context :type xcb:xprint:PCONTEXT)
+   (nameLen :initarg :nameLen :type xcb:CARD32)
+   (pool :initarg :pool :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:xprint:STRING8 size
+                (xcb:-fieldref 'nameLen))
+         :type xcb:-list)))
+(defclass xcb:xprint:PrintGetOneAttributes~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (valueLen :initarg :valueLen :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (value :initarg :value :type xcb:-ignore)
+   (value~ :initform
+          '(name value type xcb:xprint:STRING8 size
+                 (xcb:-fieldref 'valueLen))
+          :type xcb:-list)))
+
+(defclass xcb:xprint:PrintSetAttributes
+  (xcb:-request)
+  ((~opcode :initform 18 :type xcb:-u1)
+   (context :initarg :context :type xcb:xprint:PCONTEXT)
+   (stringLen :initarg :stringLen :type xcb:CARD32)
+   (pool :initarg :pool :type xcb:CARD8)
+   (rule :initarg :rule :type xcb:CARD8)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (attributes :initarg :attributes :type xcb:-ignore)
+   (attributes~ :initform
+               '(name attributes type xcb:xprint:STRING8 size nil)
+               :type xcb:-list)))
+
+(defclass xcb:xprint:PrintGetPageDimensions
+  (xcb:-request)
+  ((~opcode :initform 21 :type xcb:-u1)
+   (context :initarg :context :type xcb:xprint:PCONTEXT)))
+(defclass xcb:xprint:PrintGetPageDimensions~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (offset-x :initarg :offset-x :type xcb:CARD16)
+   (offset-y :initarg :offset-y :type xcb:CARD16)
+   (reproducible-width :initarg :reproducible-width :type xcb:CARD16)
+   (reproducible-height :initarg :reproducible-height :type xcb:CARD16)))
+
+(defclass xcb:xprint:PrintQueryScreens
+  (xcb:-request)
+  ((~opcode :initform 22 :type xcb:-u1)))
+(defclass xcb:xprint:PrintQueryScreens~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (listCount :initarg :listCount :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (roots :initarg :roots :type xcb:-ignore)
+   (roots~ :initform
+          '(name roots type xcb:WINDOW size
+                 (xcb:-fieldref 'listCount))
+          :type xcb:-list)))
+
+(defclass xcb:xprint:PrintSetImageResolution
+  (xcb:-request)
+  ((~opcode :initform 23 :type xcb:-u1)
+   (context :initarg :context :type xcb:xprint:PCONTEXT)
+   (image-resolution :initarg :image-resolution :type xcb:CARD16)))
+(defclass xcb:xprint:PrintSetImageResolution~reply
+  (xcb:-reply)
+  ((status :initarg :status :type xcb:BOOL)
+   (previous-resolutions :initarg :previous-resolutions :type xcb:CARD16)))
+
+(defclass xcb:xprint:PrintGetImageResolution
+  (xcb:-request)
+  ((~opcode :initform 24 :type xcb:-u1)
+   (context :initarg :context :type xcb:xprint:PCONTEXT)))
+(defclass xcb:xprint:PrintGetImageResolution~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (image-resolution :initarg :image-resolution :type xcb:CARD16)))
+
+(defclass xcb:xprint:Notify
+  (xcb:-event)
+  ((detail :initarg :detail :type xcb:CARD8)
+   (context :initarg :context :type xcb:xprint:PCONTEXT)
+   (cancel :initarg :cancel :type xcb:BOOL)))
+
+(defclass xcb:xprint:AttributNotify
+  (xcb:-event)
+  ((detail :initarg :detail :type xcb:CARD8)
+   (context :initarg :context :type xcb:xprint:PCONTEXT)))
+
+(defclass xcb:xprint:BadContext
+  (xcb:-error)
+  nil)
+
+(defclass xcb:xprint:BadSequence
+  (xcb:-error)
+  nil)
+
+(defconst xcb:xprint:error-number-class-alist
+  '((0 . xcb:xprint:BadContext)
+    (1 . xcb:xprint:BadSequence))
+  "(error-number . error-class) alist")
+
+(defconst xcb:xprint:event-number-class-alist
+  '((0 . xcb:xprint:Notify)
+    (1 . xcb:xprint:AttributNotify))
+  "(event-number . event-class) alist")
+
+
+
+(provide 'xcb-xprint)
diff --git a/xcb-xproto.el b/xcb-xproto.el
new file mode 100644
index 0000000..a9a186d
--- /dev/null
+++ b/xcb-xproto.el
@@ -0,0 +1,2848 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `xproto.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defclass xcb:CHAR2B
+  (xcb:-struct)
+  ((byte1 :initarg :byte1 :type xcb:CARD8)
+   (byte2 :initarg :byte2 :type xcb:CARD8)))
+
+(xcb:deftypealias 'xcb:WINDOW 'xcb:-u4)
+
+(xcb:deftypealias 'xcb:PIXMAP 'xcb:-u4)
+
+(xcb:deftypealias 'xcb:CURSOR 'xcb:-u4)
+
+(xcb:deftypealias 'xcb:FONT 'xcb:-u4)
+
+(xcb:deftypealias 'xcb:GCONTEXT 'xcb:-u4)
+
+(xcb:deftypealias 'xcb:COLORMAP 'xcb:-u4)
+
+(xcb:deftypealias 'xcb:ATOM 'xcb:-u4)
+
+(xcb:deftypealias 'xcb:DRAWABLE 'xcb:-u4)
+
+(xcb:deftypealias 'xcb:FONTABLE 'xcb:-u4)
+
+(xcb:deftypealias 'xcb:BOOL32 'xcb:CARD32)
+
+(xcb:deftypealias 'xcb:VISUALID 'xcb:CARD32)
+
+(xcb:deftypealias 'xcb:TIMESTAMP 'xcb:CARD32)
+
+(xcb:deftypealias 'xcb:KEYSYM 'xcb:CARD32)
+
+(xcb:deftypealias 'xcb:KEYCODE 'xcb:CARD8)
+
+(xcb:deftypealias 'xcb:KEYCODE32 'xcb:CARD32)
+
+(xcb:deftypealias 'xcb:BUTTON 'xcb:CARD8)
+
+(defclass xcb:POINT
+  (xcb:-struct)
+  ((x :initarg :x :type xcb:INT16)
+   (y :initarg :y :type xcb:INT16)))
+
+(defclass xcb:RECTANGLE
+  (xcb:-struct)
+  ((x :initarg :x :type xcb:INT16)
+   (y :initarg :y :type xcb:INT16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)))
+
+(defclass xcb:ARC
+  (xcb:-struct)
+  ((x :initarg :x :type xcb:INT16)
+   (y :initarg :y :type xcb:INT16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (angle1 :initarg :angle1 :type xcb:INT16)
+   (angle2 :initarg :angle2 :type xcb:INT16)))
+
+(defclass xcb:FORMAT
+  (xcb:-struct)
+  ((depth :initarg :depth :type xcb:CARD8)
+   (bits-per-pixel :initarg :bits-per-pixel :type xcb:CARD8)
+   (scanline-pad :initarg :scanline-pad :type xcb:CARD8)
+   (pad~0 :initform 5 :type xcb:-pad)))
+
+(defconst xcb:VisualClass:StaticGray 0)
+(defconst xcb:VisualClass:GrayScale 1)
+(defconst xcb:VisualClass:StaticColor 2)
+(defconst xcb:VisualClass:PseudoColor 3)
+(defconst xcb:VisualClass:TrueColor 4)
+(defconst xcb:VisualClass:DirectColor 5)
+
+(defclass xcb:VISUALTYPE
+  (xcb:-struct)
+  ((visual-id :initarg :visual-id :type xcb:VISUALID)
+   (class :initarg :class :type xcb:CARD8)
+   (bits-per-rgb-value :initarg :bits-per-rgb-value :type xcb:CARD8)
+   (colormap-entries :initarg :colormap-entries :type xcb:CARD16)
+   (red-mask :initarg :red-mask :type xcb:CARD32)
+   (green-mask :initarg :green-mask :type xcb:CARD32)
+   (blue-mask :initarg :blue-mask :type xcb:CARD32)
+   (pad~0 :initform 4 :type xcb:-pad)))
+
+(defclass xcb:DEPTH
+  (xcb:-struct)
+  ((depth :initarg :depth :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (visuals-len :initarg :visuals-len :type xcb:CARD16)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (visuals :initarg :visuals :type xcb:-ignore)
+   (visuals~ :initform
+            '(name visuals type xcb:VISUALTYPE size
+                   (xcb:-fieldref 'visuals-len))
+            :type xcb:-list)))
+
+(defconst xcb:EventMask:NoEvent 0)
+(defconst xcb:EventMask:KeyPress 1)
+(defconst xcb:EventMask:KeyRelease 2)
+(defconst xcb:EventMask:ButtonPress 4)
+(defconst xcb:EventMask:ButtonRelease 8)
+(defconst xcb:EventMask:EnterWindow 16)
+(defconst xcb:EventMask:LeaveWindow 32)
+(defconst xcb:EventMask:PointerMotion 64)
+(defconst xcb:EventMask:PointerMotionHint 128)
+(defconst xcb:EventMask:Button1Motion 256)
+(defconst xcb:EventMask:Button2Motion 512)
+(defconst xcb:EventMask:Button3Motion 1024)
+(defconst xcb:EventMask:Button4Motion 2048)
+(defconst xcb:EventMask:Button5Motion 4096)
+(defconst xcb:EventMask:ButtonMotion 8192)
+(defconst xcb:EventMask:KeymapState 16384)
+(defconst xcb:EventMask:Exposure 32768)
+(defconst xcb:EventMask:VisibilityChange 65536)
+(defconst xcb:EventMask:StructureNotify 131072)
+(defconst xcb:EventMask:ResizeRedirect 262144)
+(defconst xcb:EventMask:SubstructureNotify 524288)
+(defconst xcb:EventMask:SubstructureRedirect 1048576)
+(defconst xcb:EventMask:FocusChange 2097152)
+(defconst xcb:EventMask:PropertyChange 4194304)
+(defconst xcb:EventMask:ColorMapChange 8388608)
+(defconst xcb:EventMask:OwnerGrabButton 16777216)
+
+(defconst xcb:BackingStore:NotUseful 0)
+(defconst xcb:BackingStore:WhenMapped 1)
+(defconst xcb:BackingStore:Always 2)
+
+(defclass xcb:SCREEN
+  (xcb:-struct)
+  ((root :initarg :root :type xcb:WINDOW)
+   (default-colormap :initarg :default-colormap :type xcb:COLORMAP)
+   (white-pixel :initarg :white-pixel :type xcb:CARD32)
+   (black-pixel :initarg :black-pixel :type xcb:CARD32)
+   (current-input-masks :initarg :current-input-masks :type xcb:CARD32)
+   (width-in-pixels :initarg :width-in-pixels :type xcb:CARD16)
+   (height-in-pixels :initarg :height-in-pixels :type xcb:CARD16)
+   (width-in-millimeters :initarg :width-in-millimeters :type xcb:CARD16)
+   (height-in-millimeters :initarg :height-in-millimeters :type xcb:CARD16)
+   (min-installed-maps :initarg :min-installed-maps :type xcb:CARD16)
+   (max-installed-maps :initarg :max-installed-maps :type xcb:CARD16)
+   (root-visual :initarg :root-visual :type xcb:VISUALID)
+   (backing-stores :initarg :backing-stores :type xcb:BYTE)
+   (save-unders :initarg :save-unders :type xcb:BOOL)
+   (root-depth :initarg :root-depth :type xcb:CARD8)
+   (allowed-depths-len :initarg :allowed-depths-len :type xcb:CARD8)
+   (allowed-depths :initarg :allowed-depths :type xcb:-ignore)
+   (allowed-depths~ :initform
+                   '(name allowed-depths type xcb:DEPTH size
+                          (xcb:-fieldref 'allowed-depths-len))
+                   :type xcb:-list)))
+
+(defclass xcb:SetupRequest
+  (xcb:-struct)
+  ((byte-order :initarg :byte-order :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (protocol-major-version :initarg :protocol-major-version :type xcb:CARD16)
+   (protocol-minor-version :initarg :protocol-minor-version :type xcb:CARD16)
+   (authorization-protocol-name-len :initarg :authorization-protocol-name-len 
:type xcb:CARD16)
+   (authorization-protocol-data-len :initarg :authorization-protocol-data-len 
:type xcb:CARD16)
+   (pad~1 :initform 2 :type xcb:-pad)
+   (authorization-protocol-name :initarg :authorization-protocol-name :type 
xcb:-ignore)
+   (authorization-protocol-name~ :initform
+                                '(name authorization-protocol-name type 
xcb:char size
+                                       (xcb:-fieldref 
'authorization-protocol-name-len))
+                                :type xcb:-list)
+   (authorization-protocol-data :initarg :authorization-protocol-data :type 
xcb:-ignore)
+   (authorization-protocol-data~ :initform
+                                '(name authorization-protocol-data type 
xcb:char size
+                                       (xcb:-fieldref 
'authorization-protocol-data-len))
+                                :type xcb:-list)))
+
+(defclass xcb:SetupFailed
+  (xcb:-struct)
+  ((status :initarg :status :type xcb:CARD8)
+   (reason-len :initarg :reason-len :type xcb:CARD8)
+   (protocol-major-version :initarg :protocol-major-version :type xcb:CARD16)
+   (protocol-minor-version :initarg :protocol-minor-version :type xcb:CARD16)
+   (length :initarg :length :type xcb:CARD16)
+   (reason :initarg :reason :type xcb:-ignore)
+   (reason~ :initform
+           '(name reason type xcb:char size
+                  (xcb:-fieldref 'reason-len))
+           :type xcb:-list)))
+
+(defclass xcb:SetupAuthenticate
+  (xcb:-struct)
+  ((status :initarg :status :type xcb:CARD8)
+   (pad~0 :initform 5 :type xcb:-pad)
+   (length :initarg :length :type xcb:CARD16)
+   (reason :initarg :reason :type xcb:-ignore)
+   (reason~ :initform
+           '(name reason type xcb:char size
+                  (*
+                   (xcb:-fieldref 'length)
+                   4))
+           :type xcb:-list)))
+
+(defconst xcb:ImageOrder:LSBFirst 0)
+(defconst xcb:ImageOrder:MSBFirst 1)
+
+(defclass xcb:Setup
+  (xcb:-struct)
+  ((status :initarg :status :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (protocol-major-version :initarg :protocol-major-version :type xcb:CARD16)
+   (protocol-minor-version :initarg :protocol-minor-version :type xcb:CARD16)
+   (length :initarg :length :type xcb:CARD16)
+   (release-number :initarg :release-number :type xcb:CARD32)
+   (resource-id-base :initarg :resource-id-base :type xcb:CARD32)
+   (resource-id-mask :initarg :resource-id-mask :type xcb:CARD32)
+   (motion-buffer-size :initarg :motion-buffer-size :type xcb:CARD32)
+   (vendor-len :initarg :vendor-len :type xcb:CARD16)
+   (maximum-request-length :initarg :maximum-request-length :type xcb:CARD16)
+   (roots-len :initarg :roots-len :type xcb:CARD8)
+   (pixmap-formats-len :initarg :pixmap-formats-len :type xcb:CARD8)
+   (image-byte-order :initarg :image-byte-order :type xcb:CARD8)
+   (bitmap-format-bit-order :initarg :bitmap-format-bit-order :type xcb:CARD8)
+   (bitmap-format-scanline-unit :initarg :bitmap-format-scanline-unit :type 
xcb:CARD8)
+   (bitmap-format-scanline-pad :initarg :bitmap-format-scanline-pad :type 
xcb:CARD8)
+   (min-keycode :initarg :min-keycode :type xcb:KEYCODE)
+   (max-keycode :initarg :max-keycode :type xcb:KEYCODE)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (vendor :initarg :vendor :type xcb:-ignore)
+   (vendor~ :initform
+           '(name vendor type xcb:char size
+                  (xcb:-fieldref 'vendor-len))
+           :type xcb:-list)
+   (pixmap-formats :initarg :pixmap-formats :type xcb:-ignore)
+   (pixmap-formats~ :initform
+                   '(name pixmap-formats type xcb:FORMAT size
+                          (xcb:-fieldref 'pixmap-formats-len))
+                   :type xcb:-list)
+   (roots :initarg :roots :type xcb:-ignore)
+   (roots~ :initform
+          '(name roots type xcb:SCREEN size
+                 (xcb:-fieldref 'roots-len))
+          :type xcb:-list)))
+
+(defconst xcb:ModMask:Shift 1)
+(defconst xcb:ModMask:Lock 2)
+(defconst xcb:ModMask:Control 4)
+(defconst xcb:ModMask:1 8)
+(defconst xcb:ModMask:2 16)
+(defconst xcb:ModMask:3 32)
+(defconst xcb:ModMask:4 64)
+(defconst xcb:ModMask:5 128)
+(defconst xcb:ModMask:Any 32768)
+
+(defconst xcb:KeyButMask:Shift 1)
+(defconst xcb:KeyButMask:Lock 2)
+(defconst xcb:KeyButMask:Control 4)
+(defconst xcb:KeyButMask:Mod1 8)
+(defconst xcb:KeyButMask:Mod2 16)
+(defconst xcb:KeyButMask:Mod3 32)
+(defconst xcb:KeyButMask:Mod4 64)
+(defconst xcb:KeyButMask:Mod5 128)
+(defconst xcb:KeyButMask:Button1 256)
+(defconst xcb:KeyButMask:Button2 512)
+(defconst xcb:KeyButMask:Button3 1024)
+(defconst xcb:KeyButMask:Button4 2048)
+(defconst xcb:KeyButMask:Button5 4096)
+
+(defconst xcb:Window:None 0)
+
+(defclass xcb:KeyPress
+  (xcb:-event)
+  ((detail :initarg :detail :type xcb:KEYCODE)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (root :initarg :root :type xcb:WINDOW)
+   (event :initarg :event :type xcb:WINDOW)
+   (child :initarg :child :type xcb:WINDOW)
+   (root-x :initarg :root-x :type xcb:INT16)
+   (root-y :initarg :root-y :type xcb:INT16)
+   (event-x :initarg :event-x :type xcb:INT16)
+   (event-y :initarg :event-y :type xcb:INT16)
+   (state :initarg :state :type xcb:CARD16)
+   (same-screen :initarg :same-screen :type xcb:BOOL)
+   (pad~0 :initform 1 :type xcb:-pad)))
+
+(defclass xcb:KeyRelease
+  (xcb:-event xcb:KeyPress)
+  nil)
+
+(defconst xcb:ButtonMask:1 256)
+(defconst xcb:ButtonMask:2 512)
+(defconst xcb:ButtonMask:3 1024)
+(defconst xcb:ButtonMask:4 2048)
+(defconst xcb:ButtonMask:5 4096)
+(defconst xcb:ButtonMask:Any 32768)
+
+(defclass xcb:ButtonPress
+  (xcb:-event)
+  ((detail :initarg :detail :type xcb:BUTTON)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (root :initarg :root :type xcb:WINDOW)
+   (event :initarg :event :type xcb:WINDOW)
+   (child :initarg :child :type xcb:WINDOW)
+   (root-x :initarg :root-x :type xcb:INT16)
+   (root-y :initarg :root-y :type xcb:INT16)
+   (event-x :initarg :event-x :type xcb:INT16)
+   (event-y :initarg :event-y :type xcb:INT16)
+   (state :initarg :state :type xcb:CARD16)
+   (same-screen :initarg :same-screen :type xcb:BOOL)
+   (pad~0 :initform 1 :type xcb:-pad)))
+
+(defclass xcb:ButtonRelease
+  (xcb:-event xcb:ButtonPress)
+  nil)
+
+(defconst xcb:Motion:Normal 0)
+(defconst xcb:Motion:Hint 1)
+
+(defclass xcb:MotionNotify
+  (xcb:-event)
+  ((detail :initarg :detail :type xcb:BYTE)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (root :initarg :root :type xcb:WINDOW)
+   (event :initarg :event :type xcb:WINDOW)
+   (child :initarg :child :type xcb:WINDOW)
+   (root-x :initarg :root-x :type xcb:INT16)
+   (root-y :initarg :root-y :type xcb:INT16)
+   (event-x :initarg :event-x :type xcb:INT16)
+   (event-y :initarg :event-y :type xcb:INT16)
+   (state :initarg :state :type xcb:CARD16)
+   (same-screen :initarg :same-screen :type xcb:BOOL)
+   (pad~0 :initform 1 :type xcb:-pad)))
+
+(defconst xcb:NotifyDetail:Ancestor 0)
+(defconst xcb:NotifyDetail:Virtual 1)
+(defconst xcb:NotifyDetail:Inferior 2)
+(defconst xcb:NotifyDetail:Nonlinear 3)
+(defconst xcb:NotifyDetail:NonlinearVirtual 4)
+(defconst xcb:NotifyDetail:Pointer 5)
+(defconst xcb:NotifyDetail:PointerRoot 6)
+(defconst xcb:NotifyDetail:None 7)
+
+(defconst xcb:NotifyMode:Normal 0)
+(defconst xcb:NotifyMode:Grab 1)
+(defconst xcb:NotifyMode:Ungrab 2)
+(defconst xcb:NotifyMode:WhileGrabbed 3)
+
+(defclass xcb:EnterNotify
+  (xcb:-event)
+  ((detail :initarg :detail :type xcb:BYTE)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (root :initarg :root :type xcb:WINDOW)
+   (event :initarg :event :type xcb:WINDOW)
+   (child :initarg :child :type xcb:WINDOW)
+   (root-x :initarg :root-x :type xcb:INT16)
+   (root-y :initarg :root-y :type xcb:INT16)
+   (event-x :initarg :event-x :type xcb:INT16)
+   (event-y :initarg :event-y :type xcb:INT16)
+   (state :initarg :state :type xcb:CARD16)
+   (mode :initarg :mode :type xcb:BYTE)
+   (same-screen-focus :initarg :same-screen-focus :type xcb:BYTE)))
+
+(defclass xcb:LeaveNotify
+  (xcb:-event xcb:EnterNotify)
+  nil)
+
+(defclass xcb:FocusIn
+  (xcb:-event)
+  ((detail :initarg :detail :type xcb:BYTE)
+   (event :initarg :event :type xcb:WINDOW)
+   (mode :initarg :mode :type xcb:BYTE)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:FocusOut
+  (xcb:-event xcb:FocusIn)
+  nil)
+
+(defclass xcb:KeymapNotify
+  (xcb:-event)
+  ((keys :initarg :keys :type xcb:-ignore)
+   (keys~ :initform
+         '(name keys type xcb:CARD8 size 31)
+         :type xcb:-list)))
+
+(defclass xcb:Expose
+  (xcb:-event)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (window :initarg :window :type xcb:WINDOW)
+   (x :initarg :x :type xcb:CARD16)
+   (y :initarg :y :type xcb:CARD16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (count :initarg :count :type xcb:CARD16)
+   (pad~1 :initform 2 :type xcb:-pad)))
+
+(defclass xcb:GraphicsExposure
+  (xcb:-event)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (x :initarg :x :type xcb:CARD16)
+   (y :initarg :y :type xcb:CARD16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (minor-opcode :initarg :minor-opcode :type xcb:CARD16)
+   (count :initarg :count :type xcb:CARD16)
+   (major-opcode :initarg :major-opcode :type xcb:CARD8)
+   (pad~1 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:NoExposure
+  (xcb:-event)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (minor-opcode :initarg :minor-opcode :type xcb:CARD16)
+   (major-opcode :initarg :major-opcode :type xcb:CARD8)
+   (pad~1 :initform 1 :type xcb:-pad)))
+
+(defconst xcb:Visibility:Unobscured 0)
+(defconst xcb:Visibility:PartiallyObscured 1)
+(defconst xcb:Visibility:FullyObscured 2)
+
+(defclass xcb:VisibilityNotify
+  (xcb:-event)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (window :initarg :window :type xcb:WINDOW)
+   (state :initarg :state :type xcb:BYTE)
+   (pad~1 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:CreateNotify
+  (xcb:-event)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (parent :initarg :parent :type xcb:WINDOW)
+   (window :initarg :window :type xcb:WINDOW)
+   (x :initarg :x :type xcb:INT16)
+   (y :initarg :y :type xcb:INT16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (border-width :initarg :border-width :type xcb:CARD16)
+   (override-redirect :initarg :override-redirect :type xcb:BOOL)
+   (pad~1 :initform 1 :type xcb:-pad)))
+
+(defclass xcb:DestroyNotify
+  (xcb:-event)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (event :initarg :event :type xcb:WINDOW)
+   (window :initarg :window :type xcb:WINDOW)))
+
+(defclass xcb:UnmapNotify
+  (xcb:-event)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (event :initarg :event :type xcb:WINDOW)
+   (window :initarg :window :type xcb:WINDOW)
+   (from-configure :initarg :from-configure :type xcb:BOOL)
+   (pad~1 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:MapNotify
+  (xcb:-event)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (event :initarg :event :type xcb:WINDOW)
+   (window :initarg :window :type xcb:WINDOW)
+   (override-redirect :initarg :override-redirect :type xcb:BOOL)
+   (pad~1 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:MapRequest
+  (xcb:-event)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (parent :initarg :parent :type xcb:WINDOW)
+   (window :initarg :window :type xcb:WINDOW)))
+
+(defclass xcb:ReparentNotify
+  (xcb:-event)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (event :initarg :event :type xcb:WINDOW)
+   (window :initarg :window :type xcb:WINDOW)
+   (parent :initarg :parent :type xcb:WINDOW)
+   (x :initarg :x :type xcb:INT16)
+   (y :initarg :y :type xcb:INT16)
+   (override-redirect :initarg :override-redirect :type xcb:BOOL)
+   (pad~1 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:ConfigureNotify
+  (xcb:-event)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (event :initarg :event :type xcb:WINDOW)
+   (window :initarg :window :type xcb:WINDOW)
+   (above-sibling :initarg :above-sibling :type xcb:WINDOW)
+   (x :initarg :x :type xcb:INT16)
+   (y :initarg :y :type xcb:INT16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (border-width :initarg :border-width :type xcb:CARD16)
+   (override-redirect :initarg :override-redirect :type xcb:BOOL)
+   (pad~1 :initform 1 :type xcb:-pad)))
+
+(defclass xcb:ConfigureRequest
+  (xcb:-event)
+  ((stack-mode :initarg :stack-mode :type xcb:BYTE)
+   (parent :initarg :parent :type xcb:WINDOW)
+   (window :initarg :window :type xcb:WINDOW)
+   (sibling :initarg :sibling :type xcb:WINDOW)
+   (x :initarg :x :type xcb:INT16)
+   (y :initarg :y :type xcb:INT16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (border-width :initarg :border-width :type xcb:CARD16)
+   (value-mask :initarg :value-mask :type xcb:CARD16)))
+
+(defclass xcb:GravityNotify
+  (xcb:-event)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (event :initarg :event :type xcb:WINDOW)
+   (window :initarg :window :type xcb:WINDOW)
+   (x :initarg :x :type xcb:INT16)
+   (y :initarg :y :type xcb:INT16)))
+
+(defclass xcb:ResizeRequest
+  (xcb:-event)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (window :initarg :window :type xcb:WINDOW)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)))
+
+(defconst xcb:Place:OnTop 0)
+(defconst xcb:Place:OnBottom 1)
+
+(defclass xcb:CirculateNotify
+  (xcb:-event)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (event :initarg :event :type xcb:WINDOW)
+   (window :initarg :window :type xcb:WINDOW)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (place :initarg :place :type xcb:BYTE)
+   (pad~2 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:CirculateRequest
+  (xcb:-event xcb:CirculateNotify)
+  nil)
+
+(defconst xcb:Property:NewValue 0)
+(defconst xcb:Property:Delete 1)
+
+(defclass xcb:PropertyNotify
+  (xcb:-event)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (window :initarg :window :type xcb:WINDOW)
+   (atom :initarg :atom :type xcb:ATOM)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (state :initarg :state :type xcb:BYTE)
+   (pad~1 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:SelectionClear
+  (xcb:-event)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (owner :initarg :owner :type xcb:WINDOW)
+   (selection :initarg :selection :type xcb:ATOM)))
+
+(defconst xcb:Time:CurrentTime 0)
+
+(defconst xcb:Atom:None 0)
+(defconst xcb:Atom:Any 0)
+(defconst xcb:Atom:PRIMARY 1)
+(defconst xcb:Atom:SECONDARY 2)
+(defconst xcb:Atom:ARC 3)
+(defconst xcb:Atom:ATOM 4)
+(defconst xcb:Atom:BITMAP 5)
+(defconst xcb:Atom:CARDINAL 6)
+(defconst xcb:Atom:COLORMAP 7)
+(defconst xcb:Atom:CURSOR 8)
+(defconst xcb:Atom:CUT_BUFFER0 9)
+(defconst xcb:Atom:CUT_BUFFER1 10)
+(defconst xcb:Atom:CUT_BUFFER2 11)
+(defconst xcb:Atom:CUT_BUFFER3 12)
+(defconst xcb:Atom:CUT_BUFFER4 13)
+(defconst xcb:Atom:CUT_BUFFER5 14)
+(defconst xcb:Atom:CUT_BUFFER6 15)
+(defconst xcb:Atom:CUT_BUFFER7 16)
+(defconst xcb:Atom:DRAWABLE 17)
+(defconst xcb:Atom:FONT 18)
+(defconst xcb:Atom:INTEGER 19)
+(defconst xcb:Atom:PIXMAP 20)
+(defconst xcb:Atom:POINT 21)
+(defconst xcb:Atom:RECTANGLE 22)
+(defconst xcb:Atom:RESOURCE_MANAGER 23)
+(defconst xcb:Atom:RGB_COLOR_MAP 24)
+(defconst xcb:Atom:RGB_BEST_MAP 25)
+(defconst xcb:Atom:RGB_BLUE_MAP 26)
+(defconst xcb:Atom:RGB_DEFAULT_MAP 27)
+(defconst xcb:Atom:RGB_GRAY_MAP 28)
+(defconst xcb:Atom:RGB_GREEN_MAP 29)
+(defconst xcb:Atom:RGB_RED_MAP 30)
+(defconst xcb:Atom:STRING 31)
+(defconst xcb:Atom:VISUALID 32)
+(defconst xcb:Atom:WINDOW 33)
+(defconst xcb:Atom:WM_COMMAND 34)
+(defconst xcb:Atom:WM_HINTS 35)
+(defconst xcb:Atom:WM_CLIENT_MACHINE 36)
+(defconst xcb:Atom:WM_ICON_NAME 37)
+(defconst xcb:Atom:WM_ICON_SIZE 38)
+(defconst xcb:Atom:WM_NAME 39)
+(defconst xcb:Atom:WM_NORMAL_HINTS 40)
+(defconst xcb:Atom:WM_SIZE_HINTS 41)
+(defconst xcb:Atom:WM_ZOOM_HINTS 42)
+(defconst xcb:Atom:MIN_SPACE 43)
+(defconst xcb:Atom:NORM_SPACE 44)
+(defconst xcb:Atom:MAX_SPACE 45)
+(defconst xcb:Atom:END_SPACE 46)
+(defconst xcb:Atom:SUPERSCRIPT_X 47)
+(defconst xcb:Atom:SUPERSCRIPT_Y 48)
+(defconst xcb:Atom:SUBSCRIPT_X 49)
+(defconst xcb:Atom:SUBSCRIPT_Y 50)
+(defconst xcb:Atom:UNDERLINE_POSITION 51)
+(defconst xcb:Atom:UNDERLINE_THICKNESS 52)
+(defconst xcb:Atom:STRIKEOUT_ASCENT 53)
+(defconst xcb:Atom:STRIKEOUT_DESCENT 54)
+(defconst xcb:Atom:ITALIC_ANGLE 55)
+(defconst xcb:Atom:X_HEIGHT 56)
+(defconst xcb:Atom:QUAD_WIDTH 57)
+(defconst xcb:Atom:WEIGHT 58)
+(defconst xcb:Atom:POINT_SIZE 59)
+(defconst xcb:Atom:RESOLUTION 60)
+(defconst xcb:Atom:COPYRIGHT 61)
+(defconst xcb:Atom:NOTICE 62)
+(defconst xcb:Atom:FONT_NAME 63)
+(defconst xcb:Atom:FAMILY_NAME 64)
+(defconst xcb:Atom:FULL_NAME 65)
+(defconst xcb:Atom:CAP_HEIGHT 66)
+(defconst xcb:Atom:WM_CLASS 67)
+(defconst xcb:Atom:WM_TRANSIENT_FOR 68)
+
+(defclass xcb:SelectionRequest
+  (xcb:-event)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (owner :initarg :owner :type xcb:WINDOW)
+   (requestor :initarg :requestor :type xcb:WINDOW)
+   (selection :initarg :selection :type xcb:ATOM)
+   (target :initarg :target :type xcb:ATOM)
+   (property :initarg :property :type xcb:ATOM)))
+
+(defclass xcb:SelectionNotify
+  (xcb:-event)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (requestor :initarg :requestor :type xcb:WINDOW)
+   (selection :initarg :selection :type xcb:ATOM)
+   (target :initarg :target :type xcb:ATOM)
+   (property :initarg :property :type xcb:ATOM)))
+
+(defconst xcb:ColormapState:Uninstalled 0)
+(defconst xcb:ColormapState:Installed 1)
+
+(defconst xcb:Colormap:None 0)
+
+(defclass xcb:ColormapNotify
+  (xcb:-event)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (window :initarg :window :type xcb:WINDOW)
+   (colormap :initarg :colormap :type xcb:COLORMAP)
+   (new :initarg :new :type xcb:BOOL)
+   (state :initarg :state :type xcb:BYTE)
+   (pad~1 :initform 2 :type xcb:-pad)))
+
+(defclass xcb:ClientMessageData
+  (xcb:-union)
+  ((data8 :initarg :data8 :type xcb:-ignore)
+   (data8~ :initform
+          '(name data8 type xcb:CARD8 size 20)
+          :type xcb:-list)
+   (data16 :initarg :data16 :type xcb:-ignore)
+   (data16~ :initform
+           '(name data16 type xcb:CARD16 size 10)
+           :type xcb:-list)
+   (data32 :initarg :data32 :type xcb:-ignore)
+   (data32~ :initform
+           '(name data32 type xcb:CARD32 size 5)
+           :type xcb:-list)))
+
+(defclass xcb:ClientMessage
+  (xcb:-event)
+  ((format :initarg :format :type xcb:CARD8)
+   (window :initarg :window :type xcb:WINDOW)
+   (type :initarg :type :type xcb:ATOM)
+   (data :initarg :data :type xcb:ClientMessageData)))
+
+(defconst xcb:Mapping:Modifier 0)
+(defconst xcb:Mapping:Keyboard 1)
+(defconst xcb:Mapping:Pointer 2)
+
+(defclass xcb:MappingNotify
+  (xcb:-event)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (request :initarg :request :type xcb:BYTE)
+   (first-keycode :initarg :first-keycode :type xcb:KEYCODE)
+   (count :initarg :count :type xcb:CARD8)
+   (pad~1 :initform 1 :type xcb:-pad)))
+
+(defclass xcb:GeGeneric
+  (xcb:-event)
+  ((extension :type xcb:CARD8)
+   (length :type xcb:CARD32)
+   (evtype :type xcb:CARD16)
+   (pad~0 :initform 22 :type xcb:-pad)))
+
+(defclass xcb:Request
+  (xcb:-error)
+  ((bad-value :initarg :bad-value :type xcb:CARD32)
+   (minor-opcode :initarg :minor-opcode :type xcb:CARD16)
+   (major-opcode :initarg :major-opcode :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)))
+
+(defclass xcb:Value
+  (xcb:-error)
+  ((bad-value :initarg :bad-value :type xcb:CARD32)
+   (minor-opcode :initarg :minor-opcode :type xcb:CARD16)
+   (major-opcode :initarg :major-opcode :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)))
+
+(defclass xcb:Window
+  (xcb:-error xcb:Value)
+  nil)
+
+(defclass xcb:Pixmap
+  (xcb:-error xcb:Value)
+  nil)
+
+(defclass xcb:Atom
+  (xcb:-error xcb:Value)
+  nil)
+
+(defclass xcb:Cursor
+  (xcb:-error xcb:Value)
+  nil)
+
+(defclass xcb:Font
+  (xcb:-error xcb:Value)
+  nil)
+
+(defclass xcb:Match
+  (xcb:-error xcb:Request)
+  nil)
+
+(defclass xcb:Drawable
+  (xcb:-error xcb:Value)
+  nil)
+
+(defclass xcb:Access
+  (xcb:-error xcb:Request)
+  nil)
+
+(defclass xcb:Alloc
+  (xcb:-error xcb:Request)
+  nil)
+
+(defclass xcb:Colormap
+  (xcb:-error xcb:Value)
+  nil)
+
+(defclass xcb:GContext
+  (xcb:-error xcb:Value)
+  nil)
+
+(defclass xcb:IDChoice
+  (xcb:-error xcb:Value)
+  nil)
+
+(defclass xcb:Name
+  (xcb:-error xcb:Request)
+  nil)
+
+(defclass xcb:Length
+  (xcb:-error xcb:Request)
+  nil)
+
+(defclass xcb:Implementation
+  (xcb:-error xcb:Request)
+  nil)
+
+(defconst xcb:WindowClass:CopyFromParent 0)
+(defconst xcb:WindowClass:InputOutput 1)
+(defconst xcb:WindowClass:InputOnly 2)
+
+(defconst xcb:CW:BackPixmap 1)
+(defconst xcb:CW:BackPixel 2)
+(defconst xcb:CW:BorderPixmap 4)
+(defconst xcb:CW:BorderPixel 8)
+(defconst xcb:CW:BitGravity 16)
+(defconst xcb:CW:WinGravity 32)
+(defconst xcb:CW:BackingStore 64)
+(defconst xcb:CW:BackingPlanes 128)
+(defconst xcb:CW:BackingPixel 256)
+(defconst xcb:CW:OverrideRedirect 512)
+(defconst xcb:CW:SaveUnder 1024)
+(defconst xcb:CW:EventMask 2048)
+(defconst xcb:CW:DontPropagate 4096)
+(defconst xcb:CW:Colormap 8192)
+(defconst xcb:CW:Cursor 16384)
+
+(defconst xcb:BackPixmap:None 0)
+(defconst xcb:BackPixmap:ParentRelative 1)
+
+(defconst xcb:Gravity:BitForget 0)
+(defconst xcb:Gravity:WinUnmap 0)
+(defconst xcb:Gravity:NorthWest 1)
+(defconst xcb:Gravity:North 2)
+(defconst xcb:Gravity:NorthEast 3)
+(defconst xcb:Gravity:West 4)
+(defconst xcb:Gravity:Center 5)
+(defconst xcb:Gravity:East 6)
+(defconst xcb:Gravity:SouthWest 7)
+(defconst xcb:Gravity:South 8)
+(defconst xcb:Gravity:SouthEast 9)
+(defconst xcb:Gravity:Static 10)
+
+(defclass xcb:CreateWindow
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)
+   (depth :initarg :depth :type xcb:CARD8)
+   (wid :initarg :wid :type xcb:WINDOW)
+   (parent :initarg :parent :type xcb:WINDOW)
+   (x :initarg :x :type xcb:INT16)
+   (y :initarg :y :type xcb:INT16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (border-width :initarg :border-width :type xcb:CARD16)
+   (class :initarg :class :type xcb:CARD16)
+   (visual :initarg :visual :type xcb:VISUALID)
+   (value-mask :initarg :value-mask :type xcb:CARD32)
+   (value-list :initform
+              '(expression
+                (xcb:-fieldref 'value-mask)
+                cases
+                ((xcb:CW:BackPixmap background-pixmap)
+                 (xcb:CW:BackPixel background-pixel)
+                 (xcb:CW:BorderPixmap border-pixmap)
+                 (xcb:CW:BorderPixel border-pixel)
+                 (xcb:CW:BitGravity bit-gravity)
+                 (xcb:CW:WinGravity win-gravity)
+                 (xcb:CW:BackingStore backing-store)
+                 (xcb:CW:BackingPlanes backing-planes)
+                 (xcb:CW:BackingPixel backing-pixel)
+                 (xcb:CW:OverrideRedirect override-redirect)
+                 (xcb:CW:SaveUnder save-under)
+                 (xcb:CW:EventMask event-mask)
+                 (xcb:CW:DontPropagate do-not-propogate-mask)
+                 (xcb:CW:Colormap colormap)
+                 (xcb:CW:Cursor cursor)))
+              :type xcb:-switch)
+   (background-pixmap :initarg :background-pixmap :type xcb:PIXMAP)
+   (background-pixel :initarg :background-pixel :type xcb:CARD32)
+   (border-pixmap :initarg :border-pixmap :type xcb:PIXMAP)
+   (border-pixel :initarg :border-pixel :type xcb:CARD32)
+   (bit-gravity :initarg :bit-gravity :type xcb:CARD32)
+   (win-gravity :initarg :win-gravity :type xcb:CARD32)
+   (backing-store :initarg :backing-store :type xcb:CARD32)
+   (backing-planes :initarg :backing-planes :type xcb:CARD32)
+   (backing-pixel :initarg :backing-pixel :type xcb:CARD32)
+   (override-redirect :initarg :override-redirect :type xcb:BOOL32)
+   (save-under :initarg :save-under :type xcb:BOOL32)
+   (event-mask :initarg :event-mask :type xcb:CARD32)
+   (do-not-propogate-mask :initarg :do-not-propogate-mask :type xcb:CARD32)
+   (colormap :initarg :colormap :type xcb:COLORMAP)
+   (cursor :initarg :cursor :type xcb:CURSOR)))
+
+(defclass xcb:ChangeWindowAttributes
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (window :initarg :window :type xcb:WINDOW)
+   (value-mask :initarg :value-mask :type xcb:CARD32)
+   (value-list :initform
+              '(expression
+                (xcb:-fieldref 'value-mask)
+                cases
+                ((xcb:CW:BackPixmap background-pixmap)
+                 (xcb:CW:BackPixel background-pixel)
+                 (xcb:CW:BorderPixmap border-pixmap)
+                 (xcb:CW:BorderPixel border-pixel)
+                 (xcb:CW:BitGravity bit-gravity)
+                 (xcb:CW:WinGravity win-gravity)
+                 (xcb:CW:BackingStore backing-store)
+                 (xcb:CW:BackingPlanes backing-planes)
+                 (xcb:CW:BackingPixel backing-pixel)
+                 (xcb:CW:OverrideRedirect override-redirect)
+                 (xcb:CW:SaveUnder save-under)
+                 (xcb:CW:EventMask event-mask)
+                 (xcb:CW:DontPropagate do-not-propogate-mask)
+                 (xcb:CW:Colormap colormap)
+                 (xcb:CW:Cursor cursor)))
+              :type xcb:-switch)
+   (background-pixmap :initarg :background-pixmap :type xcb:PIXMAP)
+   (background-pixel :initarg :background-pixel :type xcb:CARD32)
+   (border-pixmap :initarg :border-pixmap :type xcb:PIXMAP)
+   (border-pixel :initarg :border-pixel :type xcb:CARD32)
+   (bit-gravity :initarg :bit-gravity :type xcb:CARD32)
+   (win-gravity :initarg :win-gravity :type xcb:CARD32)
+   (backing-store :initarg :backing-store :type xcb:CARD32)
+   (backing-planes :initarg :backing-planes :type xcb:CARD32)
+   (backing-pixel :initarg :backing-pixel :type xcb:CARD32)
+   (override-redirect :initarg :override-redirect :type xcb:BOOL32)
+   (save-under :initarg :save-under :type xcb:BOOL32)
+   (event-mask :initarg :event-mask :type xcb:CARD32)
+   (do-not-propogate-mask :initarg :do-not-propogate-mask :type xcb:CARD32)
+   (colormap :initarg :colormap :type xcb:COLORMAP)
+   (cursor :initarg :cursor :type xcb:CURSOR)))
+
+(defconst xcb:MapState:Unmapped 0)
+(defconst xcb:MapState:Unviewable 1)
+(defconst xcb:MapState:Viewable 2)
+
+(defclass xcb:GetWindowAttributes
+  (xcb:-request)
+  ((~opcode :initform 3 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (window :initarg :window :type xcb:WINDOW)))
+(defclass xcb:GetWindowAttributes~reply
+  (xcb:-reply)
+  ((backing-store :initarg :backing-store :type xcb:CARD8)
+   (visual :initarg :visual :type xcb:VISUALID)
+   (class :initarg :class :type xcb:CARD16)
+   (bit-gravity :initarg :bit-gravity :type xcb:CARD8)
+   (win-gravity :initarg :win-gravity :type xcb:CARD8)
+   (backing-planes :initarg :backing-planes :type xcb:CARD32)
+   (backing-pixel :initarg :backing-pixel :type xcb:CARD32)
+   (save-under :initarg :save-under :type xcb:BOOL)
+   (map-is-installed :initarg :map-is-installed :type xcb:BOOL)
+   (map-state :initarg :map-state :type xcb:CARD8)
+   (override-redirect :initarg :override-redirect :type xcb:BOOL)
+   (colormap :initarg :colormap :type xcb:COLORMAP)
+   (all-event-masks :initarg :all-event-masks :type xcb:CARD32)
+   (your-event-mask :initarg :your-event-mask :type xcb:CARD32)
+   (do-not-propagate-mask :initarg :do-not-propagate-mask :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)))
+
+(defclass xcb:DestroyWindow
+  (xcb:-request)
+  ((~opcode :initform 4 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (window :initarg :window :type xcb:WINDOW)))
+
+(defclass xcb:DestroySubwindows
+  (xcb:-request)
+  ((~opcode :initform 5 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (window :initarg :window :type xcb:WINDOW)))
+
+(defconst xcb:SetMode:Insert 0)
+(defconst xcb:SetMode:Delete 1)
+
+(defclass xcb:ChangeSaveSet
+  (xcb:-request)
+  ((~opcode :initform 6 :type xcb:-u1)
+   (mode :initarg :mode :type xcb:BYTE)
+   (window :initarg :window :type xcb:WINDOW)))
+
+(defclass xcb:ReparentWindow
+  (xcb:-request)
+  ((~opcode :initform 7 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (window :initarg :window :type xcb:WINDOW)
+   (parent :initarg :parent :type xcb:WINDOW)
+   (x :initarg :x :type xcb:INT16)
+   (y :initarg :y :type xcb:INT16)))
+
+(defclass xcb:MapWindow
+  (xcb:-request)
+  ((~opcode :initform 8 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (window :initarg :window :type xcb:WINDOW)))
+
+(defclass xcb:MapSubwindows
+  (xcb:-request)
+  ((~opcode :initform 9 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (window :initarg :window :type xcb:WINDOW)))
+
+(defclass xcb:UnmapWindow
+  (xcb:-request)
+  ((~opcode :initform 10 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (window :initarg :window :type xcb:WINDOW)))
+
+(defclass xcb:UnmapSubwindows
+  (xcb:-request)
+  ((~opcode :initform 11 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (window :initarg :window :type xcb:WINDOW)))
+
+(defconst xcb:ConfigWindow:X 1)
+(defconst xcb:ConfigWindow:Y 2)
+(defconst xcb:ConfigWindow:Width 4)
+(defconst xcb:ConfigWindow:Height 8)
+(defconst xcb:ConfigWindow:BorderWidth 16)
+(defconst xcb:ConfigWindow:Sibling 32)
+(defconst xcb:ConfigWindow:StackMode 64)
+
+(defconst xcb:StackMode:Above 0)
+(defconst xcb:StackMode:Below 1)
+(defconst xcb:StackMode:TopIf 2)
+(defconst xcb:StackMode:BottomIf 3)
+(defconst xcb:StackMode:Opposite 4)
+
+(defclass xcb:ConfigureWindow
+  (xcb:-request)
+  ((~opcode :initform 12 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (window :initarg :window :type xcb:WINDOW)
+   (value-mask :initarg :value-mask :type xcb:CARD16)
+   (pad~1 :initform 2 :type xcb:-pad)
+   (value-list :initform
+              '(expression
+                (xcb:-fieldref 'value-mask)
+                cases
+                ((xcb:ConfigWindow:X x)
+                 (xcb:ConfigWindow:Y y)
+                 (xcb:ConfigWindow:Width width)
+                 (xcb:ConfigWindow:Height height)
+                 (xcb:ConfigWindow:BorderWidth border-width)
+                 (xcb:ConfigWindow:Sibling sibling)
+                 (xcb:ConfigWindow:StackMode stack-mode)))
+              :type xcb:-switch)
+   (x :initarg :x :type xcb:INT32)
+   (y :initarg :y :type xcb:INT32)
+   (width :initarg :width :type xcb:CARD32)
+   (height :initarg :height :type xcb:CARD32)
+   (border-width :initarg :border-width :type xcb:CARD32)
+   (sibling :initarg :sibling :type xcb:WINDOW)
+   (stack-mode :initarg :stack-mode :type xcb:CARD32)))
+
+(defconst xcb:Circulate:RaiseLowest 0)
+(defconst xcb:Circulate:LowerHighest 1)
+
+(defclass xcb:CirculateWindow
+  (xcb:-request)
+  ((~opcode :initform 13 :type xcb:-u1)
+   (direction :initarg :direction :type xcb:CARD8)
+   (window :initarg :window :type xcb:WINDOW)))
+
+(defclass xcb:GetGeometry
+  (xcb:-request)
+  ((~opcode :initform 14 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)))
+(defclass xcb:GetGeometry~reply
+  (xcb:-reply)
+  ((depth :initarg :depth :type xcb:CARD8)
+   (root :initarg :root :type xcb:WINDOW)
+   (x :initarg :x :type xcb:INT16)
+   (y :initarg :y :type xcb:INT16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (border-width :initarg :border-width :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)))
+
+(defclass xcb:QueryTree
+  (xcb:-request)
+  ((~opcode :initform 15 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (window :initarg :window :type xcb:WINDOW)))
+(defclass xcb:QueryTree~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (root :initarg :root :type xcb:WINDOW)
+   (parent :initarg :parent :type xcb:WINDOW)
+   (children-len :initarg :children-len :type xcb:CARD16)
+   (pad~1 :initform 14 :type xcb:-pad)
+   (children :initarg :children :type xcb:-ignore)
+   (children~ :initform
+             '(name children type xcb:WINDOW size
+                    (xcb:-fieldref 'children-len))
+             :type xcb:-list)))
+
+(defclass xcb:InternAtom
+  (xcb:-request)
+  ((~opcode :initform 16 :type xcb:-u1)
+   (only-if-exists :initarg :only-if-exists :type xcb:BOOL)
+   (name-len :initarg :name-len :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:char size
+                (xcb:-fieldref 'name-len))
+         :type xcb:-list)))
+(defclass xcb:InternAtom~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (atom :initarg :atom :type xcb:ATOM)))
+
+(defclass xcb:GetAtomName
+  (xcb:-request)
+  ((~opcode :initform 17 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (atom :initarg :atom :type xcb:ATOM)))
+(defclass xcb:GetAtomName~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (name-len :initarg :name-len :type xcb:CARD16)
+   (pad~1 :initform 22 :type xcb:-pad)
+   (name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:char size
+                (xcb:-fieldref 'name-len))
+         :type xcb:-list)))
+
+(defconst xcb:PropMode:Replace 0)
+(defconst xcb:PropMode:Prepend 1)
+(defconst xcb:PropMode:Append 2)
+
+(defclass xcb:ChangeProperty
+  (xcb:-request)
+  ((~opcode :initform 18 :type xcb:-u1)
+   (mode :initarg :mode :type xcb:CARD8)
+   (window :initarg :window :type xcb:WINDOW)
+   (property :initarg :property :type xcb:ATOM)
+   (type :initarg :type :type xcb:ATOM)
+   (format :initarg :format :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)
+   (data-len :initarg :data-len :type xcb:CARD32)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:void size
+                (/
+                 (*
+                  (xcb:-fieldref 'data-len)
+                  (xcb:-fieldref 'format))
+                 8))
+         :type xcb:-list)))
+
+(defclass xcb:DeleteProperty
+  (xcb:-request)
+  ((~opcode :initform 19 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (window :initarg :window :type xcb:WINDOW)
+   (property :initarg :property :type xcb:ATOM)))
+
+(defconst xcb:GetPropertyType:Any 0)
+
+(defclass xcb:GetProperty
+  (xcb:-request)
+  ((~opcode :initform 20 :type xcb:-u1)
+   (delete :initarg :delete :type xcb:BOOL)
+   (window :initarg :window :type xcb:WINDOW)
+   (property :initarg :property :type xcb:ATOM)
+   (type :initarg :type :type xcb:ATOM)
+   (long-offset :initarg :long-offset :type xcb:CARD32)
+   (long-length :initarg :long-length :type xcb:CARD32)))
+(defclass xcb:GetProperty~reply
+  (xcb:-reply)
+  ((format :initarg :format :type xcb:CARD8)
+   (type :initarg :type :type xcb:ATOM)
+   (bytes-after :initarg :bytes-after :type xcb:CARD32)
+   (value-len :initarg :value-len :type xcb:CARD32)
+   (pad~0 :initform 12 :type xcb:-pad)
+   (value :initarg :value :type xcb:-ignore)
+   (value~ :initform
+          '(name value type xcb:void size
+                 (*
+                  (xcb:-fieldref 'value-len)
+                  (/
+                   (xcb:-fieldref 'format)
+                   8)))
+          :type xcb:-list)))
+
+(defclass xcb:ListProperties
+  (xcb:-request)
+  ((~opcode :initform 21 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (window :initarg :window :type xcb:WINDOW)))
+(defclass xcb:ListProperties~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (atoms-len :initarg :atoms-len :type xcb:CARD16)
+   (pad~1 :initform 22 :type xcb:-pad)
+   (atoms :initarg :atoms :type xcb:-ignore)
+   (atoms~ :initform
+          '(name atoms type xcb:ATOM size
+                 (xcb:-fieldref 'atoms-len))
+          :type xcb:-list)))
+
+(defclass xcb:SetSelectionOwner
+  (xcb:-request)
+  ((~opcode :initform 22 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (owner :initarg :owner :type xcb:WINDOW)
+   (selection :initarg :selection :type xcb:ATOM)
+   (time :initarg :time :type xcb:TIMESTAMP)))
+
+(defclass xcb:GetSelectionOwner
+  (xcb:-request)
+  ((~opcode :initform 23 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (selection :initarg :selection :type xcb:ATOM)))
+(defclass xcb:GetSelectionOwner~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (owner :initarg :owner :type xcb:WINDOW)))
+
+(defclass xcb:ConvertSelection
+  (xcb:-request)
+  ((~opcode :initform 24 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (requestor :initarg :requestor :type xcb:WINDOW)
+   (selection :initarg :selection :type xcb:ATOM)
+   (target :initarg :target :type xcb:ATOM)
+   (property :initarg :property :type xcb:ATOM)
+   (time :initarg :time :type xcb:TIMESTAMP)))
+
+(defconst xcb:SendEventDest:PointerWindow 0)
+(defconst xcb:SendEventDest:ItemFocus 1)
+
+(defclass xcb:SendEvent
+  (xcb:-request)
+  ((~opcode :initform 25 :type xcb:-u1)
+   (propagate :initarg :propagate :type xcb:BOOL)
+   (destination :initarg :destination :type xcb:WINDOW)
+   (event-mask :initarg :event-mask :type xcb:CARD32)
+   (event :initarg :event :type xcb:-ignore)
+   (event~ :initform
+          '(name event type xcb:char size 32)
+          :type xcb:-list)))
+
+(defconst xcb:GrabMode:Sync 0)
+(defconst xcb:GrabMode:Async 1)
+
+(defconst xcb:GrabStatus:Success 0)
+(defconst xcb:GrabStatus:AlreadyGrabbed 1)
+(defconst xcb:GrabStatus:InvalidTime 2)
+(defconst xcb:GrabStatus:NotViewable 3)
+(defconst xcb:GrabStatus:Frozen 4)
+
+(defconst xcb:Cursor:None 0)
+
+(defclass xcb:GrabPointer
+  (xcb:-request)
+  ((~opcode :initform 26 :type xcb:-u1)
+   (owner-events :initarg :owner-events :type xcb:BOOL)
+   (grab-window :initarg :grab-window :type xcb:WINDOW)
+   (event-mask :initarg :event-mask :type xcb:CARD16)
+   (pointer-mode :initarg :pointer-mode :type xcb:BYTE)
+   (keyboard-mode :initarg :keyboard-mode :type xcb:BYTE)
+   (confine-to :initarg :confine-to :type xcb:WINDOW)
+   (cursor :initarg :cursor :type xcb:CURSOR)
+   (time :initarg :time :type xcb:TIMESTAMP)))
+(defclass xcb:GrabPointer~reply
+  (xcb:-reply)
+  ((status :initarg :status :type xcb:BYTE)))
+
+(defclass xcb:UngrabPointer
+  (xcb:-request)
+  ((~opcode :initform 27 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (time :initarg :time :type xcb:TIMESTAMP)))
+
+(defconst xcb:ButtonIndex:Any 0)
+(defconst xcb:ButtonIndex:1 1)
+(defconst xcb:ButtonIndex:2 2)
+(defconst xcb:ButtonIndex:3 3)
+(defconst xcb:ButtonIndex:4 4)
+(defconst xcb:ButtonIndex:5 5)
+
+(defclass xcb:GrabButton
+  (xcb:-request)
+  ((~opcode :initform 28 :type xcb:-u1)
+   (owner-events :initarg :owner-events :type xcb:BOOL)
+   (grab-window :initarg :grab-window :type xcb:WINDOW)
+   (event-mask :initarg :event-mask :type xcb:CARD16)
+   (pointer-mode :initarg :pointer-mode :type xcb:CARD8)
+   (keyboard-mode :initarg :keyboard-mode :type xcb:CARD8)
+   (confine-to :initarg :confine-to :type xcb:WINDOW)
+   (cursor :initarg :cursor :type xcb:CURSOR)
+   (button :initarg :button :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (modifiers :initarg :modifiers :type xcb:CARD16)))
+
+(defclass xcb:UngrabButton
+  (xcb:-request)
+  ((~opcode :initform 29 :type xcb:-u1)
+   (button :initarg :button :type xcb:CARD8)
+   (grab-window :initarg :grab-window :type xcb:WINDOW)
+   (modifiers :initarg :modifiers :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)))
+
+(defclass xcb:ChangeActivePointerGrab
+  (xcb:-request)
+  ((~opcode :initform 30 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (cursor :initarg :cursor :type xcb:CURSOR)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (event-mask :initarg :event-mask :type xcb:CARD16)
+   (pad~1 :initform 2 :type xcb:-pad)))
+
+(defclass xcb:GrabKeyboard
+  (xcb:-request)
+  ((~opcode :initform 31 :type xcb:-u1)
+   (owner-events :initarg :owner-events :type xcb:BOOL)
+   (grab-window :initarg :grab-window :type xcb:WINDOW)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (pointer-mode :initarg :pointer-mode :type xcb:BYTE)
+   (keyboard-mode :initarg :keyboard-mode :type xcb:BYTE)
+   (pad~0 :initform 2 :type xcb:-pad)))
+(defclass xcb:GrabKeyboard~reply
+  (xcb:-reply)
+  ((status :initarg :status :type xcb:BYTE)))
+
+(defclass xcb:UngrabKeyboard
+  (xcb:-request)
+  ((~opcode :initform 32 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (time :initarg :time :type xcb:TIMESTAMP)))
+
+(defconst xcb:Grab:Any 0)
+
+(defclass xcb:GrabKey
+  (xcb:-request)
+  ((~opcode :initform 33 :type xcb:-u1)
+   (owner-events :initarg :owner-events :type xcb:BOOL)
+   (grab-window :initarg :grab-window :type xcb:WINDOW)
+   (modifiers :initarg :modifiers :type xcb:CARD16)
+   (key :initarg :key :type xcb:KEYCODE)
+   (pointer-mode :initarg :pointer-mode :type xcb:CARD8)
+   (keyboard-mode :initarg :keyboard-mode :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:UngrabKey
+  (xcb:-request)
+  ((~opcode :initform 34 :type xcb:-u1)
+   (key :initarg :key :type xcb:KEYCODE)
+   (grab-window :initarg :grab-window :type xcb:WINDOW)
+   (modifiers :initarg :modifiers :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)))
+
+(defconst xcb:Allow:AsyncPointer 0)
+(defconst xcb:Allow:SyncPointer 1)
+(defconst xcb:Allow:ReplayPointer 2)
+(defconst xcb:Allow:AsyncKeyboard 3)
+(defconst xcb:Allow:SyncKeyboard 4)
+(defconst xcb:Allow:ReplayKeyboard 5)
+(defconst xcb:Allow:AsyncBoth 6)
+(defconst xcb:Allow:SyncBoth 7)
+
+(defclass xcb:AllowEvents
+  (xcb:-request)
+  ((~opcode :initform 35 :type xcb:-u1)
+   (mode :initarg :mode :type xcb:CARD8)
+   (time :initarg :time :type xcb:TIMESTAMP)))
+
+(defclass xcb:GrabServer
+  (xcb:-request)
+  ((~opcode :initform 36 :type xcb:-u1)))
+
+(defclass xcb:UngrabServer
+  (xcb:-request)
+  ((~opcode :initform 37 :type xcb:-u1)))
+
+(defclass xcb:QueryPointer
+  (xcb:-request)
+  ((~opcode :initform 38 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (window :initarg :window :type xcb:WINDOW)))
+(defclass xcb:QueryPointer~reply
+  (xcb:-reply)
+  ((same-screen :initarg :same-screen :type xcb:BOOL)
+   (root :initarg :root :type xcb:WINDOW)
+   (child :initarg :child :type xcb:WINDOW)
+   (root-x :initarg :root-x :type xcb:INT16)
+   (root-y :initarg :root-y :type xcb:INT16)
+   (win-x :initarg :win-x :type xcb:INT16)
+   (win-y :initarg :win-y :type xcb:INT16)
+   (mask :initarg :mask :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)))
+
+(defclass xcb:TIMECOORD
+  (xcb:-struct)
+  ((time :initarg :time :type xcb:TIMESTAMP)
+   (x :initarg :x :type xcb:INT16)
+   (y :initarg :y :type xcb:INT16)))
+
+(defclass xcb:GetMotionEvents
+  (xcb:-request)
+  ((~opcode :initform 39 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (window :initarg :window :type xcb:WINDOW)
+   (start :initarg :start :type xcb:TIMESTAMP)
+   (stop :initarg :stop :type xcb:TIMESTAMP)))
+(defclass xcb:GetMotionEvents~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (events-len :initarg :events-len :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (events :initarg :events :type xcb:-ignore)
+   (events~ :initform
+           '(name events type xcb:TIMECOORD size
+                  (xcb:-fieldref 'events-len))
+           :type xcb:-list)))
+
+(defclass xcb:TranslateCoordinates
+  (xcb:-request)
+  ((~opcode :initform 40 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (src-window :initarg :src-window :type xcb:WINDOW)
+   (dst-window :initarg :dst-window :type xcb:WINDOW)
+   (src-x :initarg :src-x :type xcb:INT16)
+   (src-y :initarg :src-y :type xcb:INT16)))
+(defclass xcb:TranslateCoordinates~reply
+  (xcb:-reply)
+  ((same-screen :initarg :same-screen :type xcb:BOOL)
+   (child :initarg :child :type xcb:WINDOW)
+   (dst-x :initarg :dst-x :type xcb:INT16)
+   (dst-y :initarg :dst-y :type xcb:INT16)))
+
+(defclass xcb:WarpPointer
+  (xcb:-request)
+  ((~opcode :initform 41 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (src-window :initarg :src-window :type xcb:WINDOW)
+   (dst-window :initarg :dst-window :type xcb:WINDOW)
+   (src-x :initarg :src-x :type xcb:INT16)
+   (src-y :initarg :src-y :type xcb:INT16)
+   (src-width :initarg :src-width :type xcb:CARD16)
+   (src-height :initarg :src-height :type xcb:CARD16)
+   (dst-x :initarg :dst-x :type xcb:INT16)
+   (dst-y :initarg :dst-y :type xcb:INT16)))
+
+(defconst xcb:InputFocus:None 0)
+(defconst xcb:InputFocus:PointerRoot 1)
+(defconst xcb:InputFocus:Parent 2)
+(defconst xcb:InputFocus:FollowKeyboard 3)
+
+(defclass xcb:SetInputFocus
+  (xcb:-request)
+  ((~opcode :initform 42 :type xcb:-u1)
+   (revert-to :initarg :revert-to :type xcb:CARD8)
+   (focus :initarg :focus :type xcb:WINDOW)
+   (time :initarg :time :type xcb:TIMESTAMP)))
+
+(defclass xcb:GetInputFocus
+  (xcb:-request)
+  ((~opcode :initform 43 :type xcb:-u1)))
+(defclass xcb:GetInputFocus~reply
+  (xcb:-reply)
+  ((revert-to :initarg :revert-to :type xcb:CARD8)
+   (focus :initarg :focus :type xcb:WINDOW)))
+
+(defclass xcb:QueryKeymap
+  (xcb:-request)
+  ((~opcode :initform 44 :type xcb:-u1)))
+(defclass xcb:QueryKeymap~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (keys :initarg :keys :type xcb:-ignore)
+   (keys~ :initform
+         '(name keys type xcb:CARD8 size 32)
+         :type xcb:-list)))
+
+(defclass xcb:OpenFont
+  (xcb:-request)
+  ((~opcode :initform 45 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (fid :initarg :fid :type xcb:FONT)
+   (name-len :initarg :name-len :type xcb:CARD16)
+   (pad~1 :initform 2 :type xcb:-pad)
+   (name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:char size
+                (xcb:-fieldref 'name-len))
+         :type xcb:-list)))
+
+(defclass xcb:CloseFont
+  (xcb:-request)
+  ((~opcode :initform 46 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (font :initarg :font :type xcb:FONT)))
+
+(defconst xcb:FontDraw:LeftToRight 0)
+(defconst xcb:FontDraw:RightToLeft 1)
+
+(defclass xcb:FONTPROP
+  (xcb:-struct)
+  ((name :initarg :name :type xcb:ATOM)
+   (value :initarg :value :type xcb:CARD32)))
+
+(defclass xcb:CHARINFO
+  (xcb:-struct)
+  ((left-side-bearing :initarg :left-side-bearing :type xcb:INT16)
+   (right-side-bearing :initarg :right-side-bearing :type xcb:INT16)
+   (character-width :initarg :character-width :type xcb:INT16)
+   (ascent :initarg :ascent :type xcb:INT16)
+   (descent :initarg :descent :type xcb:INT16)
+   (attributes :initarg :attributes :type xcb:CARD16)))
+
+(defclass xcb:QueryFont
+  (xcb:-request)
+  ((~opcode :initform 47 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (font :initarg :font :type xcb:FONTABLE)))
+(defclass xcb:QueryFont~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (min-bounds :initarg :min-bounds :type xcb:CHARINFO)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (max-bounds :initarg :max-bounds :type xcb:CHARINFO)
+   (pad~2 :initform 4 :type xcb:-pad)
+   (min-char-or-byte2 :initarg :min-char-or-byte2 :type xcb:CARD16)
+   (max-char-or-byte2 :initarg :max-char-or-byte2 :type xcb:CARD16)
+   (default-char :initarg :default-char :type xcb:CARD16)
+   (properties-len :initarg :properties-len :type xcb:CARD16)
+   (draw-direction :initarg :draw-direction :type xcb:BYTE)
+   (min-byte1 :initarg :min-byte1 :type xcb:CARD8)
+   (max-byte1 :initarg :max-byte1 :type xcb:CARD8)
+   (all-chars-exist :initarg :all-chars-exist :type xcb:BOOL)
+   (font-ascent :initarg :font-ascent :type xcb:INT16)
+   (font-descent :initarg :font-descent :type xcb:INT16)
+   (char-infos-len :initarg :char-infos-len :type xcb:CARD32)
+   (properties :initarg :properties :type xcb:-ignore)
+   (properties~ :initform
+               '(name properties type xcb:FONTPROP size
+                      (xcb:-fieldref 'properties-len))
+               :type xcb:-list)
+   (char-infos :initarg :char-infos :type xcb:-ignore)
+   (char-infos~ :initform
+               '(name char-infos type xcb:CHARINFO size
+                      (xcb:-fieldref 'char-infos-len))
+               :type xcb:-list)))
+
+(defclass xcb:QueryTextExtents
+  (xcb:-request)
+  ((~opcode :initform 48 :type xcb:-u1)
+   (odd-length :type xcb:BOOL)
+   (font :initarg :font :type xcb:FONTABLE)
+   (string :initarg :string :type xcb:-ignore)
+   (string~ :initform
+           '(name string type xcb:CHAR2B size nil)
+           :type xcb:-list)))
+(cl-defmethod xcb:marshal
+    ((obj xcb:QueryTextExtents)
+     connection)
+  nil
+  (setf
+   (slot-value obj 'odd-length)
+   '(logand
+     (xcb:-fieldref 'string-len)
+     1))
+  (cl-call-next-method obj connection))
+(defclass xcb:QueryTextExtents~reply
+  (xcb:-reply)
+  ((draw-direction :initarg :draw-direction :type xcb:BYTE)
+   (font-ascent :initarg :font-ascent :type xcb:INT16)
+   (font-descent :initarg :font-descent :type xcb:INT16)
+   (overall-ascent :initarg :overall-ascent :type xcb:INT16)
+   (overall-descent :initarg :overall-descent :type xcb:INT16)
+   (overall-width :initarg :overall-width :type xcb:INT32)
+   (overall-left :initarg :overall-left :type xcb:INT32)
+   (overall-right :initarg :overall-right :type xcb:INT32)))
+
+(defclass xcb:STR
+  (xcb:-struct)
+  ((name-len :initarg :name-len :type xcb:CARD8)
+   (name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:char size
+                (xcb:-fieldref 'name-len))
+         :type xcb:-list)))
+
+(defclass xcb:ListFonts
+  (xcb:-request)
+  ((~opcode :initform 49 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (max-names :initarg :max-names :type xcb:CARD16)
+   (pattern-len :initarg :pattern-len :type xcb:CARD16)
+   (pattern :initarg :pattern :type xcb:-ignore)
+   (pattern~ :initform
+            '(name pattern type xcb:char size
+                   (xcb:-fieldref 'pattern-len))
+            :type xcb:-list)))
+(defclass xcb:ListFonts~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (names-len :initarg :names-len :type xcb:CARD16)
+   (pad~1 :initform 22 :type xcb:-pad)
+   (names :initarg :names :type xcb:-ignore)
+   (names~ :initform
+          '(name names type xcb:STR size
+                 (xcb:-fieldref 'names-len))
+          :type xcb:-list)))
+
+(defclass xcb:ListFontsWithInfo
+  (xcb:-request)
+  ((~opcode :initform 50 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (max-names :initarg :max-names :type xcb:CARD16)
+   (pattern-len :initarg :pattern-len :type xcb:CARD16)
+   (pattern :initarg :pattern :type xcb:-ignore)
+   (pattern~ :initform
+            '(name pattern type xcb:char size
+                   (xcb:-fieldref 'pattern-len))
+            :type xcb:-list)))
+(defclass xcb:ListFontsWithInfo~reply
+  (xcb:-reply)
+  ((name-len :initarg :name-len :type xcb:CARD8)
+   (min-bounds :initarg :min-bounds :type xcb:CHARINFO)
+   (pad~0 :initform 4 :type xcb:-pad)
+   (max-bounds :initarg :max-bounds :type xcb:CHARINFO)
+   (pad~1 :initform 4 :type xcb:-pad)
+   (min-char-or-byte2 :initarg :min-char-or-byte2 :type xcb:CARD16)
+   (max-char-or-byte2 :initarg :max-char-or-byte2 :type xcb:CARD16)
+   (default-char :initarg :default-char :type xcb:CARD16)
+   (properties-len :initarg :properties-len :type xcb:CARD16)
+   (draw-direction :initarg :draw-direction :type xcb:BYTE)
+   (min-byte1 :initarg :min-byte1 :type xcb:CARD8)
+   (max-byte1 :initarg :max-byte1 :type xcb:CARD8)
+   (all-chars-exist :initarg :all-chars-exist :type xcb:BOOL)
+   (font-ascent :initarg :font-ascent :type xcb:INT16)
+   (font-descent :initarg :font-descent :type xcb:INT16)
+   (replies-hint :initarg :replies-hint :type xcb:CARD32)
+   (properties :initarg :properties :type xcb:-ignore)
+   (properties~ :initform
+               '(name properties type xcb:FONTPROP size
+                      (xcb:-fieldref 'properties-len))
+               :type xcb:-list)
+   (name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:char size
+                (xcb:-fieldref 'name-len))
+         :type xcb:-list)))
+
+(defclass xcb:SetFontPath
+  (xcb:-request)
+  ((~opcode :initform 51 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (font-qty :initarg :font-qty :type xcb:CARD16)
+   (pad~1 :initform 2 :type xcb:-pad)
+   (font :initarg :font :type xcb:-ignore)
+   (font~ :initform
+         '(name font type xcb:STR size
+                (xcb:-fieldref 'font-qty))
+         :type xcb:-list)))
+
+(defclass xcb:GetFontPath
+  (xcb:-request)
+  ((~opcode :initform 52 :type xcb:-u1)))
+(defclass xcb:GetFontPath~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (path-len :initarg :path-len :type xcb:CARD16)
+   (pad~1 :initform 22 :type xcb:-pad)
+   (path :initarg :path :type xcb:-ignore)
+   (path~ :initform
+         '(name path type xcb:STR size
+                (xcb:-fieldref 'path-len))
+         :type xcb:-list)))
+
+(defclass xcb:CreatePixmap
+  (xcb:-request)
+  ((~opcode :initform 53 :type xcb:-u1)
+   (depth :initarg :depth :type xcb:CARD8)
+   (pid :initarg :pid :type xcb:PIXMAP)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)))
+
+(defclass xcb:FreePixmap
+  (xcb:-request)
+  ((~opcode :initform 54 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (pixmap :initarg :pixmap :type xcb:PIXMAP)))
+
+(defconst xcb:GC:Function 1)
+(defconst xcb:GC:PlaneMask 2)
+(defconst xcb:GC:Foreground 4)
+(defconst xcb:GC:Background 8)
+(defconst xcb:GC:LineWidth 16)
+(defconst xcb:GC:LineStyle 32)
+(defconst xcb:GC:CapStyle 64)
+(defconst xcb:GC:JoinStyle 128)
+(defconst xcb:GC:FillStyle 256)
+(defconst xcb:GC:FillRule 512)
+(defconst xcb:GC:Tile 1024)
+(defconst xcb:GC:Stipple 2048)
+(defconst xcb:GC:TileStippleOriginX 4096)
+(defconst xcb:GC:TileStippleOriginY 8192)
+(defconst xcb:GC:Font 16384)
+(defconst xcb:GC:SubwindowMode 32768)
+(defconst xcb:GC:GraphicsExposures 65536)
+(defconst xcb:GC:ClipOriginX 131072)
+(defconst xcb:GC:ClipOriginY 262144)
+(defconst xcb:GC:ClipMask 524288)
+(defconst xcb:GC:DashOffset 1048576)
+(defconst xcb:GC:DashList 2097152)
+(defconst xcb:GC:ArcMode 4194304)
+
+(defconst xcb:GX:clear 0)
+(defconst xcb:GX:and 1)
+(defconst xcb:GX:andReverse 2)
+(defconst xcb:GX:copy 3)
+(defconst xcb:GX:andInverted 4)
+(defconst xcb:GX:noop 5)
+(defconst xcb:GX:xor 6)
+(defconst xcb:GX:or 7)
+(defconst xcb:GX:nor 8)
+(defconst xcb:GX:equiv 9)
+(defconst xcb:GX:invert 10)
+(defconst xcb:GX:orReverse 11)
+(defconst xcb:GX:copyInverted 12)
+(defconst xcb:GX:orInverted 13)
+(defconst xcb:GX:nand 14)
+(defconst xcb:GX:set 15)
+
+(defconst xcb:LineStyle:Solid 0)
+(defconst xcb:LineStyle:OnOffDash 1)
+(defconst xcb:LineStyle:DoubleDash 2)
+
+(defconst xcb:CapStyle:NotLast 0)
+(defconst xcb:CapStyle:Butt 1)
+(defconst xcb:CapStyle:Round 2)
+(defconst xcb:CapStyle:Projecting 3)
+
+(defconst xcb:JoinStyle:Miter 0)
+(defconst xcb:JoinStyle:Round 1)
+(defconst xcb:JoinStyle:Bevel 2)
+
+(defconst xcb:FillStyle:Solid 0)
+(defconst xcb:FillStyle:Tiled 1)
+(defconst xcb:FillStyle:Stippled 2)
+(defconst xcb:FillStyle:OpaqueStippled 3)
+
+(defconst xcb:FillRule:EvenOdd 0)
+(defconst xcb:FillRule:Winding 1)
+
+(defconst xcb:SubwindowMode:ClipByChildren 0)
+(defconst xcb:SubwindowMode:IncludeInferiors 1)
+
+(defconst xcb:ArcMode:Chord 0)
+(defconst xcb:ArcMode:PieSlice 1)
+
+(defclass xcb:CreateGC
+  (xcb:-request)
+  ((~opcode :initform 55 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (cid :initarg :cid :type xcb:GCONTEXT)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (value-mask :initarg :value-mask :type xcb:CARD32)
+   (value-list :initform
+              '(expression
+                (xcb:-fieldref 'value-mask)
+                cases
+                ((xcb:GC:Function function)
+                 (xcb:GC:PlaneMask plane-mask)
+                 (xcb:GC:Foreground foreground)
+                 (xcb:GC:Background background)
+                 (xcb:GC:LineWidth line-width)
+                 (xcb:GC:LineStyle line-style)
+                 (xcb:GC:CapStyle cap-style)
+                 (xcb:GC:JoinStyle join-style)
+                 (xcb:GC:FillStyle fill-style)
+                 (xcb:GC:FillRule fill-rule)
+                 (xcb:GC:Tile tile)
+                 (xcb:GC:Stipple stipple)
+                 (xcb:GC:TileStippleOriginX tile-stipple-x-origin)
+                 (xcb:GC:TileStippleOriginY tile-stipple-y-origin)
+                 (xcb:GC:Font font)
+                 (xcb:GC:SubwindowMode subwindow-mode)
+                 (xcb:GC:GraphicsExposures graphics-exposures)
+                 (xcb:GC:ClipOriginX clip-x-origin)
+                 (xcb:GC:ClipOriginY clip-y-origin)
+                 (xcb:GC:ClipMask clip-mask)
+                 (xcb:GC:DashOffset dash-offset)
+                 (xcb:GC:DashList dashes)
+                 (xcb:GC:ArcMode arc-mode)))
+              :type xcb:-switch)
+   (function :initarg :function :type xcb:CARD32)
+   (plane-mask :initarg :plane-mask :type xcb:CARD32)
+   (foreground :initarg :foreground :type xcb:CARD32)
+   (background :initarg :background :type xcb:CARD32)
+   (line-width :initarg :line-width :type xcb:CARD32)
+   (line-style :initarg :line-style :type xcb:CARD32)
+   (cap-style :initarg :cap-style :type xcb:CARD32)
+   (join-style :initarg :join-style :type xcb:CARD32)
+   (fill-style :initarg :fill-style :type xcb:CARD32)
+   (fill-rule :initarg :fill-rule :type xcb:CARD32)
+   (tile :initarg :tile :type xcb:PIXMAP)
+   (stipple :initarg :stipple :type xcb:PIXMAP)
+   (tile-stipple-x-origin :initarg :tile-stipple-x-origin :type xcb:INT32)
+   (tile-stipple-y-origin :initarg :tile-stipple-y-origin :type xcb:INT32)
+   (font :initarg :font :type xcb:FONT)
+   (subwindow-mode :initarg :subwindow-mode :type xcb:CARD32)
+   (graphics-exposures :initarg :graphics-exposures :type xcb:BOOL32)
+   (clip-x-origin :initarg :clip-x-origin :type xcb:INT32)
+   (clip-y-origin :initarg :clip-y-origin :type xcb:INT32)
+   (clip-mask :initarg :clip-mask :type xcb:PIXMAP)
+   (dash-offset :initarg :dash-offset :type xcb:CARD32)
+   (dashes :initarg :dashes :type xcb:CARD32)
+   (arc-mode :initarg :arc-mode :type xcb:CARD32)))
+
+(defclass xcb:ChangeGC
+  (xcb:-request)
+  ((~opcode :initform 56 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (gc :initarg :gc :type xcb:GCONTEXT)
+   (value-mask :initarg :value-mask :type xcb:CARD32)
+   (value-list :initform
+              '(expression
+                (xcb:-fieldref 'value-mask)
+                cases
+                ((xcb:GC:Function function)
+                 (xcb:GC:PlaneMask plane-mask)
+                 (xcb:GC:Foreground foreground)
+                 (xcb:GC:Background background)
+                 (xcb:GC:LineWidth line-width)
+                 (xcb:GC:LineStyle line-style)
+                 (xcb:GC:CapStyle cap-style)
+                 (xcb:GC:JoinStyle join-style)
+                 (xcb:GC:FillStyle fill-style)
+                 (xcb:GC:FillRule fill-rule)
+                 (xcb:GC:Tile tile)
+                 (xcb:GC:Stipple stipple)
+                 (xcb:GC:TileStippleOriginX tile-stipple-x-origin)
+                 (xcb:GC:TileStippleOriginY tile-stipple-y-origin)
+                 (xcb:GC:Font font)
+                 (xcb:GC:SubwindowMode subwindow-mode)
+                 (xcb:GC:GraphicsExposures graphics-exposures)
+                 (xcb:GC:ClipOriginX clip-x-origin)
+                 (xcb:GC:ClipOriginY clip-y-origin)
+                 (xcb:GC:ClipMask clip-mask)
+                 (xcb:GC:DashOffset dash-offset)
+                 (xcb:GC:DashList dashes)
+                 (xcb:GC:ArcMode arc-mode)))
+              :type xcb:-switch)
+   (function :initarg :function :type xcb:CARD32)
+   (plane-mask :initarg :plane-mask :type xcb:CARD32)
+   (foreground :initarg :foreground :type xcb:CARD32)
+   (background :initarg :background :type xcb:CARD32)
+   (line-width :initarg :line-width :type xcb:CARD32)
+   (line-style :initarg :line-style :type xcb:CARD32)
+   (cap-style :initarg :cap-style :type xcb:CARD32)
+   (join-style :initarg :join-style :type xcb:CARD32)
+   (fill-style :initarg :fill-style :type xcb:CARD32)
+   (fill-rule :initarg :fill-rule :type xcb:CARD32)
+   (tile :initarg :tile :type xcb:PIXMAP)
+   (stipple :initarg :stipple :type xcb:PIXMAP)
+   (tile-stipple-x-origin :initarg :tile-stipple-x-origin :type xcb:INT32)
+   (tile-stipple-y-origin :initarg :tile-stipple-y-origin :type xcb:INT32)
+   (font :initarg :font :type xcb:FONT)
+   (subwindow-mode :initarg :subwindow-mode :type xcb:CARD32)
+   (graphics-exposures :initarg :graphics-exposures :type xcb:BOOL32)
+   (clip-x-origin :initarg :clip-x-origin :type xcb:INT32)
+   (clip-y-origin :initarg :clip-y-origin :type xcb:INT32)
+   (clip-mask :initarg :clip-mask :type xcb:PIXMAP)
+   (dash-offset :initarg :dash-offset :type xcb:CARD32)
+   (dashes :initarg :dashes :type xcb:CARD32)
+   (arc-mode :initarg :arc-mode :type xcb:CARD32)))
+
+(defclass xcb:CopyGC
+  (xcb:-request)
+  ((~opcode :initform 57 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (src-gc :initarg :src-gc :type xcb:GCONTEXT)
+   (dst-gc :initarg :dst-gc :type xcb:GCONTEXT)
+   (value-mask :initarg :value-mask :type xcb:CARD32)))
+
+(defclass xcb:SetDashes
+  (xcb:-request)
+  ((~opcode :initform 58 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (gc :initarg :gc :type xcb:GCONTEXT)
+   (dash-offset :initarg :dash-offset :type xcb:CARD16)
+   (dashes-len :initarg :dashes-len :type xcb:CARD16)
+   (dashes :initarg :dashes :type xcb:-ignore)
+   (dashes~ :initform
+           '(name dashes type xcb:CARD8 size
+                  (xcb:-fieldref 'dashes-len))
+           :type xcb:-list)))
+
+(defconst xcb:ClipOrdering:Unsorted 0)
+(defconst xcb:ClipOrdering:YSorted 1)
+(defconst xcb:ClipOrdering:YXSorted 2)
+(defconst xcb:ClipOrdering:YXBanded 3)
+
+(defclass xcb:SetClipRectangles
+  (xcb:-request)
+  ((~opcode :initform 59 :type xcb:-u1)
+   (ordering :initarg :ordering :type xcb:BYTE)
+   (gc :initarg :gc :type xcb:GCONTEXT)
+   (clip-x-origin :initarg :clip-x-origin :type xcb:INT16)
+   (clip-y-origin :initarg :clip-y-origin :type xcb:INT16)
+   (rectangles :initarg :rectangles :type xcb:-ignore)
+   (rectangles~ :initform
+               '(name rectangles type xcb:RECTANGLE size nil)
+               :type xcb:-list)))
+
+(defclass xcb:FreeGC
+  (xcb:-request)
+  ((~opcode :initform 60 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (gc :initarg :gc :type xcb:GCONTEXT)))
+
+(defclass xcb:ClearArea
+  (xcb:-request)
+  ((~opcode :initform 61 :type xcb:-u1)
+   (exposures :initarg :exposures :type xcb:BOOL)
+   (window :initarg :window :type xcb:WINDOW)
+   (x :initarg :x :type xcb:INT16)
+   (y :initarg :y :type xcb:INT16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)))
+
+(defclass xcb:CopyArea
+  (xcb:-request)
+  ((~opcode :initform 62 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (src-drawable :initarg :src-drawable :type xcb:DRAWABLE)
+   (dst-drawable :initarg :dst-drawable :type xcb:DRAWABLE)
+   (gc :initarg :gc :type xcb:GCONTEXT)
+   (src-x :initarg :src-x :type xcb:INT16)
+   (src-y :initarg :src-y :type xcb:INT16)
+   (dst-x :initarg :dst-x :type xcb:INT16)
+   (dst-y :initarg :dst-y :type xcb:INT16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)))
+
+(defclass xcb:CopyPlane
+  (xcb:-request)
+  ((~opcode :initform 63 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (src-drawable :initarg :src-drawable :type xcb:DRAWABLE)
+   (dst-drawable :initarg :dst-drawable :type xcb:DRAWABLE)
+   (gc :initarg :gc :type xcb:GCONTEXT)
+   (src-x :initarg :src-x :type xcb:INT16)
+   (src-y :initarg :src-y :type xcb:INT16)
+   (dst-x :initarg :dst-x :type xcb:INT16)
+   (dst-y :initarg :dst-y :type xcb:INT16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (bit-plane :initarg :bit-plane :type xcb:CARD32)))
+
+(defconst xcb:CoordMode:Origin 0)
+(defconst xcb:CoordMode:Previous 1)
+
+(defclass xcb:PolyPoint
+  (xcb:-request)
+  ((~opcode :initform 64 :type xcb:-u1)
+   (coordinate-mode :initarg :coordinate-mode :type xcb:BYTE)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (gc :initarg :gc :type xcb:GCONTEXT)
+   (points :initarg :points :type xcb:-ignore)
+   (points~ :initform
+           '(name points type xcb:POINT size nil)
+           :type xcb:-list)))
+
+(defclass xcb:PolyLine
+  (xcb:-request)
+  ((~opcode :initform 65 :type xcb:-u1)
+   (coordinate-mode :initarg :coordinate-mode :type xcb:BYTE)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (gc :initarg :gc :type xcb:GCONTEXT)
+   (points :initarg :points :type xcb:-ignore)
+   (points~ :initform
+           '(name points type xcb:POINT size nil)
+           :type xcb:-list)))
+
+(defclass xcb:SEGMENT
+  (xcb:-struct)
+  ((x1 :initarg :x1 :type xcb:INT16)
+   (y1 :initarg :y1 :type xcb:INT16)
+   (x2 :initarg :x2 :type xcb:INT16)
+   (y2 :initarg :y2 :type xcb:INT16)))
+
+(defclass xcb:PolySegment
+  (xcb:-request)
+  ((~opcode :initform 66 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (gc :initarg :gc :type xcb:GCONTEXT)
+   (segments :initarg :segments :type xcb:-ignore)
+   (segments~ :initform
+             '(name segments type xcb:SEGMENT size nil)
+             :type xcb:-list)))
+
+(defclass xcb:PolyRectangle
+  (xcb:-request)
+  ((~opcode :initform 67 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (gc :initarg :gc :type xcb:GCONTEXT)
+   (rectangles :initarg :rectangles :type xcb:-ignore)
+   (rectangles~ :initform
+               '(name rectangles type xcb:RECTANGLE size nil)
+               :type xcb:-list)))
+
+(defclass xcb:PolyArc
+  (xcb:-request)
+  ((~opcode :initform 68 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (gc :initarg :gc :type xcb:GCONTEXT)
+   (arcs :initarg :arcs :type xcb:-ignore)
+   (arcs~ :initform
+         '(name arcs type xcb:ARC size nil)
+         :type xcb:-list)))
+
+(defconst xcb:PolyShape:Complex 0)
+(defconst xcb:PolyShape:Nonconvex 1)
+(defconst xcb:PolyShape:Convex 2)
+
+(defclass xcb:FillPoly
+  (xcb:-request)
+  ((~opcode :initform 69 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (gc :initarg :gc :type xcb:GCONTEXT)
+   (shape :initarg :shape :type xcb:CARD8)
+   (coordinate-mode :initarg :coordinate-mode :type xcb:CARD8)
+   (pad~1 :initform 2 :type xcb:-pad)
+   (points :initarg :points :type xcb:-ignore)
+   (points~ :initform
+           '(name points type xcb:POINT size nil)
+           :type xcb:-list)))
+
+(defclass xcb:PolyFillRectangle
+  (xcb:-request)
+  ((~opcode :initform 70 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (gc :initarg :gc :type xcb:GCONTEXT)
+   (rectangles :initarg :rectangles :type xcb:-ignore)
+   (rectangles~ :initform
+               '(name rectangles type xcb:RECTANGLE size nil)
+               :type xcb:-list)))
+
+(defclass xcb:PolyFillArc
+  (xcb:-request)
+  ((~opcode :initform 71 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (gc :initarg :gc :type xcb:GCONTEXT)
+   (arcs :initarg :arcs :type xcb:-ignore)
+   (arcs~ :initform
+         '(name arcs type xcb:ARC size nil)
+         :type xcb:-list)))
+
+(defconst xcb:ImageFormat:XYBitmap 0)
+(defconst xcb:ImageFormat:XYPixmap 1)
+(defconst xcb:ImageFormat:ZPixmap 2)
+
+(defclass xcb:PutImage
+  (xcb:-request)
+  ((~opcode :initform 72 :type xcb:-u1)
+   (format :initarg :format :type xcb:CARD8)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (gc :initarg :gc :type xcb:GCONTEXT)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (dst-x :initarg :dst-x :type xcb:INT16)
+   (dst-y :initarg :dst-y :type xcb:INT16)
+   (left-pad :initarg :left-pad :type xcb:CARD8)
+   (depth :initarg :depth :type xcb:CARD8)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:BYTE size nil)
+         :type xcb:-list)))
+
+(defclass xcb:GetImage
+  (xcb:-request)
+  ((~opcode :initform 73 :type xcb:-u1)
+   (format :initarg :format :type xcb:CARD8)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (x :initarg :x :type xcb:INT16)
+   (y :initarg :y :type xcb:INT16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (plane-mask :initarg :plane-mask :type xcb:CARD32)))
+(defclass xcb:GetImage~reply
+  (xcb:-reply)
+  ((depth :initarg :depth :type xcb:CARD8)
+   (visual :initarg :visual :type xcb:VISUALID)
+   (pad~0 :initform 20 :type xcb:-pad)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:BYTE size
+                (*
+                 (xcb:-fieldref 'length)
+                 4))
+         :type xcb:-list)))
+
+(defclass xcb:PolyText8
+  (xcb:-request)
+  ((~opcode :initform 74 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (gc :initarg :gc :type xcb:GCONTEXT)
+   (x :initarg :x :type xcb:INT16)
+   (y :initarg :y :type xcb:INT16)
+   (items :initarg :items :type xcb:-ignore)
+   (items~ :initform
+          '(name items type xcb:BYTE size nil)
+          :type xcb:-list)))
+
+(defclass xcb:PolyText16
+  (xcb:-request)
+  ((~opcode :initform 75 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (gc :initarg :gc :type xcb:GCONTEXT)
+   (x :initarg :x :type xcb:INT16)
+   (y :initarg :y :type xcb:INT16)
+   (items :initarg :items :type xcb:-ignore)
+   (items~ :initform
+          '(name items type xcb:BYTE size nil)
+          :type xcb:-list)))
+
+(defclass xcb:ImageText8
+  (xcb:-request)
+  ((~opcode :initform 76 :type xcb:-u1)
+   (string-len :initarg :string-len :type xcb:BYTE)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (gc :initarg :gc :type xcb:GCONTEXT)
+   (x :initarg :x :type xcb:INT16)
+   (y :initarg :y :type xcb:INT16)
+   (string :initarg :string :type xcb:-ignore)
+   (string~ :initform
+           '(name string type xcb:char size
+                  (xcb:-fieldref 'string-len))
+           :type xcb:-list)))
+
+(defclass xcb:ImageText16
+  (xcb:-request)
+  ((~opcode :initform 77 :type xcb:-u1)
+   (string-len :initarg :string-len :type xcb:BYTE)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (gc :initarg :gc :type xcb:GCONTEXT)
+   (x :initarg :x :type xcb:INT16)
+   (y :initarg :y :type xcb:INT16)
+   (string :initarg :string :type xcb:-ignore)
+   (string~ :initform
+           '(name string type xcb:CHAR2B size
+                  (xcb:-fieldref 'string-len))
+           :type xcb:-list)))
+
+(defconst xcb:ColormapAlloc:None 0)
+(defconst xcb:ColormapAlloc:All 1)
+
+(defclass xcb:CreateColormap
+  (xcb:-request)
+  ((~opcode :initform 78 :type xcb:-u1)
+   (alloc :initarg :alloc :type xcb:BYTE)
+   (mid :initarg :mid :type xcb:COLORMAP)
+   (window :initarg :window :type xcb:WINDOW)
+   (visual :initarg :visual :type xcb:VISUALID)))
+
+(defclass xcb:FreeColormap
+  (xcb:-request)
+  ((~opcode :initform 79 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (cmap :initarg :cmap :type xcb:COLORMAP)))
+
+(defclass xcb:CopyColormapAndFree
+  (xcb:-request)
+  ((~opcode :initform 80 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (mid :initarg :mid :type xcb:COLORMAP)
+   (src-cmap :initarg :src-cmap :type xcb:COLORMAP)))
+
+(defclass xcb:InstallColormap
+  (xcb:-request)
+  ((~opcode :initform 81 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (cmap :initarg :cmap :type xcb:COLORMAP)))
+
+(defclass xcb:UninstallColormap
+  (xcb:-request)
+  ((~opcode :initform 82 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (cmap :initarg :cmap :type xcb:COLORMAP)))
+
+(defclass xcb:ListInstalledColormaps
+  (xcb:-request)
+  ((~opcode :initform 83 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (window :initarg :window :type xcb:WINDOW)))
+(defclass xcb:ListInstalledColormaps~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (cmaps-len :initarg :cmaps-len :type xcb:CARD16)
+   (pad~1 :initform 22 :type xcb:-pad)
+   (cmaps :initarg :cmaps :type xcb:-ignore)
+   (cmaps~ :initform
+          '(name cmaps type xcb:COLORMAP size
+                 (xcb:-fieldref 'cmaps-len))
+          :type xcb:-list)))
+
+(defclass xcb:AllocColor
+  (xcb:-request)
+  ((~opcode :initform 84 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (cmap :initarg :cmap :type xcb:COLORMAP)
+   (red :initarg :red :type xcb:CARD16)
+   (green :initarg :green :type xcb:CARD16)
+   (blue :initarg :blue :type xcb:CARD16)
+   (pad~1 :initform 2 :type xcb:-pad)))
+(defclass xcb:AllocColor~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (red :initarg :red :type xcb:CARD16)
+   (green :initarg :green :type xcb:CARD16)
+   (blue :initarg :blue :type xcb:CARD16)
+   (pad~1 :initform 2 :type xcb:-pad)
+   (pixel :initarg :pixel :type xcb:CARD32)))
+
+(defclass xcb:AllocNamedColor
+  (xcb:-request)
+  ((~opcode :initform 85 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (cmap :initarg :cmap :type xcb:COLORMAP)
+   (name-len :initarg :name-len :type xcb:CARD16)
+   (pad~1 :initform 2 :type xcb:-pad)
+   (name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:char size
+                (xcb:-fieldref 'name-len))
+         :type xcb:-list)))
+(defclass xcb:AllocNamedColor~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pixel :initarg :pixel :type xcb:CARD32)
+   (exact-red :initarg :exact-red :type xcb:CARD16)
+   (exact-green :initarg :exact-green :type xcb:CARD16)
+   (exact-blue :initarg :exact-blue :type xcb:CARD16)
+   (visual-red :initarg :visual-red :type xcb:CARD16)
+   (visual-green :initarg :visual-green :type xcb:CARD16)
+   (visual-blue :initarg :visual-blue :type xcb:CARD16)))
+
+(defclass xcb:AllocColorCells
+  (xcb:-request)
+  ((~opcode :initform 86 :type xcb:-u1)
+   (contiguous :initarg :contiguous :type xcb:BOOL)
+   (cmap :initarg :cmap :type xcb:COLORMAP)
+   (colors :initarg :colors :type xcb:CARD16)
+   (planes :initarg :planes :type xcb:CARD16)))
+(defclass xcb:AllocColorCells~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pixels-len :initarg :pixels-len :type xcb:CARD16)
+   (masks-len :initarg :masks-len :type xcb:CARD16)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (pixels :initarg :pixels :type xcb:-ignore)
+   (pixels~ :initform
+           '(name pixels type xcb:CARD32 size
+                  (xcb:-fieldref 'pixels-len))
+           :type xcb:-list)
+   (masks :initarg :masks :type xcb:-ignore)
+   (masks~ :initform
+          '(name masks type xcb:CARD32 size
+                 (xcb:-fieldref 'masks-len))
+          :type xcb:-list)))
+
+(defclass xcb:AllocColorPlanes
+  (xcb:-request)
+  ((~opcode :initform 87 :type xcb:-u1)
+   (contiguous :initarg :contiguous :type xcb:BOOL)
+   (cmap :initarg :cmap :type xcb:COLORMAP)
+   (colors :initarg :colors :type xcb:CARD16)
+   (reds :initarg :reds :type xcb:CARD16)
+   (greens :initarg :greens :type xcb:CARD16)
+   (blues :initarg :blues :type xcb:CARD16)))
+(defclass xcb:AllocColorPlanes~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pixels-len :initarg :pixels-len :type xcb:CARD16)
+   (pad~1 :initform 2 :type xcb:-pad)
+   (red-mask :initarg :red-mask :type xcb:CARD32)
+   (green-mask :initarg :green-mask :type xcb:CARD32)
+   (blue-mask :initarg :blue-mask :type xcb:CARD32)
+   (pad~2 :initform 8 :type xcb:-pad)
+   (pixels :initarg :pixels :type xcb:-ignore)
+   (pixels~ :initform
+           '(name pixels type xcb:CARD32 size
+                  (xcb:-fieldref 'pixels-len))
+           :type xcb:-list)))
+
+(defclass xcb:FreeColors
+  (xcb:-request)
+  ((~opcode :initform 88 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (cmap :initarg :cmap :type xcb:COLORMAP)
+   (plane-mask :initarg :plane-mask :type xcb:CARD32)
+   (pixels :initarg :pixels :type xcb:-ignore)
+   (pixels~ :initform
+           '(name pixels type xcb:CARD32 size nil)
+           :type xcb:-list)))
+
+(defconst xcb:ColorFlag:Red 1)
+(defconst xcb:ColorFlag:Green 2)
+(defconst xcb:ColorFlag:Blue 4)
+
+(defclass xcb:COLORITEM
+  (xcb:-struct)
+  ((pixel :initarg :pixel :type xcb:CARD32)
+   (red :initarg :red :type xcb:CARD16)
+   (green :initarg :green :type xcb:CARD16)
+   (blue :initarg :blue :type xcb:CARD16)
+   (flags :initarg :flags :type xcb:BYTE)
+   (pad~0 :initform 1 :type xcb:-pad)))
+
+(defclass xcb:StoreColors
+  (xcb:-request)
+  ((~opcode :initform 89 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (cmap :initarg :cmap :type xcb:COLORMAP)
+   (items :initarg :items :type xcb:-ignore)
+   (items~ :initform
+          '(name items type xcb:COLORITEM size nil)
+          :type xcb:-list)))
+
+(defclass xcb:StoreNamedColor
+  (xcb:-request)
+  ((~opcode :initform 90 :type xcb:-u1)
+   (flags :initarg :flags :type xcb:CARD8)
+   (cmap :initarg :cmap :type xcb:COLORMAP)
+   (pixel :initarg :pixel :type xcb:CARD32)
+   (name-len :initarg :name-len :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:char size
+                (xcb:-fieldref 'name-len))
+         :type xcb:-list)))
+
+(defclass xcb:RGB
+  (xcb:-struct)
+  ((red :initarg :red :type xcb:CARD16)
+   (green :initarg :green :type xcb:CARD16)
+   (blue :initarg :blue :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)))
+
+(defclass xcb:QueryColors
+  (xcb:-request)
+  ((~opcode :initform 91 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (cmap :initarg :cmap :type xcb:COLORMAP)
+   (pixels :initarg :pixels :type xcb:-ignore)
+   (pixels~ :initform
+           '(name pixels type xcb:CARD32 size nil)
+           :type xcb:-list)))
+(defclass xcb:QueryColors~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (colors-len :initarg :colors-len :type xcb:CARD16)
+   (pad~1 :initform 22 :type xcb:-pad)
+   (colors :initarg :colors :type xcb:-ignore)
+   (colors~ :initform
+           '(name colors type xcb:RGB size
+                  (xcb:-fieldref 'colors-len))
+           :type xcb:-list)))
+
+(defclass xcb:LookupColor
+  (xcb:-request)
+  ((~opcode :initform 92 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (cmap :initarg :cmap :type xcb:COLORMAP)
+   (name-len :initarg :name-len :type xcb:CARD16)
+   (pad~1 :initform 2 :type xcb:-pad)
+   (name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:char size
+                (xcb:-fieldref 'name-len))
+         :type xcb:-list)))
+(defclass xcb:LookupColor~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (exact-red :initarg :exact-red :type xcb:CARD16)
+   (exact-green :initarg :exact-green :type xcb:CARD16)
+   (exact-blue :initarg :exact-blue :type xcb:CARD16)
+   (visual-red :initarg :visual-red :type xcb:CARD16)
+   (visual-green :initarg :visual-green :type xcb:CARD16)
+   (visual-blue :initarg :visual-blue :type xcb:CARD16)))
+
+(defconst xcb:Pixmap:None 0)
+
+(defclass xcb:CreateCursor
+  (xcb:-request)
+  ((~opcode :initform 93 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (cid :initarg :cid :type xcb:CURSOR)
+   (source :initarg :source :type xcb:PIXMAP)
+   (mask :initarg :mask :type xcb:PIXMAP)
+   (fore-red :initarg :fore-red :type xcb:CARD16)
+   (fore-green :initarg :fore-green :type xcb:CARD16)
+   (fore-blue :initarg :fore-blue :type xcb:CARD16)
+   (back-red :initarg :back-red :type xcb:CARD16)
+   (back-green :initarg :back-green :type xcb:CARD16)
+   (back-blue :initarg :back-blue :type xcb:CARD16)
+   (x :initarg :x :type xcb:CARD16)
+   (y :initarg :y :type xcb:CARD16)))
+
+(defconst xcb:Font:None 0)
+
+(defclass xcb:CreateGlyphCursor
+  (xcb:-request)
+  ((~opcode :initform 94 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (cid :initarg :cid :type xcb:CURSOR)
+   (source-font :initarg :source-font :type xcb:FONT)
+   (mask-font :initarg :mask-font :type xcb:FONT)
+   (source-char :initarg :source-char :type xcb:CARD16)
+   (mask-char :initarg :mask-char :type xcb:CARD16)
+   (fore-red :initarg :fore-red :type xcb:CARD16)
+   (fore-green :initarg :fore-green :type xcb:CARD16)
+   (fore-blue :initarg :fore-blue :type xcb:CARD16)
+   (back-red :initarg :back-red :type xcb:CARD16)
+   (back-green :initarg :back-green :type xcb:CARD16)
+   (back-blue :initarg :back-blue :type xcb:CARD16)))
+
+(defclass xcb:FreeCursor
+  (xcb:-request)
+  ((~opcode :initform 95 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (cursor :initarg :cursor :type xcb:CURSOR)))
+
+(defclass xcb:RecolorCursor
+  (xcb:-request)
+  ((~opcode :initform 96 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (cursor :initarg :cursor :type xcb:CURSOR)
+   (fore-red :initarg :fore-red :type xcb:CARD16)
+   (fore-green :initarg :fore-green :type xcb:CARD16)
+   (fore-blue :initarg :fore-blue :type xcb:CARD16)
+   (back-red :initarg :back-red :type xcb:CARD16)
+   (back-green :initarg :back-green :type xcb:CARD16)
+   (back-blue :initarg :back-blue :type xcb:CARD16)))
+
+(defconst xcb:QueryShapeOf:LargestCursor 0)
+(defconst xcb:QueryShapeOf:FastestTile 1)
+(defconst xcb:QueryShapeOf:FastestStipple 2)
+
+(defclass xcb:QueryBestSize
+  (xcb:-request)
+  ((~opcode :initform 97 :type xcb:-u1)
+   (class :initarg :class :type xcb:CARD8)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)))
+(defclass xcb:QueryBestSize~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)))
+
+(defclass xcb:QueryExtension
+  (xcb:-request)
+  ((~opcode :initform 98 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (name-len :initarg :name-len :type xcb:CARD16)
+   (pad~1 :initform 2 :type xcb:-pad)
+   (name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:char size
+                (xcb:-fieldref 'name-len))
+         :type xcb:-list)))
+(defclass xcb:QueryExtension~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (present :initarg :present :type xcb:BOOL)
+   (major-opcode :initarg :major-opcode :type xcb:CARD8)
+   (first-event :initarg :first-event :type xcb:CARD8)
+   (first-error :initarg :first-error :type xcb:CARD8)))
+
+(defclass xcb:ListExtensions
+  (xcb:-request)
+  ((~opcode :initform 99 :type xcb:-u1)))
+(defclass xcb:ListExtensions~reply
+  (xcb:-reply)
+  ((names-len :initarg :names-len :type xcb:CARD8)
+   (pad~0 :initform 24 :type xcb:-pad)
+   (names :initarg :names :type xcb:-ignore)
+   (names~ :initform
+          '(name names type xcb:STR size
+                 (xcb:-fieldref 'names-len))
+          :type xcb:-list)))
+
+(defclass xcb:ChangeKeyboardMapping
+  (xcb:-request)
+  ((~opcode :initform 100 :type xcb:-u1)
+   (keycode-count :initarg :keycode-count :type xcb:CARD8)
+   (first-keycode :initarg :first-keycode :type xcb:KEYCODE)
+   (keysyms-per-keycode :initarg :keysyms-per-keycode :type xcb:CARD8)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (keysyms :initarg :keysyms :type xcb:-ignore)
+   (keysyms~ :initform
+            '(name keysyms type xcb:KEYSYM size
+                   (*
+                    (xcb:-fieldref 'keycode-count)
+                    (xcb:-fieldref 'keysyms-per-keycode)))
+            :type xcb:-list)))
+
+(defclass xcb:GetKeyboardMapping
+  (xcb:-request)
+  ((~opcode :initform 101 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (first-keycode :initarg :first-keycode :type xcb:KEYCODE)
+   (count :initarg :count :type xcb:CARD8)))
+(defclass xcb:GetKeyboardMapping~reply
+  (xcb:-reply)
+  ((keysyms-per-keycode :initarg :keysyms-per-keycode :type xcb:BYTE)
+   (pad~0 :initform 24 :type xcb:-pad)
+   (keysyms :initarg :keysyms :type xcb:-ignore)
+   (keysyms~ :initform
+            '(name keysyms type xcb:KEYSYM size
+                   (xcb:-fieldref 'length))
+            :type xcb:-list)))
+
+(defconst xcb:KB:KeyClickPercent 1)
+(defconst xcb:KB:BellPercent 2)
+(defconst xcb:KB:BellPitch 4)
+(defconst xcb:KB:BellDuration 8)
+(defconst xcb:KB:Led 16)
+(defconst xcb:KB:LedMode 32)
+(defconst xcb:KB:Key 64)
+(defconst xcb:KB:AutoRepeatMode 128)
+
+(defconst xcb:LedMode:Off 0)
+(defconst xcb:LedMode:On 1)
+
+(defconst xcb:AutoRepeatMode:Off 0)
+(defconst xcb:AutoRepeatMode:On 1)
+(defconst xcb:AutoRepeatMode:Default 2)
+
+(defclass xcb:ChangeKeyboardControl
+  (xcb:-request)
+  ((~opcode :initform 102 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (value-mask :initarg :value-mask :type xcb:CARD32)
+   (value-list :initform
+              '(expression
+                (xcb:-fieldref 'value-mask)
+                cases
+                ((xcb:KB:KeyClickPercent key-click-percent)
+                 (xcb:KB:BellPercent bell-percent)
+                 (xcb:KB:BellPitch bell-pitch)
+                 (xcb:KB:BellDuration bell-duration)
+                 (xcb:KB:Led led)
+                 (xcb:KB:LedMode led-mode)
+                 (xcb:KB:Key key)
+                 (xcb:KB:AutoRepeatMode auto-repeat-mode)))
+              :type xcb:-switch)
+   (key-click-percent :initarg :key-click-percent :type xcb:INT32)
+   (bell-percent :initarg :bell-percent :type xcb:INT32)
+   (bell-pitch :initarg :bell-pitch :type xcb:INT32)
+   (bell-duration :initarg :bell-duration :type xcb:INT32)
+   (led :initarg :led :type xcb:CARD32)
+   (led-mode :initarg :led-mode :type xcb:CARD32)
+   (key :initarg :key :type xcb:KEYCODE32)
+   (auto-repeat-mode :initarg :auto-repeat-mode :type xcb:CARD32)))
+
+(defclass xcb:GetKeyboardControl
+  (xcb:-request)
+  ((~opcode :initform 103 :type xcb:-u1)))
+(defclass xcb:GetKeyboardControl~reply
+  (xcb:-reply)
+  ((global-auto-repeat :initarg :global-auto-repeat :type xcb:BYTE)
+   (led-mask :initarg :led-mask :type xcb:CARD32)
+   (key-click-percent :initarg :key-click-percent :type xcb:CARD8)
+   (bell-percent :initarg :bell-percent :type xcb:CARD8)
+   (bell-pitch :initarg :bell-pitch :type xcb:CARD16)
+   (bell-duration :initarg :bell-duration :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (auto-repeats :initarg :auto-repeats :type xcb:-ignore)
+   (auto-repeats~ :initform
+                 '(name auto-repeats type xcb:CARD8 size 32)
+                 :type xcb:-list)))
+
+(defclass xcb:Bell
+  (xcb:-request)
+  ((~opcode :initform 104 :type xcb:-u1)
+   (percent :initarg :percent :type xcb:INT8)))
+
+(defclass xcb:ChangePointerControl
+  (xcb:-request)
+  ((~opcode :initform 105 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (acceleration-numerator :initarg :acceleration-numerator :type xcb:INT16)
+   (acceleration-denominator :initarg :acceleration-denominator :type 
xcb:INT16)
+   (threshold :initarg :threshold :type xcb:INT16)
+   (do-acceleration :initarg :do-acceleration :type xcb:BOOL)
+   (do-threshold :initarg :do-threshold :type xcb:BOOL)))
+
+(defclass xcb:GetPointerControl
+  (xcb:-request)
+  ((~opcode :initform 106 :type xcb:-u1)))
+(defclass xcb:GetPointerControl~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (acceleration-numerator :initarg :acceleration-numerator :type xcb:CARD16)
+   (acceleration-denominator :initarg :acceleration-denominator :type 
xcb:CARD16)
+   (threshold :initarg :threshold :type xcb:CARD16)
+   (pad~1 :initform 18 :type xcb:-pad)))
+
+(defconst xcb:Blanking:NotPreferred 0)
+(defconst xcb:Blanking:Preferred 1)
+(defconst xcb:Blanking:Default 2)
+
+(defconst xcb:Exposures:NotAllowed 0)
+(defconst xcb:Exposures:Allowed 1)
+(defconst xcb:Exposures:Default 2)
+
+(defclass xcb:SetScreenSaver
+  (xcb:-request)
+  ((~opcode :initform 107 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (timeout :initarg :timeout :type xcb:INT16)
+   (interval :initarg :interval :type xcb:INT16)
+   (prefer-blanking :initarg :prefer-blanking :type xcb:CARD8)
+   (allow-exposures :initarg :allow-exposures :type xcb:CARD8)))
+
+(defclass xcb:GetScreenSaver
+  (xcb:-request)
+  ((~opcode :initform 108 :type xcb:-u1)))
+(defclass xcb:GetScreenSaver~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (timeout :initarg :timeout :type xcb:CARD16)
+   (interval :initarg :interval :type xcb:CARD16)
+   (prefer-blanking :initarg :prefer-blanking :type xcb:BYTE)
+   (allow-exposures :initarg :allow-exposures :type xcb:BYTE)
+   (pad~1 :initform 18 :type xcb:-pad)))
+
+(defconst xcb:HostMode:Insert 0)
+(defconst xcb:HostMode:Delete 1)
+
+(defconst xcb:Family:Internet 0)
+(defconst xcb:Family:DECnet 1)
+(defconst xcb:Family:Chaos 2)
+(defconst xcb:Family:ServerInterpreted 5)
+(defconst xcb:Family:Internet6 6)
+
+(defclass xcb:ChangeHosts
+  (xcb:-request)
+  ((~opcode :initform 109 :type xcb:-u1)
+   (mode :initarg :mode :type xcb:CARD8)
+   (family :initarg :family :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (address-len :initarg :address-len :type xcb:CARD16)
+   (address :initarg :address :type xcb:-ignore)
+   (address~ :initform
+            '(name address type xcb:BYTE size
+                   (xcb:-fieldref 'address-len))
+            :type xcb:-list)))
+
+(defclass xcb:HOST
+  (xcb:-struct)
+  ((family :initarg :family :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (address-len :initarg :address-len :type xcb:CARD16)
+   (address :initarg :address :type xcb:-ignore)
+   (address~ :initform
+            '(name address type xcb:BYTE size
+                   (xcb:-fieldref 'address-len))
+            :type xcb:-list)))
+
+(defclass xcb:ListHosts
+  (xcb:-request)
+  ((~opcode :initform 110 :type xcb:-u1)))
+(defclass xcb:ListHosts~reply
+  (xcb:-reply)
+  ((mode :initarg :mode :type xcb:BYTE)
+   (hosts-len :initarg :hosts-len :type xcb:CARD16)
+   (pad~0 :initform 22 :type xcb:-pad)
+   (hosts :initarg :hosts :type xcb:-ignore)
+   (hosts~ :initform
+          '(name hosts type xcb:HOST size
+                 (xcb:-fieldref 'hosts-len))
+          :type xcb:-list)))
+
+(defconst xcb:AccessControl:Disable 0)
+(defconst xcb:AccessControl:Enable 1)
+
+(defclass xcb:SetAccessControl
+  (xcb:-request)
+  ((~opcode :initform 111 :type xcb:-u1)
+   (mode :initarg :mode :type xcb:CARD8)))
+
+(defconst xcb:CloseDown:DestroyAll 0)
+(defconst xcb:CloseDown:RetainPermanent 1)
+(defconst xcb:CloseDown:RetainTemporary 2)
+
+(defclass xcb:SetCloseDownMode
+  (xcb:-request)
+  ((~opcode :initform 112 :type xcb:-u1)
+   (mode :initarg :mode :type xcb:CARD8)))
+
+(defconst xcb:Kill:AllTemporary 0)
+
+(defclass xcb:KillClient
+  (xcb:-request)
+  ((~opcode :initform 113 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (resource :initarg :resource :type xcb:CARD32)))
+
+(defclass xcb:RotateProperties
+  (xcb:-request)
+  ((~opcode :initform 114 :type xcb:-u1)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (window :initarg :window :type xcb:WINDOW)
+   (atoms-len :initarg :atoms-len :type xcb:CARD16)
+   (delta :initarg :delta :type xcb:INT16)
+   (atoms :initarg :atoms :type xcb:-ignore)
+   (atoms~ :initform
+          '(name atoms type xcb:ATOM size
+                 (xcb:-fieldref 'atoms-len))
+          :type xcb:-list)))
+
+(defconst xcb:ScreenSaver:Reset 0)
+(defconst xcb:ScreenSaver:Active 1)
+
+(defclass xcb:ForceScreenSaver
+  (xcb:-request)
+  ((~opcode :initform 115 :type xcb:-u1)
+   (mode :initarg :mode :type xcb:CARD8)))
+
+(defconst xcb:MappingStatus:Success 0)
+(defconst xcb:MappingStatus:Busy 1)
+(defconst xcb:MappingStatus:Failure 2)
+
+(defclass xcb:SetPointerMapping
+  (xcb:-request)
+  ((~opcode :initform 116 :type xcb:-u1)
+   (map-len :initarg :map-len :type xcb:CARD8)
+   (map :initarg :map :type xcb:-ignore)
+   (map~ :initform
+        '(name map type xcb:CARD8 size
+               (xcb:-fieldref 'map-len))
+        :type xcb:-list)))
+(defclass xcb:SetPointerMapping~reply
+  (xcb:-reply)
+  ((status :initarg :status :type xcb:BYTE)))
+
+(defclass xcb:GetPointerMapping
+  (xcb:-request)
+  ((~opcode :initform 117 :type xcb:-u1)))
+(defclass xcb:GetPointerMapping~reply
+  (xcb:-reply)
+  ((map-len :initarg :map-len :type xcb:CARD8)
+   (pad~0 :initform 24 :type xcb:-pad)
+   (map :initarg :map :type xcb:-ignore)
+   (map~ :initform
+        '(name map type xcb:CARD8 size
+               (xcb:-fieldref 'map-len))
+        :type xcb:-list)))
+
+(defconst xcb:MapIndex:Shift 0)
+(defconst xcb:MapIndex:Lock 1)
+(defconst xcb:MapIndex:Control 2)
+(defconst xcb:MapIndex:1 3)
+(defconst xcb:MapIndex:2 4)
+(defconst xcb:MapIndex:3 5)
+(defconst xcb:MapIndex:4 6)
+(defconst xcb:MapIndex:5 7)
+
+(defclass xcb:SetModifierMapping
+  (xcb:-request)
+  ((~opcode :initform 118 :type xcb:-u1)
+   (keycodes-per-modifier :initarg :keycodes-per-modifier :type xcb:CARD8)
+   (keycodes :initarg :keycodes :type xcb:-ignore)
+   (keycodes~ :initform
+             '(name keycodes type xcb:KEYCODE size
+                    (*
+                     (xcb:-fieldref 'keycodes-per-modifier)
+                     8))
+             :type xcb:-list)))
+(defclass xcb:SetModifierMapping~reply
+  (xcb:-reply)
+  ((status :initarg :status :type xcb:BYTE)))
+
+(defclass xcb:GetModifierMapping
+  (xcb:-request)
+  ((~opcode :initform 119 :type xcb:-u1)))
+(defclass xcb:GetModifierMapping~reply
+  (xcb:-reply)
+  ((keycodes-per-modifier :initarg :keycodes-per-modifier :type xcb:CARD8)
+   (pad~0 :initform 24 :type xcb:-pad)
+   (keycodes :initarg :keycodes :type xcb:-ignore)
+   (keycodes~ :initform
+             '(name keycodes type xcb:KEYCODE size
+                    (*
+                     (xcb:-fieldref 'keycodes-per-modifier)
+                     8))
+             :type xcb:-list)))
+
+(defclass xcb:NoOperation
+  (xcb:-request)
+  ((~opcode :initform 127 :type xcb:-u1)))
+
+(defconst xcb:error-number-class-alist
+  '((1 . xcb:Request)
+    (2 . xcb:Value)
+    (3 . xcb:Window)
+    (4 . xcb:Pixmap)
+    (5 . xcb:Atom)
+    (6 . xcb:Cursor)
+    (7 . xcb:Font)
+    (8 . xcb:Match)
+    (9 . xcb:Drawable)
+    (10 . xcb:Access)
+    (11 . xcb:Alloc)
+    (12 . xcb:Colormap)
+    (13 . xcb:GContext)
+    (14 . xcb:IDChoice)
+    (15 . xcb:Name)
+    (16 . xcb:Length)
+    (17 . xcb:Implementation))
+  "(error-number . error-class) alist")
+
+(defconst xcb:event-number-class-alist
+  '((2 . xcb:KeyPress)
+    (3 . xcb:KeyRelease)
+    (4 . xcb:ButtonPress)
+    (5 . xcb:ButtonRelease)
+    (6 . xcb:MotionNotify)
+    (7 . xcb:EnterNotify)
+    (8 . xcb:LeaveNotify)
+    (9 . xcb:FocusIn)
+    (10 . xcb:FocusOut)
+    (11 . xcb:KeymapNotify)
+    (12 . xcb:Expose)
+    (13 . xcb:GraphicsExposure)
+    (14 . xcb:NoExposure)
+    (15 . xcb:VisibilityNotify)
+    (16 . xcb:CreateNotify)
+    (17 . xcb:DestroyNotify)
+    (18 . xcb:UnmapNotify)
+    (19 . xcb:MapNotify)
+    (20 . xcb:MapRequest)
+    (21 . xcb:ReparentNotify)
+    (22 . xcb:ConfigureNotify)
+    (23 . xcb:ConfigureRequest)
+    (24 . xcb:GravityNotify)
+    (25 . xcb:ResizeRequest)
+    (26 . xcb:CirculateNotify)
+    (27 . xcb:CirculateRequest)
+    (28 . xcb:PropertyNotify)
+    (29 . xcb:SelectionClear)
+    (30 . xcb:SelectionRequest)
+    (31 . xcb:SelectionNotify)
+    (32 . xcb:ColormapNotify)
+    (33 . xcb:ClientMessage)
+    (34 . xcb:MappingNotify)
+    (35 . xcb:GeGeneric))
+  "(event-number . event-class) alist")
+
+
+
+(provide 'xcb-xproto)
diff --git a/xcb-xselinux.el b/xcb-xselinux.el
new file mode 100644
index 0000000..cdfade1
--- /dev/null
+++ b/xcb-xselinux.el
@@ -0,0 +1,333 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `xselinux.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:xselinux:-extension-xname "SELinux")
+(defconst xcb:xselinux:-extension-name "SELinux")
+(defconst xcb:xselinux:-major-version 1)
+(defconst xcb:xselinux:-minor-version 0)
+
+(require 'xcb-xproto)
+
+(defclass xcb:xselinux:QueryVersion
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)
+   (client-major :initarg :client-major :type xcb:CARD8)
+   (client-minor :initarg :client-minor :type xcb:CARD8)))
+(defclass xcb:xselinux:QueryVersion~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (server-major :initarg :server-major :type xcb:CARD16)
+   (server-minor :initarg :server-minor :type xcb:CARD16)))
+
+(defclass xcb:xselinux:SetDeviceCreateContext
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)
+   (context-len :initarg :context-len :type xcb:CARD32)
+   (context :initarg :context :type xcb:-ignore)
+   (context~ :initform
+            '(name context type xcb:char size
+                   (xcb:-fieldref 'context-len))
+            :type xcb:-list)))
+
+(defclass xcb:xselinux:GetDeviceCreateContext
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)))
+(defclass xcb:xselinux:GetDeviceCreateContext~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (context-len :initarg :context-len :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (context :initarg :context :type xcb:-ignore)
+   (context~ :initform
+            '(name context type xcb:char size
+                   (xcb:-fieldref 'context-len))
+            :type xcb:-list)))
+
+(defclass xcb:xselinux:SetDeviceContext
+  (xcb:-request)
+  ((~opcode :initform 3 :type xcb:-u1)
+   (device :initarg :device :type xcb:CARD32)
+   (context-len :initarg :context-len :type xcb:CARD32)
+   (context :initarg :context :type xcb:-ignore)
+   (context~ :initform
+            '(name context type xcb:char size
+                   (xcb:-fieldref 'context-len))
+            :type xcb:-list)))
+
+(defclass xcb:xselinux:GetDeviceContext
+  (xcb:-request)
+  ((~opcode :initform 4 :type xcb:-u1)
+   (device :initarg :device :type xcb:CARD32)))
+(defclass xcb:xselinux:GetDeviceContext~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (context-len :initarg :context-len :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (context :initarg :context :type xcb:-ignore)
+   (context~ :initform
+            '(name context type xcb:char size
+                   (xcb:-fieldref 'context-len))
+            :type xcb:-list)))
+
+(defclass xcb:xselinux:SetWindowCreateContext
+  (xcb:-request)
+  ((~opcode :initform 5 :type xcb:-u1)
+   (context-len :initarg :context-len :type xcb:CARD32)
+   (context :initarg :context :type xcb:-ignore)
+   (context~ :initform
+            '(name context type xcb:char size
+                   (xcb:-fieldref 'context-len))
+            :type xcb:-list)))
+
+(defclass xcb:xselinux:GetWindowCreateContext
+  (xcb:-request)
+  ((~opcode :initform 6 :type xcb:-u1)))
+(defclass xcb:xselinux:GetWindowCreateContext~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (context-len :initarg :context-len :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (context :initarg :context :type xcb:-ignore)
+   (context~ :initform
+            '(name context type xcb:char size
+                   (xcb:-fieldref 'context-len))
+            :type xcb:-list)))
+
+(defclass xcb:xselinux:GetWindowContext
+  (xcb:-request)
+  ((~opcode :initform 7 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)))
+(defclass xcb:xselinux:GetWindowContext~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (context-len :initarg :context-len :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (context :initarg :context :type xcb:-ignore)
+   (context~ :initform
+            '(name context type xcb:char size
+                   (xcb:-fieldref 'context-len))
+            :type xcb:-list)))
+
+(defclass xcb:xselinux:ListItem
+  (xcb:-struct)
+  ((name :initarg :name :type xcb:ATOM)
+   (object-context-len :initarg :object-context-len :type xcb:CARD32)
+   (data-context-len :initarg :data-context-len :type xcb:CARD32)
+   (object-context :initarg :object-context :type xcb:-ignore)
+   (object-context~ :initform
+                   '(name object-context type xcb:char size
+                          (xcb:-fieldref 'object-context-len))
+                   :type xcb:-list)
+   (data-context :initarg :data-context :type xcb:-ignore)
+   (data-context~ :initform
+                 '(name data-context type xcb:char size
+                        (xcb:-fieldref 'data-context-len))
+                 :type xcb:-list)))
+
+(defclass xcb:xselinux:SetPropertyCreateContext
+  (xcb:-request)
+  ((~opcode :initform 8 :type xcb:-u1)
+   (context-len :initarg :context-len :type xcb:CARD32)
+   (context :initarg :context :type xcb:-ignore)
+   (context~ :initform
+            '(name context type xcb:char size
+                   (xcb:-fieldref 'context-len))
+            :type xcb:-list)))
+
+(defclass xcb:xselinux:GetPropertyCreateContext
+  (xcb:-request)
+  ((~opcode :initform 9 :type xcb:-u1)))
+(defclass xcb:xselinux:GetPropertyCreateContext~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (context-len :initarg :context-len :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (context :initarg :context :type xcb:-ignore)
+   (context~ :initform
+            '(name context type xcb:char size
+                   (xcb:-fieldref 'context-len))
+            :type xcb:-list)))
+
+(defclass xcb:xselinux:SetPropertyUseContext
+  (xcb:-request)
+  ((~opcode :initform 10 :type xcb:-u1)
+   (context-len :initarg :context-len :type xcb:CARD32)
+   (context :initarg :context :type xcb:-ignore)
+   (context~ :initform
+            '(name context type xcb:char size
+                   (xcb:-fieldref 'context-len))
+            :type xcb:-list)))
+
+(defclass xcb:xselinux:GetPropertyUseContext
+  (xcb:-request)
+  ((~opcode :initform 11 :type xcb:-u1)))
+(defclass xcb:xselinux:GetPropertyUseContext~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (context-len :initarg :context-len :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (context :initarg :context :type xcb:-ignore)
+   (context~ :initform
+            '(name context type xcb:char size
+                   (xcb:-fieldref 'context-len))
+            :type xcb:-list)))
+
+(defclass xcb:xselinux:GetPropertyContext
+  (xcb:-request)
+  ((~opcode :initform 12 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (property :initarg :property :type xcb:ATOM)))
+(defclass xcb:xselinux:GetPropertyContext~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (context-len :initarg :context-len :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (context :initarg :context :type xcb:-ignore)
+   (context~ :initform
+            '(name context type xcb:char size
+                   (xcb:-fieldref 'context-len))
+            :type xcb:-list)))
+
+(defclass xcb:xselinux:GetPropertyDataContext
+  (xcb:-request)
+  ((~opcode :initform 13 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (property :initarg :property :type xcb:ATOM)))
+(defclass xcb:xselinux:GetPropertyDataContext~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (context-len :initarg :context-len :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (context :initarg :context :type xcb:-ignore)
+   (context~ :initform
+            '(name context type xcb:char size
+                   (xcb:-fieldref 'context-len))
+            :type xcb:-list)))
+
+(defclass xcb:xselinux:ListProperties
+  (xcb:-request)
+  ((~opcode :initform 14 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)))
+(defclass xcb:xselinux:ListProperties~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (properties-len :initarg :properties-len :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (properties :initarg :properties :type xcb:-ignore)
+   (properties~ :initform
+               '(name properties type xcb:xselinux:ListItem size
+                      (xcb:-fieldref 'properties-len))
+               :type xcb:-list)))
+
+(defclass xcb:xselinux:SetSelectionCreateContext
+  (xcb:-request)
+  ((~opcode :initform 15 :type xcb:-u1)
+   (context-len :initarg :context-len :type xcb:CARD32)
+   (context :initarg :context :type xcb:-ignore)
+   (context~ :initform
+            '(name context type xcb:char size
+                   (xcb:-fieldref 'context-len))
+            :type xcb:-list)))
+
+(defclass xcb:xselinux:GetSelectionCreateContext
+  (xcb:-request)
+  ((~opcode :initform 16 :type xcb:-u1)))
+(defclass xcb:xselinux:GetSelectionCreateContext~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (context-len :initarg :context-len :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (context :initarg :context :type xcb:-ignore)
+   (context~ :initform
+            '(name context type xcb:char size
+                   (xcb:-fieldref 'context-len))
+            :type xcb:-list)))
+
+(defclass xcb:xselinux:SetSelectionUseContext
+  (xcb:-request)
+  ((~opcode :initform 17 :type xcb:-u1)
+   (context-len :initarg :context-len :type xcb:CARD32)
+   (context :initarg :context :type xcb:-ignore)
+   (context~ :initform
+            '(name context type xcb:char size
+                   (xcb:-fieldref 'context-len))
+            :type xcb:-list)))
+
+(defclass xcb:xselinux:GetSelectionUseContext
+  (xcb:-request)
+  ((~opcode :initform 18 :type xcb:-u1)))
+(defclass xcb:xselinux:GetSelectionUseContext~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (context-len :initarg :context-len :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (context :initarg :context :type xcb:-ignore)
+   (context~ :initform
+            '(name context type xcb:char size
+                   (xcb:-fieldref 'context-len))
+            :type xcb:-list)))
+
+(defclass xcb:xselinux:GetSelectionContext
+  (xcb:-request)
+  ((~opcode :initform 19 :type xcb:-u1)
+   (selection :initarg :selection :type xcb:ATOM)))
+(defclass xcb:xselinux:GetSelectionContext~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (context-len :initarg :context-len :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (context :initarg :context :type xcb:-ignore)
+   (context~ :initform
+            '(name context type xcb:char size
+                   (xcb:-fieldref 'context-len))
+            :type xcb:-list)))
+
+(defclass xcb:xselinux:GetSelectionDataContext
+  (xcb:-request)
+  ((~opcode :initform 20 :type xcb:-u1)
+   (selection :initarg :selection :type xcb:ATOM)))
+(defclass xcb:xselinux:GetSelectionDataContext~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (context-len :initarg :context-len :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (context :initarg :context :type xcb:-ignore)
+   (context~ :initform
+            '(name context type xcb:char size
+                   (xcb:-fieldref 'context-len))
+            :type xcb:-list)))
+
+(defclass xcb:xselinux:ListSelections
+  (xcb:-request)
+  ((~opcode :initform 21 :type xcb:-u1)))
+(defclass xcb:xselinux:ListSelections~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (selections-len :initarg :selections-len :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (selections :initarg :selections :type xcb:-ignore)
+   (selections~ :initform
+               '(name selections type xcb:xselinux:ListItem size
+                      (xcb:-fieldref 'selections-len))
+               :type xcb:-list)))
+
+(defclass xcb:xselinux:GetClientContext
+  (xcb:-request)
+  ((~opcode :initform 22 :type xcb:-u1)
+   (resource :initarg :resource :type xcb:CARD32)))
+(defclass xcb:xselinux:GetClientContext~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (context-len :initarg :context-len :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (context :initarg :context :type xcb:-ignore)
+   (context~ :initform
+            '(name context type xcb:char size
+                   (xcb:-fieldref 'context-len))
+            :type xcb:-list)))
+
+
+
+(provide 'xcb-xselinux)
diff --git a/xcb-xtest.el b/xcb-xtest.el
new file mode 100644
index 0000000..9197be0
--- /dev/null
+++ b/xcb-xtest.el
@@ -0,0 +1,58 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `xtest.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:xtest:-extension-xname "XTEST")
+(defconst xcb:xtest:-extension-name "Test")
+(defconst xcb:xtest:-major-version 2)
+(defconst xcb:xtest:-minor-version 2)
+
+(require 'xcb-xproto)
+
+(defclass xcb:xtest:GetVersion
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)
+   (major-version :initarg :major-version :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (minor-version :initarg :minor-version :type xcb:CARD16)))
+(defclass xcb:xtest:GetVersion~reply
+  (xcb:-reply)
+  ((major-version :initarg :major-version :type xcb:CARD8)
+   (minor-version :initarg :minor-version :type xcb:CARD16)))
+
+(defconst xcb:xtest:Cursor:None 0)
+(defconst xcb:xtest:Cursor:Current 1)
+
+(defclass xcb:xtest:CompareCursor
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)
+   (cursor :initarg :cursor :type xcb:CURSOR)))
+(defclass xcb:xtest:CompareCursor~reply
+  (xcb:-reply)
+  ((same :initarg :same :type xcb:BOOL)))
+
+(defclass xcb:xtest:FakeInput
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)
+   (type :initarg :type :type xcb:BYTE)
+   (detail :initarg :detail :type xcb:BYTE)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (time :initarg :time :type xcb:CARD32)
+   (root :initarg :root :type xcb:WINDOW)
+   (pad~1 :initform 8 :type xcb:-pad)
+   (rootX :initarg :rootX :type xcb:INT16)
+   (rootY :initarg :rootY :type xcb:INT16)
+   (pad~2 :initform 7 :type xcb:-pad)
+   (deviceid :initarg :deviceid :type xcb:CARD8)))
+
+(defclass xcb:xtest:GrabControl
+  (xcb:-request)
+  ((~opcode :initform 3 :type xcb:-u1)
+   (impervious :initarg :impervious :type xcb:BOOL)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+
+
+(provide 'xcb-xtest)
diff --git a/xcb-xv.el b/xcb-xv.el
new file mode 100644
index 0000000..9c62f5d
--- /dev/null
+++ b/xcb-xv.el
@@ -0,0 +1,474 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `xv.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:xv:-extension-xname "XVideo")
+(defconst xcb:xv:-extension-name "Xv")
+(defconst xcb:xv:-major-version 2)
+(defconst xcb:xv:-minor-version 2)
+
+(require 'xcb-xproto)
+
+(require 'xcb-shm)
+
+(xcb:deftypealias 'xcb:xv:PORT 'xcb:-u4)
+
+(xcb:deftypealias 'xcb:xv:ENCODING 'xcb:-u4)
+
+(defconst xcb:xv:Type:InputMask 1)
+(defconst xcb:xv:Type:OutputMask 2)
+(defconst xcb:xv:Type:VideoMask 4)
+(defconst xcb:xv:Type:StillMask 8)
+(defconst xcb:xv:Type:ImageMask 16)
+
+(defconst xcb:xv:ImageFormatInfoType:RGB 0)
+(defconst xcb:xv:ImageFormatInfoType:YUV 1)
+
+(defconst xcb:xv:ImageFormatInfoFormat:Packed 0)
+(defconst xcb:xv:ImageFormatInfoFormat:Planar 1)
+
+(defconst xcb:xv:AttributeFlag:Gettable 1)
+(defconst xcb:xv:AttributeFlag:Settable 2)
+
+(defconst xcb:xv:VideoNotifyReason:Started 0)
+(defconst xcb:xv:VideoNotifyReason:Stopped 1)
+(defconst xcb:xv:VideoNotifyReason:Busy 2)
+(defconst xcb:xv:VideoNotifyReason:Preempted 3)
+(defconst xcb:xv:VideoNotifyReason:HardError 4)
+
+(defconst xcb:xv:ScanlineOrder:TopToBottom 0)
+(defconst xcb:xv:ScanlineOrder:BottomToTop 1)
+
+(defconst xcb:xv:GrabPortStatus:Success 0)
+(defconst xcb:xv:GrabPortStatus:BadExtension 1)
+(defconst xcb:xv:GrabPortStatus:AlreadyGrabbed 2)
+(defconst xcb:xv:GrabPortStatus:InvalidTime 3)
+(defconst xcb:xv:GrabPortStatus:BadReply 4)
+(defconst xcb:xv:GrabPortStatus:BadAlloc 5)
+
+(defclass xcb:xv:Rational
+  (xcb:-struct)
+  ((numerator :initarg :numerator :type xcb:INT32)
+   (denominator :initarg :denominator :type xcb:INT32)))
+
+(defclass xcb:xv:Format
+  (xcb:-struct)
+  ((visual :initarg :visual :type xcb:VISUALID)
+   (depth :initarg :depth :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:xv:AdaptorInfo
+  (xcb:-struct)
+  ((base-id :initarg :base-id :type xcb:xv:PORT)
+   (name-size :initarg :name-size :type xcb:CARD16)
+   (num-ports :initarg :num-ports :type xcb:CARD16)
+   (num-formats :initarg :num-formats :type xcb:CARD16)
+   (type :initarg :type :type xcb:CARD8)
+   (pad~0 :initform 1 :type xcb:-pad)
+   (name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:char size
+                (xcb:-fieldref 'name-size))
+         :type xcb:-list)
+   (pad~1 :initform 4 :type xcb:-pad-align)
+   (formats :initarg :formats :type xcb:-ignore)
+   (formats~ :initform
+            '(name formats type xcb:xv:Format size
+                   (xcb:-fieldref 'num-formats))
+            :type xcb:-list)))
+
+(defclass xcb:xv:EncodingInfo
+  (xcb:-struct)
+  ((encoding :initarg :encoding :type xcb:xv:ENCODING)
+   (name-size :initarg :name-size :type xcb:CARD16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (rate :initarg :rate :type xcb:xv:Rational)
+   (name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:char size
+                (xcb:-fieldref 'name-size))
+         :type xcb:-list)))
+
+(defclass xcb:xv:Image
+  (xcb:-struct)
+  ((id :initarg :id :type xcb:CARD32)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (data-size :initarg :data-size :type xcb:CARD32)
+   (num-planes :initarg :num-planes :type xcb:CARD32)
+   (pitches :initarg :pitches :type xcb:-ignore)
+   (pitches~ :initform
+            '(name pitches type xcb:CARD32 size
+                   (xcb:-fieldref 'num-planes))
+            :type xcb:-list)
+   (offsets :initarg :offsets :type xcb:-ignore)
+   (offsets~ :initform
+            '(name offsets type xcb:CARD32 size
+                   (xcb:-fieldref 'num-planes))
+            :type xcb:-list)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:CARD8 size
+                (xcb:-fieldref 'data-size))
+         :type xcb:-list)))
+
+(defclass xcb:xv:AttributeInfo
+  (xcb:-struct)
+  ((flags :initarg :flags :type xcb:CARD32)
+   (min :initarg :min :type xcb:INT32)
+   (max :initarg :max :type xcb:INT32)
+   (size :initarg :size :type xcb:CARD32)
+   (name :initarg :name :type xcb:-ignore)
+   (name~ :initform
+         '(name name type xcb:char size
+                (xcb:-fieldref 'size))
+         :type xcb:-list)))
+
+(defclass xcb:xv:ImageFormatInfo
+  (xcb:-struct)
+  ((id :initarg :id :type xcb:CARD32)
+   (type :initarg :type :type xcb:CARD8)
+   (byte-order :initarg :byte-order :type xcb:CARD8)
+   (pad~0 :initform 2 :type xcb:-pad)
+   (guid :initarg :guid :type xcb:-ignore)
+   (guid~ :initform
+         '(name guid type xcb:CARD8 size 16)
+         :type xcb:-list)
+   (bpp :initarg :bpp :type xcb:CARD8)
+   (num-planes :initarg :num-planes :type xcb:CARD8)
+   (pad~1 :initform 2 :type xcb:-pad)
+   (depth :initarg :depth :type xcb:CARD8)
+   (pad~2 :initform 3 :type xcb:-pad)
+   (red-mask :initarg :red-mask :type xcb:CARD32)
+   (green-mask :initarg :green-mask :type xcb:CARD32)
+   (blue-mask :initarg :blue-mask :type xcb:CARD32)
+   (format :initarg :format :type xcb:CARD8)
+   (pad~3 :initform 3 :type xcb:-pad)
+   (y-sample-bits :initarg :y-sample-bits :type xcb:CARD32)
+   (u-sample-bits :initarg :u-sample-bits :type xcb:CARD32)
+   (v-sample-bits :initarg :v-sample-bits :type xcb:CARD32)
+   (vhorz-y-period :initarg :vhorz-y-period :type xcb:CARD32)
+   (vhorz-u-period :initarg :vhorz-u-period :type xcb:CARD32)
+   (vhorz-v-period :initarg :vhorz-v-period :type xcb:CARD32)
+   (vvert-y-period :initarg :vvert-y-period :type xcb:CARD32)
+   (vvert-u-period :initarg :vvert-u-period :type xcb:CARD32)
+   (vvert-v-period :initarg :vvert-v-period :type xcb:CARD32)
+   (vcomp-order :initarg :vcomp-order :type xcb:-ignore)
+   (vcomp-order~ :initform
+                '(name vcomp-order type xcb:CARD8 size 32)
+                :type xcb:-list)
+   (vscanline-order :initarg :vscanline-order :type xcb:CARD8)
+   (pad~4 :initform 11 :type xcb:-pad)))
+
+(defclass xcb:xv:BadPort
+  (xcb:-error)
+  nil)
+
+(defclass xcb:xv:BadEncoding
+  (xcb:-error)
+  nil)
+
+(defclass xcb:xv:BadControl
+  (xcb:-error)
+  nil)
+
+(defclass xcb:xv:VideoNotify
+  (xcb:-event)
+  ((reason :initarg :reason :type xcb:BYTE)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (port :initarg :port :type xcb:xv:PORT)))
+
+(defclass xcb:xv:PortNotify
+  (xcb:-event)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (time :initarg :time :type xcb:TIMESTAMP)
+   (port :initarg :port :type xcb:xv:PORT)
+   (attribute :initarg :attribute :type xcb:ATOM)
+   (value :initarg :value :type xcb:INT32)))
+
+(defclass xcb:xv:QueryExtension
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)))
+(defclass xcb:xv:QueryExtension~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (major :initarg :major :type xcb:CARD16)
+   (minor :initarg :minor :type xcb:CARD16)))
+
+(defclass xcb:xv:QueryAdaptors
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)
+   (window :initarg :window :type xcb:WINDOW)))
+(defclass xcb:xv:QueryAdaptors~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (num-adaptors :initarg :num-adaptors :type xcb:CARD16)
+   (pad~1 :initform 22 :type xcb:-pad)
+   (info :initarg :info :type xcb:-ignore)
+   (info~ :initform
+         '(name info type xcb:xv:AdaptorInfo size
+                (xcb:-fieldref 'num-adaptors))
+         :type xcb:-list)))
+
+(defclass xcb:xv:QueryEncodings
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)
+   (port :initarg :port :type xcb:xv:PORT)))
+(defclass xcb:xv:QueryEncodings~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (num-encodings :initarg :num-encodings :type xcb:CARD16)
+   (pad~1 :initform 22 :type xcb:-pad)
+   (info :initarg :info :type xcb:-ignore)
+   (info~ :initform
+         '(name info type xcb:xv:EncodingInfo size
+                (xcb:-fieldref 'num-encodings))
+         :type xcb:-list)))
+
+(defclass xcb:xv:GrabPort
+  (xcb:-request)
+  ((~opcode :initform 3 :type xcb:-u1)
+   (port :initarg :port :type xcb:xv:PORT)
+   (time :initarg :time :type xcb:TIMESTAMP)))
+(defclass xcb:xv:GrabPort~reply
+  (xcb:-reply)
+  ((result :initarg :result :type xcb:BYTE)))
+
+(defclass xcb:xv:UngrabPort
+  (xcb:-request)
+  ((~opcode :initform 4 :type xcb:-u1)
+   (port :initarg :port :type xcb:xv:PORT)
+   (time :initarg :time :type xcb:TIMESTAMP)))
+
+(defclass xcb:xv:PutVideo
+  (xcb:-request)
+  ((~opcode :initform 5 :type xcb:-u1)
+   (port :initarg :port :type xcb:xv:PORT)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (gc :initarg :gc :type xcb:GCONTEXT)
+   (vid-x :initarg :vid-x :type xcb:INT16)
+   (vid-y :initarg :vid-y :type xcb:INT16)
+   (vid-w :initarg :vid-w :type xcb:CARD16)
+   (vid-h :initarg :vid-h :type xcb:CARD16)
+   (drw-x :initarg :drw-x :type xcb:INT16)
+   (drw-y :initarg :drw-y :type xcb:INT16)
+   (drw-w :initarg :drw-w :type xcb:CARD16)
+   (drw-h :initarg :drw-h :type xcb:CARD16)))
+
+(defclass xcb:xv:PutStill
+  (xcb:-request)
+  ((~opcode :initform 6 :type xcb:-u1)
+   (port :initarg :port :type xcb:xv:PORT)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (gc :initarg :gc :type xcb:GCONTEXT)
+   (vid-x :initarg :vid-x :type xcb:INT16)
+   (vid-y :initarg :vid-y :type xcb:INT16)
+   (vid-w :initarg :vid-w :type xcb:CARD16)
+   (vid-h :initarg :vid-h :type xcb:CARD16)
+   (drw-x :initarg :drw-x :type xcb:INT16)
+   (drw-y :initarg :drw-y :type xcb:INT16)
+   (drw-w :initarg :drw-w :type xcb:CARD16)
+   (drw-h :initarg :drw-h :type xcb:CARD16)))
+
+(defclass xcb:xv:GetVideo
+  (xcb:-request)
+  ((~opcode :initform 7 :type xcb:-u1)
+   (port :initarg :port :type xcb:xv:PORT)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (gc :initarg :gc :type xcb:GCONTEXT)
+   (vid-x :initarg :vid-x :type xcb:INT16)
+   (vid-y :initarg :vid-y :type xcb:INT16)
+   (vid-w :initarg :vid-w :type xcb:CARD16)
+   (vid-h :initarg :vid-h :type xcb:CARD16)
+   (drw-x :initarg :drw-x :type xcb:INT16)
+   (drw-y :initarg :drw-y :type xcb:INT16)
+   (drw-w :initarg :drw-w :type xcb:CARD16)
+   (drw-h :initarg :drw-h :type xcb:CARD16)))
+
+(defclass xcb:xv:GetStill
+  (xcb:-request)
+  ((~opcode :initform 8 :type xcb:-u1)
+   (port :initarg :port :type xcb:xv:PORT)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (gc :initarg :gc :type xcb:GCONTEXT)
+   (vid-x :initarg :vid-x :type xcb:INT16)
+   (vid-y :initarg :vid-y :type xcb:INT16)
+   (vid-w :initarg :vid-w :type xcb:CARD16)
+   (vid-h :initarg :vid-h :type xcb:CARD16)
+   (drw-x :initarg :drw-x :type xcb:INT16)
+   (drw-y :initarg :drw-y :type xcb:INT16)
+   (drw-w :initarg :drw-w :type xcb:CARD16)
+   (drw-h :initarg :drw-h :type xcb:CARD16)))
+
+(defclass xcb:xv:StopVideo
+  (xcb:-request)
+  ((~opcode :initform 9 :type xcb:-u1)
+   (port :initarg :port :type xcb:xv:PORT)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)))
+
+(defclass xcb:xv:SelectVideoNotify
+  (xcb:-request)
+  ((~opcode :initform 10 :type xcb:-u1)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (onoff :initarg :onoff :type xcb:BOOL)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:xv:SelectPortNotify
+  (xcb:-request)
+  ((~opcode :initform 11 :type xcb:-u1)
+   (port :initarg :port :type xcb:xv:PORT)
+   (onoff :initarg :onoff :type xcb:BOOL)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defclass xcb:xv:QueryBestSize
+  (xcb:-request)
+  ((~opcode :initform 12 :type xcb:-u1)
+   (port :initarg :port :type xcb:xv:PORT)
+   (vid-w :initarg :vid-w :type xcb:CARD16)
+   (vid-h :initarg :vid-h :type xcb:CARD16)
+   (drw-w :initarg :drw-w :type xcb:CARD16)
+   (drw-h :initarg :drw-h :type xcb:CARD16)
+   (motion :initarg :motion :type xcb:BOOL)
+   (pad~0 :initform 3 :type xcb:-pad)))
+(defclass xcb:xv:QueryBestSize~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (actual-width :initarg :actual-width :type xcb:CARD16)
+   (actual-height :initarg :actual-height :type xcb:CARD16)))
+
+(defclass xcb:xv:SetPortAttribute
+  (xcb:-request)
+  ((~opcode :initform 13 :type xcb:-u1)
+   (port :initarg :port :type xcb:xv:PORT)
+   (attribute :initarg :attribute :type xcb:ATOM)
+   (value :initarg :value :type xcb:INT32)))
+
+(defclass xcb:xv:GetPortAttribute
+  (xcb:-request)
+  ((~opcode :initform 14 :type xcb:-u1)
+   (port :initarg :port :type xcb:xv:PORT)
+   (attribute :initarg :attribute :type xcb:ATOM)))
+(defclass xcb:xv:GetPortAttribute~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (value :initarg :value :type xcb:INT32)))
+
+(defclass xcb:xv:QueryPortAttributes
+  (xcb:-request)
+  ((~opcode :initform 15 :type xcb:-u1)
+   (port :initarg :port :type xcb:xv:PORT)))
+(defclass xcb:xv:QueryPortAttributes~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (num-attributes :initarg :num-attributes :type xcb:CARD32)
+   (text-size :initarg :text-size :type xcb:CARD32)
+   (pad~1 :initform 16 :type xcb:-pad)
+   (attributes :initarg :attributes :type xcb:-ignore)
+   (attributes~ :initform
+               '(name attributes type xcb:xv:AttributeInfo size
+                      (xcb:-fieldref 'num-attributes))
+               :type xcb:-list)))
+
+(defclass xcb:xv:ListImageFormats
+  (xcb:-request)
+  ((~opcode :initform 16 :type xcb:-u1)
+   (port :initarg :port :type xcb:xv:PORT)))
+(defclass xcb:xv:ListImageFormats~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (num-formats :initarg :num-formats :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (format :initarg :format :type xcb:-ignore)
+   (format~ :initform
+           '(name format type xcb:xv:ImageFormatInfo size
+                  (xcb:-fieldref 'num-formats))
+           :type xcb:-list)))
+
+(defclass xcb:xv:QueryImageAttributes
+  (xcb:-request)
+  ((~opcode :initform 17 :type xcb:-u1)
+   (port :initarg :port :type xcb:xv:PORT)
+   (id :initarg :id :type xcb:CARD32)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)))
+(defclass xcb:xv:QueryImageAttributes~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (num-planes :initarg :num-planes :type xcb:CARD32)
+   (data-size :initarg :data-size :type xcb:CARD32)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (pad~1 :initform 12 :type xcb:-pad)
+   (pitches :initarg :pitches :type xcb:-ignore)
+   (pitches~ :initform
+            '(name pitches type xcb:CARD32 size
+                   (xcb:-fieldref 'num-planes))
+            :type xcb:-list)
+   (offsets :initarg :offsets :type xcb:-ignore)
+   (offsets~ :initform
+            '(name offsets type xcb:CARD32 size
+                   (xcb:-fieldref 'num-planes))
+            :type xcb:-list)))
+
+(defclass xcb:xv:PutImage
+  (xcb:-request)
+  ((~opcode :initform 18 :type xcb:-u1)
+   (port :initarg :port :type xcb:xv:PORT)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (gc :initarg :gc :type xcb:GCONTEXT)
+   (id :initarg :id :type xcb:CARD32)
+   (src-x :initarg :src-x :type xcb:INT16)
+   (src-y :initarg :src-y :type xcb:INT16)
+   (src-w :initarg :src-w :type xcb:CARD16)
+   (src-h :initarg :src-h :type xcb:CARD16)
+   (drw-x :initarg :drw-x :type xcb:INT16)
+   (drw-y :initarg :drw-y :type xcb:INT16)
+   (drw-w :initarg :drw-w :type xcb:CARD16)
+   (drw-h :initarg :drw-h :type xcb:CARD16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (data :initarg :data :type xcb:-ignore)
+   (data~ :initform
+         '(name data type xcb:CARD8 size nil)
+         :type xcb:-list)))
+
+(defclass xcb:xv:ShmPutImage
+  (xcb:-request)
+  ((~opcode :initform 19 :type xcb:-u1)
+   (port :initarg :port :type xcb:xv:PORT)
+   (drawable :initarg :drawable :type xcb:DRAWABLE)
+   (gc :initarg :gc :type xcb:GCONTEXT)
+   (shmseg :initarg :shmseg :type xcb:xv:SEG)
+   (id :initarg :id :type xcb:CARD32)
+   (offset :initarg :offset :type xcb:CARD32)
+   (src-x :initarg :src-x :type xcb:INT16)
+   (src-y :initarg :src-y :type xcb:INT16)
+   (src-w :initarg :src-w :type xcb:CARD16)
+   (src-h :initarg :src-h :type xcb:CARD16)
+   (drw-x :initarg :drw-x :type xcb:INT16)
+   (drw-y :initarg :drw-y :type xcb:INT16)
+   (drw-w :initarg :drw-w :type xcb:CARD16)
+   (drw-h :initarg :drw-h :type xcb:CARD16)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (send-event :initarg :send-event :type xcb:CARD8)
+   (pad~0 :initform 3 :type xcb:-pad)))
+
+(defconst xcb:xv:error-number-class-alist
+  '((0 . xcb:xv:BadPort)
+    (1 . xcb:xv:BadEncoding)
+    (2 . xcb:xv:BadControl))
+  "(error-number . error-class) alist")
+
+(defconst xcb:xv:event-number-class-alist
+  '((0 . xcb:xv:VideoNotify)
+    (1 . xcb:xv:PortNotify))
+  "(event-number . event-class) alist")
+
+
+
+(provide 'xcb-xv)
diff --git a/xcb-xvmc.el b/xcb-xvmc.el
new file mode 100644
index 0000000..2f01b28
--- /dev/null
+++ b/xcb-xvmc.el
@@ -0,0 +1,151 @@
+;;; -*- lexical-binding: t -*-
+;; This file was generated from `xvmc.xml' by `el_client.el'.
+
+(require 'xcb-types)
+
+(defconst xcb:xvmc:-extension-xname "XVideo-MotionCompensation")
+(defconst xcb:xvmc:-extension-name "XvMC")
+(defconst xcb:xvmc:-major-version 1)
+(defconst xcb:xvmc:-minor-version 1)
+
+(require 'xcb-xv)
+
+(xcb:deftypealias 'xcb:xvmc:CONTEXT 'xcb:-u4)
+
+(xcb:deftypealias 'xcb:xvmc:SURFACE 'xcb:-u4)
+
+(xcb:deftypealias 'xcb:xvmc:SUBPICTURE 'xcb:-u4)
+
+(defclass xcb:xvmc:SurfaceInfo
+  (xcb:-struct)
+  ((id :initarg :id :type xcb:xvmc:SURFACE)
+   (chroma-format :initarg :chroma-format :type xcb:CARD16)
+   (pad0 :initarg :pad0 :type xcb:CARD16)
+   (max-width :initarg :max-width :type xcb:CARD16)
+   (max-height :initarg :max-height :type xcb:CARD16)
+   (subpicture-max-width :initarg :subpicture-max-width :type xcb:CARD16)
+   (subpicture-max-height :initarg :subpicture-max-height :type xcb:CARD16)
+   (mc-type :initarg :mc-type :type xcb:CARD32)
+   (flags :initarg :flags :type xcb:CARD32)))
+
+(defclass xcb:xvmc:QueryVersion
+  (xcb:-request)
+  ((~opcode :initform 0 :type xcb:-u1)))
+(defclass xcb:xvmc:QueryVersion~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (major :initarg :major :type xcb:CARD32)
+   (minor :initarg :minor :type xcb:CARD32)))
+
+(defclass xcb:xvmc:ListSurfaceTypes
+  (xcb:-request)
+  ((~opcode :initform 1 :type xcb:-u1)
+   (port-id :initarg :port-id :type xcb:xvmc:PORT)))
+(defclass xcb:xvmc:ListSurfaceTypes~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (num :initarg :num :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (surfaces :initarg :surfaces :type xcb:-ignore)
+   (surfaces~ :initform
+             '(name surfaces type xcb:xvmc:SurfaceInfo size
+                    (xcb:-fieldref 'num))
+             :type xcb:-list)))
+
+(defclass xcb:xvmc:CreateContext
+  (xcb:-request)
+  ((~opcode :initform 2 :type xcb:-u1)
+   (context-id :initarg :context-id :type xcb:xvmc:CONTEXT)
+   (port-id :initarg :port-id :type xcb:xvmc:PORT)
+   (surface-id :initarg :surface-id :type xcb:xvmc:SURFACE)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)
+   (flags :initarg :flags :type xcb:CARD32)))
+(defclass xcb:xvmc:CreateContext~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (width-actual :initarg :width-actual :type xcb:CARD16)
+   (height-actual :initarg :height-actual :type xcb:CARD16)
+   (flags-return :initarg :flags-return :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (priv-data :initarg :priv-data :type xcb:-ignore)
+   (priv-data~ :initform
+              '(name priv-data type xcb:CARD32 size
+                     (xcb:-fieldref 'length))
+              :type xcb:-list)))
+
+(defclass xcb:xvmc:DestroyContext
+  (xcb:-request)
+  ((~opcode :initform 3 :type xcb:-u1)
+   (context-id :initarg :context-id :type xcb:xvmc:CONTEXT)))
+
+(defclass xcb:xvmc:CreateSurface
+  (xcb:-request)
+  ((~opcode :initform 4 :type xcb:-u1)
+   (surface-id :initarg :surface-id :type xcb:xvmc:SURFACE)
+   (context-id :initarg :context-id :type xcb:xvmc:CONTEXT)))
+(defclass xcb:xvmc:CreateSurface~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (pad~1 :initform 24 :type xcb:-pad)
+   (priv-data :initarg :priv-data :type xcb:-ignore)
+   (priv-data~ :initform
+              '(name priv-data type xcb:CARD32 size
+                     (xcb:-fieldref 'length))
+              :type xcb:-list)))
+
+(defclass xcb:xvmc:DestroySurface
+  (xcb:-request)
+  ((~opcode :initform 5 :type xcb:-u1)
+   (surface-id :initarg :surface-id :type xcb:xvmc:SURFACE)))
+
+(defclass xcb:xvmc:CreateSubpicture
+  (xcb:-request)
+  ((~opcode :initform 6 :type xcb:-u1)
+   (subpicture-id :initarg :subpicture-id :type xcb:xvmc:SUBPICTURE)
+   (context :initarg :context :type xcb:xvmc:CONTEXT)
+   (xvimage-id :initarg :xvimage-id :type xcb:CARD32)
+   (width :initarg :width :type xcb:CARD16)
+   (height :initarg :height :type xcb:CARD16)))
+(defclass xcb:xvmc:CreateSubpicture~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (width-actual :initarg :width-actual :type xcb:CARD16)
+   (height-actual :initarg :height-actual :type xcb:CARD16)
+   (num-palette-entries :initarg :num-palette-entries :type xcb:CARD16)
+   (entry-bytes :initarg :entry-bytes :type xcb:CARD16)
+   (component-order :initarg :component-order :type xcb:-ignore)
+   (component-order~ :initform
+                    '(name component-order type xcb:CARD8 size 4)
+                    :type xcb:-list)
+   (pad~1 :initform 12 :type xcb:-pad)
+   (priv-data :initarg :priv-data :type xcb:-ignore)
+   (priv-data~ :initform
+              '(name priv-data type xcb:CARD32 size
+                     (xcb:-fieldref 'length))
+              :type xcb:-list)))
+
+(defclass xcb:xvmc:DestroySubpicture
+  (xcb:-request)
+  ((~opcode :initform 7 :type xcb:-u1)
+   (subpicture-id :initarg :subpicture-id :type xcb:xvmc:SUBPICTURE)))
+
+(defclass xcb:xvmc:ListSubpictureTypes
+  (xcb:-request)
+  ((~opcode :initform 8 :type xcb:-u1)
+   (port-id :initarg :port-id :type xcb:xvmc:PORT)
+   (surface-id :initarg :surface-id :type xcb:xvmc:SURFACE)))
+(defclass xcb:xvmc:ListSubpictureTypes~reply
+  (xcb:-reply)
+  ((pad~0 :initform 1 :type xcb:-pad)
+   (num :initarg :num :type xcb:CARD32)
+   (pad~1 :initform 20 :type xcb:-pad)
+   (types :initarg :types :type xcb:-ignore)
+   (types~ :initform
+          '(name types type xcb:xvmc:ImageFormatInfo size
+                 (xcb:-fieldref 'num))
+          :type xcb:-list)))
+
+
+
+(provide 'xcb-xvmc)
diff --git a/xcb.el b/xcb.el
new file mode 100644
index 0000000..66ec07a
--- /dev/null
+++ b/xcb.el
@@ -0,0 +1,682 @@
+;;; xcb.el --- X Protocol Emacs Lisp Binding (XELB)  -*- lexical-binding: t -*-
+
+;; Copyright (C) 2015 Chris Feng
+
+;; Author: Chris Feng <address@hidden>
+;; Keywords: unix
+
+;; This file is not part of GNU Emacs.
+
+;; This file is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This file is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this file.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This library mainly provides methods for `xcb:connection', a opaque class
+;; encapsulating all information concerning an X connection. The most 
frequently
+;; used methods are:
+;; + Open/Close connection
+;;   - `xcb:connect'
+;;   - `xcb:connect-to-socket'
+;;   - `xcb:disconnect'
+;; + Request/Reply/Error (asynchronous)
+;;   - `xcb:+request'
+;;   - `xcb:+request-checked'
+;;   - `xcb:+request-unchecked'
+;;   - `xcb:+reply'
+;;   - `xcb:request-check'
+;; + Request/Reply/Error (synchronous)
+;;   - `xcb:+request+reply'
+;;   - `xcb:+request-checked+request-check'
+;;   - `xcb:+request-unchecked+reply'
+;; + Event handling
+;;   - `xcb:+event'
+;; + Misc.
+;;   - `xcb:flush'
+;;   - `xcb:generate-id'
+;; Please refer to their documentations for more details.
+
+;; Todo:
+;; + Authentication support when connecting to X server.
+;; + Use XC-MISC extension for `xcb:generate-id' when IDs are used up.
+
+;; References:
+;; + X protocol (http://www.x.org/releases/X11R7.7/doc/xproto/x11protocol.txt)
+
+;;; Code:
+
+(require 'xcb-xproto)
+
+(defvar xcb:debug-on nil "non-nil to turn on debug.")
+
+(defmacro xcb:-log (format-string &rest args)
+  "Print debug info."
+  (when xcb:debug-on
+    `(message (concat "[XELB LOG] " ,format-string) ,@args)))
+
+(defvar xcb:connection-timeout 10 "Connection timeout.")
+
+;;;; X connection related
+
+(defclass xcb:connection ()
+  ((process :initarg :process)
+   (connected :initform nil)  ;non-nil indicates connected to X server
+   (display :initarg :display)
+   (auth-info :initarg :auth-info)
+   (socket :initarg :socket)
+   (lock :initform nil)
+   (setup-data :initform nil)           ;X connection setup data
+   (request-cache :initform [])         ;cache for outgoing requests
+   (message-cache :initform [])         ;cache for incoming messages
+   (error-plist :initform nil)
+   (reply-plist :initform nil)
+   (event-plist :initform nil)
+   (extension-plist :initform nil)
+   (extension-opcode-plist :initform nil)
+   (extension-first-error-alist :initform nil)
+   (extension-first-event-alist :initform nil)
+   (request-sequence :initform 0)
+   (error-sequence :initform 0)
+   (reply-sequence :initform 0)
+   (xid :initform 0)            ;last used X resource ID
+   (extra-plist :initform nil)) ;for storing extra data (e.g. by extensions)
+  :documentation "X connection.")
+
+(defclass xcb:auth-info ()
+  ((name :initarg :name :initform "" :type string)
+   (data :initarg :data :initform "" :type string))
+  :documentation "X connection authentication info.")
+
+(defun xcb:connect (&optional display screen)
+  "Connect to X server with display DISPLAY on screen SCREEN."
+  (xcb:connect-to-display-with-auth-info display nil screen))
+
+(defun xcb:connect-to-display-with-auth-info (&optional display auth screen)
+  "Connect to X server with display DISPLAY, authentication info AUTH on screen
+SCREEN."
+  (unless display (setq display x-display-name))
+  (unless display (error "[XELB] No X display available"))
+  (let* ((tmp (xcb:parse-display display))
+         (host (cdr (assoc 'host tmp)))
+         (host (if (string= "" host) 'local host))
+         (dpy (cdr (assoc 'display tmp)))
+         (screen (if screen screen (cdr (assoc 'screen tmp))))
+         (process (make-network-process :name "XELB"
+                                        :host host
+                                        :service (+ 6000 dpy)))
+         (auth-info (if auth auth (make-instance 'xcb:auth-info)))
+         (connection (make-instance 'xcb:connection
+                                    :process process
+                                    :display display :auth-info auth-info)))
+    (xcb:-connect connection)
+    connection))
+
+(defun xcb:parse-display (name)
+  "Parse X Display name NAME."
+  (let ((host (replace-regexp-in-string "\\(.*\\):.*" "\\1" name))
+        (display
+         (replace-regexp-in-string ".*:\\([^\\.]+\\)\\(\\..*\\)?" "\\1" name))
+        (screen
+         (replace-regexp-in-string ".*:[^\\.]+\\.?\\(.*\\)?" "\\1" name)))
+    (setq display (string-to-int display))
+    (setq screen (if (string= "" screen) 0 (string-to-int screen)))
+    `((host . ,host) (display . ,display) (screen . ,screen))))
+
+(defun xcb:connect-to-socket (&optional socket auth-info)
+  "Connect to X server with socket SOCKET and authentication info AUTH-INFO."
+  (unless (or socket x-display-name) (error "[XELB] No X display available"))
+  (unless socket (setq socket (concat "/tmp/.X11-unix/X"
+                                      (replace-regexp-in-string
+                                       ".*:\\([^\\.]+\\)\\(\\..*\\)?" "\\1"
+                                       x-display-name))))
+  (let* ((process (make-network-process :name "XELB" :remote socket))
+         (auth (if auth-info auth-info (make-instance 'xcb:auth-info)))
+         (connection (make-instance 'xcb:connection
+                                    :process process
+                                    :auth-info auth :socket socket)))
+    (xcb:-connect connection)
+    connection))
+
+(cl-defmethod xcb:-connect ((obj xcb:connection))
+  "Connect to X server."
+  (let* ((process (slot-value obj 'process))
+         (auth-info (slot-value obj 'auth-info))
+         (aname (slot-value auth-info 'name))
+         (adata (slot-value auth-info 'data)))
+    (set-process-plist process
+                       (plist-put (process-plist process) 'connection obj))
+    (set-process-coding-system process 'binary 'binary)
+    (set-process-filter process 'xcb:-connection-filter)
+    (process-send-string                ;send setup packet
+     process
+     (apply 'unibyte-string
+            (append ;convert vector to string
+             (xcb:marshal
+              (make-instance 'xcb:SetupRequest
+                             :byte-order (if xcb:lsb #x6c #x42)
+                             :protocol-major-version 11
+                             :protocol-minor-version 0
+                             :authorization-protocol-name-len (length aname)
+                             :authorization-protocol-data-len (length adata)
+                             :authorization-protocol-name aname
+                             :authorization-protocol-data adata))
+             nil)))
+    ;; Wait for setup data ready
+    (with-timeout (xcb:connection-timeout (xcb:disconnect obj)
+                               (error "[XELB] Connection timeout"))
+      (while (not (slot-value obj 'setup-data))
+        (accept-process-output process 1)))))
+
+(defun xcb:-connection-filter (process message)
+  "Filter function for an X connection.
+
+Concurrency is prevented as it breaks the orders of errors and replies."
+  (let* ((connection (plist-get (process-plist process) 'connection))
+         (cache (vconcat (slot-value connection 'message-cache) message))
+         (cache-length (length cache))
+         events)
+    (setf (slot-value connection 'message-cache) cache)
+    (catch 'return
+      ;; Queue message when locked
+      (when (slot-value connection 'lock)
+        (throw 'return 'lock))
+      ;; Start parsing message
+      (setf (slot-value connection 'lock) t)
+      ;; Connection setup
+      (unless (slot-value connection 'connected)
+        ;; Connection setup
+        (when (<= 8 (length cache)) ;at least setup header is available
+          (let ((data-len (+ 8 (* 4 (funcall (if xcb:lsb 'xcb:-unpack-u2-lsb
+                                               'xcb:-unpack-u2)
+                                             (substring cache 6 8)))))
+                obj)
+            (when (>= (length cache) data-len)
+              (pcase (elt cache 0)
+                (0                      ;failed
+                 (setq obj (make-instance 'xcb:SetupFailed))
+                 (xcb:unmarshal obj cache)
+                 (setq cache [])
+                 (error "[XELB] %s" obj))
+                (1                      ;success
+                 (setq obj (make-instance 'xcb:Setup))
+                 (setq cache (substring cache (xcb:unmarshal obj cache)))
+                 (setf (slot-value connection 'setup-data) obj)
+                 (setf (slot-value connection 'connected) t))
+                (2                      ;authentication
+                 (setq obj (make-instance 'xcb:SetupAuthenticate))
+                 (setq cache (substring cache (xcb:unmarshal obj cache)))
+                 (error "[XELB] %s" obj))
+                (x (error "Unrecognized setup status: %d" x))))))
+        (setf (slot-value connection 'lock) nil)
+        (throw 'return 'setup))
+      ;; Process error/reply/event
+      (catch 'break
+        (while (<= 32 (length cache))
+          (pcase (elt cache 0)
+            (0                          ;error
+             (let ((sequence (funcall (if xcb:lsb 'xcb:-unpack-u2-lsb
+                                        'xcb:-unpack-u2)
+                                      (substring cache 2 4)))
+                   (plist (slot-value connection 'error-plist))
+                   struct)
+               (when (plist-member plist sequence)
+                 (setq struct (plist-get plist sequence))
+                 (setf (slot-value connection 'error-plist)
+                       (plist-put plist sequence
+                                  (push `(,(elt cache 1) .
+                                          ,(substring cache 0 32))
+                                        struct))))
+               (setq cache (substring cache 32))
+               (setf (slot-value connection 'error-sequence) sequence)))
+            (1                          ;reply
+             (let* ((reply-words (funcall (if xcb:lsb 'xcb:-unpack-u4-lsb
+                                            'xcb:-unpack-u4)
+                                          (substring cache 4 8)))
+                    (reply-length (+ 32 (* 4 reply-words)))
+                    struct sequence plist)
+               (when (< (length cache) reply-length) ;too short, do next time
+                 (throw 'break nil))
+               (setq sequence (funcall (if xcb:lsb 'xcb:-unpack-u2-lsb
+                                         'xcb:-unpack-u2)
+                                       (substring cache 2 4)))
+               (setq plist (slot-value connection 'reply-plist))
+               (setq struct (plist-get plist sequence))
+               (when struct
+                 (setf (slot-value connection 'reply-plist)
+                       (plist-put plist sequence
+                                  (if (symbolp struct)
+                                      ;; Single reply or
+                                      ;; first reply for multiple replies
+                                      (list struct
+                                            (substring cache 0 reply-length))
+                                    ;; Multiple replies
+                                    `(,(car struct) ,@(cdr struct)
+                                      ,(substring cache 0 reply-length))))))
+               (setq cache (substring cache reply-length))
+               (setf (slot-value connection 'reply-sequence) sequence)))
+            (x                          ;event
+             (let (synthetic listener)
+               (when (/= 0 (logand x #x80)) ;synthetic event
+                 (setq synthetic t
+                       x (logand x #x7f))) ;low 7 bits is the event number
+               (setq listener
+                     (plist-get (slot-value connection 'event-plist) x))
+               (when listener
+                 (setq events (nconc events
+                                     (list (vector listener
+                                                   (substring cache 0 32)
+                                                   synthetic))))))
+             (setq cache (substring cache 32))))))
+      (setf (slot-value connection 'lock) nil))
+    (unless (slot-value connection 'lock)
+      (with-slots (message-cache) connection
+        (let ((current-cache-lenght (length message-cache)))
+          (setf message-cache
+                (substring message-cache (- cache-length (length cache))))
+          (when (/= current-cache-lenght cache-length)
+            (xcb:-connection-filter process []))))
+      (dolist (i events)                ;for each event
+        (dolist (j (elt i 0))           ;for each listener
+          (funcall j (elt i 1) (elt i 2)))))))
+
+(cl-defmethod xcb:disconnect ((obj xcb:connection))
+  "Disconnect from X server."
+  (delete-process (slot-value obj 'process))
+  ;; Reset every slot to its default value
+  (let ((slots (eieio-class-slots 'xcb:connection)))
+    (dolist (slot slots)
+      (setf (slot-value obj (cl--slot-descriptor-name slot))
+            (cl--slot-descriptor-initform slot)))))
+
+;;;; Other routines
+
+(cl-defmethod xcb:get-setup ((obj xcb:connection))
+  "Get the setup info of X connection OBJ."
+  (slot-value obj 'setup-data))
+
+(cl-defmethod xcb:get-socket ((obj xcb:connection))
+  "Get the socket of X connection OBJ."
+  (slot-value obj 'socket))
+
+(cl-defmethod xcb:get-maximum-request-length ((obj xcb:connection))
+  "Get maximum request length from setup data."
+  (slot-value (xcb:get-setup obj) 'maximum-request-length))
+
+(cl-defmethod xcb:+event ((obj xcb:connection) event listener)
+  "attach EVENT LISTENER
+
+Note that event listeners attached this way are shared with the super- and sub-
+classes of EVENT (since they have the same event number)."
+  (let* ((event-number (xcb:-error-or-event-class->number obj event))
+         (plist (slot-value obj 'event-plist))
+         (listeners (plist-get plist event-number)))
+    (setf (slot-value obj 'event-plist)
+          (plist-put plist event-number (append listeners (list listener))))))
+
+;; (cl-defmethod xcb:connection-has-error ((obj xcb:connection))
+;;   "Determine if X connection has error."
+;;   (not (slot-value obj 'connected)))
+
+(cl-defmethod xcb:flush ((obj xcb:connection))
+  "Flush request data to X server."
+  (let ((cache (slot-value obj 'request-cache)))
+    (when (< 0 (length cache))
+      (setf (slot-value obj 'request-cache) []) ;should be cleared ASAP
+      (process-send-string (slot-value obj 'process)
+                           (apply 'unibyte-string (append cache nil))))))
+
+(cl-defmethod xcb:get-extension-data ((obj xcb:connection) namespace)
+  "Fetch the extension data from X server (block until data is retrieved)."
+  (let* ((plist (slot-value obj 'extension-plist))
+         (data (plist-get plist namespace)))
+    (if (object-p data)
+        data
+      (when (not data)                  ;the request has not been made
+        (xcb:prefetch-extension-data obj namespace))
+      (setq data
+            (xcb:+reply obj
+                (plist-get (slot-value obj 'extension-plist) namespace)))
+      (when (cadr data)                 ;has error
+        (error "[XELB] %s" (cadr data)))
+      (setq data (car data))
+      (setf (slot-value obj 'extension-plist) (plist-put plist namespace data))
+      ;; Cache major opcode, first event and first error if possible
+      (with-slots (present major-opcode first-event first-error) data
+        (when (= 1 present)
+          (setf (slot-value obj 'extension-opcode-plist)
+                (plist-put (slot-value obj 'extension-opcode-plist)
+                           namespace major-opcode)
+                (slot-value obj 'extension-first-event-alist)
+                (nconc (slot-value obj 'extension-first-event-alist)
+                       `((,namespace . ,first-event)))
+                (slot-value obj 'extension-first-error-alist)
+                (nconc (slot-value obj 'extension-first-error-alist)
+                       `((,namespace . ,first-error))))))
+      data)))
+
+(cl-defmethod xcb:prefetch-extension-data ((obj xcb:connection) namespace)
+  "Prefetch the extension data from X server."
+  (when (not (plist-get (slot-value obj 'extension-plist) namespace))
+    (let* ((extension-xname
+            (symbol-value (intern-soft (concat (symbol-name namespace)
+                                               ":-extension-xname"))))
+           (sequence
+            (xcb:+request obj (make-instance 'xcb:QueryExtension
+                                             :name-len (length extension-xname)
+                                             :name extension-xname))))
+      (setf (slot-value obj 'extension-plist)
+            (plist-put (slot-value obj 'extension-plist) namespace sequence))
+      (xcb:flush obj))))
+
+(cl-defmethod xcb:generate-id ((obj xcb:connection))
+  "Generate new X ID."
+  (let* ((setup (xcb:get-setup obj))
+         (base (slot-value setup 'resource-id-base))
+         (mask (slot-value setup 'resource-id-mask))
+         (increment (logand mask (- mask)))
+         (xid (+ (slot-value obj 'xid) increment)))
+    (when (> xid mask)
+      (error "[XELB] Unable to allocate new X resource ID"))
+    (setf (slot-value obj 'xid) xid)
+    (logior base xid)))
+
+;;;; Request related
+
+(cl-defmethod xcb:-cache-request ((obj xcb:connection) request)
+  "Send (or cache) a request and return the sequence number."
+  (let* ((namespace
+          (intern (replace-regexp-in-string
+                   ":[^:]+$" "" (symbol-name
+                                 (eieio-object-class request)))))
+         (extension-opcode
+          (plist-get (slot-value obj 'extension-opcode-plist) namespace))
+         (msg (xcb:marshal request))
+         (len (+ 2 (length msg)))
+         (cache (slot-value obj 'request-cache)))
+    (when extension-opcode
+      (setq msg (vconcat (vector extension-opcode) msg))
+      (setq len (1+ len)))
+    (when (> 2 (length msg))   ;for short message (e.g. GetInputFocus)
+      (setq msg (vconcat msg [0]))
+      (setq len (1+ len)))
+    (setq msg
+          (vconcat (substring msg 0 2)
+                   (funcall (if (slot-value request '~lsb) 'xcb:-pack-u2-lsb
+                              'xcb:-pack-u2)
+                            (ceiling len 4))
+                   (substring msg 2)
+                   (make-vector (% (- 4 (% len 4)) 4) 0))) ;required sometimes
+    (when (< (xcb:get-maximum-request-length obj)
+             (+ (length msg) (length cache))) ;flush on cache full
+      (xcb:flush obj)
+      (setq cache []))
+    (xcb:-log "%s" request)
+    (with-slots (request-cache request-sequence) obj
+      (setf request-cache (vconcat cache msg)
+            request-sequence (1+ request-sequence))
+      request-sequence)))
+
+(cl-defmethod xcb:-+request ((obj xcb:connection) request)
+  (let* ((sequence (xcb:-cache-request obj request))
+         (sequence-lsw (logand #xFFFF sequence))
+         (class (eieio-object-class request)))
+    (when (fboundp (xcb:-request-class->reply-class class))
+      ;; This request has a reply
+      (setf (slot-value obj 'reply-plist) ;require reply
+            (plist-put (slot-value obj 'reply-plist) sequence-lsw class))
+      (setf (slot-value obj 'error-plist) ;require error
+            (plist-put (slot-value obj 'error-plist) sequence-lsw nil)))
+    sequence))
+
+(defmacro xcb:+request (obj request)
+  "Make a request.
+
+If the request has a reply, then errors will also be available (if any).
+Otherwise no error will ever be reported."
+  (declare (indent 2))
+  `(xcb:-+request ,obj ,request))
+
+(cl-defmethod xcb:-+request-checked ((obj xcb:connection) request)
+  (when (fboundp
+         (xcb:-request-class->reply-class (eieio-object-class request)))
+    (error "This method shall not be called with request that has a reply"))
+  (let* ((sequence (xcb:-cache-request obj request))
+         (sequence-lsw (logand #xFFFF sequence)))
+    (setf (slot-value obj 'error-plist)
+          (plist-put (slot-value obj 'error-plist) sequence-lsw nil))
+    sequence))
+
+(defmacro xcb:+request-checked (obj request)
+  "Make a request (which have no reply) and check for errors."
+  (declare (indent 2))
+  `(xcb:-+request-checked ,obj ,request))
+
+(cl-defmethod xcb:-+request-unchecked ((obj xcb:connection) request)
+  (unless (fboundp
+           (xcb:-request-class->reply-class (eieio-object-class request)))
+    (error "This method shall not be called with request that has no reply"))
+  (let* ((sequence (xcb:-cache-request obj request))
+         (sequence-lsw (logand #xFFFF sequence)))
+    (setf (slot-value obj 'reply-plist)
+          (plist-put (slot-value obj 'reply-plist)
+                     sequence-lsw (eieio-object-class request)))
+    sequence))
+
+(defmacro xcb:+request-unchecked (obj request)
+  "Make a request (which have at least a reply) and discard any error."
+  (declare (indent 2))
+  `(xcb:-+request-unchecked ,obj ,request))
+
+(cl-defmethod xcb:-+reply ((obj xcb:connection) sequence &optional multiple)
+  (unless (plist-member (slot-value obj 'reply-plist) sequence)
+    (error "This method is intended for requests with replies"))
+  (xcb:flush obj)                      ;or we may have to wait forever
+  (if multiple
+      ;; Multiple replies
+      (when (and (>= sequence (slot-value obj 'reply-sequence))
+                 (>= sequence (slot-value obj 'error-sequence)))
+        (xcb:aux:sync obj))
+    ;; Single reply
+    (let ((process (slot-value obj 'process)))
+      ;; Wait until the request processed
+      (with-timeout (xcb:connection-timeout (error "[XELB] Retrieve reply 
timeout"))
+        (while (and (> sequence (slot-value obj 'reply-sequence))
+                    (> sequence (slot-value obj 'error-sequence)))
+          (accept-process-output process 1)))))
+  (let* ((reply-plist (slot-value obj 'reply-plist))
+         (reply-data (plist-get reply-plist sequence))
+         (error-plist (slot-value obj 'error-plist))
+         (error-data (plist-get error-plist sequence))
+         class-name reply replies error errors)
+    (if (symbolp reply-data)
+        (setq replies nil)              ;no reply
+      (setq class-name (xcb:-request-class->reply-class (car reply-data)))
+      (if multiple
+          ;; Multiple replies
+          (dolist (i (cdr reply-data))
+            (setq reply (make-instance class-name
+                                       :length (/ (- (length i) 32) 4)))
+            (xcb:unmarshal reply i)
+            (setq replies (nconc replies (list reply))))
+        ;; Single reply
+        (setq reply-data (cadr reply-data)
+              replies (make-instance class-name
+                                     :length (/ (- (length reply-data) 32) 4)))
+        (xcb:unmarshal replies reply-data)))
+    (setq errors
+          (mapcar (lambda (i)
+                    (setq error (make-instance
+                                 (xcb:-error-number->class obj (car i))))
+                    (xcb:unmarshal error (cdr i))
+                    i)
+                  error-data))
+    (cl-remf (slot-value obj 'reply-plist) sequence)
+    (cl-remf (slot-value obj 'error-plist) sequence)
+    (list replies errors)))
+
+(defmacro xcb:+reply (obj sequence &optional multiple)
+  "Return the reply of a request of which the sequence number is SEQUENCE.
+
+If MULTIPLE is nil, the return value is the only reply, or it returns a list of
+all replies.
+
+WARNING: for requests that have multiple replies, you MUST supply a non-nil
+MULTIPLE value, or some replies may be lost!"
+  (declare (indent 2))
+  `(xcb:-+reply ,obj ,sequence ,multiple))
+
+(cl-defmethod xcb:-request-check ((obj xcb:connection) sequence)
+  (when (plist-member (slot-value obj 'reply-plist) sequence)
+    (error "This method is intended for requests with no reply"))
+  (xcb:flush obj)                      ;or we may have to wait forever
+  (let ((error-plist (slot-value obj 'error-plist))
+        error-obj tmp)
+    (unless (plist-member error-plist sequence)
+      (error "This method shall be called after `xcb:+request-checked'"))
+    (when (> sequence (slot-value obj 'error-sequence))
+      (xcb:aux:sync obj))         ;wait until the request is processed
+    (setq error-obj
+          (mapcar (lambda (i)
+                    (setq tmp (cdr i)
+                          i (make-instance
+                             (xcb:-error-number->class obj (car i))))
+                    (xcb:unmarshal i tmp)
+                    i)
+                  (plist-get error-plist sequence)))
+    (cl-remf (slot-value obj 'error-plist) sequence)
+    error-obj))
+
+(defmacro xcb:request-check (obj sequence)
+  "Return the error of the request of which the sequence number is SEQUENCE.
+
+The sequence number shall be returned by `xcb:+request-checked'."
+  (declare (indent 2))
+  `(xcb:-request-check ,obj ,sequence))
+
+(defmacro xcb:+request+reply (obj request &optional multiple)
+  "Make a request and return its replies and errors.
+
+If MULTIPLE is nil, the return value is a list of which the car is the only
+reply and the cadr a list of errors. Otherwise, the car of the result is a
+list of replies.
+
+WARNING: for requests that have multiple replies, you MUST supply a non-nil
+MULTIPLE value, or some replies may be lost!"
+  (declare (indent 2))
+  `(xcb:-+reply ,obj (xcb:-+request ,obj ,request) ,multiple))
+
+(defmacro xcb:+request-checked+request-check (obj request)
+  "Make a request (which has no reply) and return the errors."
+  (declare (indent 2))
+  `(xcb:-request-check ,obj (xcb:-+request-checked ,obj ,request)))
+
+(defmacro xcb:+request-unchecked+reply (obj request &optional multiple)
+  "Make a request (that has at least one reply) and only return the reply.
+
+If MULTIPLE is nil, the return value is the only reply, or it returns a list of
+all replies.
+
+WARNING: for requests that have multiple replies, you MUST supply a non-nil
+MULTIPLE value, or some replies may be lost!"
+  (declare (indent 2))
+  `(car (xcb:-+reply ,obj (xcb:-+request-unchecked ,obj ,request) ,multiple)))
+
+;;;; Misc.
+
+(cl-defmethod xcb:aux:sync ((obj xcb:connection))
+  "Force sync with X server.
+
+Sync by sending a GetInputFocus request and waiting until it's processed."
+  (let ((sequence (xcb:-cache-request obj (make-instance 'xcb:GetInputFocus)))
+        (process (slot-value obj 'process)))
+    (xcb:flush obj)
+    ;; Wait until request processed
+    (with-timeout (xcb:connection-timeout (error "[XELB] Sync timeout"))
+      (while (> sequence (slot-value obj 'reply-sequence))
+        (accept-process-output process 1)))))
+
+(cl-defmethod xcb:-error-or-event-class->number ((obj xcb:connection) class)
+  "Return the error/event number of a error/event class CLASS."
+  (unless (symbolp class) (setq class (eieio-class-name class)))
+  (let* ((is-error (child-of-class-p class 'xcb:-error))
+         (prefix (replace-regexp-in-string ":[^:]+$" ":" (symbol-name class)))
+         (first (when (string= prefix "xcb:") 0))
+         (alist (intern-soft (concat prefix (if is-error
+                                                "error-number-class-alist"
+                                              "event-number-class-alist"))))
+         result parents)
+    (unless first
+      (setq first (cdr (assoc (intern (substring prefix 0 -1))
+                              (slot-value obj
+                                          (if is-error
+                                              'extension-first-error-alist
+                                            'extension-first-event-alist))))))
+    (when alist
+      (setq result (+ (or first 0) (car (rassoc class (symbol-value alist))))))
+    (if result
+        result
+      ;; Fallback to use the error/event number of one superclass. Thus if the
+      ;; error/event number of a subclass differs from that of its parent, it
+      ;; must be explicitly pointed out.
+      (setq parents (eieio-class-parents class))
+      (while (and parents (not result))
+        (setq result (xcb:-error-or-event-class->number obj (pop parents))))
+      result)))
+
+(cl-defmethod xcb:-event-number->class ((obj xcb:connection) number)
+  "Return the event class that has the event number NUMBER.
+
+Note that when multiple events have the same number, only the top-most
+superclass will be returned."
+  (if (or (< number 64) (> number 127))
+      ;; Xproto event
+      (cdr (assoc number xcb:event-number-class-alist))
+    ;; Extension event
+    (let ((first-event number)
+          namespace index)
+      (while (and (not namespace) (>= first-event 64))
+        (setq namespace
+              (car (rassoc first-event
+                           (slot-value obj 'extension-first-event-alist)))
+              first-event (1- first-event)))
+      (setq index (- number first-event 1))
+      (setq alist (intern-soft (concat (symbol-name namespace)
+                                       ":event-number-class-alist")))
+      (cdr (assoc index (symbol-value alist))))))
+
+(cl-defmethod xcb:-error-number->class ((obj xcb:connection) number)
+  "Return the error class that has the error number NUMBER.
+
+Note that when multiple errors have the same number, only the top-most
+superclass will be returned."
+  (if (or (< number 128) (> number 255))
+      ;; Xproto error
+      (cdr (assoc number xcb:error-number-class-alist))
+    ;; Extension error
+    (let ((first-error number)
+          namespace index)
+      (while (and (not namespace) (>= first-error 128))
+        (setq namespace
+              (car (rassoc first-error
+                           (slot-value obj 'extension-first-error-alist)))
+              first-error (1- first-error)))
+      (setq index (- number first-error 1))
+      (setq alist (intern-soft (concat (symbol-name namespace)
+                                       ":error-number-class-alist")))
+      (cdr (assoc index (symbol-value alist))))))
+
+
+
+(provide 'xcb)
+
+;;; xcb.el ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]