1 |
578 |
markom |
'\"
|
2 |
|
|
'\" Copyright (c) 1996 Sun Microsystems, Inc.
|
3 |
|
|
'\" Copyright (c) 1998 by Scriptics Corporation.
|
4 |
|
|
'\"
|
5 |
|
|
'\" See the file "license.terms" for information on usage and redistribution
|
6 |
|
|
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
7 |
|
|
'\"
|
8 |
|
|
'\" RCS: @(#) $Id: event.n,v 1.1.1.1 2002-01-16 10:25:48 markom Exp $
|
9 |
|
|
'\"
|
10 |
|
|
.so man.macros
|
11 |
|
|
.TH event n 8.0 Tk "Tk Built-In Commands"
|
12 |
|
|
.BS
|
13 |
|
|
'\" Note: do not modify the .SH NAME line immediately below!
|
14 |
|
|
.SH NAME
|
15 |
|
|
event \- Miscellaneous event facilities: define virtual events and generate events
|
16 |
|
|
.SH SYNOPSIS
|
17 |
|
|
\fBevent\fI option \fR?\fIarg arg ...\fR?
|
18 |
|
|
.BE
|
19 |
|
|
|
20 |
|
|
.SH DESCRIPTION
|
21 |
|
|
.PP
|
22 |
|
|
The \fBevent\fR command provides several facilities for dealing with
|
23 |
|
|
window system events, such as defining virtual events and synthesizing
|
24 |
|
|
events. The command has several different forms, determined by the
|
25 |
|
|
first argument. The following forms are currently supported:
|
26 |
|
|
.TP
|
27 |
|
|
\fBevent add <<\fIvirtual\fB>>\fI sequence \fR?\fIsequence ...\fR?
|
28 |
|
|
Associates the virtual event \fIvirtual\fR with the physical
|
29 |
|
|
event sequence(s) given by the \fIsequence\fR arguments, so that
|
30 |
|
|
the virtual event will trigger whenever any one of the \fIsequence\fRs
|
31 |
|
|
occurs.
|
32 |
|
|
\fIVirtual\fR may be any string value and \fIsequence\fR may have
|
33 |
|
|
any of the values allowed for the \fIsequence\fR argument to the
|
34 |
|
|
\fBbind\fR command.
|
35 |
|
|
If \fIvirtual\fR is already defined, the new physical event sequences
|
36 |
|
|
add to the existing sequences for the event.
|
37 |
|
|
.TP
|
38 |
|
|
\fBevent delete <<\fIvirtual\fB>> \fR?\fIsequence\fR \fIsequence ...\fR?
|
39 |
|
|
Deletes each of the \fIsequence\fRs from those associated with
|
40 |
|
|
the virtual event given by \fIvirtual\fR.
|
41 |
|
|
\fIVirtual\fR may be any string value and \fIsequence\fR may have
|
42 |
|
|
any of the values allowed for the \fIsequence\fR argument to the
|
43 |
|
|
\fBbind\fR command.
|
44 |
|
|
Any \fIsequence\fRs not currently associated with \fIvirtual\fR
|
45 |
|
|
are ignored.
|
46 |
|
|
If no \fIsequence\fR argument is provided, all physical event sequences
|
47 |
|
|
are removed for \fIvirtual\fR, so that the virtual event will not
|
48 |
|
|
trigger anymore.
|
49 |
|
|
.TP
|
50 |
|
|
\fBevent generate \fIwindow event \fR?\fIoption value option value ...\fR?
|
51 |
|
|
Generates a window event and arranges for it to be processed just as if
|
52 |
|
|
it had come from the window system.
|
53 |
|
|
\fIWindow\fR gives the path name of the window for which the event
|
54 |
|
|
.VS
|
55 |
|
|
will be generated; it may also be an identifier (such as returned by
|
56 |
|
|
\fBwinfo id\fR) as long as it is for a window in the current application.
|
57 |
|
|
.VE
|
58 |
|
|
\fIEvent\fR provides a basic description of
|
59 |
|
|
the event, such as \fB\fR or \fB<>\fR.
|
60 |
|
|
\fIEvent\fR may have any of the forms allowed for the \fIsequence\fR
|
61 |
|
|
argument of the \fBbind\fR command except that it must consist
|
62 |
|
|
of a single event pattern, not a sequence.
|
63 |
|
|
\fIOption-value\fR pairs may be used to specify additional
|
64 |
|
|
attributes of the event, such as the x and y mouse position; see
|
65 |
|
|
EVENT FIELDS below. If the \fB\-when\fR option is not specified, the
|
66 |
|
|
event is processed immediately: all of the handlers for the event
|
67 |
|
|
will complete before the \fBevent generate\fR command returns.
|
68 |
|
|
If the \fB\-when\fR option is specified then it determines when the
|
69 |
|
|
event is processed.
|
70 |
|
|
.TP
|
71 |
|
|
\fBevent info \fR?<<\fIvirtual\fB>>\fR?
|
72 |
|
|
Returns information about virtual events.
|
73 |
|
|
If the \fB<<\fIvirtual\fB>>\fR argument is omitted, the return value
|
74 |
|
|
is a list of all the virtual events that are currently defined.
|
75 |
|
|
If \fB<<\fIvirtual\fB>>\fR is specified then the return value is
|
76 |
|
|
a list whose elements are the physical event sequences currently
|
77 |
|
|
defined for the given virtual event; if the virtual event is
|
78 |
|
|
not defined then an empty string is returned.
|
79 |
|
|
|
80 |
|
|
.SH "EVENT FIELDS"
|
81 |
|
|
.PP
|
82 |
|
|
The following options are supported for the \fBevent generate\fR
|
83 |
|
|
command. These correspond to the ``%'' expansions
|
84 |
|
|
allowed in binding scripts for the \fBbind\fR command.
|
85 |
|
|
.TP
|
86 |
|
|
\fB\-above\fI window\fR
|
87 |
|
|
\fIWindow\fR specifies the \fIabove\fR field for the event,
|
88 |
|
|
either as a window path name or as an integer window id.
|
89 |
|
|
Valid for \fBConfigure\fR events.
|
90 |
|
|
Corresponds to the \fB%a\fR substitution for binding scripts.
|
91 |
|
|
.TP
|
92 |
|
|
\fB\-borderwidth\fI size\fR
|
93 |
|
|
\fISize\fR must be a screen distance; it specifies the
|
94 |
|
|
\fIborder_width\fR field for the event.
|
95 |
|
|
Valid for \fBConfigure\fR events.
|
96 |
|
|
Corresponds to the \fB%B\fR substitution for binding scripts.
|
97 |
|
|
.TP
|
98 |
|
|
\fB\-button\fI number\fR
|
99 |
|
|
\fINumber\fR must be an integer; it specifies the \fIdetail\fR field
|
100 |
|
|
for a \fBButtonPress\fR or \fBButtonRelease\fR event, overriding
|
101 |
|
|
any button number provided in the base \fIevent\fR argument.
|
102 |
|
|
Corresponds to the \fB%b\fR substitution for binding scripts.
|
103 |
|
|
.TP
|
104 |
|
|
\fB\-count\fI number\fR
|
105 |
|
|
\fINumber\fR must be an integer; it specifies the \fIcount\fR field
|
106 |
|
|
for the event. Valid for \fBExpose\fR events.
|
107 |
|
|
Corresponds to the \fB%c\fR substitution for binding scripts.
|
108 |
|
|
.TP
|
109 |
|
|
\fB\-delta\fI number\fR
|
110 |
|
|
.VS
|
111 |
|
|
\fINumber\fR must be an integer; it specifies the \fIdelta\fR field
|
112 |
|
|
for the \fBMouseWheel\fR event. The \fIdelta\fR refers to the
|
113 |
|
|
direction and magnitude the mouse wheel was rotated. Note the value
|
114 |
|
|
is not a screen distance but are units of motion in the mouse wheel.
|
115 |
|
|
Typically these values are multiples of 120. For example, 120 should
|
116 |
|
|
scroll the text widget up 4 lines and -240 would scroll the text
|
117 |
|
|
widget down 8 lines. Of course, other widgets may define different
|
118 |
|
|
behaviors for mouse wheel motion. This field corresponds to the
|
119 |
|
|
\fB%D\fR substitution for binding scripts.
|
120 |
|
|
.VE
|
121 |
|
|
.TP
|
122 |
|
|
\fB\-detail\fI detail\fR
|
123 |
|
|
\fIDetail\fR specifies the \fIdetail\fR field for the event
|
124 |
|
|
and must be one of the following:
|
125 |
|
|
.RS
|
126 |
|
|
.DS
|
127 |
|
|
.ta 6c
|
128 |
|
|
\fBNotifyAncestor NotifyNonlinearVirtual
|
129 |
|
|
NotifyDetailNone NotifyPointer
|
130 |
|
|
NotifyInferior NotifyPointerRoot
|
131 |
|
|
NotifyNonlinear NotifyVirtual\fR
|
132 |
|
|
.DE
|
133 |
|
|
Valid for \fBEnter\fR, \fBLeave\fR, \fBFocusIn\fR and
|
134 |
|
|
\fBFocusOut\fR events.
|
135 |
|
|
Corresponds to the \fB%d\fR substitution for binding scripts.
|
136 |
|
|
.RE
|
137 |
|
|
.TP
|
138 |
|
|
\fB\-focus\fI boolean\fR
|
139 |
|
|
\fIBoolean\fR must be a boolean value; it specifies the \fIfocus\fR
|
140 |
|
|
field for the event.
|
141 |
|
|
Valid for \fBEnter\fR and \fBLeave\fR events.
|
142 |
|
|
Corresponds to the \fB%f\fR substitution for binding scripts.
|
143 |
|
|
.TP
|
144 |
|
|
\fB\-height\fI size\fR
|
145 |
|
|
\fISize\fR must be a screen distance; it specifies the \fIheight\fR
|
146 |
|
|
field for the event. Valid for \fBConfigure\fR events.
|
147 |
|
|
Corresponds to the \fB%h\fR substitution for binding scripts.
|
148 |
|
|
.TP
|
149 |
|
|
\fB\-keycode\fI number\fR
|
150 |
|
|
\fINumber\fR must be an integer; it specifies the \fIkeycode\fR
|
151 |
|
|
field for the event.
|
152 |
|
|
Valid for \fBKeyPress\fR and \fBKeyRelease\fR events.
|
153 |
|
|
Corresponds to the \fB%k\fR substitution for binding scripts.
|
154 |
|
|
.TP
|
155 |
|
|
\fB\-keysym\fI name\fR
|
156 |
|
|
\fIName\fR must be the name of a valid keysym, such as \fBg\fR,
|
157 |
|
|
\fBspace\fR, or \fBReturn\fR; its corresponding
|
158 |
|
|
keycode value is used as the \fIkeycode\fR field for event, overriding
|
159 |
|
|
any detail specified in the base \fIevent\fR argument.
|
160 |
|
|
Valid for \fBKeyPress\fR and \fBKeyRelease\fR events.
|
161 |
|
|
Corresponds to the \fB%K\fR substitution for binding scripts.
|
162 |
|
|
.TP
|
163 |
|
|
\fB\-mode\fI notify\fR
|
164 |
|
|
\fINotify\fR specifies the \fImode\fR field for the event and must be
|
165 |
|
|
one of \fBNotifyNormal\fR, \fBNotifyGrab\fR, \fBNotifyUngrab\fR, or
|
166 |
|
|
\fBNotifyWhileGrabbed\fR.
|
167 |
|
|
Valid for \fBEnter\fR, \fBLeave\fR, \fBFocusIn\fR, and
|
168 |
|
|
\fBFocusOut\fR events.
|
169 |
|
|
Corresponds to the \fB%m\fR substitution for binding scripts.
|
170 |
|
|
.TP
|
171 |
|
|
\fB\-override\fI boolean\fR
|
172 |
|
|
\fIBoolean\fR must be a boolean value; it specifies the
|
173 |
|
|
\fIoverride_redirect\fR field for the event.
|
174 |
|
|
Valid for \fBMap\fR, \fBReparent\fR, and \fBConfigure\fR events.
|
175 |
|
|
Corresponds to the \fB%o\fR substitution for binding scripts.
|
176 |
|
|
.TP
|
177 |
|
|
\fB\-place\fI where\fR
|
178 |
|
|
\fIWhere\fR specifies the \fIplace\fR field for the event; it must be
|
179 |
|
|
either \fBPlaceOnTop\fR or \fBPlaceOnBottom\fR.
|
180 |
|
|
Valid for \fBCirculate\fR events.
|
181 |
|
|
Corresponds to the \fB%p\fR substitution for binding scripts.
|
182 |
|
|
.TP
|
183 |
|
|
\fB\-root\fI window\fR
|
184 |
|
|
\fIWindow\fR must be either a window path name or an integer window
|
185 |
|
|
identifier; it specifies the \fIroot\fR field for the event.
|
186 |
|
|
Valid for \fBKeyPress\fR, \fBKeyRelease\fR, \fBButtonPress\fR,
|
187 |
|
|
\fBButtonRelease\fR, \fBEnter\fR, \fBLeave\fR, and \fBMotion\fR
|
188 |
|
|
events.
|
189 |
|
|
Corresponds to the \fB%R\fR substitution for binding scripts.
|
190 |
|
|
.TP
|
191 |
|
|
\fB\-rootx\fI coord\fR
|
192 |
|
|
\fICoord\fR must be a screen distance; it specifies the \fIx_root\fR
|
193 |
|
|
field for the event.
|
194 |
|
|
Valid for \fBKeyPress\fR, \fBKeyRelease\fR, \fBButtonPress\fR,
|
195 |
|
|
\fBButtonRelease\fR, \fBEnter\fR, \fBLeave\fR, and \fBMotion\fR
|
196 |
|
|
events. Corresponds to the \fB%X\fR substitution for binding scripts.
|
197 |
|
|
.TP
|
198 |
|
|
\fB\-rooty\fI coord\fR
|
199 |
|
|
\fICoord\fR must be a screen distance; it specifies th \fIy_root\fR
|
200 |
|
|
field for the event.
|
201 |
|
|
Valid for \fBKeyPress\fR, \fBKeyRelease\fR, \fBButtonPress\fR,
|
202 |
|
|
\fBButtonRelease\fR, \fBEnter\fR, \fBLeave\fR, and \fBMotion\fR
|
203 |
|
|
events.
|
204 |
|
|
Corresponds to the \fB%Y\fR substitution for binding scripts.
|
205 |
|
|
.TP
|
206 |
|
|
\fB\-sendevent\fI boolean\fR
|
207 |
|
|
\fBBoolean\fR must be a boolean value; it specifies the \fIsend_event\fR
|
208 |
|
|
field for the event. Valid for all events. Corresponds to the
|
209 |
|
|
\fB%E\fR substitution for binding scripts.
|
210 |
|
|
.TP
|
211 |
|
|
\fB\-serial\fI number\fR
|
212 |
|
|
\fINumber\fR must be an integer; it specifies the \fIserial\fR field
|
213 |
|
|
for the event. Valid for all events.
|
214 |
|
|
Corresponds to the \fB%#\fR substitution for binding scripts.
|
215 |
|
|
.TP
|
216 |
|
|
\fB\-state\fI state\fR
|
217 |
|
|
\fIState\fR specifies the \fIstate\fR field for the event.
|
218 |
|
|
For \fBKeyPress\fR, \fBKeyRelease\fR, \fBButtonPress\fR,
|
219 |
|
|
\fBButtonRelease\fR, \fBEnter\fR, \fBLeave\fR, and \fBMotion\fR events
|
220 |
|
|
it must be an integer value.
|
221 |
|
|
For \fBVisibility\fR events it must be one of \fBVisibilityUnobscured\fR,
|
222 |
|
|
\fBVisibilityPartiallyObscured\fR, or \fBVisibilityFullyObscured\fR.
|
223 |
|
|
This option overrides any modifiers such as \fBMeta\fR or \fBControl\fR
|
224 |
|
|
specified in the base \fIevent\fR.
|
225 |
|
|
Corresponds to the \fB%s\fR substitution for binding scripts.
|
226 |
|
|
.TP
|
227 |
|
|
\fB\-subwindow\fI window\fR
|
228 |
|
|
\fIWindow\fR specifies the \fIsubwindow\fR field for the event, either
|
229 |
|
|
as a path name for a Tk widget or as an integer window identifier.
|
230 |
|
|
Valid for \fBKeyPress\fR, \fBKeyRelease\fR, \fBButtonPress\fR,
|
231 |
|
|
\fBButtonRelease\fR, \fBEnter\fR, \fBLeave\fR, and \fBMotion\fR events.
|
232 |
|
|
Similar to \fB%S\fR substitution for binding scripts.
|
233 |
|
|
.TP
|
234 |
|
|
\fB\-time\fI integer\fR
|
235 |
|
|
\fIInteger\fR must be an integer value; it specifies the \fItime\fR field
|
236 |
|
|
for the event.
|
237 |
|
|
Valid for \fBKeyPress\fR, \fBKeyRelease\fR, \fBButtonPress\fR,
|
238 |
|
|
\fBButtonRelease\fR, \fBEnter\fR, \fBLeave\fR, \fBMotion\fR,
|
239 |
|
|
and \fBProperty\fR events.
|
240 |
|
|
Corresponds to the \fB%t\fR substitution for binding scripts.
|
241 |
|
|
.TP
|
242 |
|
|
\fB\-width\fI size\fR
|
243 |
|
|
\fISize\fR must be a screen distance; it specifies the \fIwidth\fR field
|
244 |
|
|
for the event.
|
245 |
|
|
Valid for \fBConfigure\fR events.
|
246 |
|
|
Corresponds to the \fB%w\fR substitution for binding scripts.
|
247 |
|
|
.TP
|
248 |
|
|
\fB\-when\fI when\fR
|
249 |
|
|
\fIWhen\fR determines when the event will be processed; it must have one
|
250 |
|
|
of the following values:
|
251 |
|
|
.RS
|
252 |
|
|
.IP \fBnow\fR 10
|
253 |
|
|
Process the event immediately, before the command returns.
|
254 |
|
|
This also happens if the \fB\-when\fR option is omitted.
|
255 |
|
|
.IP \fBtail\fR 10
|
256 |
|
|
Place the event on Tcl's event queue behind any events already
|
257 |
|
|
queued for this application.
|
258 |
|
|
.IP \fBhead\fR 10
|
259 |
|
|
Place the event at the front of Tcl's event queue, so that it
|
260 |
|
|
will be handled before any other events already queued.
|
261 |
|
|
.IP \fBmark\fR 10
|
262 |
|
|
Place the event at the front of Tcl's event queue but behind any
|
263 |
|
|
other events already queued with \fB\-when mark\fR.
|
264 |
|
|
This option is useful when generating a series of events that should
|
265 |
|
|
be processed in order but at the front of the queue.
|
266 |
|
|
.RE
|
267 |
|
|
.TP
|
268 |
|
|
\fB\-x\fI coord\fR
|
269 |
|
|
\fICoord\fR must be a screen distance; it specifies the \fIx\fR field
|
270 |
|
|
for the event.
|
271 |
|
|
Valid for \fBKeyPress\fR, \fBKeyRelease\fR, \fBButtonPress\fR,
|
272 |
|
|
\fBButtonRelease\fR, \fBMotion\fR, \fBEnter\fR, \fBLeave\fR,
|
273 |
|
|
\fBExpose\fR, \fBConfigure\fR, \fBGravity\fR, and \fBReparent\fR
|
274 |
|
|
events.
|
275 |
|
|
Corresponds to the the \fB%x\fR substitution for binding scripts.
|
276 |
|
|
.TP
|
277 |
|
|
\fB\-y\fI coord\fR
|
278 |
|
|
\fICoord\fR must be a screen distance; it specifies the \fIy\fR
|
279 |
|
|
field for the event.
|
280 |
|
|
Valid for \fBKeyPress\fR, \fBKeyRelease\fR, \fBButtonPress\fR,
|
281 |
|
|
\fBButtonRelease\fR, \fBMotion\fR, \fBEnter\fR, \fBLeave\fR,
|
282 |
|
|
\fBExpose\fR, \fBConfigure\fR, \fBGravity\fR, and \fBReparent\fR
|
283 |
|
|
events.
|
284 |
|
|
Corresponds to the the \fB%y\fR substitution for binding scripts.
|
285 |
|
|
.PP
|
286 |
|
|
Any options that are not specified when generating an event are filled
|
287 |
|
|
with the value 0, except for \fIserial\fR, which is filled with the
|
288 |
|
|
next X event serial number.
|
289 |
|
|
|
290 |
|
|
.SH "VIRTUAL EVENT EXAMPLES"
|
291 |
|
|
.PP
|
292 |
|
|
In order for a virtual event binding to trigger, two things must
|
293 |
|
|
happen. First, the virtual event must be defined with the
|
294 |
|
|
\fBevent add\fR command. Second, a binding must be created for
|
295 |
|
|
the virtual event with the \fBbind\fR command.
|
296 |
|
|
Consider the following virtual event definitions:
|
297 |
|
|
.CS
|
298 |
|
|
event add <>
|
299 |
|
|
event add <>
|
300 |
|
|
event add <>
|
301 |
|
|
event add <>
|
302 |
|
|
.CE
|
303 |
|
|
In the \fBbind\fR command, a virtual event can be bound like any other
|
304 |
|
|
builtin event type as follows:
|
305 |
|
|
.CS
|
306 |
|
|
bind Entry <> {%W insert [selection get]}
|
307 |
|
|
.CE
|
308 |
|
|
The double angle brackets are used to specify that a virtual event is being
|
309 |
|
|
bound. If the user types Control-y or presses button 2, or if
|
310 |
|
|
a \fB<>\fR virtual event is synthesized with \fBevent generate\fR,
|
311 |
|
|
then the \fB<>\fR binding will be invoked.
|
312 |
|
|
.PP
|
313 |
|
|
If a virtual binding has the exact same sequence as a separate
|
314 |
|
|
physical binding, then the physical binding will take precedence.
|
315 |
|
|
Consider the following example:
|
316 |
|
|
.CS
|
317 |
|
|
event add <>
|
318 |
|
|
bind Entry {puts Control-y}
|
319 |
|
|
bind Entry <> {puts Paste}
|
320 |
|
|
.CE
|
321 |
|
|
When the user types Control-y the \fB\fR binding
|
322 |
|
|
will be invoked, because a physical event is considered
|
323 |
|
|
more specific than a virtual event, all other things being equal.
|
324 |
|
|
However, when the user types Meta-Control-y the
|
325 |
|
|
\fB<>\fR binding will be invoked, because the
|
326 |
|
|
\fBMeta\fR modifier in the physical pattern associated with the
|
327 |
|
|
virtual binding is more specific than the \fB sequence for
|
328 |
|
|
the physical event.
|
329 |
|
|
.PP
|
330 |
|
|
Bindings on a virtual event may be created before the virtual event exists.
|
331 |
|
|
Indeed, the virtual event never actually needs to be defined, for instance,
|
332 |
|
|
on platforms where the specific virtual event would meaningless or
|
333 |
|
|
ungeneratable.
|
334 |
|
|
.PP
|
335 |
|
|
When a definition of a virtual event changes at run time, all windows
|
336 |
|
|
will respond immediately to the new definition.
|
337 |
|
|
Starting from the preceding example, if the following code is executed:
|
338 |
|
|
.CS
|
339 |
|
|
bind {}
|
340 |
|
|
event add <>
|
341 |
|
|
.CE
|
342 |
|
|
the behavior will change such in two ways. First, the shadowed
|
343 |
|
|
\fB<>\fR binding will emerge.
|
344 |
|
|
Typing Control-y will no longer invoke the \fB\fR binding,
|
345 |
|
|
but instead invoke the virtual event \fB<>\fR. Second,
|
346 |
|
|
pressing the F6 key will now also invoke the \fB<>\fR binding.
|
347 |
|
|
|
348 |
|
|
.SH "SEE ALSO"
|
349 |
|
|
bind
|
350 |
|
|
|
351 |
|
|
.SH KEYWORDS
|
352 |
|
|
event, binding, define, handle, virtual event
|