sync code with last improvements from OpenBSD
This commit is contained in:
commit
88965415ff
26235 changed files with 29195616 additions and 0 deletions
865
proto/xorgproto/specs/kbproto/ch04.xml
Normal file
865
proto/xorgproto/specs/kbproto/ch04.xml
Normal file
|
@ -0,0 +1,865 @@
|
|||
<chapter id='Global_Keyboard_Controls'>
|
||||
<title>Global Keyboard Controls</title>
|
||||
|
||||
<para>
|
||||
The X Keyboard Extension supports a number of <emphasis>
|
||||
global key controls</emphasis>
|
||||
, which affect the way that XKB handles the keyboard as a whole. Many of these
|
||||
controls make the keyboard more accessible to the physically impaired and are
|
||||
based on the AccessDOS package<footnote><para>
|
||||
AccessDOS provides access to the DOS operating system for people with physical
|
||||
impairments and was developed by the Trace R&D Center at the University of
|
||||
Wisconsin. For more information on AccessDOS, contact the Trace R&D Center,
|
||||
Waisman Center and Department of Industrial Engineering, University of
|
||||
Wisconsin-Madison WI 53705-2280. Phone: 608-262-6966. e-mail:
|
||||
info@trace.wisc.edu.</para></footnote>.
|
||||
</para>
|
||||
|
||||
<sect1 id='The_RepeatKeys_Control'>
|
||||
<title>The RepeatKeys Control</title>
|
||||
|
||||
<para>
|
||||
The core protocol only allows control over whether or not the entire keyboard
|
||||
or individual keys should autorepeat when held down. The <emphasis>
|
||||
RepeatKeys</emphasis>
|
||||
control extends this capability by adding control over the delay until a key
|
||||
begins to repeat and the rate at which it repeats. <emphasis>
|
||||
RepeatKeys</emphasis>
|
||||
is also coupled with the core autorepeat control; changes to one are always
|
||||
reflected in the other.
|
||||
</para>
|
||||
|
||||
|
||||
<para>
|
||||
The <emphasis>
|
||||
RepeatKeys</emphasis>
|
||||
control has two parameters. The <emphasis>
|
||||
autorepeat delay</emphasis>
|
||||
specifies the delay between the initial press of an autorepeating key and the
|
||||
first generated repeat event in milliseconds. The <emphasis>
|
||||
autorepeat interval</emphasis>
|
||||
specifies the delay between all subsequent generated repeat events in
|
||||
milliseconds.
|
||||
</para>
|
||||
|
||||
|
||||
<sect2 id='The_PerKeyRepeat_Control'>
|
||||
<title>The PerKeyRepeat Control</title>
|
||||
|
||||
<para>
|
||||
When <emphasis>
|
||||
RepeatKeys</emphasis>
|
||||
are active, the <emphasis>
|
||||
PerKeyRepeat</emphasis>
|
||||
control specifies whether or not individual keys should autorepeat when held
|
||||
down. XKB provides the <emphasis>
|
||||
PerKeyRepeat</emphasis>
|
||||
for convenience only, and it always parallels the <emphasis>
|
||||
auto-repeats</emphasis>
|
||||
field of the core protocol <emphasis>
|
||||
GetKeyboardControl</emphasis>
|
||||
request — changes to one are always reflected in the other.
|
||||
</para>
|
||||
|
||||
|
||||
</sect2>
|
||||
<sect2 id='Detectable_Autorepeat'>
|
||||
<title>Detectable Autorepeat</title>
|
||||
|
||||
<para>
|
||||
The X server usually generates both press and release events whenever an
|
||||
autorepeating key is held down. If an XKB-aware client enables the <emphasis>
|
||||
DetectableAutorepeat</emphasis>
|
||||
per-client option for a keyboard, the server sends that client a key release
|
||||
event only when the key is <emphasis>
|
||||
physically</emphasis>
|
||||
released. For example, holding down a key to generate three characters without
|
||||
detectable autorepeat yields:
|
||||
</para>
|
||||
|
||||
<literallayout class='monospaced'>
|
||||
Press <emphasis>-></emphasis> Release <emphasis>-></emphasis> Press <emphasis>-></emphasis> Release <emphasis>-></emphasis> Press <emphasis>-></emphasis> Release
|
||||
</literallayout>
|
||||
|
||||
<para>
|
||||
If detectable autorepeat is enabled, the client instead receives:
|
||||
</para>
|
||||
|
||||
<literallayout class='monospaced'>
|
||||
Press<emphasis>-></emphasis> Press <emphasis>-></emphasis> Press <emphasis>-></emphasis> Release
|
||||
</literallayout>
|
||||
|
||||
<para>
|
||||
Note that only clients that request detectable autorepeat are affected; other
|
||||
clients continue to receive both press and release events for autorepeating
|
||||
keys. Also note that support for detectable autorepeat is optional; servers are
|
||||
not required to support detectable autorepeat, but they must correctly report
|
||||
whether or not it is supported.
|
||||
</para>
|
||||
|
||||
|
||||
<para>
|
||||
<link linkend='Querying_and_Changing_Per_Client_Flags'>Querying and Changing Per-Client
|
||||
Flags</link> describes the <emphasis>
|
||||
XkbPerClientFlags</emphasis>
|
||||
request, which reports or changes values for all of the per-client flags, and
|
||||
which lists the per-client flags that are supported.
|
||||
</para>
|
||||
|
||||
|
||||
</sect2>
|
||||
</sect1>
|
||||
<sect1 id='The_SlowKeys_Control'>
|
||||
<title>The SlowKeys Control</title>
|
||||
|
||||
<para>
|
||||
Some users often bump keys accidentally while moving their hand or typing stick
|
||||
toward the key they want. Usually, the keys that are bumped accidentally are
|
||||
hit only for a very short period of time. The <emphasis>
|
||||
SlowKeys</emphasis>
|
||||
control helps filter these accidental bumps by telling the server to wait a
|
||||
specified period, called the <emphasis>
|
||||
SlowKeys acceptance delay</emphasis>
|
||||
, before delivering key events. If the key is released before this period
|
||||
elapses, no key events are generated. The user can then bump any number of keys
|
||||
on their way to the one they want without generating unwanted characters. Once
|
||||
they have reached the key they want, they can then hold it long enough for
|
||||
<emphasis>
|
||||
SlowKeys</emphasis>
|
||||
to accept it.
|
||||
</para>
|
||||
|
||||
|
||||
<para>
|
||||
The <emphasis>
|
||||
SlowKeys</emphasis>
|
||||
control has one parameter; the <emphasis>
|
||||
slow keys delay</emphasis>
|
||||
specifies the length of time, in milliseconds, that a key must be held down
|
||||
before it is accepted.
|
||||
</para>
|
||||
|
||||
|
||||
<para>
|
||||
When <emphasis>
|
||||
SlowKeys</emphasis>
|
||||
are active, the X Keyboard Extension reports the initial press, acceptance,
|
||||
rejection or release of any key to interested clients using <emphasis>
|
||||
AccessXNotify</emphasis>
|
||||
events. The <emphasis>
|
||||
AccessXNotify</emphasis>
|
||||
event is described in more detail in <link linkend='Events'>Events</link>.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
<sect1 id='The_BounceKeys_Control'>
|
||||
<title>The BounceKeys Control</title>
|
||||
|
||||
<para>
|
||||
Some people with physical impairments accidentally "bounce" on a key when they
|
||||
press it. That is, they press it once, then accidentally press it again
|
||||
immediately. The <emphasis>
|
||||
BounceKeys</emphasis>
|
||||
control temporarily disables a key after it has been pressed, effectively
|
||||
"debouncing" the keyboard.
|
||||
</para>
|
||||
|
||||
|
||||
<para>
|
||||
The <emphasis>
|
||||
BounceKeys</emphasis>
|
||||
has a single parameter. The <emphasis>
|
||||
BounceKeys delay</emphasis>
|
||||
specifies the period of time, in milliseconds, that the key is disabled after
|
||||
it is pressed.
|
||||
</para>
|
||||
|
||||
|
||||
<para>
|
||||
When <emphasis>
|
||||
BounceKeys</emphasis>
|
||||
are active, the server reports the acceptance or rejection of any key to
|
||||
interested clients by sending an <emphasis>
|
||||
AccessXNotify</emphasis>
|
||||
event. The <emphasis>
|
||||
AccessXNotify</emphasis>
|
||||
event is described in more detail in <link linkend='Events'>Events</link>.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
<sect1 id='The_StickyKeys_Control'>
|
||||
<title>The StickyKeys Control</title>
|
||||
|
||||
<para>
|
||||
Some people find it difficult or impossible to press two keys at once. The
|
||||
<emphasis>
|
||||
StickyKeys</emphasis>
|
||||
control makes it easier for them to type by changing the behavior of the
|
||||
modifier keys. When <emphasis>
|
||||
StickyKeys</emphasis>
|
||||
are enabled, a modifier is latched when the user presses it just once, so the
|
||||
user can first press a modifier, release it, then press another key. For
|
||||
example, to get an exclamation point (!) on a PC-style keyboard, the user can
|
||||
press the <emphasis>
|
||||
Shift</emphasis>
|
||||
key, release it, then press the <emphasis>
|
||||
1</emphasis>
|
||||
key.
|
||||
</para>
|
||||
|
||||
|
||||
<para>
|
||||
By default, <emphasis>
|
||||
StickyKeys</emphasis>
|
||||
also allows users to lock modifier keys without requiring special locking
|
||||
keys. The user can press a modifier twice in a row to lock it, and then unlock
|
||||
it by pressing it one more time.
|
||||
</para>
|
||||
|
||||
|
||||
<para>
|
||||
Modifiers are automatically unlatched when the user presses a non-modifier key.
|
||||
For instance, to enter the sequence <emphasis>
|
||||
Shift</emphasis>
|
||||
+<emphasis>
|
||||
Ctrl</emphasis>
|
||||
+<emphasis>
|
||||
Z</emphasis>
|
||||
the user could press and release the <emphasis>
|
||||
Shift</emphasis>
|
||||
key to latch the <emphasis>
|
||||
Shift</emphasis>
|
||||
modifier, then press and release the <emphasis>
|
||||
Ctrl</emphasis>
|
||||
key to latch the <emphasis>
|
||||
Control</emphasis>
|
||||
modifier — the <emphasis>
|
||||
Ctrl</emphasis>
|
||||
key is a modifier key, so pressing it does not unlatch the <emphasis>
|
||||
Shift</emphasis>
|
||||
modifier, but leaves both the <emphasis>
|
||||
Shift</emphasis>
|
||||
and <emphasis>
|
||||
Control</emphasis>
|
||||
modifiers latched, instead. When the user presses the <emphasis>
|
||||
Z</emphasis>
|
||||
key, it will be as though the user pressed <emphasis>
|
||||
Shift</emphasis>
|
||||
+<emphasis>
|
||||
Ctrl</emphasis>
|
||||
+<emphasis>
|
||||
Z</emphasis>
|
||||
simultaneously. The <emphasis>
|
||||
Z</emphasis>
|
||||
key is not a modifier key, so the <emphasis>
|
||||
Shift</emphasis>
|
||||
and <emphasis>
|
||||
Control</emphasis>
|
||||
modifiers are unlatched after the event is generated.
|
||||
</para>
|
||||
|
||||
|
||||
<para>
|
||||
A locked a modifier remains in effect until the user unlocks it. For example,
|
||||
to enter the sequence ("XKB") on a PC-style keyboard with a typical US/ASCII
|
||||
layout, the user could press and release the <emphasis>
|
||||
Shift</emphasis>
|
||||
key twice to lock the <emphasis>
|
||||
Shift</emphasis>
|
||||
modifier. Then, when the user presses the <emphasis>
|
||||
9</emphasis>
|
||||
, <emphasis>
|
||||
‘</emphasis>
|
||||
, <emphasis>
|
||||
x</emphasis>
|
||||
, <emphasis>
|
||||
k</emphasis>
|
||||
, <emphasis>
|
||||
b</emphasis>
|
||||
, <emphasis>
|
||||
‘</emphasis>
|
||||
, and <emphasis>
|
||||
0</emphasis>
|
||||
keys in sequence, it will generate ("XKB"). To unlock the <emphasis>
|
||||
Shift</emphasis>
|
||||
modifier, the user can press and release the <emphasis>
|
||||
Shift</emphasis>
|
||||
key.
|
||||
</para>
|
||||
|
||||
|
||||
<para>
|
||||
Two option flags modify the behavior of the <emphasis>
|
||||
StickyKeys</emphasis>
|
||||
control:
|
||||
</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>If the <emphasis>
|
||||
XkbAX_TwoKeys</emphasis>
|
||||
flag is set, XKB automatically turns <emphasis>
|
||||
StickyKeys</emphasis>
|
||||
off if the user presses two or more keys at once. This serves to automatically
|
||||
disable StickyKeys when a user who does not require sticky keys is using the
|
||||
keyboard.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>The <emphasis>
|
||||
XkbAX_LatchToLock</emphasis>
|
||||
controls the locking behavior of <emphasis>
|
||||
StickyKeys</emphasis>
|
||||
; the <emphasis>
|
||||
StickyKeys</emphasis>
|
||||
control only locks modifiers as described above if the <emphasis>
|
||||
XkbAX_LatchToLock</emphasis>
|
||||
flag is set.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
</sect1>
|
||||
<sect1 id='The_MouseKeys_Control'>
|
||||
<title>The MouseKeys Control</title>
|
||||
|
||||
<para>
|
||||
The <emphasis>
|
||||
MouseKeys</emphasis>
|
||||
control lets a user control all the mouse functions from the keyboard. When
|
||||
<emphasis>
|
||||
MouseKeys</emphasis>
|
||||
are enabled, all keys with <emphasis>
|
||||
MouseKeys</emphasis>
|
||||
actions bound to them generate core pointer events instead of normal key press
|
||||
and release events.
|
||||
</para>
|
||||
|
||||
|
||||
<para>
|
||||
The <emphasis>
|
||||
MouseKeys</emphasis>
|
||||
control has a single parameter, the <emphasis>
|
||||
mouse keys default button</emphasis>
|
||||
, which specifies the core pointer button to be used by mouse keys actions that
|
||||
do not explicitly specify a button.
|
||||
</para>
|
||||
|
||||
|
||||
</sect1>
|
||||
<sect1 id='The_MouseKeysAccel_Control'>
|
||||
<title>The MouseKeysAccel Control</title>
|
||||
|
||||
<para>
|
||||
If the <emphasis>
|
||||
MouseKeysAccel</emphasis>
|
||||
control is enabled, the effect of a pointer motion action changes as a key is
|
||||
held down. The <emphasis>
|
||||
mouse keys delay</emphasis>
|
||||
specifies the amount of time between the initial key press and the first
|
||||
repeated motion event. The <emphasis>
|
||||
mouse keys interval</emphasis>
|
||||
specifies the amount of time between repeated mouse keys events. The <emphasis>
|
||||
steps to maximum acceleration</emphasis>
|
||||
field specifies the total number of events before the key is travelling at
|
||||
maximum speed. The <emphasis>
|
||||
maximum acceleration</emphasis>
|
||||
field specifies the maximum acceleration. The <emphasis>
|
||||
curve</emphasis>
|
||||
parameter controls the ramp used to reach maximum acceleration.
|
||||
</para>
|
||||
|
||||
|
||||
<para>
|
||||
When <emphasis>
|
||||
MouseKeys</emphasis>
|
||||
are active and a <emphasis>
|
||||
SA_MovePtr</emphasis>
|
||||
key action (see <link linkend='Key_Actions'>Key
|
||||
Actions</link>) is activated, a pointer motion event is generated immediately.
|
||||
If <emphasis>
|
||||
MouseKeysAccel</emphasis>
|
||||
is enabled and if acceleration is enabled for the key in question, a second
|
||||
event is generated after <emphasis>
|
||||
mouse keys delay </emphasis>
|
||||
milliseconds, and additional events are generated every <emphasis>
|
||||
mouse keys interval</emphasis>
|
||||
milliseconds for as long as the key is held down.
|
||||
</para>
|
||||
|
||||
|
||||
<sect2 id='Relative_Pointer_Motion'>
|
||||
<title>Relative Pointer Motion</title>
|
||||
|
||||
<para>
|
||||
If the <emphasis>
|
||||
SA_MovePtr</emphasis>
|
||||
action specifies relative motion, events are generated as follows: The initial
|
||||
event always moves the cursor the distance specified in the action; after
|
||||
<emphasis>
|
||||
steps to maximum acceleration</emphasis>
|
||||
events have been generated, all subsequent events move the pointer the
|
||||
distance specified in the action times the <emphasis>
|
||||
maximum acceleration.</emphasis>
|
||||
Events after the first but before maximum acceleration has been achieved are
|
||||
accelerated according to the formula:
|
||||
</para>
|
||||
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata format="SVG" fileref="XKBproto-1.svg"/>
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
|
||||
|
||||
<para>
|
||||
Where <emphasis>
|
||||
action_delta</emphasis>
|
||||
is the offset specified by the mouse keys action, <emphasis>
|
||||
max_accel </emphasis>
|
||||
and <emphasis>
|
||||
steps_to_max</emphasis>
|
||||
are parameters to the <emphasis>
|
||||
MouseKeysAccel</emphasis>
|
||||
ctrl, and the curveFactor is computed using the <emphasis>
|
||||
MouseKeysAccel</emphasis>
|
||||
<emphasis>
|
||||
curve</emphasis>
|
||||
parameter as follows:
|
||||
</para>
|
||||
|
||||
<mediaobject>
|
||||
<imageobject> <imagedata format="SVG" fileref="XKBproto-2.svg"/>
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
|
||||
|
||||
<para>
|
||||
With the result that a <emphasis>
|
||||
curve</emphasis>
|
||||
of <emphasis>
|
||||
0</emphasis>
|
||||
causes the distance moved to increase linearly from <emphasis>
|
||||
action_delta</emphasis>
|
||||
to <mediaobject>
|
||||
<imageobject> <imagedata format="SVG" fileref="XKBproto-3.svg"/>
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
|
||||
, and the minimum legal <emphasis>
|
||||
curve</emphasis>
|
||||
of -<emphasis>
|
||||
1000</emphasis>
|
||||
causes all events after the first move at <emphasis>
|
||||
max_accel</emphasis>
|
||||
. A negative <emphasis>
|
||||
curve</emphasis>
|
||||
causes an initial sharp increase in acceleration which tapers off, while a
|
||||
positive curve yields a slower initial increase in acceleration followed by a
|
||||
sharp increase as the number of pointer events generated by the action
|
||||
approaches <emphasis>
|
||||
steps_to_max</emphasis>
|
||||
.
|
||||
</para>
|
||||
|
||||
|
||||
</sect2>
|
||||
<sect2 id='Absolute_Pointer_Motion'>
|
||||
<title>Absolute Pointer Motion</title>
|
||||
|
||||
<para>
|
||||
If an <emphasis>
|
||||
SA_MovePtr</emphasis>
|
||||
action specifies an absolute position for one of the coordinates but still
|
||||
allows acceleration, all repeated events contain any absolute coordinates
|
||||
specified in the action.
|
||||
</para>
|
||||
|
||||
|
||||
</sect2>
|
||||
</sect1>
|
||||
<sect1 id='The_AccessXKeys_Control'>
|
||||
<title>The AccessXKeys Control</title>
|
||||
|
||||
<para>
|
||||
If <emphasis>
|
||||
AccessXKeys</emphasis>
|
||||
is enabled many controls can also be turned on or off from the keyboard by
|
||||
entering the following standard key sequences:
|
||||
</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>Holding down a shift key by itself for eight seconds toggles the
|
||||
<emphasis>
|
||||
SlowKeys</emphasis>
|
||||
control.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>Pressing and releasing a shift key five times in a row without any
|
||||
intervening key events and with less than 30 seconds delay between consecutive
|
||||
presses toggles the state of the <emphasis>
|
||||
StickyKeys</emphasis>
|
||||
control.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>Simultaneously operating two or more modifier keys deactivates the
|
||||
<emphasis>
|
||||
StickyKeys</emphasis>
|
||||
control.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>
|
||||
Some of these key sequences optionally generate audible feedback of the change
|
||||
in state, as described in <link linkend='The_AccessXFeedback_Control'>The
|
||||
AccessXFeedback Control</link>, or cause <emphasis>
|
||||
XkbAccessXNotify</emphasis>
|
||||
events as described in <link linkend='Events'>Events</link>.
|
||||
</para>
|
||||
|
||||
|
||||
</sect1>
|
||||
<sect1 id='The_AccessXTimeout_Control'>
|
||||
<title>The AccessXTimeout Control</title>
|
||||
|
||||
<para>
|
||||
In environments where computers are shared, features such as <emphasis>
|
||||
SlowKeys</emphasis>
|
||||
present a problem: if <emphasis>
|
||||
SlowKeys</emphasis>
|
||||
is on, the keyboard can appear to be unresponsive because keys have no effect
|
||||
unless they are held for a certain period of time. To help address this
|
||||
problem, XKB provides an <emphasis>
|
||||
AccessXTimeout</emphasis>
|
||||
control to automatically change the value of any global controls or AccessX
|
||||
options if the keyboard is idle for a specified period of time.
|
||||
</para>
|
||||
|
||||
|
||||
<para>
|
||||
The AccessXTimeout control has a number of parameters which affect the duration
|
||||
of the timeout and the features changed when the timeout expires.
|
||||
</para>
|
||||
|
||||
|
||||
<para>
|
||||
The <emphasis>
|
||||
AccessX Timeout</emphasis>
|
||||
field specifies the number of seconds the keyboard must be idle before the
|
||||
global controls and AccessX options are modified. The <emphasis>
|
||||
AccessX Options Mask</emphasis>
|
||||
field specifies which values in the <emphasis>
|
||||
AccessX Options</emphasis>
|
||||
field are to be changed, and the <emphasis>
|
||||
AccessX Options Values</emphasis>
|
||||
field specifies the new values for those options. The <emphasis>
|
||||
AccessX Controls Mask</emphasis>
|
||||
field specifies which controls are to be changed in the global set of
|
||||
<emphasis>
|
||||
enabled controls</emphasis>
|
||||
, and the <emphasis>
|
||||
AccessX Controls Values</emphasis>
|
||||
field specifies the new values for those controls.
|
||||
</para>
|
||||
|
||||
|
||||
</sect1>
|
||||
<sect1 id='The_AccessXFeedback_Control'>
|
||||
<title>The AccessXFeedback Control</title>
|
||||
|
||||
<para>
|
||||
If <emphasis>
|
||||
AccessXFeedback</emphasis>
|
||||
is enabled, special beep-codes indicate changes in keyboard controls (or some
|
||||
key events when <emphasis>
|
||||
SlowKeys</emphasis>
|
||||
or <emphasis>
|
||||
StickyKeys</emphasis>
|
||||
are active). Many beep codes sound as multiple tones, but XKB reports a single
|
||||
<emphasis>
|
||||
XkbBellNotify</emphasis>
|
||||
event for the entire sequence of tones.
|
||||
</para>
|
||||
|
||||
|
||||
<para>
|
||||
All feedback tones are governed by the <emphasis>
|
||||
AudibleBell</emphasis>
|
||||
control. Individual feedback tones can be explicitly enabled or disabled using
|
||||
the <emphasis>
|
||||
accessX options mask</emphasis>
|
||||
or set to deactivate after an idle period using the <emphasis>
|
||||
accessX timeout options mask</emphasis>
|
||||
. XKB defines the following feedback tones:
|
||||
</para>
|
||||
|
||||
<informaltable frame='topbot'>
|
||||
<?dbfo keep-together="always" ?>
|
||||
<tgroup cols='4' align='left' colsep='0' rowsep='0'>
|
||||
<colspec colname='c1' colwidth='1.0*'/>
|
||||
<colspec colname='c2' colwidth='1.5*'/>
|
||||
<colspec colname='c3' colwidth='1.5*'/>
|
||||
<colspec colname='c4' colwidth='1.5*'/>
|
||||
<thead>
|
||||
<row rowsep='1'>
|
||||
<entry>Feedback Name</entry>
|
||||
<entry>Bell Name</entry>
|
||||
<entry>Default Sound</entry>
|
||||
<entry>Indicates</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>FeatureFB</entry>
|
||||
<entry>AX_FeatureOn</entry>
|
||||
<entry>rising tone</entry>
|
||||
<entry>Keyboard control enabled</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry> </entry>
|
||||
<entry>AX_FeatureOff</entry>
|
||||
<entry>falling tone</entry>
|
||||
<entry>Keyboard control disabled</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry> </entry>
|
||||
<entry>AX_FeatureChange</entry>
|
||||
<entry>two tones</entry>
|
||||
<entry>Several controls changed state</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>IndicatorFB</entry>
|
||||
<entry>AX_IndicatorOn</entry>
|
||||
<entry>high tone</entry>
|
||||
<entry>Indicator Lit</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry> </entry>
|
||||
<entry>AX_IndicatorOff</entry>
|
||||
<entry>low tone</entry>
|
||||
<entry>Indicator Extinguished</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry> </entry>
|
||||
<entry>AX_IndicatorChange</entry>
|
||||
<entry>two high tones</entry>
|
||||
<entry>Several indicators changed state</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>SlowWarnFB</entry>
|
||||
<entry>AX_SlowKeysWarning</entry>
|
||||
<entry>three high tones</entry>
|
||||
<entry>Shift key held for four seconds</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>SKPressFB</entry>
|
||||
<entry>AX_SlowKeyPress</entry>
|
||||
<entry>single tone</entry>
|
||||
<entry>Key press while <emphasis>
|
||||
SlowKeys</emphasis>
|
||||
are on</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>SKReleaseFB</entry>
|
||||
<entry>AX_SlowKeyRelease</entry>
|
||||
<entry>single tone</entry>
|
||||
<entry>Key release while <emphasis>
|
||||
SlowKeys</emphasis>
|
||||
are on</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>SKAcceptFB</entry>
|
||||
<entry>AX_SlowKeyAccept</entry>
|
||||
<entry>single tone</entry>
|
||||
<entry>Key event accepted by <emphasis>
|
||||
SlowKeys</emphasis>
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>SKRejectFB</entry>
|
||||
<entry>AX_SlowKeyReject</entry>
|
||||
<entry>low tone</entry>
|
||||
<entry>Key event rejected by <emphasis>
|
||||
SlowKeys</emphasis>
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>StickyKeysFB</entry>
|
||||
<entry>AX_StickyLatch</entry>
|
||||
<entry>low tone then high tone</entry>
|
||||
<entry>Modifier latched by <emphasis>
|
||||
StickyKeys</emphasis>
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry> </entry>
|
||||
<entry>AX_StickyLock</entry>
|
||||
<entry>high tone</entry>
|
||||
<entry>Modifier locked by <emphasis>
|
||||
StickyKeys</emphasis>
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry> </entry>
|
||||
<entry>AX_StickyUnlock</entry>
|
||||
<entry>low tone</entry>
|
||||
<entry>Modifier unlocked by <emphasis>
|
||||
StickyKeys</emphasis>
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>BKRejectFB</entry>
|
||||
<entry>AX_BounceKeysReject</entry>
|
||||
<entry>low tone</entry>
|
||||
<entry>Key event rejected by <emphasis>
|
||||
BounceKeys</emphasis>
|
||||
</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</informaltable>
|
||||
|
||||
<para>
|
||||
Implementations that cannot generate continuous tones may generate multiple
|
||||
beeps instead of falling and rising tones; for example, they can generate a
|
||||
high-pitched beep followed by a low-pitched beep instead of a continuous
|
||||
falling tone.
|
||||
</para>
|
||||
|
||||
|
||||
<para>
|
||||
If the physical keyboard bell is not very capable, attempts to simulate a
|
||||
continuous tone with multiple bells can sound horrible. Set the <emphasis>
|
||||
DumbBellFB</emphasis>
|
||||
AccessX option to inform the server that the keyboard bell is not very capable
|
||||
and that XKB should use only simple bell combinations. Keyboard capabilities
|
||||
vary wildly, so the sounds generated for the individual bells when the
|
||||
<emphasis>
|
||||
DumbBellFB</emphasis>
|
||||
option is set are implementation specific.
|
||||
</para>
|
||||
|
||||
|
||||
</sect1>
|
||||
<sect1 id='The_Overlay1_and_Overlay2_Controls'>
|
||||
<title>The Overlay1 and Overlay2 Controls</title>
|
||||
|
||||
<para>
|
||||
A keyboard overlay allows some subset of the keyboard to report alternate
|
||||
keycodes when the overlay is enabled. For example a keyboard overlay can be
|
||||
used to simulate a numeric or editing keypad on keyboard that does not actually
|
||||
have one by generating alternate of keycodes for some keys when the overlay is
|
||||
enabled. This technique is very common on portable computers and embedded
|
||||
systems with small keyboards.
|
||||
</para>
|
||||
|
||||
|
||||
<para>
|
||||
XKB includes direct support for two keyboard overlays, using the <emphasis>
|
||||
Overlay1</emphasis>
|
||||
and <emphasis>
|
||||
Overlay2</emphasis>
|
||||
controls. When <emphasis>
|
||||
Overlay1</emphasis>
|
||||
is enabled, all of the keys that are members of the first keyboard overlay
|
||||
generate an alternate keycode. When <emphasis>
|
||||
Overlay2</emphasis>
|
||||
is enabled, all of the keys that are members of the second keyboard overlay
|
||||
generate an alternate keycode.
|
||||
</para>
|
||||
|
||||
|
||||
<para>
|
||||
To specify the overlay to which a key belongs and the alternate keycode it
|
||||
should generate when that overlay is enabled, assign it either the <emphasis>
|
||||
KB_Overlay1</emphasis>
|
||||
or <emphasis>
|
||||
KB_Overlay2</emphasis>
|
||||
key behaviors, as described in <link linkend='Key_Behavior'>
|
||||
Key Behavior</link>.
|
||||
</para>
|
||||
|
||||
|
||||
</sect1>
|
||||
<sect1 id='Boolean_Controls_and_The_EnabledControls_Control'>
|
||||
<title>"Boolean" Controls and The EnabledControls Control</title>
|
||||
|
||||
<para>
|
||||
All of the controls described above, along with the <emphasis>
|
||||
AudibleBell</emphasis>
|
||||
control (described in <link linkend='Disabling_Server_Generated_Bells'>Disabling
|
||||
Server Generated Bells</link>) and the <emphasis>
|
||||
IgnoreGroupLock</emphasis>
|
||||
control (described in <link linkend='Server_Internal_Modifiers_and_Ignore_Locks_Behavior'>Server
|
||||
Internal Modifiers and Ignore Locks Behavior</link>) comprise the <emphasis>
|
||||
boolean controls</emphasis>
|
||||
. In addition to any parameters listed in the descriptions of the individual
|
||||
controls, the boolean controls can be individually enabled or disabled by
|
||||
changing the value of the <emphasis>
|
||||
EnabledControls</emphasis>
|
||||
control.
|
||||
</para>
|
||||
|
||||
|
||||
<para>
|
||||
The following <emphasis>
|
||||
non-boolean</emphasis>
|
||||
controls are always active and cannot be changed using the <emphasis>
|
||||
EnabledControls</emphasis>
|
||||
control or specified in any context that accepts only boolean controls:
|
||||
<emphasis>
|
||||
GroupsWrap</emphasis>
|
||||
(<link linkend='Computing_Effective_Modifier_and_Group'>Computing Effective Modifier and
|
||||
Group</link>), <emphasis>
|
||||
EnabledControls</emphasis>
|
||||
, <emphasis>
|
||||
InternalMods</emphasis>
|
||||
(<link linkend='Server_Internal_Modifiers_and_Ignore_Locks_Behavior'>Server Internal Modifiers and
|
||||
Ignore Locks Behavior</link>), and <emphasis>
|
||||
IgnoreLockMods</emphasis>
|
||||
(<link linkend='Server_Internal_Modifiers_and_Ignore_Locks_Behavior'>Server Internal Modifiers and
|
||||
Ignore Locks Behavior</link>) and <emphasis>
|
||||
PerKeyRepeat</emphasis>
|
||||
(<link linkend='The_RepeatKeys_Control'>The RepeatKeys Control</link>)
|
||||
</para>
|
||||
|
||||
|
||||
</sect1>
|
||||
<sect1 id='Automatic_Reset_of_Boolean_Controls'>
|
||||
<title>Automatic Reset of Boolean Controls</title>
|
||||
|
||||
<para>
|
||||
The <emphasis>
|
||||
auto-reset controls</emphasis>
|
||||
are a per-client value which consist of two masks that can contain any of the
|
||||
boolean controls (see <link linkend='Boolean_Controls_and_The_EnabledControls_Control'>"Boolean"
|
||||
Controls and The EnabledControls Control</link>). Whenever the client exits
|
||||
for any reason, any boolean controls specified in the <emphasis>
|
||||
auto-reset mask</emphasis>
|
||||
are set to the corresponding value from the <emphasis>
|
||||
auto-reset values</emphasis>
|
||||
mask. This makes it possible for clients to "clean up after themselves"
|
||||
automatically, even if abnormally terminated.
|
||||
</para>
|
||||
|
||||
|
||||
<para>
|
||||
For example, a client that replace the keyboard bell with some other audible
|
||||
cue might want to turn off the <emphasis>
|
||||
AudibleBell</emphasis>
|
||||
control (<link linkend='Disabling_Server_Generated_Bells'>Disabling Server
|
||||
Generated Bells</link>) to prevent the server from also generating a sound and
|
||||
thus avoid cacophony. If the client were to exit without resetting the
|
||||
<emphasis>
|
||||
AudibleBell </emphasis>
|
||||
control, the user would be left without any feedback at all. Setting <emphasis>
|
||||
AudibleBell</emphasis>
|
||||
in both the auto-reset mask and auto-reset values guarantees that the audible
|
||||
bell will be turned back on when the client exits.
|
||||
</para>
|
||||
</sect1>
|
||||
</chapter>
|
Loading…
Add table
Add a link
Reference in a new issue