158 lines
5.3 KiB
XML
158 lines
5.3 KiB
XML
|
<chapter id='Symbolic_Names'>
|
|||
|
<title>Symbolic Names</title>
|
|||
|
|
|||
|
<para>
|
|||
|
The core protocol does not provide any information to clients other than that
|
|||
|
actually used to interpret events. This makes it difficult to write a client
|
|||
|
which presents the keyboard to a user in an easy-to-understand way. Such
|
|||
|
applications have to examine the vendor string and keycodes to determine the
|
|||
|
type of keyboard connected to the server and have to examine keysyms and
|
|||
|
modifier mappings to determine the effects of most modifiers (the <emphasis>
|
|||
|
Shift</emphasis>
|
|||
|
, <emphasis>
|
|||
|
Lock</emphasis>
|
|||
|
and <emphasis>
|
|||
|
Control</emphasis>
|
|||
|
modifiers are defined by the core protocol but no semantics are implied for
|
|||
|
any other modifiers).
|
|||
|
</para>
|
|||
|
|
|||
|
|
|||
|
<para>
|
|||
|
This extension provides such applications with symbolic names for most
|
|||
|
components of the keyboard extension and a description of the physical layout
|
|||
|
of the keyboard.
|
|||
|
</para>
|
|||
|
|
|||
|
|
|||
|
<para>
|
|||
|
The <emphasis>
|
|||
|
keycodes</emphasis>
|
|||
|
name describes the range and meaning of the keycodes returned by the keyboard
|
|||
|
in question; the <emphasis>
|
|||
|
keyboard</emphasis>
|
|||
|
<emphasis>
|
|||
|
geometry </emphasis>
|
|||
|
name describes the physical location, size and shape of the various keys on the
|
|||
|
keyboard. As an example to distinguish between these two names, consider
|
|||
|
function keys on PC-compatible keyboards. Function keys are sometimes above the
|
|||
|
main keyboard and sometimes to the left of the main keyboard, but the same
|
|||
|
keycode is used for the key that is logically <emphasis>
|
|||
|
F1</emphasis>
|
|||
|
regardless of physical position. Thus, all PC-compatible keyboards might share
|
|||
|
a keycodes name but different geometry names.
|
|||
|
</para>
|
|||
|
|
|||
|
<note><para>The keycodes name is intended to be a very general description of
|
|||
|
the keycodes returned by a keyboard; A single keycodes name might cover
|
|||
|
keyboards with differing numbers of keys provided that the keys that all keys
|
|||
|
have the same semantics when present. For example, 101 and 102 key PC keyboards
|
|||
|
might use the same name. Applications can use the keyboard geometry to
|
|||
|
determine which subset of the named keyboard type is in use.</para></note>
|
|||
|
|
|||
|
<para>
|
|||
|
The <emphasis>
|
|||
|
symbols</emphasis>
|
|||
|
name identifies the symbols bound to the keys. The symbols name is a human or
|
|||
|
application-readable description of the intended locale or usage of the
|
|||
|
keyboard with these symbols. The <emphasis>
|
|||
|
physical symbols</emphasis>
|
|||
|
name describes the symbols actually engraved on the keyboard, which might be
|
|||
|
different than the symbols currently being used.
|
|||
|
</para>
|
|||
|
|
|||
|
|
|||
|
<para>
|
|||
|
The <emphasis>
|
|||
|
types</emphasis>
|
|||
|
name provides some information about the set of key types that can be
|
|||
|
associated with the keyboard keys. The <emphasis>
|
|||
|
compat</emphasis>
|
|||
|
name provides some information about the rules used to bind actions to keys
|
|||
|
changed using core protocol requests.
|
|||
|
</para>
|
|||
|
|
|||
|
|
|||
|
<para>
|
|||
|
The <emphasis>
|
|||
|
compat</emphasis>
|
|||
|
, <emphasis>
|
|||
|
types</emphasis>
|
|||
|
, <emphasis>
|
|||
|
keycodes</emphasis>
|
|||
|
, <emphasis>
|
|||
|
symbols</emphasis>
|
|||
|
and <emphasis>
|
|||
|
geometry</emphasis>
|
|||
|
names typically correspond to the keyboard components from which the current
|
|||
|
keyboard description was assembled. These components are stored individually in
|
|||
|
the server’s database of keyboard components, described in
|
|||
|
<link linkend='The_Server_Database_of_Keyboard_Components'>
|
|||
|
The Server Database of Keyboard
|
|||
|
Components</link>, and can be combined to assemble a complete keyboard
|
|||
|
description.
|
|||
|
</para>
|
|||
|
|
|||
|
|
|||
|
<para>
|
|||
|
Each key has a four-byte symbolic name. The key name links keys with similar
|
|||
|
functions or in similar positions on keyboards that report different scan
|
|||
|
codes. <emphasis>
|
|||
|
Key aliases</emphasis>
|
|||
|
allow the keyboard layout designer to assign multiple names to a single key,
|
|||
|
to make it easier to refer to keys using either their position <emphasis>
|
|||
|
or</emphasis>
|
|||
|
their "function."
|
|||
|
</para>
|
|||
|
|
|||
|
|
|||
|
<para>
|
|||
|
For example, consider the common keyboard customizations:
|
|||
|
</para>
|
|||
|
|
|||
|
<itemizedlist>
|
|||
|
<listitem>
|
|||
|
<para>Set the "key to the left of the letter a" to be a control key.
|
|||
|
</para>
|
|||
|
</listitem>
|
|||
|
<listitem>
|
|||
|
<para>Change the "caps lock" key, wherever it might be, to a control key.
|
|||
|
</para>
|
|||
|
</listitem>
|
|||
|
</itemizedlist>
|
|||
|
|
|||
|
<para>
|
|||
|
If we specify key names by position, the first customization is simple but the
|
|||
|
second is impossible; if we specify key names by function, the second
|
|||
|
customization is simple but the first is impossible. Using key aliases, we can
|
|||
|
specify both function and position for "troublesome" keys, and both
|
|||
|
customizations are straightforward.
|
|||
|
</para>
|
|||
|
|
|||
|
|
|||
|
<para>
|
|||
|
Key aliases can be specified both in the symbolic names component and in the
|
|||
|
keyboard geometry (see <link linkend='Keyboard_Geometry'>Keyboard
|
|||
|
Geometry</link>). Both sets of aliases are always valid, but key alias
|
|||
|
definitions in the keyboard geometry have priority; if both symbolic names and
|
|||
|
geometry include aliases, applications should consider the definitions from the
|
|||
|
geometry before considering the definitions from the symbolic names section.
|
|||
|
</para>
|
|||
|
|
|||
|
|
|||
|
<para>
|
|||
|
XKB provides symbolic names for each of the four keyboard groups, sixteen
|
|||
|
virtual modifiers, thirty-two keyboard indicators, and up to <emphasis>
|
|||
|
MaxRadioGroups</emphasis>
|
|||
|
(32) radio groups.
|
|||
|
</para>
|
|||
|
|
|||
|
|
|||
|
<para>
|
|||
|
XKB allows keyboard layout designers or editors to assign names to each key
|
|||
|
type and to each of the levels in a key type. For example, the second position
|
|||
|
on an alphabetic key might be called the "Caps" level while the second position
|
|||
|
on a numeric keypad key might be called the "Num Lock" level.
|
|||
|
</para>
|
|||
|
</chapter>
|