appB.xml revision 9e7bcd65
19e7bcd65Smrg<appendix id='Translation_Table_Syntax'>
29e7bcd65Smrg<title>Translation Table Syntax</title>
39e7bcd65Smrg<para><emphasis role='strong'>Notation</emphasis></para>
49e7bcd65Smrg
59e7bcd65Smrg<para>
69e7bcd65SmrgSyntax is specified in EBNF notation with the following conventions:
79e7bcd65Smrg</para>
89e7bcd65Smrg
99e7bcd65Smrg<informaltable frame='none'>
109e7bcd65Smrg  <?dbfo keep-together="auto" ?>
119e7bcd65Smrg  <tgroup cols='2' align='left' colsep='0' rowsep='0'>
129e7bcd65Smrg  <colspec colwidth='0.1*' colname='c1'/>
139e7bcd65Smrg  <colspec colwidth='1.0*' colname='c2'/>
149e7bcd65Smrg  <tbody>
159e7bcd65Smrg    <row>
169e7bcd65Smrg      <entry>[ a ]</entry>
179e7bcd65Smrg      <entry>Means either nothing or "a"</entry>
189e7bcd65Smrg    </row>
199e7bcd65Smrg    <row>
209e7bcd65Smrg      <entry>{ a }</entry>
219e7bcd65Smrg      <entry>Means zero or more occurrences of "a"</entry>
229e7bcd65Smrg    </row>
239e7bcd65Smrg    <row>
249e7bcd65Smrg      <entry>( a | b )</entry>
259e7bcd65Smrg      <entry>Means either "a" or "b"</entry>
269e7bcd65Smrg    </row>
279e7bcd65Smrg    <row>
289e7bcd65Smrg      <entry>\\n</entry>
299e7bcd65Smrg      <entry>Is the newline character</entry>
309e7bcd65Smrg    </row>
319e7bcd65Smrg  </tbody>
329e7bcd65Smrg  </tgroup>
339e7bcd65Smrg</informaltable>
349e7bcd65Smrg
359e7bcd65Smrg<para>
369e7bcd65SmrgAll terminals are enclosed in double quotation marks (" ").
379e7bcd65SmrgInformal descriptions are enclosed in angle brackets (&lt; &gt;).
389e7bcd65SmrgSyntax
399e7bcd65Smrg</para>
409e7bcd65Smrg
419e7bcd65Smrg<para>The syntax of a translation table is</para>
429e7bcd65Smrg<informaltable frame='none'>
439e7bcd65Smrg  <?dbfo keep-together="auto" ?>
449e7bcd65Smrg  <tgroup cols='2' align='left' colsep='0' rowsep='0'>
459e7bcd65Smrg  <colspec colwidth='0.2*' colname='c1'/>
469e7bcd65Smrg  <colspec colwidth='1.0*' colname='c2'/>
479e7bcd65Smrg  <tbody>
489e7bcd65Smrg    <row>
499e7bcd65Smrg      <entry>translationTable</entry>
509e7bcd65Smrg      <entry>= [ directive ] { production }</entry>
519e7bcd65Smrg    </row>
529e7bcd65Smrg    <row>
539e7bcd65Smrg      <entry>directive</entry>
549e7bcd65Smrg      <entry>= ( "#replace" | "#override" | "#augment" ) "\\\\n"</entry>
559e7bcd65Smrg    </row>
569e7bcd65Smrg    <row>
579e7bcd65Smrg      <entry>production</entry>
589e7bcd65Smrg      <entry>= lhs ":" rhs "\\\\n"</entry>
599e7bcd65Smrg    </row>
609e7bcd65Smrg    <row>
619e7bcd65Smrg      <entry>lhs</entry>
629e7bcd65Smrg      <entry>= ( event | keyseq ) { "," (event | keyseq) }</entry>
639e7bcd65Smrg    </row>
649e7bcd65Smrg    <row>
659e7bcd65Smrg      <entry>keyseq</entry>
669e7bcd65Smrg      <entry>= """ keychar {keychar} """</entry>
679e7bcd65Smrg    </row>
689e7bcd65Smrg    <row>
699e7bcd65Smrg      <entry>keychar</entry>
709e7bcd65Smrg      <entry>= [ "^" | "$" | "\\\\" ] &lt;ISO Latin 1 character&gt;</entry>
719e7bcd65Smrg    </row>
729e7bcd65Smrg    <row>
739e7bcd65Smrg      <entry>event</entry>
749e7bcd65Smrg      <entry>= [modifier_list] "&lt;"event_type"&gt;" [ "(" count["+"] ")" ] {detail}</entry>
759e7bcd65Smrg    </row>
769e7bcd65Smrg    <row>
779e7bcd65Smrg      <entry>modifier_list</entry>
789e7bcd65Smrg      <entry>= ( ["!"] [":"] {modifier} ) | "None"</entry>
799e7bcd65Smrg    </row>
809e7bcd65Smrg    <row>
819e7bcd65Smrg      <entry>modifier</entry>
829e7bcd65Smrg      <entry>= ["~"] modifier_name</entry>
839e7bcd65Smrg    </row>
849e7bcd65Smrg    <row>
859e7bcd65Smrg      <entry>count</entry>
869e7bcd65Smrg      <entry>= ("1" | "2" | "3" | "4" | ...)</entry>
879e7bcd65Smrg    </row>
889e7bcd65Smrg    <row>
899e7bcd65Smrg      <entry>modifier_name</entry>
909e7bcd65Smrg      <entry>= "@" &lt;keysym&gt; | &lt;see ModifierNames table below&gt;</entry>
919e7bcd65Smrg    </row>
929e7bcd65Smrg    <row>
939e7bcd65Smrg      <entry>event_type</entry>
949e7bcd65Smrg      <entry>= &lt;see Event Types table below&gt;</entry>
959e7bcd65Smrg    </row>
969e7bcd65Smrg    <row>
979e7bcd65Smrg      <entry>detail</entry>
989e7bcd65Smrg      <entry>= &lt;event specific details&gt;</entry>
999e7bcd65Smrg    </row>
1009e7bcd65Smrg    <row>
1019e7bcd65Smrg      <entry>rhs</entry>
1029e7bcd65Smrg      <entry>= { name "(" [params] ")" }</entry>
1039e7bcd65Smrg    </row>
1049e7bcd65Smrg    <row>
1059e7bcd65Smrg      <entry>name</entry>
1069e7bcd65Smrg      <entry>= namechar { namechar }</entry>
1079e7bcd65Smrg    </row>
1089e7bcd65Smrg    <row>
1099e7bcd65Smrg      <entry>namechar</entry>
1109e7bcd65Smrg      <entry>= { "a"-"z" | "A"-"Z" | "0"-"9" | "_" | "-" }</entry>
1119e7bcd65Smrg    </row>
1129e7bcd65Smrg    <row>
1139e7bcd65Smrg      <entry>params</entry>
1149e7bcd65Smrg      <entry>= string {"," string}</entry>
1159e7bcd65Smrg    </row>
1169e7bcd65Smrg    <row>
1179e7bcd65Smrg      <entry>string</entry>
1189e7bcd65Smrg      <entry>= quoted_string | unquoted_string</entry>
1199e7bcd65Smrg    </row>
1209e7bcd65Smrg    <row>
1219e7bcd65Smrg      <entry>quoted_string</entry>
1229e7bcd65Smrg      <entry>= <quote>"</quote> {&lt;Latin 1 character&gt; | escape_char} ["\\\\" ] <quote>"</quote></entry>
1239e7bcd65Smrg    </row>
1249e7bcd65Smrg    <row>
1259e7bcd65Smrg      <entry>escape_char</entry>
1269e7bcd65Smrg      <entry>= "\\""</entry>
1279e7bcd65Smrg    </row>
1289e7bcd65Smrg    <row>
1299e7bcd65Smrg      <entry>unquoted_string</entry>
1309e7bcd65Smrg      <entry>= {&lt;Latin 1 character except space, tab, ",", "\\n", ")"&gt;}</entry>
1319e7bcd65Smrg    </row>
1329e7bcd65Smrg  </tbody>
1339e7bcd65Smrg  </tgroup>
1349e7bcd65Smrg</informaltable>
1359e7bcd65Smrg
1369e7bcd65Smrg<para>
1379e7bcd65SmrgThe <emphasis remap='I'>params</emphasis> field is parsed into a list of
1389e7bcd65Smrg<function>String</function>
1399e7bcd65Smrgvalues that will be passed to the named action procedure.  A
1409e7bcd65Smrg<emphasis remap='I'>quoted string</emphasis> may contain an embedded quotation mark if the
1419e7bcd65Smrgquotation mark is preceded by a single backslash (\).  The
1429e7bcd65Smrgthree-character sequence "\\\"" is interpreted as "single backslash
1439e7bcd65Smrgfollowed by end-of-string".
1449e7bcd65Smrg</para>
1459e7bcd65Smrg<para><emphasis role='strong'>Modifier Names</emphasis></para>
1469e7bcd65Smrg
1479e7bcd65Smrg<para>
1489e7bcd65SmrgThe modifier field is used to specify standard X keyboard and button
1499e7bcd65Smrgmodifier mask bits.
1509e7bcd65SmrgModifiers are legal on event types
1519e7bcd65Smrg<function>KeyPress</function>,
1529e7bcd65Smrg<function>KeyRelease</function>,
1539e7bcd65Smrg<function>ButtonPress</function>,
1549e7bcd65Smrg<function>ButtonRelease</function>,
1559e7bcd65Smrg<function>MotionNotify</function>,
1569e7bcd65Smrg<function>EnterNotify</function>,
1579e7bcd65Smrg<function>LeaveNotify</function>,
1589e7bcd65Smrgand their abbreviations.
1599e7bcd65SmrgAn error is generated when a translation table
1609e7bcd65Smrgthat contains modifiers for any other events is parsed.
1619e7bcd65Smrg</para>
1629e7bcd65Smrg
1639e7bcd65Smrg<itemizedlist spacing='compact'>
1649e7bcd65Smrg  <listitem>
1659e7bcd65Smrg    <para>
1669e7bcd65SmrgIf the modifier list has no entries and is not "None",
1679e7bcd65Smrgit means "don't care" on all modifiers.
1689e7bcd65Smrg    </para>
1699e7bcd65Smrg  </listitem>
1709e7bcd65Smrg  <listitem>
1719e7bcd65Smrg    <para>
1729e7bcd65SmrgIf an exclamation point (!) is specified at the beginning
1739e7bcd65Smrgof the modifier list,
1749e7bcd65Smrgit means that the listed modifiers must be in the correct state
1759e7bcd65Smrgand no other modifiers can be asserted.
1769e7bcd65Smrg    </para>
1779e7bcd65Smrg  </listitem>
1789e7bcd65Smrg  <listitem>
1799e7bcd65Smrg    <para>
1809e7bcd65SmrgIf any modifiers are specified
1819e7bcd65Smrgand an exclamation point (!) is not specified,
1829e7bcd65Smrgit means that the listed modifiers must be in the
1839e7bcd65Smrgcorrect state and "don't care" about any other modifiers.
1849e7bcd65Smrg    </para>
1859e7bcd65Smrg  </listitem>
1869e7bcd65Smrg  <listitem>
1879e7bcd65Smrg    <para>
1889e7bcd65SmrgIf a modifier is preceded by a tilde (~),
1899e7bcd65Smrgit means that that modifier must not be asserted.
1909e7bcd65Smrg    </para>
1919e7bcd65Smrg  </listitem>
1929e7bcd65Smrg  <listitem>
1939e7bcd65Smrg    <para>
1949e7bcd65SmrgIf "None" is specified, it means no modifiers can be asserted.
1959e7bcd65Smrg    </para>
1969e7bcd65Smrg  </listitem>
1979e7bcd65Smrg  <listitem>
1989e7bcd65Smrg    <para>
1999e7bcd65SmrgIf a colon (:) is specified at the beginning of the modifier list,
2009e7bcd65Smrgit directs the Intrinsics to apply any standard modifiers in the
2019e7bcd65Smrgevent to map the event keycode into a KeySym.
2029e7bcd65SmrgThe default standard modifiers are Shift and Lock,
2039e7bcd65Smrgwith the interpretation as defined in <emphasis remap='I'>X Window
2049e7bcd65SmrgSystem Protocol</emphasis>, Section 5.
2059e7bcd65SmrgThe resulting KeySym must exactly match the specified
2069e7bcd65SmrgKeySym, and the nonstandard modifiers in the event must match the
2079e7bcd65Smrgmodifier list.
2089e7bcd65SmrgFor example, ":&lt;Key&gt;a" is distinct from ":&lt;Key&gt;A",
2099e7bcd65Smrgand ":Shift&lt;Key&gt;A" is distinct from ":&lt;Key&gt;A".
2109e7bcd65Smrg    </para>
2119e7bcd65Smrg  </listitem>
2129e7bcd65Smrg  <listitem>
2139e7bcd65Smrg    <para>
2149e7bcd65SmrgIf both an exclamation point (!) and a colon (:) are specified at
2159e7bcd65Smrgthe beginning of the modifier list, it means that the listed
2169e7bcd65Smrgmodifiers must be in the correct state and that no other modifiers
2179e7bcd65Smrgexcept the standard modifiers can be asserted.  Any standard
2189e7bcd65Smrgmodifiers in the event are applied as for colon (:) above.
2199e7bcd65Smrg    </para>
2209e7bcd65Smrg  </listitem>
2219e7bcd65Smrg  <listitem>
2229e7bcd65Smrg    <para>
2239e7bcd65SmrgIf a colon (:) is not specified,
2249e7bcd65Smrgno standard modifiers are applied.
2259e7bcd65SmrgThen, for example, "&lt;Key&gt;A" and "&lt;Key&gt;a" are equivalent.
2269e7bcd65Smrg    </para>
2279e7bcd65Smrg  </listitem>
2289e7bcd65Smrg</itemizedlist>
2299e7bcd65Smrg
2309e7bcd65Smrg<para>
2319e7bcd65SmrgIn key sequences,
2329e7bcd65Smrga circumflex (^) is an abbreviation for the Control modifier,
2339e7bcd65Smrga dollar sign ($) is an abbreviation for Meta,
2349e7bcd65Smrgand a backslash (\) can be used to quote any
2359e7bcd65Smrgcharacter, in particular a double quote ("), a circumflex (^),
2369e7bcd65Smrga dollar sign ($), and another backslash (\).
2379e7bcd65SmrgBriefly:
2389e7bcd65Smrg</para>
2399e7bcd65Smrg
2409e7bcd65Smrg<literallayout >
2419e7bcd65SmrgNo modifiers:	                None &lt;event&gt; detail
2429e7bcd65SmrgAny modifiers:	                &lt;event&gt; detail
2439e7bcd65SmrgOnly these modifiers:	        ! mod1 mod2 &lt;event&gt; detail
2449e7bcd65SmrgThese modifiers and any others:	mod1 mod2 &lt;event&gt; detail
2459e7bcd65Smrg</literallayout>
2469e7bcd65Smrg
2479e7bcd65Smrg<para>
2489e7bcd65SmrgThe use of "None" for a modifier list is identical to the use
2499e7bcd65Smrgof an exclamation point with no modifers.
2509e7bcd65Smrg</para>
2519e7bcd65Smrg
2529e7bcd65Smrg<informaltable frame='topbot'>
2539e7bcd65Smrg  <?dbfo keep-together="auto" ?>
2549e7bcd65Smrg  <tgroup cols='3' align='left' colsep='0' rowsep='0'>
2559e7bcd65Smrg  <colspec colwidth='1.0*' colname='c1'/>
2569e7bcd65Smrg  <colspec colwidth='1.0*' colname='c2'/>
2579e7bcd65Smrg  <colspec colwidth='1.0*' colname='c3'/>
2589e7bcd65Smrg  <thead>
2599e7bcd65Smrg    <row rowsep='1'>
2609e7bcd65Smrg      <entry>Modifier</entry>
2619e7bcd65Smrg      <entry>Abbreviation</entry>
2629e7bcd65Smrg      <entry>Meaning</entry>
2639e7bcd65Smrg    </row>
2649e7bcd65Smrg  </thead>
2659e7bcd65Smrg  <tbody>
2669e7bcd65Smrg    <row>
2679e7bcd65Smrg      <entry>Ctrl</entry>
2689e7bcd65Smrg      <entry>c</entry>
2699e7bcd65Smrg      <entry>Control modifier bit</entry>
2709e7bcd65Smrg    </row>
2719e7bcd65Smrg    <row>
2729e7bcd65Smrg      <entry>Shift</entry>
2739e7bcd65Smrg      <entry>s</entry>
2749e7bcd65Smrg      <entry>Shift modifier bit</entry>
2759e7bcd65Smrg    </row>
2769e7bcd65Smrg    <row>
2779e7bcd65Smrg      <entry>Lock</entry>
2789e7bcd65Smrg      <entry>l</entry>
2799e7bcd65Smrg      <entry>Lock modifier bit</entry>
2809e7bcd65Smrg    </row>
2819e7bcd65Smrg    <row>
2829e7bcd65Smrg      <entry>Meta</entry>
2839e7bcd65Smrg      <entry>m</entry>
2849e7bcd65Smrg      <entry>Meta key modifier</entry>
2859e7bcd65Smrg    </row>
2869e7bcd65Smrg    <row>
2879e7bcd65Smrg      <entry>Hyper</entry>
2889e7bcd65Smrg      <entry>h</entry>
2899e7bcd65Smrg      <entry>Hyper key modifier</entry>
2909e7bcd65Smrg    </row>
2919e7bcd65Smrg    <row>
2929e7bcd65Smrg      <entry>Super</entry>
2939e7bcd65Smrg      <entry>su</entry>
2949e7bcd65Smrg      <entry>Super key modifier</entry>
2959e7bcd65Smrg    </row>
2969e7bcd65Smrg    <row>
2979e7bcd65Smrg      <entry>Alt</entry>
2989e7bcd65Smrg      <entry>a</entry>
2999e7bcd65Smrg      <entry>Alt key modifier</entry>
3009e7bcd65Smrg    </row>
3019e7bcd65Smrg    <row>
3029e7bcd65Smrg      <entry>Mod1</entry>
3039e7bcd65Smrg      <entry></entry>
3049e7bcd65Smrg      <entry>Mod1 modifier bit</entry>
3059e7bcd65Smrg    </row>
3069e7bcd65Smrg    <row>
3079e7bcd65Smrg      <entry>Mod2</entry>
3089e7bcd65Smrg      <entry></entry>
3099e7bcd65Smrg      <entry>Mod2 modifier bit</entry>
3109e7bcd65Smrg    </row>
3119e7bcd65Smrg    <row>
3129e7bcd65Smrg      <entry>Mod3</entry>
3139e7bcd65Smrg      <entry></entry>
3149e7bcd65Smrg      <entry>Mod3 modifier bit</entry>
3159e7bcd65Smrg    </row>
3169e7bcd65Smrg    <row>
3179e7bcd65Smrg      <entry>Mod4</entry>
3189e7bcd65Smrg      <entry></entry>
3199e7bcd65Smrg      <entry>Mod4 modifier bit</entry>
3209e7bcd65Smrg    </row>
3219e7bcd65Smrg    <row>
3229e7bcd65Smrg      <entry>Mod5</entry>
3239e7bcd65Smrg      <entry></entry>
3249e7bcd65Smrg      <entry>Mod5 modifier bit</entry>
3259e7bcd65Smrg    </row>
3269e7bcd65Smrg    <row>
3279e7bcd65Smrg      <entry>Button1</entry>
3289e7bcd65Smrg      <entry></entry>
3299e7bcd65Smrg      <entry>Button1 modifier bit</entry>
3309e7bcd65Smrg    </row>
3319e7bcd65Smrg    <row>
3329e7bcd65Smrg      <entry>Button2</entry>
3339e7bcd65Smrg      <entry></entry>
3349e7bcd65Smrg      <entry>Button2 modifier bit</entry>
3359e7bcd65Smrg    </row>
3369e7bcd65Smrg    <row>
3379e7bcd65Smrg      <entry>Button3</entry>
3389e7bcd65Smrg      <entry></entry>
3399e7bcd65Smrg      <entry>Button3 modifier bit</entry>
3409e7bcd65Smrg    </row>
3419e7bcd65Smrg    <row>
3429e7bcd65Smrg      <entry>Button4</entry>
3439e7bcd65Smrg      <entry></entry>
3449e7bcd65Smrg      <entry>Button4 modifier bit</entry>
3459e7bcd65Smrg    </row>
3469e7bcd65Smrg    <row>
3479e7bcd65Smrg      <entry>Button5</entry>
3489e7bcd65Smrg      <entry></entry>
3499e7bcd65Smrg      <entry>Button5 modifier bit</entry>
3509e7bcd65Smrg    </row>
3519e7bcd65Smrg    <row>
3529e7bcd65Smrg      <entry>None</entry>
3539e7bcd65Smrg      <entry></entry>
3549e7bcd65Smrg      <entry>No modifiers</entry>
3559e7bcd65Smrg    </row>
3569e7bcd65Smrg    <row>
3579e7bcd65Smrg      <entry>Any</entry>
3589e7bcd65Smrg      <entry></entry>
3599e7bcd65Smrg      <entry>Any modifier combination</entry>
3609e7bcd65Smrg    </row>
3619e7bcd65Smrg  </tbody>
3629e7bcd65Smrg  </tgroup>
3639e7bcd65Smrg</informaltable>
3649e7bcd65Smrg
3659e7bcd65Smrg<para>
3669e7bcd65SmrgA key modifier is any modifier bit one of whose corresponding KeyCodes
3679e7bcd65Smrgcontains the corresponding left or right KeySym.
3689e7bcd65SmrgFor example,
3699e7bcd65Smrg"m" or "Meta" means any modifier bit mapping to a KeyCode
3709e7bcd65Smrgwhose KeySym list contains XK_Meta_L or XK_Meta_R.
3719e7bcd65SmrgNote that this interpretation is for each display,
3729e7bcd65Smrgnot global or even for each application context.
3739e7bcd65SmrgThe Control, Shift, and Lock modifier names refer
3749e7bcd65Smrgexplicitly to the corresponding modifier bits;
3759e7bcd65Smrgthere is no additional interpretation of KeySyms for these modifiers.
3769e7bcd65Smrg</para>
3779e7bcd65Smrg
3789e7bcd65Smrg<para>
3799e7bcd65SmrgBecause it is possible to associate arbitrary KeySyms with modifiers, the set of
3809e7bcd65Smrgkey modifiers is extensible.  The "@" &lt;keysym&gt; syntax means any
3819e7bcd65Smrgmodifier bit whose corresponding KeyCode contains the specified KeySym name.
3829e7bcd65Smrg</para>
3839e7bcd65Smrg
3849e7bcd65Smrg<para>
3859e7bcd65SmrgA modifier_list/KeySym combination in a translation matches a
3869e7bcd65Smrgmodifiers/KeyCode combination in an event in the following ways:
3879e7bcd65Smrg</para>
3889e7bcd65Smrg
3899e7bcd65Smrg<orderedlist>
3909e7bcd65Smrg  <listitem>
3919e7bcd65Smrg    <para>
3929e7bcd65SmrgIf a colon (:) is used, the Intrinsics call the display's
3939e7bcd65Smrg<xref linkend='XtKeyProc' xrefstyle='select: title'/>
3949e7bcd65Smrgwith the KeyCode and modifiers.
3959e7bcd65SmrgTo match, (<emphasis remap='I'>modifiers</emphasis> &amp; ~<emphasis remap='I'>modifiers_return</emphasis>) must equal <emphasis remap='I'>modifier_list</emphasis>, and
3969e7bcd65Smrg<emphasis remap='I'>keysym_return</emphasis> must equal the given KeySym.
3979e7bcd65Smrg    </para>
3989e7bcd65Smrg  </listitem>
3999e7bcd65Smrg  <listitem>
4009e7bcd65Smrg    <para>
4019e7bcd65SmrgIf (:) is not used, the Intrinsics mask off all don't-care bits from the
4029e7bcd65Smrgmodifiers.
4039e7bcd65SmrgThis value must be equal to <emphasis remap='I'>modifier_list</emphasis>.
4049e7bcd65SmrgThen, for each possible combination of
4059e7bcd65Smrgdon't-care modifiers in the modifier list, the Intrinsics call the display's
4069e7bcd65Smrg<xref linkend='XtKeyProc' xrefstyle='select: title'/>
4079e7bcd65Smrgwith the KeyCode and that combination ORed with the cared-about modifier bits
4089e7bcd65Smrgfrom the event.
4099e7bcd65Smrg<emphasis remap='I'>Keysym_return</emphasis> must match the KeySym in the translation.
4109e7bcd65Smrg    </para>
4119e7bcd65Smrg  </listitem>
4129e7bcd65Smrg</orderedlist>
4139e7bcd65Smrg
4149e7bcd65Smrg<para><emphasis role='strong'>Event Types</emphasis></para>
4159e7bcd65Smrg
4169e7bcd65Smrg<para>
4179e7bcd65SmrgThe event-type field describes XEvent types.
4189e7bcd65SmrgIn addition to the standard
4199e7bcd65SmrgXlib symbolic event type names, the following event type synonyms
4209e7bcd65Smrgare defined:
4219e7bcd65Smrg</para>
4229e7bcd65Smrg
4239e7bcd65Smrg<informaltable frame='topbot'>
4249e7bcd65Smrg  <?dbfo keep-together="auto" ?>
4259e7bcd65Smrg  <tgroup cols='2' align='left' colsep='0' rowsep='0'>
4269e7bcd65Smrg  <colspec colwidth='1.0*' colname='c1'/>
4279e7bcd65Smrg  <colspec colwidth='1.0*' colname='c2'/>
4289e7bcd65Smrg  <thead>
4299e7bcd65Smrg    <row rowsep='1'>
4309e7bcd65Smrg      <entry>Type</entry>
4319e7bcd65Smrg      <entry>Meaning</entry>
4329e7bcd65Smrg    </row>
4339e7bcd65Smrg  </thead>
4349e7bcd65Smrg  <tbody>
4359e7bcd65Smrg    <row>
4369e7bcd65Smrg      <entry>Key</entry>
4379e7bcd65Smrg      <entry><function>KeyPress</function></entry>
4389e7bcd65Smrg    </row>
4399e7bcd65Smrg    <row>
4409e7bcd65Smrg      <entry>KeyDown</entry>
4419e7bcd65Smrg      <entry><function>KeyPress</function></entry>
4429e7bcd65Smrg    </row>
4439e7bcd65Smrg    <row>
4449e7bcd65Smrg      <entry>KeyUp</entry>
4459e7bcd65Smrg      <entry><function>KeyRelease</function></entry>
4469e7bcd65Smrg    </row>
4479e7bcd65Smrg    <row>
4489e7bcd65Smrg      <entry>BtnDown</entry>
4499e7bcd65Smrg      <entry><function>ButtonPress</function></entry>
4509e7bcd65Smrg    </row>
4519e7bcd65Smrg    <row>
4529e7bcd65Smrg      <entry>BtnUp</entry>
4539e7bcd65Smrg      <entry><function>ButtonRelease</function></entry>
4549e7bcd65Smrg    </row>
4559e7bcd65Smrg    <row>
4569e7bcd65Smrg      <entry>Motion</entry>
4579e7bcd65Smrg      <entry><function>MotionNotify</function></entry>
4589e7bcd65Smrg    </row>
4599e7bcd65Smrg    <row>
4609e7bcd65Smrg      <entry>PtrMoved</entry>
4619e7bcd65Smrg      <entry><function>MotionNotify</function></entry>
4629e7bcd65Smrg    </row>
4639e7bcd65Smrg    <row>
4649e7bcd65Smrg      <entry>MouseMoved</entry>
4659e7bcd65Smrg      <entry><function>MotionNotify</function></entry>
4669e7bcd65Smrg    </row>
4679e7bcd65Smrg    <row>
4689e7bcd65Smrg      <entry>Enter</entry>
4699e7bcd65Smrg      <entry><function>EnterNotify</function></entry>
4709e7bcd65Smrg    </row>
4719e7bcd65Smrg    <row>
4729e7bcd65Smrg      <entry>EnterWindow</entry>
4739e7bcd65Smrg      <entry><function>EnterNotify</function></entry>
4749e7bcd65Smrg    </row>
4759e7bcd65Smrg    <row>
4769e7bcd65Smrg      <entry>Leave</entry>
4779e7bcd65Smrg      <entry><function>LeaveNotify</function></entry>
4789e7bcd65Smrg    </row>
4799e7bcd65Smrg    <row>
4809e7bcd65Smrg      <entry>LeaveWindow</entry>
4819e7bcd65Smrg      <entry><function>LeaveNotify</function></entry>
4829e7bcd65Smrg    </row>
4839e7bcd65Smrg    <row>
4849e7bcd65Smrg      <entry>FocusIn</entry>
4859e7bcd65Smrg      <entry><function>FocusIn</function></entry>
4869e7bcd65Smrg    </row>
4879e7bcd65Smrg    <row>
4889e7bcd65Smrg      <entry>FocusOut</entry>
4899e7bcd65Smrg      <entry><function>FocusOut</function></entry>
4909e7bcd65Smrg    </row>
4919e7bcd65Smrg    <row>
4929e7bcd65Smrg      <entry>Keymap</entry>
4939e7bcd65Smrg      <entry><function>KeymapNotify</function></entry>
4949e7bcd65Smrg    </row>
4959e7bcd65Smrg    <row>
4969e7bcd65Smrg      <entry>Expose</entry>
4979e7bcd65Smrg      <entry><function>Expose</function></entry>
4989e7bcd65Smrg    </row>
4999e7bcd65Smrg    <row>
5009e7bcd65Smrg      <entry>GrExp</entry>
5019e7bcd65Smrg      <entry><function>GraphicsExpose</function></entry>
5029e7bcd65Smrg    </row>
5039e7bcd65Smrg    <row>
5049e7bcd65Smrg      <entry>NoExp</entry>
5059e7bcd65Smrg      <entry><function>NoExpose</function></entry>
5069e7bcd65Smrg    </row>
5079e7bcd65Smrg    <row>
5089e7bcd65Smrg      <entry>Visible</entry>
5099e7bcd65Smrg      <entry><function>VisibilityNotify</function></entry>
5109e7bcd65Smrg    </row>
5119e7bcd65Smrg    <row>
5129e7bcd65Smrg      <entry>Create</entry>
5139e7bcd65Smrg      <entry><function>CreateNotify</function></entry>
5149e7bcd65Smrg    </row>
5159e7bcd65Smrg    <row>
5169e7bcd65Smrg      <entry>Destroy</entry>
5179e7bcd65Smrg      <entry><function>DestroyNotify</function></entry>
5189e7bcd65Smrg    </row>
5199e7bcd65Smrg    <row>
5209e7bcd65Smrg      <entry>Unmap</entry>
5219e7bcd65Smrg      <entry><function>UnmapNotify</function></entry>
5229e7bcd65Smrg    </row>
5239e7bcd65Smrg    <row>
5249e7bcd65Smrg      <entry>Map</entry>
5259e7bcd65Smrg      <entry><function>MapNotify</function></entry>
5269e7bcd65Smrg    </row>
5279e7bcd65Smrg    <row>
5289e7bcd65Smrg      <entry>MapReq</entry>
5299e7bcd65Smrg      <entry><function>MapRequest</function></entry>
5309e7bcd65Smrg    </row>
5319e7bcd65Smrg    <row>
5329e7bcd65Smrg      <entry>Reparent</entry>
5339e7bcd65Smrg      <entry><function>ReparentNotify</function></entry>
5349e7bcd65Smrg    </row>
5359e7bcd65Smrg    <row>
5369e7bcd65Smrg      <entry>Configure</entry>
5379e7bcd65Smrg      <entry><function>ConfigureNotify</function></entry>
5389e7bcd65Smrg    </row>
5399e7bcd65Smrg    <row>
5409e7bcd65Smrg      <entry>ConfigureReq</entry>
5419e7bcd65Smrg      <entry><function>ConfigureRequest</function></entry>
5429e7bcd65Smrg    </row>
5439e7bcd65Smrg    <row>
5449e7bcd65Smrg      <entry>Grav</entry>
5459e7bcd65Smrg      <entry><function>GravityNotify</function></entry>
5469e7bcd65Smrg    </row>
5479e7bcd65Smrg    <row>
5489e7bcd65Smrg      <entry>ResReq</entry>
5499e7bcd65Smrg      <entry><function>ResizeRequest</function></entry>
5509e7bcd65Smrg    </row>
5519e7bcd65Smrg    <row>
5529e7bcd65Smrg      <entry>Circ</entry>
5539e7bcd65Smrg      <entry><function>CirculateNotify</function></entry>
5549e7bcd65Smrg    </row>
5559e7bcd65Smrg    <row>
5569e7bcd65Smrg      <entry>CircReq</entry>
5579e7bcd65Smrg      <entry><function>CirculateRequest</function></entry>
5589e7bcd65Smrg    </row>
5599e7bcd65Smrg    <row>
5609e7bcd65Smrg      <entry>Prop</entry>
5619e7bcd65Smrg      <entry><function>PropertyNotify</function></entry>
5629e7bcd65Smrg    </row>
5639e7bcd65Smrg    <row>
5649e7bcd65Smrg      <entry>SelClr</entry>
5659e7bcd65Smrg      <entry><function>SelectionClear</function></entry>
5669e7bcd65Smrg    </row>
5679e7bcd65Smrg    <row>
5689e7bcd65Smrg      <entry>SelReq</entry>
5699e7bcd65Smrg      <entry><function>SelectionRequest</function></entry>
5709e7bcd65Smrg    </row>
5719e7bcd65Smrg    <row>
5729e7bcd65Smrg      <entry>Select</entry>
5739e7bcd65Smrg      <entry><function>SelectionNotify</function></entry>
5749e7bcd65Smrg    </row>
5759e7bcd65Smrg    <row>
5769e7bcd65Smrg      <entry>Clrmap</entry>
5779e7bcd65Smrg      <entry><function>ColormapNotify</function></entry>
5789e7bcd65Smrg    </row>
5799e7bcd65Smrg    <row>
5809e7bcd65Smrg      <entry>Message</entry>
5819e7bcd65Smrg      <entry><function>ClientMessage</function></entry>
5829e7bcd65Smrg    </row>
5839e7bcd65Smrg    <row>
5849e7bcd65Smrg      <entry>Mapping</entry>
5859e7bcd65Smrg      <entry><function>MappingNotify</function></entry>
5869e7bcd65Smrg    </row>
5879e7bcd65Smrg  </tbody>
5889e7bcd65Smrg  </tgroup>
5899e7bcd65Smrg</informaltable>
5909e7bcd65Smrg
5919e7bcd65Smrg<para>The supported abbreviations are:</para>
5929e7bcd65Smrg
5939e7bcd65Smrg<informaltable frame='topbot'>
5949e7bcd65Smrg  <?dbfo keep-together="auto" ?>
5959e7bcd65Smrg  <tgroup cols='3' align='left' rowsep='0' colsep='0'>
5969e7bcd65Smrg  <colspec colwidth='1.0*' colname='c1'/>
5979e7bcd65Smrg  <colspec colwidth='1.0*' colname='c2'/>
5989e7bcd65Smrg  <colspec colwidth='1.0*' colname='c3'/>
5999e7bcd65Smrg  <thead>
6009e7bcd65Smrg    <row rowsep='1'>
6019e7bcd65Smrg      <entry>Abbreviation</entry>
6029e7bcd65Smrg      <entry>Event Type</entry>
6039e7bcd65Smrg      <entry>Including</entry>
6049e7bcd65Smrg    </row>
6059e7bcd65Smrg  </thead>
6069e7bcd65Smrg  <tbody>
6079e7bcd65Smrg    <row>
6089e7bcd65Smrg      <entry>Ctrl</entry>
6099e7bcd65Smrg      <entry><function>KeyPress</function></entry>
6109e7bcd65Smrg      <entry>with Control modifier</entry>
6119e7bcd65Smrg    </row>
6129e7bcd65Smrg    <row>
6139e7bcd65Smrg      <entry>Meta</entry>
6149e7bcd65Smrg      <entry><function>KeyPress</function></entry>
6159e7bcd65Smrg      <entry>with Meta modifier</entry>
6169e7bcd65Smrg    </row>
6179e7bcd65Smrg    <row>
6189e7bcd65Smrg      <entry>Shift</entry>
6199e7bcd65Smrg      <entry><function>KeyPress</function></entry>
6209e7bcd65Smrg      <entry>with Shift modifier</entry>
6219e7bcd65Smrg    </row>
6229e7bcd65Smrg    <row>
6239e7bcd65Smrg      <entry>Btn1Down</entry>
6249e7bcd65Smrg      <entry><function>ButtonPress</function></entry>
6259e7bcd65Smrg      <entry>with Button1 detail</entry>
6269e7bcd65Smrg    </row>
6279e7bcd65Smrg    <row>
6289e7bcd65Smrg      <entry>Btn1Up</entry>
6299e7bcd65Smrg      <entry><function>ButtonRelease</function></entry>
6309e7bcd65Smrg      <entry>with Button1 detail</entry>
6319e7bcd65Smrg    </row>
6329e7bcd65Smrg    <row>
6339e7bcd65Smrg      <entry>Btn2Down</entry>
6349e7bcd65Smrg      <entry><function>ButtonPress</function></entry>
6359e7bcd65Smrg      <entry>with Button2 detail</entry>
6369e7bcd65Smrg    </row>
6379e7bcd65Smrg    <row>
6389e7bcd65Smrg      <entry>Btn2Up</entry>
6399e7bcd65Smrg      <entry><function>ButtonRelease</function></entry>
6409e7bcd65Smrg      <entry>with Button2 detail</entry>
6419e7bcd65Smrg    </row>
6429e7bcd65Smrg    <row>
6439e7bcd65Smrg      <entry>Btn3Down</entry>
6449e7bcd65Smrg      <entry><function>ButtonPress</function></entry>
6459e7bcd65Smrg      <entry>with Button3 detail</entry>
6469e7bcd65Smrg    </row>
6479e7bcd65Smrg    <row>
6489e7bcd65Smrg      <entry>Btn3Up</entry>
6499e7bcd65Smrg      <entry><function>ButtonRelease</function></entry>
6509e7bcd65Smrg      <entry>with Button3 detail</entry>
6519e7bcd65Smrg    </row>
6529e7bcd65Smrg    <row>
6539e7bcd65Smrg      <entry>Btn4Down</entry>
6549e7bcd65Smrg      <entry><function>ButtonPress</function></entry>
6559e7bcd65Smrg      <entry>with Button4 detail</entry>
6569e7bcd65Smrg    </row>
6579e7bcd65Smrg    <row>
6589e7bcd65Smrg      <entry>Btn4Up</entry>
6599e7bcd65Smrg      <entry><function>ButtonRelease</function></entry>
6609e7bcd65Smrg      <entry>with Button4 detail</entry>
6619e7bcd65Smrg    </row>
6629e7bcd65Smrg    <row>
6639e7bcd65Smrg      <entry>Btn5Down</entry>
6649e7bcd65Smrg      <entry><function>ButtonPress</function></entry>
6659e7bcd65Smrg      <entry>with Button5 detail</entry>
6669e7bcd65Smrg    </row>
6679e7bcd65Smrg    <row>
6689e7bcd65Smrg      <entry>Btn5Up</entry>
6699e7bcd65Smrg      <entry><function>ButtonRelease</function></entry>
6709e7bcd65Smrg      <entry>with Button5 detail</entry>
6719e7bcd65Smrg    </row>
6729e7bcd65Smrg    <row>
6739e7bcd65Smrg      <entry>BtnMotion</entry>
6749e7bcd65Smrg      <entry><function>MotionNotify</function></entry>
6759e7bcd65Smrg      <entry>with any button modifier</entry>
6769e7bcd65Smrg    </row>
6779e7bcd65Smrg    <row>
6789e7bcd65Smrg      <entry>Btn1Motion</entry>
6799e7bcd65Smrg      <entry><function>MotionNotify</function></entry>
6809e7bcd65Smrg      <entry>with Button1 modifier</entry>
6819e7bcd65Smrg    </row>
6829e7bcd65Smrg    <row>
6839e7bcd65Smrg      <entry>Btn2Motion</entry>
6849e7bcd65Smrg      <entry><function>MotionNotify</function></entry>
6859e7bcd65Smrg      <entry>with Button2 modifier</entry>
6869e7bcd65Smrg    </row>
6879e7bcd65Smrg    <row>
6889e7bcd65Smrg      <entry>Btn3Motion</entry>
6899e7bcd65Smrg      <entry><function>MotionNotify</function></entry>
6909e7bcd65Smrg      <entry>with Button3 modifier</entry>
6919e7bcd65Smrg    </row>
6929e7bcd65Smrg    <row>
6939e7bcd65Smrg      <entry>Btn4Motion</entry>
6949e7bcd65Smrg      <entry><function>MotionNotify</function></entry>
6959e7bcd65Smrg      <entry>with Button4 modifier</entry>
6969e7bcd65Smrg    </row>
6979e7bcd65Smrg    <row>
6989e7bcd65Smrg      <entry>Btn5Motion</entry>
6999e7bcd65Smrg      <entry><function>MotionNotify</function></entry>
7009e7bcd65Smrg      <entry>with Button5 modifier</entry>
7019e7bcd65Smrg    </row>
7029e7bcd65Smrg  </tbody>
7039e7bcd65Smrg  </tgroup>
7049e7bcd65Smrg</informaltable>
7059e7bcd65Smrg
7069e7bcd65Smrg<para>
7079e7bcd65SmrgThe detail field is event-specific and normally corresponds to the
7089e7bcd65Smrgdetail field of the corresponding event as described
7099e7bcd65Smrgby <emphasis remap='I'>X Window System Protocol</emphasis>, Section 11.
7109e7bcd65SmrgThe detail field is supported for the following event types:
7119e7bcd65Smrg</para>
7129e7bcd65Smrg
7139e7bcd65Smrg<informaltable frame='none'>
7149e7bcd65Smrg  <?dbfo keep-together="auto" ?>
7159e7bcd65Smrg  <tgroup cols='2' align='left' rowsep='0' colsep='0'>
7169e7bcd65Smrg  <colspec colwidth='0.5*' colname='c1'/>
7179e7bcd65Smrg  <colspec colwidth='1.0*' colname='c2'/>
7189e7bcd65Smrg  <tbody>
7199e7bcd65Smrg    <row>
7209e7bcd65Smrg      <entry>KeyPress</entry>
7219e7bcd65Smrg      <entry>KeySym from event <emphasis>detail</emphasis> (keycode)</entry>
7229e7bcd65Smrg    </row>
7239e7bcd65Smrg    <row>
7249e7bcd65Smrg      <entry>KeyRelease</entry>
7259e7bcd65Smrg      <entry>KeySym from event <emphasis>detail</emphasis> (keycode)</entry>
7269e7bcd65Smrg    </row>
7279e7bcd65Smrg    <row>
7289e7bcd65Smrg      <entry>ButtonPress</entry>
7299e7bcd65Smrg      <entry>button from event <emphasis>detail</emphasis></entry>
7309e7bcd65Smrg    </row>
7319e7bcd65Smrg    <row>
7329e7bcd65Smrg      <entry>ButtonRelease</entry>
7339e7bcd65Smrg      <entry>button from event <emphasis>detail</emphasis></entry>
7349e7bcd65Smrg    </row>
7359e7bcd65Smrg    <row>
7369e7bcd65Smrg      <entry>MotionNotify</entry>
7379e7bcd65Smrg      <entry>event <emphasis>detail</emphasis></entry>
7389e7bcd65Smrg    </row>
7399e7bcd65Smrg    <row>
7409e7bcd65Smrg      <entry>EnterNotify</entry>
7419e7bcd65Smrg      <entry>event <emphasis>mode</emphasis></entry>
7429e7bcd65Smrg    </row>
7439e7bcd65Smrg    <row>
7449e7bcd65Smrg      <entry>LeaveNotify</entry>
7459e7bcd65Smrg      <entry>event <emphasis>mode</emphasis></entry>
7469e7bcd65Smrg    </row>
7479e7bcd65Smrg    <row>
7489e7bcd65Smrg      <entry>FocusIn</entry>
7499e7bcd65Smrg      <entry>event <emphasis>mode</emphasis></entry>
7509e7bcd65Smrg    </row>
7519e7bcd65Smrg    <row>
7529e7bcd65Smrg      <entry>FocusOut</entry>
7539e7bcd65Smrg      <entry>event <emphasis>mode</emphasis></entry>
7549e7bcd65Smrg    </row>
7559e7bcd65Smrg    <row>
7569e7bcd65Smrg      <entry>PropertyNotify</entry>
7579e7bcd65Smrg      <entry><emphasis>atom</emphasis></entry>
7589e7bcd65Smrg    </row>
7599e7bcd65Smrg    <row>
7609e7bcd65Smrg      <entry>SelectionClear</entry>
7619e7bcd65Smrg      <entry><emphasis>selection</emphasis></entry>
7629e7bcd65Smrg    </row>
7639e7bcd65Smrg    <row>
7649e7bcd65Smrg      <entry>SelectionRequest</entry>
7659e7bcd65Smrg      <entry><emphasis>selection</emphasis></entry>
7669e7bcd65Smrg    </row>
7679e7bcd65Smrg    <row>
7689e7bcd65Smrg      <entry>SelectionNotify</entry>
7699e7bcd65Smrg      <entry><emphasis>selection</emphasis></entry>
7709e7bcd65Smrg    </row>
7719e7bcd65Smrg    <row>
7729e7bcd65Smrg      <entry>ClientMessage</entry>
7739e7bcd65Smrg      <entry><emphasis>type</emphasis></entry>
7749e7bcd65Smrg    </row>
7759e7bcd65Smrg    <row>
7769e7bcd65Smrg      <entry>MappingNotify</entry>
7779e7bcd65Smrg      <entry><emphasis>request</emphasis></entry>
7789e7bcd65Smrg    </row>
7799e7bcd65Smrg  </tbody>
7809e7bcd65Smrg  </tgroup>
7819e7bcd65Smrg</informaltable>
7829e7bcd65Smrg
7839e7bcd65Smrg<para>
7849e7bcd65SmrgIf the event type is
7859e7bcd65Smrg<function>KeyPress</function>
7869e7bcd65Smrgor
7879e7bcd65Smrg<function>KeyRelease</function>,
7889e7bcd65Smrgthe detail field
7899e7bcd65Smrgspecifies a KeySym name in standard format which is matched against
7909e7bcd65Smrgthe event as described above, for example, &lt;Key&gt;A.
7919e7bcd65Smrg</para>
7929e7bcd65Smrg
7939e7bcd65Smrg<para>
7949e7bcd65SmrgFor the
7959e7bcd65Smrg<function>PropertyNotify</function>,
7969e7bcd65Smrg<function>SelectionClear</function>,
7979e7bcd65Smrg<function>SelectionRequest</function>,
7989e7bcd65Smrg<function>SelectionNotify</function>,
7999e7bcd65Smrgand
8009e7bcd65Smrg<function>ClientMessage</function>
8019e7bcd65Smrgevents the detail field is specified
8029e7bcd65Smrgas an atom name; for example, &lt;Message&gt;WM_PROTOCOLS.  For the
8039e7bcd65Smrg<function>MotionNotify</function>,
8049e7bcd65Smrg<function>EnterNotify</function>,
8059e7bcd65Smrg<function>LeaveNotify</function>,
8069e7bcd65Smrg<function>FocusIn</function>,
8079e7bcd65Smrg<function>FocusOut</function>,
8089e7bcd65Smrgand
8099e7bcd65Smrg<function>MappingNotify</function>
8109e7bcd65Smrgevents, either the symbolic constants as defined by
8119e7bcd65Smrg<emphasis remap='I'>X Window
8129e7bcd65SmrgSystem Protocol</emphasis>, Section 11,
8139e7bcd65Smrgor the numeric values may be specified.
8149e7bcd65Smrg</para>
8159e7bcd65Smrg
8169e7bcd65Smrg<para>
8179e7bcd65SmrgIf no detail field is specified, then any value in the event detail is
8189e7bcd65Smrgaccepted as a match.
8199e7bcd65Smrg</para>
8209e7bcd65Smrg
8219e7bcd65Smrg<para>
8229e7bcd65SmrgA KeySym can be specified as any of the standard KeySym names,
8239e7bcd65Smrga hexadecimal number prefixed with "0x" or "0X",
8249e7bcd65Smrgan octal number prefixed with "0", or a decimal number.
8259e7bcd65SmrgA KeySym expressed as a single digit is interpreted as the
8269e7bcd65Smrgcorresponding Latin 1 KeySym, for example, "0" is the KeySym XK_0.
8279e7bcd65SmrgOther single character KeySyms are treated as literal constants from Latin 1,
8289e7bcd65Smrgfor example, "!" is treated as 0x21.
8299e7bcd65SmrgStandard KeySym names are as defined in
8309e7bcd65Smrg<function>&lt;X11/keysymdef.h&gt;</function>
8319e7bcd65Smrgwith the "XK_" prefix removed.
8329e7bcd65Smrg</para>
8339e7bcd65Smrg
8349e7bcd65Smrg<para><emphasis role='strong'>Canonical Representation</emphasis></para>
8359e7bcd65Smrg
8369e7bcd65Smrg<para>
8379e7bcd65SmrgEvery translation table has a unique, canonical text representation. This
8389e7bcd65Smrgrepresentation is passed to a widget's
8399e7bcd65Smrg<function>display_accelerator</function>
8409e7bcd65Smrgprocedure to describe the accelerators installed on that widget.
8419e7bcd65SmrgThe canonical representation of a translation table is (see also
8429e7bcd65Smrg"Syntax")
8439e7bcd65Smrg</para>
8449e7bcd65Smrg
8459e7bcd65Smrg<informaltable frame='none'>
8469e7bcd65Smrg  <?dbfo keep-together="auto" ?>
8479e7bcd65Smrg  <tgroup cols='2' align='left' colsep='0' rowsep='0'>
8489e7bcd65Smrg  <colspec colwidth='0.2*' colname='c1'/>
8499e7bcd65Smrg  <colspec colwidth='1.0*' colname='c2'/>
8509e7bcd65Smrg  <tbody>
8519e7bcd65Smrg    <row>
8529e7bcd65Smrg      <entry>translationTable</entry>
8539e7bcd65Smrg      <entry>= { production }
8549e7bcd65Smrg      </entry>
8559e7bcd65Smrg    </row>
8569e7bcd65Smrg    <row>
8579e7bcd65Smrg      <entry>production</entry>
8589e7bcd65Smrg      <entry>= lhs ":" rhs "\\n"
8599e7bcd65Smrg      </entry>
8609e7bcd65Smrg    </row>
8619e7bcd65Smrg    <row>
8629e7bcd65Smrg      <entry>lhs</entry>
8639e7bcd65Smrg      <entry>=event { "," event }
8649e7bcd65Smrg      </entry>
8659e7bcd65Smrg    </row>
8669e7bcd65Smrg    <row>
8679e7bcd65Smrg      <entry>event</entry>
8689e7bcd65Smrg      <entry>=[modifier_list] "&lt;"event_type"&gt;" [ "(" count["+"] ")" ] {detail}
8699e7bcd65Smrg      </entry>
8709e7bcd65Smrg    </row>
8719e7bcd65Smrg    <row>
8729e7bcd65Smrg      <entry>modifier_list</entry>
8739e7bcd65Smrg      <entry>= ["!"] [":"] {modifier}
8749e7bcd65Smrg      </entry>
8759e7bcd65Smrg    </row>
8769e7bcd65Smrg    <row>
8779e7bcd65Smrg      <entry>modifier</entry>
8789e7bcd65Smrg      <entry>= ["˜"] modifier_name
8799e7bcd65Smrg      </entry>
8809e7bcd65Smrg    </row>
8819e7bcd65Smrg    <row>
8829e7bcd65Smrg      <entry>count</entry>
8839e7bcd65Smrg      <entry>=("1" | "2" | "3" | "4" | ...)
8849e7bcd65Smrg      </entry>
8859e7bcd65Smrg    </row>
8869e7bcd65Smrg    <row>
8879e7bcd65Smrg      <entry>modifier_name</entry>
8889e7bcd65Smrg      <entry>= "@" &lt;keysym&gt; | &lt;see canonical modifier names below&gt;
8899e7bcd65Smrg      </entry>
8909e7bcd65Smrg    </row>
8919e7bcd65Smrg    <row>
8929e7bcd65Smrg      <entry>event_type</entry>
8939e7bcd65Smrg      <entry>= &lt;see canonical event types below&gt;
8949e7bcd65Smrg      </entry>
8959e7bcd65Smrg    </row>
8969e7bcd65Smrg    <row>
8979e7bcd65Smrg      <entry>detail</entry>
8989e7bcd65Smrg      <entry>=&lt;event-specific details&gt;
8999e7bcd65Smrg      </entry>
9009e7bcd65Smrg    </row>
9019e7bcd65Smrg    <row>
9029e7bcd65Smrg      <entry>rhs</entry>
9039e7bcd65Smrg      <entry>={ name "(" [params] ")" }
9049e7bcd65Smrg      </entry>
9059e7bcd65Smrg    </row>
9069e7bcd65Smrg    <row>
9079e7bcd65Smrg      <entry>name</entry>
9089e7bcd65Smrg      <entry>=namechar { namechar }
9099e7bcd65Smrg      </entry>
9109e7bcd65Smrg    </row>
9119e7bcd65Smrg    <row>
9129e7bcd65Smrg      <entry>namechar</entry>
9139e7bcd65Smrg      <entry>= { "a"-"z" | "A"-"Z" | "0"-"9" | "_" | "-" }
9149e7bcd65Smrg      </entry>
9159e7bcd65Smrg    </row>
9169e7bcd65Smrg    <row>
9179e7bcd65Smrg      <entry>params</entry>
9189e7bcd65Smrg      <entry>=string {"," string}
9199e7bcd65Smrg      </entry>
9209e7bcd65Smrg    </row>
9219e7bcd65Smrg    <row>
9229e7bcd65Smrg      <entry>string</entry>
9239e7bcd65Smrg      <entry>=quoted_string
9249e7bcd65Smrg      </entry>
9259e7bcd65Smrg    </row>
9269e7bcd65Smrg    <row>
9279e7bcd65Smrg      <entry>quoted_string</entry>
9289e7bcd65Smrg      <entry>= <quote>"</quote> {&lt;Latin 1 character&gt; | escape_char} ["\\\\" ] <quote>"</quote>
9299e7bcd65Smrg      </entry>
9309e7bcd65Smrg    </row>
9319e7bcd65Smrg    <row>
9329e7bcd65Smrg      <entry>escape_char</entry>
9339e7bcd65Smrg      <entry>= "\\""
9349e7bcd65Smrg      </entry>
9359e7bcd65Smrg    </row>
9369e7bcd65Smrg  </tbody>
9379e7bcd65Smrg  </tgroup>
9389e7bcd65Smrg</informaltable>
9399e7bcd65Smrg
9409e7bcd65Smrg<para>The canonical modifier names are</para>
9419e7bcd65Smrg
9429e7bcd65Smrg<literallayout >
9439e7bcd65Smrg     Ctrl     Mod1         Button1
9449e7bcd65Smrg     Shift    Mod2         Button2
9459e7bcd65Smrg     Lock     Mod3         Button3
9469e7bcd65Smrg     Mod4     Button4
9479e7bcd65Smrg     Mod5     Button5
9489e7bcd65Smrg</literallayout>
9499e7bcd65Smrg
9509e7bcd65Smrg<para>The canonical event types are</para>
9519e7bcd65Smrg
9529e7bcd65Smrg<informaltable frame='none'>
9539e7bcd65Smrg  <?dbfo keep-together="auto" ?>
9549e7bcd65Smrg  <tgroup cols='2' align='left' colsep='0' rowsep='0'>
9559e7bcd65Smrg  <colspec colwidth='1.0*' colname='c1'/>
9569e7bcd65Smrg  <colspec colwidth='1.0*' colname='c2'/>
9579e7bcd65Smrg  <tbody>
9589e7bcd65Smrg    <row>
9599e7bcd65Smrg      <entry>KeyPress</entry>
9609e7bcd65Smrg      <entry>KeyRelease</entry>
9619e7bcd65Smrg    </row>
9629e7bcd65Smrg    <row>
9639e7bcd65Smrg      <entry>ButtonPress</entry>
9649e7bcd65Smrg      <entry>ButtonRelease</entry>
9659e7bcd65Smrg    </row>
9669e7bcd65Smrg    <row>
9679e7bcd65Smrg      <entry>MotionNotify</entry>
9689e7bcd65Smrg      <entry>EnterNotify</entry>
9699e7bcd65Smrg    </row>
9709e7bcd65Smrg    <row>
9719e7bcd65Smrg      <entry>LeaveNotify</entry>
9729e7bcd65Smrg      <entry>FocusIn</entry>
9739e7bcd65Smrg    </row>
9749e7bcd65Smrg    <row>
9759e7bcd65Smrg      <entry>FocusOut</entry>
9769e7bcd65Smrg      <entry>KeymapNotify</entry>
9779e7bcd65Smrg    </row>
9789e7bcd65Smrg    <row>
9799e7bcd65Smrg      <entry>Expose</entry>
9809e7bcd65Smrg      <entry>GraphicsExpose,</entry>
9819e7bcd65Smrg    </row>
9829e7bcd65Smrg    <row>
9839e7bcd65Smrg      <entry>NoExpose</entry>
9849e7bcd65Smrg      <entry>VisibilityNotify</entry>
9859e7bcd65Smrg    </row>
9869e7bcd65Smrg    <row>
9879e7bcd65Smrg      <entry>CreateNotify</entry>
9889e7bcd65Smrg      <entry>DestroyNotify</entry>
9899e7bcd65Smrg    </row>
9909e7bcd65Smrg    <row>
9919e7bcd65Smrg      <entry>UnmapNotify</entry>
9929e7bcd65Smrg      <entry>MapNotify</entry>
9939e7bcd65Smrg    </row>
9949e7bcd65Smrg    <row>
9959e7bcd65Smrg      <entry>MapRequest</entry>
9969e7bcd65Smrg      <entry>ReparentNotify</entry>
9979e7bcd65Smrg    </row>
9989e7bcd65Smrg    <row>
9999e7bcd65Smrg      <entry>ConfigureNotify</entry>
10009e7bcd65Smrg      <entry>ConfigureRequest</entry>
10019e7bcd65Smrg    </row>
10029e7bcd65Smrg    <row>
10039e7bcd65Smrg      <entry>GravityNotify</entry>
10049e7bcd65Smrg      <entry>ResizeRequest</entry>
10059e7bcd65Smrg    </row>
10069e7bcd65Smrg    <row>
10079e7bcd65Smrg      <entry>CirculateNotify</entry>
10089e7bcd65Smrg      <entry>CirculateRequest</entry>
10099e7bcd65Smrg    </row>
10109e7bcd65Smrg    <row>
10119e7bcd65Smrg      <entry>PropertyNotify</entry>
10129e7bcd65Smrg      <entry>SelectionClear</entry>
10139e7bcd65Smrg    </row>
10149e7bcd65Smrg    <row>
10159e7bcd65Smrg      <entry>SelectionRequest</entry>
10169e7bcd65Smrg      <entry>SelectionNotify</entry>
10179e7bcd65Smrg    </row>
10189e7bcd65Smrg    <row>
10199e7bcd65Smrg      <entry>ColormapNotify</entry>
10209e7bcd65Smrg      <entry>ClientMessage</entry>
10219e7bcd65Smrg    </row>
10229e7bcd65Smrg  </tbody>
10239e7bcd65Smrg  </tgroup>
10249e7bcd65Smrg</informaltable>
10259e7bcd65Smrg
10269e7bcd65Smrg<para><emphasis role='strong'>Examples</emphasis></para>
10279e7bcd65Smrg
10289e7bcd65Smrg<itemizedlist spacing='compact'>
10299e7bcd65Smrg  <listitem>
10309e7bcd65Smrg    <para>
10319e7bcd65SmrgAlways put more specific events in the table before more general ones:
10329e7bcd65Smrg    </para>
10339e7bcd65Smrg<literallayout >
10349e7bcd65Smrg    Shift &lt;Btn1Down&gt; : twas()\n\
10359e7bcd65Smrg    &lt;Btn1Down&gt; : brillig()
10369e7bcd65Smrg</literallayout>
10379e7bcd65Smrg  </listitem>
10389e7bcd65Smrg  <listitem>
10399e7bcd65Smrg    <para>
10409e7bcd65SmrgFor double-click on Button1 Up with Shift, use this specification:
10419e7bcd65Smrg    </para>
10429e7bcd65Smrg    <literallayout >
10439e7bcd65SmrgShift&lt;Btn1Up&gt;(2) : and()
10449e7bcd65Smrg</literallayout>
10459e7bcd65Smrg  </listitem>
10469e7bcd65Smrg  <listitem>
10479e7bcd65Smrg    <para>
10489e7bcd65SmrgThis is equivalent to the following line with appropriate timers set
10499e7bcd65Smrgbetween events:
10509e7bcd65Smrg    </para>
10519e7bcd65Smrg    <literallayout >
10529e7bcd65SmrgShift&lt;Btn1Down&gt;,Shift&lt;Btn1Up&gt;,Shift&lt;Btn1Down&gt;,Shift&lt;Btn1Up&gt; : and()
10539e7bcd65Smrg</literallayout>
10549e7bcd65Smrg  </listitem>
10559e7bcd65Smrg  <listitem>
10569e7bcd65Smrg    <para>
10579e7bcd65SmrgFor double-click on Button1 Down with Shift, use this specification:
10589e7bcd65Smrg    </para>
10599e7bcd65Smrg    <literallayout >
10609e7bcd65SmrgShift&lt;Btn1Down&gt;(2) : the()
10619e7bcd65Smrg</literallayout>
10629e7bcd65Smrg  </listitem>
10639e7bcd65Smrg  <listitem>
10649e7bcd65Smrg    <para>
10659e7bcd65SmrgThis is equivalent to the following line with appropriate timers set
10669e7bcd65Smrgbetween events:
10679e7bcd65Smrg    </para>
10689e7bcd65Smrg    <literallayout >
10699e7bcd65SmrgShift&lt;Btn1Down&gt;,Shift&lt;Btn1Up&gt;,Shift&lt;Btn1Down&gt; : the()
10709e7bcd65Smrg</literallayout>
10719e7bcd65Smrg  </listitem>
10729e7bcd65Smrg  <listitem>
10739e7bcd65Smrg    <para>
10749e7bcd65SmrgMouse motion is always discarded when it occurs between events in a table
10759e7bcd65Smrgwhere no motion event is specified:
10769e7bcd65Smrg    </para>
10779e7bcd65Smrg    <literallayout >
10789e7bcd65Smrg&lt;Btn1Down&gt;,&lt;Btn1Up&gt; : slithy()
10799e7bcd65Smrg</literallayout>
10809e7bcd65Smrg    <para>
10819e7bcd65SmrgThis is taken, even if the pointer moves a bit between the down and
10829e7bcd65Smrgup events.
10839e7bcd65SmrgSimilarly, any motion event specified in a translation matches any number
10849e7bcd65Smrgof motion events.
10859e7bcd65SmrgIf the motion event causes an action procedure to be invoked,
10869e7bcd65Smrgthe procedure is invoked after each motion event.
10879e7bcd65Smrg    </para>
10889e7bcd65Smrg  </listitem>
10899e7bcd65Smrg  <listitem>
10909e7bcd65Smrg    <para>
10919e7bcd65SmrgIf an event sequence consists of a sequence of events that is also a
10929e7bcd65Smrgnoninitial subsequence of another translation,
10939e7bcd65Smrgit is not taken if it occurs in the context of the longer sequence.
10949e7bcd65SmrgThis occurs mostly in sequences like the following:
10959e7bcd65Smrg    </para>
10969e7bcd65Smrg    <literallayout >
10979e7bcd65Smrg&lt;Btn1Down&gt;,&lt;Btn1Up&gt; : toves()\n\
10989e7bcd65Smrg&lt;Btn1Up&gt; :  did()
10999e7bcd65Smrg</literallayout>
11009e7bcd65Smrg    <para>
11019e7bcd65SmrgThe second translation is taken only if the button release is not
11029e7bcd65Smrgpreceded by a button press or if there are intervening events between the
11039e7bcd65Smrgpress and the release.
11049e7bcd65SmrgBe particularly aware of this when using the repeat notation, above,
11059e7bcd65Smrgwith buttons and keys,
11069e7bcd65Smrgbecause their expansion includes additional events;
11079e7bcd65Smrgand when specifying motion events, because they are implicitly included
11089e7bcd65Smrgbetween any two other events.
11099e7bcd65SmrgIn particular,
11109e7bcd65Smrgpointer motion and double-click translations cannot coexist in the same
11119e7bcd65Smrgtranslation table.
11129e7bcd65Smrg    </para>
11139e7bcd65Smrg  </listitem>
11149e7bcd65Smrg  <listitem>
11159e7bcd65Smrg    <para>
11169e7bcd65SmrgFor single click on Button1 Up with Shift and Meta, use this specification:
11179e7bcd65Smrg    </para>
11189e7bcd65Smrg  </listitem>
11199e7bcd65Smrg  <listitem>
11209e7bcd65Smrg    <literallayout >
11219e7bcd65SmrgShift Meta &lt;Btn1Down&gt;, Shift Meta&lt;Btn1Up&gt;: gyre()
11229e7bcd65Smrg</literallayout>
11239e7bcd65Smrg  </listitem>
11249e7bcd65Smrg  <listitem>
11259e7bcd65Smrg    <para>
11269e7bcd65SmrgFor multiple clicks greater or equal to a minimum number,
11279e7bcd65Smrga plus sign (+) may be appended to the final (rightmost)
11289e7bcd65Smrgcount in an event sequence.  The actions will be invoked
11299e7bcd65Smrgon the <emphasis remap='I'>count</emphasis>-th click and each subsequent one arriving
11309e7bcd65Smrgwithin the multi-click time interval.  For example:
11319e7bcd65Smrg    </para>
11329e7bcd65Smrg    <literallayout >
11339e7bcd65SmrgShift &lt;Btn1Up&gt;(2+) : and()
11349e7bcd65Smrg</literallayout>
11359e7bcd65Smrg  </listitem>
11369e7bcd65Smrg  <listitem>
11379e7bcd65Smrg    <para>
11389e7bcd65SmrgTo indicate
11399e7bcd65Smrg<function>EnterNotify</function>
11409e7bcd65Smrgwith any modifiers, use this specification:
11419e7bcd65Smrg    </para>
11429e7bcd65Smrg    <literallayout >
11439e7bcd65Smrg&lt;Enter&gt; : gimble()
11449e7bcd65Smrg</literallayout>
11459e7bcd65Smrg  </listitem>
11469e7bcd65Smrg  <listitem>
11479e7bcd65Smrg    <para>
11489e7bcd65SmrgTo indicate
11499e7bcd65Smrg<function>EnterNotify</function>
11509e7bcd65Smrgwith no modifiers, use this specification:
11519e7bcd65Smrg    </para>
11529e7bcd65Smrg    <literallayout >
11539e7bcd65SmrgNone &lt;Enter&gt; : in()
11549e7bcd65Smrg</literallayout>
11559e7bcd65Smrg  </listitem>
11569e7bcd65Smrg  <listitem>
11579e7bcd65Smrg    <para>
11589e7bcd65SmrgTo indicate
11599e7bcd65Smrg<function>EnterNotify</function>
11609e7bcd65Smrgwith Button1 Down and Button2 Up and "don't care" about
11619e7bcd65Smrgthe other modifiers, use this specification:
11629e7bcd65Smrg    </para>
11639e7bcd65Smrg    <literallayout >
11649e7bcd65SmrgButton1 ~Button2 &lt;Enter&gt; : the()
11659e7bcd65Smrg</literallayout>
11669e7bcd65Smrg  </listitem>
11679e7bcd65Smrg  <listitem>
11689e7bcd65Smrg    <para>
11699e7bcd65SmrgTo indicate
11709e7bcd65Smrg<function>EnterNotify</function>
11719e7bcd65Smrgwith Button1 down and Button2 down exclusively, use this specification:
11729e7bcd65Smrg    </para>
11739e7bcd65Smrg    <literallayout >
11749e7bcd65Smrg! Button1 Button2 &lt;Enter&gt; : wabe()
11759e7bcd65Smrg</literallayout>
11769e7bcd65Smrg    <para>
11779e7bcd65SmrgYou do not need to use a tilde (~) with an exclamation point (!).
11789e7bcd65Smrg    </para>
11799e7bcd65Smrg  </listitem>
11809e7bcd65Smrg</itemizedlist>
11819e7bcd65Smrg</appendix>
1182