1ea1d6981Smrg<chapter id='Overview'>
2ea1d6981Smrg<title>Overview</title>
3ea1d6981Smrg<para>
4ea1d6981SmrgThis extension provides a number of new capabilities and controls for
5ea1d6981Smrgtext keyboards.
6ea1d6981Smrg</para>
7ea1d6981Smrg
8ea1d6981Smrg<para>
9ea1d6981SmrgThe core X protocol specifies the ways that the <emphasis>
10ea1d6981SmrgShift</emphasis>
11ea1d6981Smrg, <emphasis>
12ea1d6981SmrgControl</emphasis>
13ea1d6981Smrg and <emphasis>
14ea1d6981SmrgLock</emphasis>
15ea1d6981Smrg modifiers and the modifiers bound to the <emphasis>
16ea1d6981SmrgMode_switch</emphasis>
17ea1d6981Smrg or <emphasis>
18ea1d6981SmrgNum_Lock</emphasis>
19ea1d6981Smrg keysyms interact to generate keysyms and characters. The core protocol also
20ea1d6981Smrgallows users to specify that a key affects one or more modifiers. This behavior
21ea1d6981Smrgis simple and fairly flexible, but it has a number of limitations that make it
22ea1d6981Smrgdifficult or impossible to properly support many common varieties of keyboard
23ea1d6981Smrgbehavior. The limitations of core protocol support for keyboards include:
24ea1d6981Smrg</para>
25ea1d6981Smrg
26ea1d6981Smrg<itemizedlist>
27ea1d6981Smrg<listitem>
28ea1d6981Smrg  <para>Use of a single, uniform, four-symbol mapping for all keyboard keys
29ea1d6981Smrgmakes it difficult to properly support keyboard overlays, PC-style break keys
30ea1d6981Smrgor keyboards that comply with ISO9995 or a host of other national and
31ea1d6981Smrginternational standards.
32ea1d6981Smrg  </para>
33ea1d6981Smrg</listitem>
34ea1d6981Smrg<listitem>
35ea1d6981Smrg  <para>Use of a modifier to specify a second keyboard group has side-effects
36ea1d6981Smrgthat wreak havoc with client grabs and X toolkit translations and limit us to
37ea1d6981Smrgtwo keyboard groups.
38ea1d6981Smrg  </para>
39ea1d6981Smrg</listitem>
40ea1d6981Smrg<listitem>
41ea1d6981Smrg  <para>Poorly specified locking key behavior requires X servers to look for a
42ea1d6981Smrgfew "magic" keysyms to determine which keys should lock when pressed. This
43ea1d6981Smrgleads to incompatibilities between X servers with no way for clients to detect
44ea1d6981Smrgimplementation differences.
45ea1d6981Smrg  </para>
46ea1d6981Smrg</listitem>
47ea1d6981Smrg<listitem>
48ea1d6981Smrg  <para>Poorly specified capitalization and control behavior requires
49ea1d6981Smrgmodifications to X library source code to support new character sets or locales
50ea1d6981Smrgand can lead to incompatibilities between system-wide and X library
51ea1d6981Smrgcapitalization behavior.
52ea1d6981Smrg  </para>
53ea1d6981Smrg</listitem>
54ea1d6981Smrg<listitem>
55ea1d6981Smrg  <para>Limited interactions between modifiers specified by the core protocol
56ea1d6981Smrgmake many common keyboard behaviors difficult or impossible to implement. For
57ea1d6981Smrgexample, there is no reliable way to indicate whether or not using shift should
58ea1d6981Smrg"cancel" the lock modifier.
59ea1d6981Smrg  </para>
60ea1d6981Smrg</listitem>
61ea1d6981Smrg<listitem>
62ea1d6981Smrg  <para>The lack of any explicit descriptions for indicators, most modifiers
63ea1d6981Smrgand other aspects of the keyboard appearance requires clients that wish to
64ea1d6981Smrgclearly describe the keyboard to a user to resort to a mishmash of prior
65ea1d6981Smrgknowledge and heuristics.
66ea1d6981Smrg  </para>
67ea1d6981Smrg</listitem>
68ea1d6981Smrg</itemizedlist>
69ea1d6981Smrg
70ea1d6981Smrg<para>
71ea1d6981SmrgThis extension makes it possible to clearly and explicitly specify most aspects
72ea1d6981Smrgof keyboard behavior on a per-key basis. It adds the notion of a numeric
73ea1d6981Smrgkeyboard group to the global keyboard state and provides mechanisms to more
74ea1d6981Smrgclosely track the logical and physical state of the keyboard. For keyboard
75ea1d6981Smrgcontrol clients, this extension provides descriptions and symbolic names for
76ea1d6981Smrgmany aspects of keyboard appearance and behavior. It also includes a number of
77ea1d6981Smrgkeyboard controls designed to make keyboards more accessible to people with
78ea1d6981Smrgmovement impairments.
79ea1d6981Smrg</para>
80ea1d6981Smrg
81ea1d6981Smrg
82ea1d6981Smrg<para>
83ea1d6981SmrgThe X Keyboard Extension essentially replaces the core protocol definition of a
84ea1d6981Smrgkeyboard. The following sections describe the new capabilities of the extension
85ea1d6981Smrgand the effect of the extension on core protocol requests, events and errors.
86ea1d6981Smrg</para>
87ea1d6981Smrg
88ea1d6981Smrg<sect1 id='Conventions_and_Assumptions'>
89ea1d6981Smrg<title>Conventions and Assumptions</title>
90ea1d6981Smrg<para>
91ea1d6981SmrgThis document uses the syntactic
92ea1d6981Smrgconventions, common types, and errors defined in sections two through four of
93ea1d6981Smrgthe specification of the X Window System Protocol. This document assumes
94ea1d6981Smrgfamiliarity with the fundamental concepts of X, especially those related to the
95ea1d6981Smrgway that X handles keyboards. Readers who are not familiar with the meaning or
96ea1d6981Smrguse of keycodes, keysyms or modifiers should consult (at least) the first five
97ea1d6981Smrgchapters of the protocol specification of the X Window System before
98ea1d6981Smrgcontinuing.
99ea1d6981Smrg</para>
100ea1d6981Smrg</sect1>
101ea1d6981Smrg</chapter>
102