diff options
author | Matt Dew <marcoz@osource.org> | 2011-12-28 20:34:51 -0700 |
---|---|---|
committer | Matt Dew <marcoz@osource.org> | 2011-12-28 20:34:51 -0700 |
commit | b8818e1233b75c6bd47a6d2197fabf3a036a2119 (patch) | |
tree | b2d5563cee3b4dcda51b5dd5c7af52c058260fe8 /specs/appB.xml | |
parent | fd0da0d44a8501edaac3be7fac9449ad730d8bf4 (diff) |
Initial docbook conversion.
Diffstat (limited to 'specs/appB.xml')
-rw-r--r-- | specs/appB.xml | 1181 |
1 files changed, 1181 insertions, 0 deletions
diff --git a/specs/appB.xml b/specs/appB.xml new file mode 100644 index 0000000..0afac11 --- /dev/null +++ b/specs/appB.xml @@ -0,0 +1,1181 @@ +<appendix id='Translation_Table_Syntax'> +<title>Translation Table Syntax</title> +<para><emphasis role='strong'>Notation</emphasis></para> + +<para> +Syntax is specified in EBNF notation with the following conventions: +</para> + +<informaltable frame='none'> + <?dbfo keep-together="auto" ?> + <tgroup cols='2' align='left' colsep='0' rowsep='0'> + <colspec colwidth='0.1*' colname='c1'/> + <colspec colwidth='1.0*' colname='c2'/> + <tbody> + <row> + <entry>[ a ]</entry> + <entry>Means either nothing or "a"</entry> + </row> + <row> + <entry>{ a }</entry> + <entry>Means zero or more occurrences of "a"</entry> + </row> + <row> + <entry>( a | b )</entry> + <entry>Means either "a" or "b"</entry> + </row> + <row> + <entry>\\n</entry> + <entry>Is the newline character</entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +All terminals are enclosed in double quotation marks (" "). +Informal descriptions are enclosed in angle brackets (< >). +Syntax +</para> + +<para>The syntax of a translation table is</para> +<informaltable frame='none'> + <?dbfo keep-together="auto" ?> + <tgroup cols='2' align='left' colsep='0' rowsep='0'> + <colspec colwidth='0.2*' colname='c1'/> + <colspec colwidth='1.0*' colname='c2'/> + <tbody> + <row> + <entry>translationTable</entry> + <entry>= [ directive ] { production }</entry> + </row> + <row> + <entry>directive</entry> + <entry>= ( "#replace" | "#override" | "#augment" ) "\\\\n"</entry> + </row> + <row> + <entry>production</entry> + <entry>= lhs ":" rhs "\\\\n"</entry> + </row> + <row> + <entry>lhs</entry> + <entry>= ( event | keyseq ) { "," (event | keyseq) }</entry> + </row> + <row> + <entry>keyseq</entry> + <entry>= """ keychar {keychar} """</entry> + </row> + <row> + <entry>keychar</entry> + <entry>= [ "^" | "$" | "\\\\" ] <ISO Latin 1 character></entry> + </row> + <row> + <entry>event</entry> + <entry>= [modifier_list] "<"event_type">" [ "(" count["+"] ")" ] {detail}</entry> + </row> + <row> + <entry>modifier_list</entry> + <entry>= ( ["!"] [":"] {modifier} ) | "None"</entry> + </row> + <row> + <entry>modifier</entry> + <entry>= ["~"] modifier_name</entry> + </row> + <row> + <entry>count</entry> + <entry>= ("1" | "2" | "3" | "4" | ...)</entry> + </row> + <row> + <entry>modifier_name</entry> + <entry>= "@" <keysym> | <see ModifierNames table below></entry> + </row> + <row> + <entry>event_type</entry> + <entry>= <see Event Types table below></entry> + </row> + <row> + <entry>detail</entry> + <entry>= <event specific details></entry> + </row> + <row> + <entry>rhs</entry> + <entry>= { name "(" [params] ")" }</entry> + </row> + <row> + <entry>name</entry> + <entry>= namechar { namechar }</entry> + </row> + <row> + <entry>namechar</entry> + <entry>= { "a"-"z" | "A"-"Z" | "0"-"9" | "_" | "-" }</entry> + </row> + <row> + <entry>params</entry> + <entry>= string {"," string}</entry> + </row> + <row> + <entry>string</entry> + <entry>= quoted_string | unquoted_string</entry> + </row> + <row> + <entry>quoted_string</entry> + <entry>= <quote>"</quote> {<Latin 1 character> | escape_char} ["\\\\" ] <quote>"</quote></entry> + </row> + <row> + <entry>escape_char</entry> + <entry>= "\\""</entry> + </row> + <row> + <entry>unquoted_string</entry> + <entry>= {<Latin 1 character except space, tab, ",", "\\n", ")">}</entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +The <emphasis remap='I'>params</emphasis> field is parsed into a list of +<function>String</function> +values that will be passed to the named action procedure. A +<emphasis remap='I'>quoted string</emphasis> may contain an embedded quotation mark if the +quotation mark is preceded by a single backslash (\). The +three-character sequence "\\\"" is interpreted as "single backslash +followed by end-of-string". +</para> +<para><emphasis role='strong'>Modifier Names</emphasis></para> + +<para> +The modifier field is used to specify standard X keyboard and button +modifier mask bits. +Modifiers are legal on event types +<function>KeyPress</function>, +<function>KeyRelease</function>, +<function>ButtonPress</function>, +<function>ButtonRelease</function>, +<function>MotionNotify</function>, +<function>EnterNotify</function>, +<function>LeaveNotify</function>, +and their abbreviations. +An error is generated when a translation table +that contains modifiers for any other events is parsed. +</para> + +<itemizedlist spacing='compact'> + <listitem> + <para> +If the modifier list has no entries and is not "None", +it means "don't care" on all modifiers. + </para> + </listitem> + <listitem> + <para> +If an exclamation point (!) is specified at the beginning +of the modifier list, +it means that the listed modifiers must be in the correct state +and no other modifiers can be asserted. + </para> + </listitem> + <listitem> + <para> +If any modifiers are specified +and an exclamation point (!) is not specified, +it means that the listed modifiers must be in the +correct state and "don't care" about any other modifiers. + </para> + </listitem> + <listitem> + <para> +If a modifier is preceded by a tilde (~), +it means that that modifier must not be asserted. + </para> + </listitem> + <listitem> + <para> +If "None" is specified, it means no modifiers can be asserted. + </para> + </listitem> + <listitem> + <para> +If a colon (:) is specified at the beginning of the modifier list, +it directs the Intrinsics to apply any standard modifiers in the +event to map the event keycode into a KeySym. +The default standard modifiers are Shift and Lock, +with the interpretation as defined in <emphasis remap='I'>X Window +System Protocol</emphasis>, Section 5. +The resulting KeySym must exactly match the specified +KeySym, and the nonstandard modifiers in the event must match the +modifier list. +For example, ":<Key>a" is distinct from ":<Key>A", +and ":Shift<Key>A" is distinct from ":<Key>A". + </para> + </listitem> + <listitem> + <para> +If both an exclamation point (!) and a colon (:) are specified at +the beginning of the modifier list, it means that the listed +modifiers must be in the correct state and that no other modifiers +except the standard modifiers can be asserted. Any standard +modifiers in the event are applied as for colon (:) above. + </para> + </listitem> + <listitem> + <para> +If a colon (:) is not specified, +no standard modifiers are applied. +Then, for example, "<Key>A" and "<Key>a" are equivalent. + </para> + </listitem> +</itemizedlist> + +<para> +In key sequences, +a circumflex (^) is an abbreviation for the Control modifier, +a dollar sign ($) is an abbreviation for Meta, +and a backslash (\) can be used to quote any +character, in particular a double quote ("), a circumflex (^), +a dollar sign ($), and another backslash (\). +Briefly: +</para> + +<literallayout > +No modifiers: None <event> detail +Any modifiers: <event> detail +Only these modifiers: ! mod1 mod2 <event> detail +These modifiers and any others: mod1 mod2 <event> detail +</literallayout> + +<para> +The use of "None" for a modifier list is identical to the use +of an exclamation point with no modifers. +</para> + +<informaltable frame='topbot'> + <?dbfo keep-together="auto" ?> + <tgroup cols='3' align='left' colsep='0' rowsep='0'> + <colspec colwidth='1.0*' colname='c1'/> + <colspec colwidth='1.0*' colname='c2'/> + <colspec colwidth='1.0*' colname='c3'/> + <thead> + <row rowsep='1'> + <entry>Modifier</entry> + <entry>Abbreviation</entry> + <entry>Meaning</entry> + </row> + </thead> + <tbody> + <row> + <entry>Ctrl</entry> + <entry>c</entry> + <entry>Control modifier bit</entry> + </row> + <row> + <entry>Shift</entry> + <entry>s</entry> + <entry>Shift modifier bit</entry> + </row> + <row> + <entry>Lock</entry> + <entry>l</entry> + <entry>Lock modifier bit</entry> + </row> + <row> + <entry>Meta</entry> + <entry>m</entry> + <entry>Meta key modifier</entry> + </row> + <row> + <entry>Hyper</entry> + <entry>h</entry> + <entry>Hyper key modifier</entry> + </row> + <row> + <entry>Super</entry> + <entry>su</entry> + <entry>Super key modifier</entry> + </row> + <row> + <entry>Alt</entry> + <entry>a</entry> + <entry>Alt key modifier</entry> + </row> + <row> + <entry>Mod1</entry> + <entry></entry> + <entry>Mod1 modifier bit</entry> + </row> + <row> + <entry>Mod2</entry> + <entry></entry> + <entry>Mod2 modifier bit</entry> + </row> + <row> + <entry>Mod3</entry> + <entry></entry> + <entry>Mod3 modifier bit</entry> + </row> + <row> + <entry>Mod4</entry> + <entry></entry> + <entry>Mod4 modifier bit</entry> + </row> + <row> + <entry>Mod5</entry> + <entry></entry> + <entry>Mod5 modifier bit</entry> + </row> + <row> + <entry>Button1</entry> + <entry></entry> + <entry>Button1 modifier bit</entry> + </row> + <row> + <entry>Button2</entry> + <entry></entry> + <entry>Button2 modifier bit</entry> + </row> + <row> + <entry>Button3</entry> + <entry></entry> + <entry>Button3 modifier bit</entry> + </row> + <row> + <entry>Button4</entry> + <entry></entry> + <entry>Button4 modifier bit</entry> + </row> + <row> + <entry>Button5</entry> + <entry></entry> + <entry>Button5 modifier bit</entry> + </row> + <row> + <entry>None</entry> + <entry></entry> + <entry>No modifiers</entry> + </row> + <row> + <entry>Any</entry> + <entry></entry> + <entry>Any modifier combination</entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +A key modifier is any modifier bit one of whose corresponding KeyCodes +contains the corresponding left or right KeySym. +For example, +"m" or "Meta" means any modifier bit mapping to a KeyCode +whose KeySym list contains XK_Meta_L or XK_Meta_R. +Note that this interpretation is for each display, +not global or even for each application context. +The Control, Shift, and Lock modifier names refer +explicitly to the corresponding modifier bits; +there is no additional interpretation of KeySyms for these modifiers. +</para> + +<para> +Because it is possible to associate arbitrary KeySyms with modifiers, the set of +key modifiers is extensible. The "@" <keysym> syntax means any +modifier bit whose corresponding KeyCode contains the specified KeySym name. +</para> + +<para> +A modifier_list/KeySym combination in a translation matches a +modifiers/KeyCode combination in an event in the following ways: +</para> + +<orderedlist> + <listitem> + <para> +If a colon (:) is used, the Intrinsics call the display's +<xref linkend='XtKeyProc' xrefstyle='select: title'/> +with the KeyCode and modifiers. +To match, (<emphasis remap='I'>modifiers</emphasis> & ~<emphasis remap='I'>modifiers_return</emphasis>) must equal <emphasis remap='I'>modifier_list</emphasis>, and +<emphasis remap='I'>keysym_return</emphasis> must equal the given KeySym. + </para> + </listitem> + <listitem> + <para> +If (:) is not used, the Intrinsics mask off all don't-care bits from the +modifiers. +This value must be equal to <emphasis remap='I'>modifier_list</emphasis>. +Then, for each possible combination of +don't-care modifiers in the modifier list, the Intrinsics call the display's +<xref linkend='XtKeyProc' xrefstyle='select: title'/> +with the KeyCode and that combination ORed with the cared-about modifier bits +from the event. +<emphasis remap='I'>Keysym_return</emphasis> must match the KeySym in the translation. + </para> + </listitem> +</orderedlist> + +<para><emphasis role='strong'>Event Types</emphasis></para> + +<para> +The event-type field describes XEvent types. +In addition to the standard +Xlib symbolic event type names, the following event type synonyms +are defined: +</para> + +<informaltable frame='topbot'> + <?dbfo keep-together="auto" ?> + <tgroup cols='2' align='left' colsep='0' rowsep='0'> + <colspec colwidth='1.0*' colname='c1'/> + <colspec colwidth='1.0*' colname='c2'/> + <thead> + <row rowsep='1'> + <entry>Type</entry> + <entry>Meaning</entry> + </row> + </thead> + <tbody> + <row> + <entry>Key</entry> + <entry><function>KeyPress</function></entry> + </row> + <row> + <entry>KeyDown</entry> + <entry><function>KeyPress</function></entry> + </row> + <row> + <entry>KeyUp</entry> + <entry><function>KeyRelease</function></entry> + </row> + <row> + <entry>BtnDown</entry> + <entry><function>ButtonPress</function></entry> + </row> + <row> + <entry>BtnUp</entry> + <entry><function>ButtonRelease</function></entry> + </row> + <row> + <entry>Motion</entry> + <entry><function>MotionNotify</function></entry> + </row> + <row> + <entry>PtrMoved</entry> + <entry><function>MotionNotify</function></entry> + </row> + <row> + <entry>MouseMoved</entry> + <entry><function>MotionNotify</function></entry> + </row> + <row> + <entry>Enter</entry> + <entry><function>EnterNotify</function></entry> + </row> + <row> + <entry>EnterWindow</entry> + <entry><function>EnterNotify</function></entry> + </row> + <row> + <entry>Leave</entry> + <entry><function>LeaveNotify</function></entry> + </row> + <row> + <entry>LeaveWindow</entry> + <entry><function>LeaveNotify</function></entry> + </row> + <row> + <entry>FocusIn</entry> + <entry><function>FocusIn</function></entry> + </row> + <row> + <entry>FocusOut</entry> + <entry><function>FocusOut</function></entry> + </row> + <row> + <entry>Keymap</entry> + <entry><function>KeymapNotify</function></entry> + </row> + <row> + <entry>Expose</entry> + <entry><function>Expose</function></entry> + </row> + <row> + <entry>GrExp</entry> + <entry><function>GraphicsExpose</function></entry> + </row> + <row> + <entry>NoExp</entry> + <entry><function>NoExpose</function></entry> + </row> + <row> + <entry>Visible</entry> + <entry><function>VisibilityNotify</function></entry> + </row> + <row> + <entry>Create</entry> + <entry><function>CreateNotify</function></entry> + </row> + <row> + <entry>Destroy</entry> + <entry><function>DestroyNotify</function></entry> + </row> + <row> + <entry>Unmap</entry> + <entry><function>UnmapNotify</function></entry> + </row> + <row> + <entry>Map</entry> + <entry><function>MapNotify</function></entry> + </row> + <row> + <entry>MapReq</entry> + <entry><function>MapRequest</function></entry> + </row> + <row> + <entry>Reparent</entry> + <entry><function>ReparentNotify</function></entry> + </row> + <row> + <entry>Configure</entry> + <entry><function>ConfigureNotify</function></entry> + </row> + <row> + <entry>ConfigureReq</entry> + <entry><function>ConfigureRequest</function></entry> + </row> + <row> + <entry>Grav</entry> + <entry><function>GravityNotify</function></entry> + </row> + <row> + <entry>ResReq</entry> + <entry><function>ResizeRequest</function></entry> + </row> + <row> + <entry>Circ</entry> + <entry><function>CirculateNotify</function></entry> + </row> + <row> + <entry>CircReq</entry> + <entry><function>CirculateRequest</function></entry> + </row> + <row> + <entry>Prop</entry> + <entry><function>PropertyNotify</function></entry> + </row> + <row> + <entry>SelClr</entry> + <entry><function>SelectionClear</function></entry> + </row> + <row> + <entry>SelReq</entry> + <entry><function>SelectionRequest</function></entry> + </row> + <row> + <entry>Select</entry> + <entry><function>SelectionNotify</function></entry> + </row> + <row> + <entry>Clrmap</entry> + <entry><function>ColormapNotify</function></entry> + </row> + <row> + <entry>Message</entry> + <entry><function>ClientMessage</function></entry> + </row> + <row> + <entry>Mapping</entry> + <entry><function>MappingNotify</function></entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para>The supported abbreviations are:</para> + +<informaltable frame='topbot'> + <?dbfo keep-together="auto" ?> + <tgroup cols='3' align='left' rowsep='0' colsep='0'> + <colspec colwidth='1.0*' colname='c1'/> + <colspec colwidth='1.0*' colname='c2'/> + <colspec colwidth='1.0*' colname='c3'/> + <thead> + <row rowsep='1'> + <entry>Abbreviation</entry> + <entry>Event Type</entry> + <entry>Including</entry> + </row> + </thead> + <tbody> + <row> + <entry>Ctrl</entry> + <entry><function>KeyPress</function></entry> + <entry>with Control modifier</entry> + </row> + <row> + <entry>Meta</entry> + <entry><function>KeyPress</function></entry> + <entry>with Meta modifier</entry> + </row> + <row> + <entry>Shift</entry> + <entry><function>KeyPress</function></entry> + <entry>with Shift modifier</entry> + </row> + <row> + <entry>Btn1Down</entry> + <entry><function>ButtonPress</function></entry> + <entry>with Button1 detail</entry> + </row> + <row> + <entry>Btn1Up</entry> + <entry><function>ButtonRelease</function></entry> + <entry>with Button1 detail</entry> + </row> + <row> + <entry>Btn2Down</entry> + <entry><function>ButtonPress</function></entry> + <entry>with Button2 detail</entry> + </row> + <row> + <entry>Btn2Up</entry> + <entry><function>ButtonRelease</function></entry> + <entry>with Button2 detail</entry> + </row> + <row> + <entry>Btn3Down</entry> + <entry><function>ButtonPress</function></entry> + <entry>with Button3 detail</entry> + </row> + <row> + <entry>Btn3Up</entry> + <entry><function>ButtonRelease</function></entry> + <entry>with Button3 detail</entry> + </row> + <row> + <entry>Btn4Down</entry> + <entry><function>ButtonPress</function></entry> + <entry>with Button4 detail</entry> + </row> + <row> + <entry>Btn4Up</entry> + <entry><function>ButtonRelease</function></entry> + <entry>with Button4 detail</entry> + </row> + <row> + <entry>Btn5Down</entry> + <entry><function>ButtonPress</function></entry> + <entry>with Button5 detail</entry> + </row> + <row> + <entry>Btn5Up</entry> + <entry><function>ButtonRelease</function></entry> + <entry>with Button5 detail</entry> + </row> + <row> + <entry>BtnMotion</entry> + <entry><function>MotionNotify</function></entry> + <entry>with any button modifier</entry> + </row> + <row> + <entry>Btn1Motion</entry> + <entry><function>MotionNotify</function></entry> + <entry>with Button1 modifier</entry> + </row> + <row> + <entry>Btn2Motion</entry> + <entry><function>MotionNotify</function></entry> + <entry>with Button2 modifier</entry> + </row> + <row> + <entry>Btn3Motion</entry> + <entry><function>MotionNotify</function></entry> + <entry>with Button3 modifier</entry> + </row> + <row> + <entry>Btn4Motion</entry> + <entry><function>MotionNotify</function></entry> + <entry>with Button4 modifier</entry> + </row> + <row> + <entry>Btn5Motion</entry> + <entry><function>MotionNotify</function></entry> + <entry>with Button5 modifier</entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +The detail field is event-specific and normally corresponds to the +detail field of the corresponding event as described +by <emphasis remap='I'>X Window System Protocol</emphasis>, Section 11. +The detail field is supported for the following event types: +</para> + +<informaltable frame='none'> + <?dbfo keep-together="auto" ?> + <tgroup cols='2' align='left' rowsep='0' colsep='0'> + <colspec colwidth='0.5*' colname='c1'/> + <colspec colwidth='1.0*' colname='c2'/> + <tbody> + <row> + <entry>KeyPress</entry> + <entry>KeySym from event <emphasis>detail</emphasis> (keycode)</entry> + </row> + <row> + <entry>KeyRelease</entry> + <entry>KeySym from event <emphasis>detail</emphasis> (keycode)</entry> + </row> + <row> + <entry>ButtonPress</entry> + <entry>button from event <emphasis>detail</emphasis></entry> + </row> + <row> + <entry>ButtonRelease</entry> + <entry>button from event <emphasis>detail</emphasis></entry> + </row> + <row> + <entry>MotionNotify</entry> + <entry>event <emphasis>detail</emphasis></entry> + </row> + <row> + <entry>EnterNotify</entry> + <entry>event <emphasis>mode</emphasis></entry> + </row> + <row> + <entry>LeaveNotify</entry> + <entry>event <emphasis>mode</emphasis></entry> + </row> + <row> + <entry>FocusIn</entry> + <entry>event <emphasis>mode</emphasis></entry> + </row> + <row> + <entry>FocusOut</entry> + <entry>event <emphasis>mode</emphasis></entry> + </row> + <row> + <entry>PropertyNotify</entry> + <entry><emphasis>atom</emphasis></entry> + </row> + <row> + <entry>SelectionClear</entry> + <entry><emphasis>selection</emphasis></entry> + </row> + <row> + <entry>SelectionRequest</entry> + <entry><emphasis>selection</emphasis></entry> + </row> + <row> + <entry>SelectionNotify</entry> + <entry><emphasis>selection</emphasis></entry> + </row> + <row> + <entry>ClientMessage</entry> + <entry><emphasis>type</emphasis></entry> + </row> + <row> + <entry>MappingNotify</entry> + <entry><emphasis>request</emphasis></entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +If the event type is +<function>KeyPress</function> +or +<function>KeyRelease</function>, +the detail field +specifies a KeySym name in standard format which is matched against +the event as described above, for example, <Key>A. +</para> + +<para> +For the +<function>PropertyNotify</function>, +<function>SelectionClear</function>, +<function>SelectionRequest</function>, +<function>SelectionNotify</function>, +and +<function>ClientMessage</function> +events the detail field is specified +as an atom name; for example, <Message>WM_PROTOCOLS. For the +<function>MotionNotify</function>, +<function>EnterNotify</function>, +<function>LeaveNotify</function>, +<function>FocusIn</function>, +<function>FocusOut</function>, +and +<function>MappingNotify</function> +events, either the symbolic constants as defined by +<emphasis remap='I'>X Window +System Protocol</emphasis>, Section 11, +or the numeric values may be specified. +</para> + +<para> +If no detail field is specified, then any value in the event detail is +accepted as a match. +</para> + +<para> +A KeySym can be specified as any of the standard KeySym names, +a hexadecimal number prefixed with "0x" or "0X", +an octal number prefixed with "0", or a decimal number. +A KeySym expressed as a single digit is interpreted as the +corresponding Latin 1 KeySym, for example, "0" is the KeySym XK_0. +Other single character KeySyms are treated as literal constants from Latin 1, +for example, "!" is treated as 0x21. +Standard KeySym names are as defined in +<function><X11/keysymdef.h></function> +with the "XK_" prefix removed. +</para> + +<para><emphasis role='strong'>Canonical Representation</emphasis></para> + +<para> +Every translation table has a unique, canonical text representation. This +representation is passed to a widget's +<function>display_accelerator</function> +procedure to describe the accelerators installed on that widget. +The canonical representation of a translation table is (see also +"Syntax") +</para> + +<informaltable frame='none'> + <?dbfo keep-together="auto" ?> + <tgroup cols='2' align='left' colsep='0' rowsep='0'> + <colspec colwidth='0.2*' colname='c1'/> + <colspec colwidth='1.0*' colname='c2'/> + <tbody> + <row> + <entry>translationTable</entry> + <entry>= { production } + </entry> + </row> + <row> + <entry>production</entry> + <entry>= lhs ":" rhs "\\n" + </entry> + </row> + <row> + <entry>lhs</entry> + <entry>=event { "," event } + </entry> + </row> + <row> + <entry>event</entry> + <entry>=[modifier_list] "<"event_type">" [ "(" count["+"] ")" ] {detail} + </entry> + </row> + <row> + <entry>modifier_list</entry> + <entry>= ["!"] [":"] {modifier} + </entry> + </row> + <row> + <entry>modifier</entry> + <entry>= ["˜"] modifier_name + </entry> + </row> + <row> + <entry>count</entry> + <entry>=("1" | "2" | "3" | "4" | ...) + </entry> + </row> + <row> + <entry>modifier_name</entry> + <entry>= "@" <keysym> | <see canonical modifier names below> + </entry> + </row> + <row> + <entry>event_type</entry> + <entry>= <see canonical event types below> + </entry> + </row> + <row> + <entry>detail</entry> + <entry>=<event-specific details> + </entry> + </row> + <row> + <entry>rhs</entry> + <entry>={ name "(" [params] ")" } + </entry> + </row> + <row> + <entry>name</entry> + <entry>=namechar { namechar } + </entry> + </row> + <row> + <entry>namechar</entry> + <entry>= { "a"-"z" | "A"-"Z" | "0"-"9" | "_" | "-" } + </entry> + </row> + <row> + <entry>params</entry> + <entry>=string {"," string} + </entry> + </row> + <row> + <entry>string</entry> + <entry>=quoted_string + </entry> + </row> + <row> + <entry>quoted_string</entry> + <entry>= <quote>"</quote> {<Latin 1 character> | escape_char} ["\\\\" ] <quote>"</quote> + </entry> + </row> + <row> + <entry>escape_char</entry> + <entry>= "\\"" + </entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para>The canonical modifier names are</para> + +<literallayout > + Ctrl Mod1 Button1 + Shift Mod2 Button2 + Lock Mod3 Button3 + Mod4 Button4 + Mod5 Button5 +</literallayout> + +<para>The canonical event types are</para> + +<informaltable frame='none'> + <?dbfo keep-together="auto" ?> + <tgroup cols='2' align='left' colsep='0' rowsep='0'> + <colspec colwidth='1.0*' colname='c1'/> + <colspec colwidth='1.0*' colname='c2'/> + <tbody> + <row> + <entry>KeyPress</entry> + <entry>KeyRelease</entry> + </row> + <row> + <entry>ButtonPress</entry> + <entry>ButtonRelease</entry> + </row> + <row> + <entry>MotionNotify</entry> + <entry>EnterNotify</entry> + </row> + <row> + <entry>LeaveNotify</entry> + <entry>FocusIn</entry> + </row> + <row> + <entry>FocusOut</entry> + <entry>KeymapNotify</entry> + </row> + <row> + <entry>Expose</entry> + <entry>GraphicsExpose,</entry> + </row> + <row> + <entry>NoExpose</entry> + <entry>VisibilityNotify</entry> + </row> + <row> + <entry>CreateNotify</entry> + <entry>DestroyNotify</entry> + </row> + <row> + <entry>UnmapNotify</entry> + <entry>MapNotify</entry> + </row> + <row> + <entry>MapRequest</entry> + <entry>ReparentNotify</entry> + </row> + <row> + <entry>ConfigureNotify</entry> + <entry>ConfigureRequest</entry> + </row> + <row> + <entry>GravityNotify</entry> + <entry>ResizeRequest</entry> + </row> + <row> + <entry>CirculateNotify</entry> + <entry>CirculateRequest</entry> + </row> + <row> + <entry>PropertyNotify</entry> + <entry>SelectionClear</entry> + </row> + <row> + <entry>SelectionRequest</entry> + <entry>SelectionNotify</entry> + </row> + <row> + <entry>ColormapNotify</entry> + <entry>ClientMessage</entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para><emphasis role='strong'>Examples</emphasis></para> + +<itemizedlist spacing='compact'> + <listitem> + <para> +Always put more specific events in the table before more general ones: + </para> +<literallayout > + Shift <Btn1Down> : twas()\n\ + <Btn1Down> : brillig() +</literallayout> + </listitem> + <listitem> + <para> +For double-click on Button1 Up with Shift, use this specification: + </para> + <literallayout > +Shift<Btn1Up>(2) : and() +</literallayout> + </listitem> + <listitem> + <para> +This is equivalent to the following line with appropriate timers set +between events: + </para> + <literallayout > +Shift<Btn1Down>,Shift<Btn1Up>,Shift<Btn1Down>,Shift<Btn1Up> : and() +</literallayout> + </listitem> + <listitem> + <para> +For double-click on Button1 Down with Shift, use this specification: + </para> + <literallayout > +Shift<Btn1Down>(2) : the() +</literallayout> + </listitem> + <listitem> + <para> +This is equivalent to the following line with appropriate timers set +between events: + </para> + <literallayout > +Shift<Btn1Down>,Shift<Btn1Up>,Shift<Btn1Down> : the() +</literallayout> + </listitem> + <listitem> + <para> +Mouse motion is always discarded when it occurs between events in a table +where no motion event is specified: + </para> + <literallayout > +<Btn1Down>,<Btn1Up> : slithy() +</literallayout> + <para> +This is taken, even if the pointer moves a bit between the down and +up events. +Similarly, any motion event specified in a translation matches any number +of motion events. +If the motion event causes an action procedure to be invoked, +the procedure is invoked after each motion event. + </para> + </listitem> + <listitem> + <para> +If an event sequence consists of a sequence of events that is also a +noninitial subsequence of another translation, +it is not taken if it occurs in the context of the longer sequence. +This occurs mostly in sequences like the following: + </para> + <literallayout > +<Btn1Down>,<Btn1Up> : toves()\n\ +<Btn1Up> : did() +</literallayout> + <para> +The second translation is taken only if the button release is not +preceded by a button press or if there are intervening events between the +press and the release. +Be particularly aware of this when using the repeat notation, above, +with buttons and keys, +because their expansion includes additional events; +and when specifying motion events, because they are implicitly included +between any two other events. +In particular, +pointer motion and double-click translations cannot coexist in the same +translation table. + </para> + </listitem> + <listitem> + <para> +For single click on Button1 Up with Shift and Meta, use this specification: + </para> + </listitem> + <listitem> + <literallayout > +Shift Meta <Btn1Down>, Shift Meta<Btn1Up>: gyre() +</literallayout> + </listitem> + <listitem> + <para> +For multiple clicks greater or equal to a minimum number, +a plus sign (+) may be appended to the final (rightmost) +count in an event sequence. The actions will be invoked +on the <emphasis remap='I'>count</emphasis>-th click and each subsequent one arriving +within the multi-click time interval. For example: + </para> + <literallayout > +Shift <Btn1Up>(2+) : and() +</literallayout> + </listitem> + <listitem> + <para> +To indicate +<function>EnterNotify</function> +with any modifiers, use this specification: + </para> + <literallayout > +<Enter> : gimble() +</literallayout> + </listitem> + <listitem> + <para> +To indicate +<function>EnterNotify</function> +with no modifiers, use this specification: + </para> + <literallayout > +None <Enter> : in() +</literallayout> + </listitem> + <listitem> + <para> +To indicate +<function>EnterNotify</function> +with Button1 Down and Button2 Up and "don't care" about +the other modifiers, use this specification: + </para> + <literallayout > +Button1 ~Button2 <Enter> : the() +</literallayout> + </listitem> + <listitem> + <para> +To indicate +<function>EnterNotify</function> +with Button1 down and Button2 down exclusively, use this specification: + </para> + <literallayout > +! Button1 Button2 <Enter> : wabe() +</literallayout> + <para> +You do not need to use a tilde (~) with an exclamation point (!). + </para> + </listitem> +</itemizedlist> +</appendix> |