1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783
|
.\" $Xorg: appB,v 1.3 2000/08/17 19:42:48 cpqbld Exp $
.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994
.\" X Consortium
.\"
.\" Permission is hereby granted, free of charge, to any person obtaining
.\" a copy of this software and associated documentation files (the
.\" "Software"), to deal in the Software without restriction, including
.\" without limitation the rights to use, copy, modify, merge, publish,
.\" distribute, sublicense, and/or sell copies of the Software, and to
.\" permit persons to whom the Software is furnished to do so, subject to
.\" the following conditions:
.\"
.\" The above copyright notice and this permission notice shall be included
.\" in all copies or substantial portions of the Software.
.\"
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR
.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
.\" OTHER DEALINGS IN THE SOFTWARE.
.\"
.\" Except as contained in this notice, the name of the X Consortium shall
.\" not be used in advertising or otherwise to promote the sale, use or
.\" other dealings in this Software without prior written authorization
.\" from the X Consortium.
.\"
.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994
.\" Digital Equipment Corporation, Maynard, Massachusetts.
.\"
.\" Permission to use, copy, modify and distribute this documentation for any
.\" purpose and without fee is hereby granted, provided that the above copyright
.\" notice appears in all copies and that both that copyright notice and this
.\" permission notice appear in supporting documentation, and that the name of
.\" Digital not be used in in advertising or publicity pertaining
.\" to distribution of the software without specific, written prior permission.
.\" Digital makes no representations about the suitability of the
.\" software described herein for any purpose.
.\" It is provided ``as is'' without express or implied warranty.
.\"
.bp
\&
.sp 1
.ce 3
\s+1\fBAppendix B\fP\s-1
\s+1\fBTranslation Table Syntax\fP\s-1
.sp 2
.LP
.XS
\fBAppendix B \(em Translation Table Syntax\fP
.XE
.IN "Translation tables"
.SH
Notation
.LP
Syntax is specified in EBNF notation with the following conventions:
.TS
l l.
[ a ] Means either nothing or ``a''
{ a } Means zero or more occurrences of ``a''
( a | b ) Means either ``a'' or ``b''
\\\\n Is the newline character
.TE
.LP
All terminals are enclosed in double quotation marks (`` '').
Informal descriptions are enclosed in angle brackets (< >).
.SH
Syntax
.LP
The syntax of a translation table is
.TS
l l .
translationTable = [ directive ] { production }
directive = ( ``#replace'' | ``#override'' | ``#augment'' ) ``\\\\n''
production = lhs ``:'' rhs ``\\\\n''
lhs = ( event | keyseq ) { ``,'' (event | keyseq) }
keyseq = ``"'' keychar {keychar} ``"''
keychar = [ ``^'' | ``$'' | ``\\\\'' ] <ISO Latin 1 character>
event = [modifier_list] ``<''event_type``>'' [ ``('' count[``+''] ``)'' ] {detail}
modifier_list = ( [``!''] [``:''] {modifier} ) | ``None''
modifier = [``~''] modifier_name
count = (``1'' | ``2'' | ``3'' | ``4'' | ...)
modifier_name = ``@'' <keysym> | <see ModifierNames table below>
event_type = <see Event Types table below>
detail = <event specific details>
rhs = { name ``('' [params] ``)'' }
name = namechar { namechar }
namechar = { ``a''-``z'' | ``A''-``Z'' | ``0''-``9'' | ``_'' | ``-'' }
params = string {``,'' string}
string = quoted_string | unquoted_string
quoted_string = ``"'' {<Latin 1 character> | escape_char} [``\\\\\\\\'' ] ``"''
escape_char = ``\\\\"''
unquoted_string = {<Latin 1 character except space, tab, ``,'', ``\\\\n'', ``)''>}
.TE
.LP
The \fIparams\fP field is parsed into a list of
.PN String
values that will be passed to the named action procedure. A
\fIquoted string\fP 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''.
.SH
Modifier Names
.LP
The modifier field is used to specify standard X keyboard and button
modifier mask bits.
Modifiers are legal on event types
.PN KeyPress ,
.PN KeyRelease ,
.PN ButtonPress ,
.PN ButtonRelease ,
.PN MotionNotify ,
.PN EnterNotify ,
.PN LeaveNotify ,
and their abbreviations.
An error is generated when a translation table
that contains modifiers for any other events is parsed.
.IP \(bu 5
If the modifier list has no entries and is not ``None'',
it means ``don't care'' on all modifiers.
.IP \(bu 5
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.
.IP \(bu 5
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.
.IP \(bu 5
If a modifier is preceded by a tilde (~),
it means that that modifier must not be asserted.
.IP \(bu 5
If ``None'' is specified, it means no modifiers can be asserted.
.IP \(bu 5
If a colon (:) is specified at the beginning of the modifier list,
it directs the \*(xI 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 \fI\*(xP\fP, 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''.
.IP \(bu 5
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.
.IP \(bu 5
If a colon (:) is not specified,
no standard modifiers are applied.
Then, for example, ``<Key>A'' and ``<Key>a'' are equivalent.
.LP
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:
.LP
.Ds 0
.TA 2.5i
.ta 2.5i
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
.De
.LP
The use of ``None'' for a modifier list is identical to the use
of an exclamation point with no modifers.
.LP
.TS H
lw(1i) lw(1i) lw(3i).
_
.sp 6p
Modifier Abbreviation Meaning
.sp 6p
_
.sp 6p
.R
.TH
Ctrl c Control modifier bit
Shift s Shift modifier bit
Lock l Lock modifier bit
Meta m Meta key modifier
Hyper h Hyper key modifier
Super su Super key modifier
Alt a Alt key modifier
Mod1 Mod1 modifier bit
Mod2 Mod2 modifier bit
Mod3 Mod3 modifier bit
Mod4 Mod4 modifier bit
Mod5 Mod5 modifier bit
Button1 Button1 modifier bit
Button2 Button2 modifier bit
Button3 Button3 modifier bit
Button4 Button4 modifier bit
Button5 Button5 modifier bit
None No modifiers
Any Any modifier combination
.sp 6p
_
.TE
.LP
.IN "key modifier"
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.
.LP
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.
.LP
A modifier_list/KeySym combination in a translation matches a
modifiers/KeyCode combination in an event in the following ways:
.IP 1. 5
If a colon (:) is used, the \*(xI call the display's
.PN XtKeyProc
with the KeyCode and modifiers.
To match, (\fImodifiers\fP & ~\fImodifiers_return\fP) must equal \fImodifier_list\fP, and
\fIkeysym_return\fP must equal the given KeySym.
.IP 2. 5
If (:) is not used, the \*(xI mask off all don't-care bits from the
modifiers.
This value must be equal to \fImodifier_list\fP.
Then, for each possible combination of
don't-care modifiers in the modifier list, the \*(xI call the display's
.PN XtKeyProc
with the KeyCode and that combination ORed with the cared-about modifier bits
from the event.
\fIKeysym_return\fP must match the KeySym in the translation.
.SH
Event Types
.LP
The event-type field describes XEvent types.
In addition to the standard
Xlib symbolic event type names, the following event type synonyms
are defined:
.TS H
lw(1.5i) lw(3i).
_
.sp 6p
Type Meaning
.sp 6p
_
.sp 6p
.TH
Key T{
.PN KeyPress
T}
KeyDown T{
.PN KeyPress
T}
KeyUp T{
.PN KeyRelease
T}
BtnDown T{
.PN ButtonPress
T}
BtnUp T{
.PN ButtonRelease
T}
Motion T{
.PN MotionNotify
T}
PtrMoved T{
.PN MotionNotify
T}
MouseMoved T{
.PN MotionNotify
T}
Enter T{
.PN EnterNotify
T}
EnterWindow T{
.PN EnterNotify
T}
Leave T{
.PN LeaveNotify
T}
LeaveWindow T{
.PN LeaveNotify
T}
FocusIn T{
.PN FocusIn
T}
FocusOut T{
.PN FocusOut
T}
Keymap T{
.PN KeymapNotify
T}
Expose T{
.PN Expose
T}
GrExp T{
.PN GraphicsExpose
T}
NoExp T{
.PN NoExpose
T}
Visible T{
.PN VisibilityNotify
T}
Create T{
.PN CreateNotify
T}
Destroy T{
.PN DestroyNotify
T}
Unmap T{
.PN UnmapNotify
T}
Map T{
.PN MapNotify
T}
MapReq T{
.PN MapRequest
T}
Reparent T{
.PN ReparentNotify
T}
Configure T{
.PN ConfigureNotify
T}
ConfigureReq T{
.PN ConfigureRequest
T}
Grav T{
.PN GravityNotify
T}
ResReq T{
.PN ResizeRequest
T}
Circ T{
.PN CirculateNotify
T}
CircReq T{
.PN CirculateRequest
T}
Prop T{
.PN PropertyNotify
T}
SelClr T{
.PN SelectionClear
T}
SelReq T{
.PN SelectionRequest
T}
Select T{
.PN SelectionNotify
T}
Clrmap T{
.PN ColormapNotify
T}
Message T{
.PN ClientMessage
T}
Mapping T{
.PN MappingNotify
T}
.sp 6p
_
.TE
The supported abbreviations are:
.TS H
lw(1.5i) lw(1.25i) lw(1.75i).
_
.sp 6p
Abbreviation Event Type Including
.sp 6p
_
.sp 6p
.TH
.R
Ctrl T{
.PN KeyPress
T} with Control modifier
Meta T{
.PN KeyPress
T} with Meta modifier
Shift T{
.PN KeyPress
T} with Shift modifier
Btn1Down T{
.PN ButtonPress
T} with Button1 detail
Btn1Up T{
.PN ButtonRelease
T} with Button1 detail
Btn2Down T{
.PN ButtonPress
T} with Button2 detail
Btn2Up T{
.PN ButtonRelease
T} with Button2 detail
Btn3Down T{
.PN ButtonPress
T} with Button3 detail
Btn3Up T{
.PN ButtonRelease
T} with Button3 detail
Btn4Down T{
.PN ButtonPress
T} with Button4 detail
Btn4Up T{
.PN ButtonRelease
T} with Button4 detail
Btn5Down T{
.PN ButtonPress
T} with Button5 detail
Btn5Up T{
.PN ButtonRelease
T} with Button5 detail
BtnMotion T{
.PN MotionNotify
T} with any button modifier
Btn1Motion T{
.PN MotionNotify
T} with Button1 modifier
Btn2Motion T{
.PN MotionNotify
T} with Button2 modifier
Btn3Motion T{
.PN MotionNotify
T} with Button3 modifier
Btn4Motion T{
.PN MotionNotify
T} with Button4 modifier
Btn5Motion T{
.PN MotionNotify
T} with Button5 modifier
.sp 6p
_
.TE
.sp
.LP
The detail field is event-specific and normally corresponds to the
detail field of the corresponding event as described
by \fI\*(xP\fP, Section 11. The detail field is supported
for the following event types:
.LP
.TS H
l l .
_
.sp 6p
Event Event Field
.sp 6p
_
.TH
.sp 6p
KeyPress KeySym from event \fIdetail\fP (keycode)
KeyRelease KeySym from event \fIdetail\fP (keycode)
ButtonPress button from event \fIdetail\fP
ButtonRelease button from event \fIdetail\fP
MotionNotify event \fIdetail\fP
EnterNotify event \fImode\fP
LeaveNotify event \fImode\fP
FocusIn event \fImode\fP
FocusOut event \fImode\fP
PropertyNotify \fIatom\fP
SelectionClear \fIselection\fP
SelectionRequest \fIselection\fP
SelectionNotify \fIselection\fP
ClientMessage \fItype\fP
MappingNotify \fIrequest\fP
.sp 6p
_
.TE
.LP
If the event type is
.PN KeyPress
or
.PN KeyRelease ,
the detail field
specifies a KeySym name in standard format which is matched against
the event as described above, for example, <Key>A.
.LP
For the
.PN PropertyNotify ,
.PN SelectionClear ,
.PN SelectionRequest ,
.PN SelectionNotify ,
and
.PN ClientMessage
events the detail field is specified
as an atom name; for example, <Message>WM_PROTOCOLS. For the
.PN MotionNotify ,
.PN EnterNotify ,
.PN LeaveNotify ,
.PN FocusIn ,
.PN FocusOut ,
and
.PN MappingNotify
events, either the symbolic constants as defined by
\fI\*(xP\fP, Section 11,
or the numeric values may be specified.
.LP
If no detail field is specified, then any value in the event detail is
accepted as a match.
.LP
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
.Pn < X11/keysymdef.h >
with the ``XK_'' prefix removed.
.LP
.SH
Canonical Representation
.LP
Every translation table has a unique, canonical text representation. This
representation is passed to a widget's
.PN display_accelerator
procedure to describe the accelerators installed on that widget.
The canonical representation of a translation table is (see also
``Syntax'')
.TS
l l .
translationTable = { production }
production = lhs ``:'' rhs ``\\\\n''
lhs = event { ``,'' event }
event = [modifier_list] ``<''event_type``>'' [ ``('' count[``+''] ``)'' ] {detail}
modifier_list = [``!''] [``:''] {modifier}
modifier = [``~''] modifier_name
count = (``1'' | ``2'' | ``3'' | ``4'' | ...)
modifier_name = ``@'' <keysym> | <see canonical modifier names below>
event_type = <see canonical event types below>
detail = <event-specific details>
rhs = { name ``('' [params] ``)'' }
name = namechar { namechar }
namechar = { ``a''-``z'' | ``A''-``Z'' | ``0''-``9'' | ``_'' | ``-'' }
params = string {``,'' string}
string = quoted_string
quoted_string = ``"'' {<Latin 1 character> | escape_char} [``\\\\\\\\'' ] ``"''
escape_char = ``\\\\"''
.TE
.LP
The canonical modifier names are
.LP
.Ds
.TA 1i 2.5i
.ta 1i 2.5i
Ctrl Mod1 Button1
Shift Mod2 Button2
Lock Mod3 Button3
Mod4 Button4
Mod5 Button5
.De
.LP
The canonical event types are
.IP
.TS
l l.
T{
.PN KeyPress
T} T{
.PN KeyRelease
T}
T{
.PN ButtonPress
T} T{
.PN ButtonRelease
T}
T{
.PN MotionNotify
T} T{
.PN EnterNotify
T}
T{
.PN LeaveNotify
T} T{
.PN FocusIn
T}
T{
.PN FocusOut
T} T{
.PN KeymapNotify
T}
T{
.PN Expose
T} T{
.PN GraphicsExpose,
T}
T{
.PN NoExpose
T} T{
.PN VisibilityNotify
T}
T{
.PN CreateNotify
T} T{
.PN DestroyNotify
T}
T{
.PN UnmapNotify
T} T{
.PN MapNotify
T}
T{
.PN MapRequest
T} T{
.PN ReparentNotify
T}
T{
.PN ConfigureNotify
T} T{
.PN ConfigureRequest
T}
T{
.PN GravityNotify
T} T{
.PN ResizeRequest
T}
T{
.PN CirculateNotify
T} T{
.PN CirculateRequest
T}
T{
.PN PropertyNotify
T} T{
.PN SelectionClear
T}
T{
.PN SelectionRequest
T} T{
.PN SelectionNotify
T}
T{
.PN ColormapNotify
T} T{
.PN ClientMessage
T}
.TE
.LP
.SH
Examples
.LP
.IP \(bu 5
Always put more specific events in the table before more general ones:
.LP
.Ds
Shift <Btn1Down> : twas()\\n\\
<Btn1Down> : brillig()
.De
.LP
.IP \(bu 5
For double-click on Button1 Up with Shift, use this specification:
.IP
.Ds
Shift<Btn1Up>(2) : and()
.DE
.IP
This is equivalent to the following line with appropriate timers set
between events:
.IP
.Ds
Shift<Btn1Down>,Shift<Btn1Up>,Shift<Btn1Down>,Shift<Btn1Up> : and()
.De
.IP \(bu 5
For double-click on Button1 Down with Shift, use this specification:
.IP
.Ds
Shift<Btn1Down>(2) : the()
.De
.IP
This is equivalent to the following line with appropriate timers set
between events:
.IP
.Ds
Shift<Btn1Down>,Shift<Btn1Up>,Shift<Btn1Down> : the()
.De
.IP \(bu 5
Mouse motion is always discarded when it occurs between events in a table
where no motion event is specified:
.IP
.Ds
<Btn1Down>,<Btn1Up> : slithy()
.De
.IP
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.
.IP \(bu 5
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:
.IP
.Ds
<Btn1Down>,<Btn1Up> : toves()\\n\\
<Btn1Up> : did()
.De
.IP
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.
.IP \(bu 5
For single click on Button1 Up with Shift and Meta, use this specification:
.IP
.Ds
Shift Meta <Btn1Down>, Shift Meta<Btn1Up>: gyre()
.De
.IP \(bu 5
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 \fIcount\fP-th click and each subsequent one arriving
within the multi-click time interval. For example:
.IP
.Ds
Shift <Btn1Up>(2+) : and()
.De
.IP \(bu 5
To indicate
.PN EnterNotify
with any modifiers, use this specification:
.IP
.Ds
<Enter> : gimble()
.De
.IP \(bu 5
To indicate
.PN EnterNotify
with no modifiers, use this specification:
.IP
.Ds
None <Enter> : in()
.De
.IP \(bu 5
To indicate
.PN EnterNotify
with Button1 Down and Button2 Up and ``don't care'' about
the other modifiers, use this specification:
.IP
.Ds
Button1 ~Button2 <Enter> : the()
.De
.IP \(bu 5
To indicate
.PN EnterNotify
with Button1 down and Button2 down exclusively, use this specification:
.IP
.Ds
! Button1 Button2 <Enter> : wabe()
.De
.IP
You do not need to use a tilde (~) with an exclamation point (!).
|