annotate src/events.h @ 510:5bdbc721d46a

[xemacs-hg @ 2001-05-06 08:33:35 by ben] implement printing the selection when it's selected. force redisplay when set-charset-ccl-program called. if bytecomp or byte-optimize need recompiling, then load the .el version of them first, recompile them, and reload the .elc versions to recompile everything else (so we won't be waiting until the cows come home).
author ben
date Sun, 06 May 2001 08:33:41 +0000
parents 7039e6323819
children 5fd7ba8b56e7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 /* Definitions for the new event model;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 created 16-jul-91 by Jamie Zawinski
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 Copyright (C) 1995, 1996 Ben Wing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 Free Software Foundation; either version 2, or (at your option) any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 XEmacs is distributed in the hope that it will be useful, but WITHOUT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 along with XEmacs; see the file COPYING. If not, write to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 Boston, MA 02111-1307, USA. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23 /* Synched up with: Not in FSF. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
25 #ifndef INCLUDED_events_h_
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
26 #define INCLUDED_events_h_
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 #include "systime.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 /* There is one object called an event_stream. This object contains
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 callback functions for doing the window-system-dependent operations
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 that XEmacs requires.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 If XEmacs is compiled with support for X11 and the X Toolkit, then this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 event_stream structure will contain functions that can cope with input
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 on XEmacs windows on multiple displays, as well as input from dumb tty
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 If it is desired to have XEmacs able to open frames on the displays of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 multiple heterogeneous machines, X11 and SunView, or X11 and NeXT, for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 example, then it will be necessary to construct an event_stream structure
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 that can cope with the given types. Currently, the only implemented
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
43 event_streams are for dumb-ttys, and for X11 plus dumb-ttys,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
44 and for mswindows.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 To implement this for one window system is relatively simple.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 To implement this for multiple window systems is trickier and may
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 not be possible in all situations, but it's been done for X and TTY.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 Note that these callbacks are *NOT* console methods; that's because
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 the routines are not specific to a particular console type but must
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 be able to simultaneously cope with all allowable console types.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 The slots of the event_stream structure:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 next_event_cb A function which fills in an XEmacs_event structure
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 with the next event available. If there is no event
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 available, then this should block.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 IMPORTANT: timer events and especially process
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 events *must not* be returned if there are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 events of other types available; otherwise you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 can end up with an infinite loop in Fdiscard_input().
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 event_pending_cb A function which says whether there are events to be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 read. If called with an argument of 0, then this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 should say whether calling the next_event_cb will
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 block. If called with an argument of 1, then this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 should say whether there are user-generated events
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 pending (that is, keypresses or mouse-clicks). This
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 is used for redisplay optimization, among other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 things. On dumb ttys, these two results are the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 same, but under a window system, they are not.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 If this function is not sure whether there are events
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 to be read, it *must* return 0. Otherwise various
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 undesirable effects will occur, such as redisplay
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 not occurring until the next event occurs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 handle_magic_event_cb XEmacs calls this with an event structure which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 contains window-system dependent information that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 XEmacs doesn't need to know about, but which must
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 happen in order. If the next_event_cb never returns
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 an event of type "magic", this will never be used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 add_timeout_cb Called with an EMACS_TIME, the absolute time at
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 which a wakeup event should be generated; and a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 void *, which is an arbitrary value that will be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 returned in the timeout event. The timeouts
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 generated by this function should be one-shots:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 they fire once and then disappear. This callback
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 should return an int id-number which uniquely
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 identifies this wakeup. If an implementation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 doesn't have microseconds or millisecond
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 granularity, it should round up to the closest
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 value it can deal with.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 remove_timeout_cb Called with an int, the id number of a wakeup to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 discard. This id number must have been returned by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 the add_timeout_cb. If the given wakeup has
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 already expired, this should do nothing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 select_process_cb These callbacks tell the underlying implementation to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 unselect_process_cb add or remove a file descriptor from the list of fds
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 which are polled for inferior-process input. When
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 input becomes available on the given process
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 connection, an event of type "process" should be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 generated.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 select_console_cb These callbacks tell the underlying implementation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 unselect_console_cb to add or remove a console from the list of consoles
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 which are polled for user-input.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 select_device_cb These callbacks are used by Unixoid event loops
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 unselect_device_cb (those that use select() and file descriptors and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 have a separate input fd per device).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 create_stream_pair_cb These callbacks are called by process code to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 delete_stream_pair_cb create and delete a pair of input and output lstreams
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 which are used for subprocess I/O.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 quitp_cb A handler function called from the `QUIT' macro which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 should check whether the quit character has been
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 typed. On systems with SIGIO, this will not be called
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 unless the `sigio_happened' flag is true (it is set
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 from the SIGIO handler).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 XEmacs has its own event structures, which are distinct from the event
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 structures used by X or any other window system. It is the job of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 event_stream layer to translate to this format.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 NOTE: #### All timestamps should be measured as milliseconds since XEmacs
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
133 started. Currently they are raw server timestamps. (The X protocol
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
134 doesn't provide any easy way of translating between server time and
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
135 real process time; yuck.)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 Every event type has the following structures:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 channel Where this event occurred on. This will be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 a frame, device, console, or nil, depending on the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 event type. It is important that an object of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 a more specific type than is actually generated
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 is not substituted -- e.g. there should not be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 a frame inserted when a key-press event occurs,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 because events on dead channels are automatically
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 ignored.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148 Specifically:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 -- for button and mouse-motion events, channel
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 will be a frame. (The translation to a window
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 occurs later.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 -- for keyboard events, channel will be a console.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 Note that fake keyboard events (generated
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 by `character-to-event' or something that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 calls this, such as macros) need to have
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 the selected console stored into them when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 the event is created. This is so that the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 correct console-local variables (e.g. the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 command builder) will get affected.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 -- for timer, process, magic-eval, and eval events,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 channel will be nil.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 -- for misc-user events, channel will be a frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 -- for magic events, channel will be a frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 (usually) or a device.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 timestamp When this event occurred -- if not known, this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 is made up.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 In addition, the following structures are specific to particular event
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 types:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 key_press_event
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 key What keysym this is; an integer or a symbol.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 If this is an integer, it will be in the printing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 ASCII range: >32 and <127.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 modifiers Bucky-bits on that key: control, meta, etc.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
178 Also includes buttons.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 For many keys, Shift is not a bit; that is implicit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 in the keyboard layout.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 button_press_event
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 button_release_event
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 button What button went down or up.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 modifiers Bucky-bits on that button: shift, control, meta, etc.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
186 Also includes other buttons (not the one pressed).
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 x, y Where it was at the button-state-change (in pixels).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 pointer_motion_event
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 x, y Where it was after it moved (in pixels).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 modifiers Bucky-bits down when the motion was detected.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 process_event
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 process the XEmacs "process" object in question
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 timeout_event
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 interval_id The ID returned when the associated call to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 add_timeout_cb() was made
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 ------ the rest of the fields are filled in by XEmacs -----
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 id_number The XEmacs timeout ID for this timeout (more
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 than one timeout event can have the same value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 here, since XEmacs timeouts, as opposed to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 add_timeout_cb() timeouts, can resignal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 themselves)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 function An elisp function to call when this timeout is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 processed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 object The object passed to that function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 eval_event
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 function An elisp function to call with this event object.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 internal_function An unexported function to call with this event
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 object. This allows eval events to call internal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 functions. For a normal eval event, this field
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 will always be 0.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 object Anything.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 This kind of event is used internally; sometimes the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 window system interface would like to inform XEmacs of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 some user action (such as focusing on another frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 but needs that to happen synchronously with the other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 user input, like keypresses. This is useful when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 events are reported through callbacks rather
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 than in the standard event stream.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 misc_user_event
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 function An elisp function to call with this event object.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 internal_function Ignored.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 object Anything.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 button What button went down or up.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 modifiers Bucky-bits on that button: shift, control, meta, etc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 x, y Where it was at the button-state-change (in pixels).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 This is similar to an eval_event, except that it is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 generated by user actions: selections in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 menubar, scrollbar actions, or drag and drop actions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 It is a "command" event, like key and mouse presses
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 (and unlike mouse motion, process output, and enter
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 and leave window hooks). In many ways, eval_events
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 are not the same as keypresses or misc_user_events.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 The button, modifiers, x, and y parts are only used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 by the XEmacs Drag'n'Drop system. Don't depend on their
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 values for other types of misc_user_events.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 magic_event
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 No user-serviceable parts within. This is for things
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 like KeymapNotify and ExposeRegion events and so on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 that XEmacs itself doesn't care about, but which it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 must do something with for proper interaction with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 the window system.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 Magic_events are handled somewhat asynchronously, just
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 like subprocess filters. However, occasionally a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 magic_event needs to be handled synchronously; in that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 case, the asynchronous handling of the magic_event will
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 push an eval_event back onto the queue, which will be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 handled synchronously later. This is one of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 reasons why eval_events exist; I'm not entirely happy
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 with this aspect of this event model.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 magic_eval_event
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 This is like an eval event but its contents are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 not Lisp-accessible. This allows for "internal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 eval events" that call non-Lisp-accessible functions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 Externally, a magic_eval_event just appears as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263 a magic_event; the Lisp programmer need not know
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 anything more.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 Stream pairs description
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 ------------------------
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 Since there are many possible processes/event loop combinations, the event code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 is responsible for creating an appropriate lstream type. The process
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 implementation does not care about that implementation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 The Create stream pair function is passed two void* values, which identify
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 process-dependent 'handles'. The process implementation uses these handles
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 to communicate with child processes. The function must be prepared to receive
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
279 handle types of any process implementation. Since only one process
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 implementation exists in a particular XEmacs configuration, preprocessing
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
281 is a means of compiling in the support for the code which deals with particular
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282 handle types.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284 For example, a unixoid type loop, which relies on file descriptors, may be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 asked to create a pair of streams by a unix-style process implementation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 In this case, the handles passed are unix file descriptors, and the code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 may deal with these directly. Although, the same code may be used on Win32
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 system with X-Windows. In this case, Win32 process implementation passes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 handles of type HANDLE, and the create_stream_pair function must call
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 appropriate function to get file descriptors given HANDLEs, so that these
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291 descriptors may be passed to XtAddInput.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 The handle given may have special denying value, in which case the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 corresponding lstream should not be created.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 The return value of the function is a unique stream identifier. It is used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 by processes implementation, in its platform-independent part. There is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298 the get_process_from_usid function, which returns process object given its
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 USID. The event stream is responsible for converting its internal handle
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 type into USID.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 Example is the TTY event stream. When a file descriptor signals input, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 event loop must determine process to which the input is destined. Thus,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 the implementation uses process input stream file descriptor as USID, by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 simply casting the fd value to USID type.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 There are two special USID values. One, USID_ERROR, indicates that the stream
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 pair cannot be created. The second, USID_DONTHASH, indicates that streams are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 created, but the event stream does not wish to be able to find the process
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 by its USID. Specifically, if an event stream implementation never calls
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311 get_process_from_usid, this value should always be returned, to prevent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312 accumulating useless information on USID to process relationship.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 /* typedef unsigned int USID; in lisp.h */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 #define USID_ERROR ((USID)-1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 #define USID_DONTHASH ((USID)0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 struct event_stream
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322 int (*event_pending_p) (int);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
323 void (*next_event_cb) (Lisp_Event *);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
324 void (*handle_magic_event_cb) (Lisp_Event *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 int (*add_timeout_cb) (EMACS_TIME);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 void (*remove_timeout_cb) (int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 void (*select_console_cb) (struct console *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 void (*unselect_console_cb) (struct console *);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
329 void (*select_process_cb) (Lisp_Process *);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
330 void (*unselect_process_cb) (Lisp_Process *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 void (*quit_p_cb) (void);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
332 void (*force_event_pending) (struct frame* f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333 USID (*create_stream_pair_cb) (void* /* inhandle*/, void* /*outhandle*/ ,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 Lisp_Object* /* instream */,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 Lisp_Object* /* outstream */,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 int /* flags */);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337 USID (*delete_stream_pair_cb) (Lisp_Object /* instream */,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 Lisp_Object /* outstream */);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
339 int (*current_event_timestamp_cb) (struct console *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 /* Flags for create_stream_pair_cb() FLAGS parameter */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 #define STREAM_PTY_FLUSHING 0x0001
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 #define STREAM_NETWORK_CONNECTION 0x0002
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 extern struct event_stream *event_stream;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 typedef enum emacs_event_type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 empty_event,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 key_press_event,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 button_press_event,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 button_release_event,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 pointer_motion_event,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 process_event,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 timeout_event,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 magic_event,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 magic_eval_event,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 eval_event,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 misc_user_event,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 dead_event
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 } emacs_event_type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 #define first_event_type empty_event
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 #define last_event_type dead_event
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 struct key_data
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 Lisp_Object keysym;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
371 int modifiers;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 struct button_data
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 int button;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
377 int modifiers;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 int x, y;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381 struct motion_data
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383 int x, y;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
384 int modifiers;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387 struct process_data
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389 Lisp_Object process;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392 struct timeout_data
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394 int interval_id;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 int id_number;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396 Lisp_Object function;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397 Lisp_Object object;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400 struct eval_data
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402 Lisp_Object function;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403 Lisp_Object object;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406 struct misc_user_data
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 Lisp_Object function;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 Lisp_Object object;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410 int button;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
411 int modifiers;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 int x, y;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 struct magic_eval_data
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 void (*internal_function) (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 Lisp_Object object;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 #if defined (HAVE_X_WINDOWS) && defined(emacs)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 # include <X11/Xlib.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 444
diff changeset
425 #ifdef HAVE_GTK
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 444
diff changeset
426 #include <gdk/gdk.h>
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 444
diff changeset
427 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 444
diff changeset
428
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 union magic_data
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 #ifdef HAVE_TTY
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432 char underlying_tty_event;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 #endif
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 444
diff changeset
434 #ifdef HAVE_GTK
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 444
diff changeset
435 GdkEvent underlying_gdk_event;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 444
diff changeset
436 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437 #ifdef HAVE_X_WINDOWS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 XEvent underlying_x_event;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440 #ifdef HAVE_MS_WINDOWS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441 int underlying_mswindows_event;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 struct Lisp_Timeout
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 {
432
3a7e78e1142d Import from CVS: tag r21-2-24
cvs
parents: 428
diff changeset
447 struct lcrecord_header header;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448 int id; /* Id we use to identify the timeout over its lifetime */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449 int interval_id; /* Id for this particular interval; this may
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 be different each time the timeout is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451 signalled.*/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452 Lisp_Object function, object; /* Function and object associated
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453 with timeout. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 EMACS_TIME next_signal_time; /* Absolute time when the timeout
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 is next going to be signalled. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 unsigned int resignal_msecs; /* How far after the next timeout
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457 should the one after that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 occur? */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459 };
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
460 typedef struct Lisp_Timeout Lisp_Timeout;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
462 DECLARE_LRECORD (timeout, Lisp_Timeout);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
463 #define XTIMEOUT(x) XRECORD (x, timeout, Lisp_Timeout)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464 #define XSETTIMEOUT(x, p) XSETRECORD (x, p, timeout)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465 #define TIMEOUTP(x) RECORDP (x, timeout)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466 #define CHECK_TIMEOUT(x) CHECK_RECORD (x, timeout)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467 #define CONCHECK_TIMEOUT(x) CONCHECK_RECORD (x, timeout)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 struct Lisp_Event
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471 /* header->next (aka XEVENT_NEXT ()) is used as follows:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472 - For dead events, this is the next dead one.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473 - For events on the command_event_queue, the next one on the queue.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 - Likewise for events chained in the command builder.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 - Otherwise it's Qnil.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477 struct lrecord_header lheader;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478 Lisp_Object next;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479 emacs_event_type event_type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480 Lisp_Object channel;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481 unsigned int timestamp;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482 union
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484 struct key_data key;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 struct button_data button;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486 struct motion_data motion;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487 struct process_data process;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 struct timeout_data timeout;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 struct eval_data eval; /* misc_user_event no longer uses this */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 struct misc_user_data misc; /* because it needs position information */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491 union magic_data magic;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
492 struct magic_eval_data magic_eval;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 } event;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
496 DECLARE_LRECORD (event, Lisp_Event);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
497 #define XEVENT(x) XRECORD (x, event, Lisp_Event)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 #define XSETEVENT(x, p) XSETRECORD (x, p, event)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 #define EVENTP(x) RECORDP (x, event)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500 #define CHECK_EVENT(x) CHECK_RECORD (x, event)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 #define CONCHECK_EVENT(x) CONCHECK_RECORD (x, event)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
503 DECLARE_LRECORD (command_builder, struct command_builder);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
504
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505 #define EVENT_CHANNEL(a) ((a)->channel)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506 #define EVENT_TYPE(a) ((a)->event_type)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507 #define XEVENT_TYPE(a) (XEVENT (a)->event_type)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508 #define EVENT_NEXT(a) ((a)->next)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 #define XEVENT_NEXT(e) (XEVENT (e)->next)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510 #define XSET_EVENT_NEXT(e, n) do { (XEVENT (e)->next = (n)); } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
511
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512 #define EVENT_CHAIN_LOOP(event, chain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 for (event = chain; !NILP (event); event = XEVENT_NEXT (event))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515 #define EVENT_LIVE_P(a) (EVENT_TYPE (a) != dead_event)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517 #define CHECK_LIVE_EVENT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
518 CHECK_EVENT (x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519 if (! EVENT_LIVE_P (XEVENT (x))) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520 dead_wrong_type_argument (Qevent_live_p, (x)); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
521 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
522 #define CONCHECK_LIVE_EVENT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
523 CONCHECK_EVENT (x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
524 if (! EVENT_LIVE_P (XEVENT (x))) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
525 x = wrong_type_argument (Qevent_live_p, (x)); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529 EXFUN (Fcharacter_to_event, 4);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
530 EXFUN (Fdeallocate_event, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
531 EXFUN (Fevent_glyph_extent, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
532 EXFUN (Fevent_modeline_position, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
533 EXFUN (Fevent_over_modeline_p, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
534 EXFUN (Fevent_over_toolbar_p, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
535 EXFUN (Fevent_over_vertical_divider_p, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
536 EXFUN (Fevent_point, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
537 EXFUN (Fevent_window, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
538 EXFUN (Fmake_event, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
539
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
540 extern Lisp_Object QKbackspace, QKdelete, QKescape, QKlinefeed, QKreturn;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541 extern Lisp_Object QKspace, QKtab, Qmouse_event_p, Vcharacter_set_property;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542 extern Lisp_Object Qcancel_mode_internal;
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
543 extern Lisp_Object Vmodifier_keys_sticky_time;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
545 /* The modifiers XEmacs knows about; these appear in key and button events. */
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
546
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
547 #define XEMACS_MOD_CONTROL (1<<0)
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
548 #define XEMACS_MOD_META (1<<1)
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
549 #define XEMACS_MOD_SUPER (1<<2)
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
550 #define XEMACS_MOD_HYPER (1<<3)
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
551 #define XEMACS_MOD_ALT (1<<4)
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
552 #define XEMACS_MOD_SHIFT (1<<5) /* not used for dual-case characters */
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
553 #define XEMACS_MOD_BUTTON1 (1<<6)
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
554 #define XEMACS_MOD_BUTTON2 (1<<7)
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
555 #define XEMACS_MOD_BUTTON3 (1<<8)
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
556 #define XEMACS_MOD_BUTTON4 (1<<9)
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
557 #define XEMACS_MOD_BUTTON5 (1<<10)
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
558
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
559 /* Note: under X Windows, XEMACS_MOD_ALT is generated by the Alt key
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
560 if there are both Alt and Meta keys. If there are no Meta keys,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
561 then Alt generates XEMACS_MOD_META instead.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
562 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
563
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
564 #ifdef emacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
565 /* Maybe this should be trickier */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
566 #define KEYSYM(x) (intern (x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
567
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
568 /* from events.c */
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
569 void format_event_object (char *buf, Lisp_Event *e, int brief);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
570 void character_to_event (Emchar c, Lisp_Event *event,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
571 struct console *con,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
572 int use_console_meta_flag,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
573 int do_backspace_mapping);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
574 void zero_event (Lisp_Event *e);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
575 void deallocate_event_chain (Lisp_Object event);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
576 Lisp_Object event_chain_tail (Lisp_Object event);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
577 void enqueue_event (Lisp_Object event, Lisp_Object *head, Lisp_Object *tail);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
578 Lisp_Object dequeue_event (Lisp_Object *head, Lisp_Object *tail);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
579 void enqueue_event_chain (Lisp_Object event_chain, Lisp_Object *head,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
580 Lisp_Object *tail);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
581 int event_chain_count (Lisp_Object event_chain);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
582 void nth_of_key_sequence_as_event (Lisp_Object seq, int n, Lisp_Object event);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
583 Lisp_Object key_sequence_to_event_chain (Lisp_Object seq);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
584 Lisp_Object event_chain_find_previous (Lisp_Object event_chain,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
585 Lisp_Object event);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
586 Lisp_Object event_chain_nth (Lisp_Object event_chain, int n);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
587 Lisp_Object copy_event_chain (Lisp_Object event_chain);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
588 /* True if this is a non-internal event
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
589 (keyboard press, menu, scrollbar, mouse button) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
590 int command_event_p (Lisp_Object event);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
591 void define_self_inserting_symbol (Lisp_Object, Lisp_Object);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
592 Emchar event_to_character (Lisp_Event *, int, int, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
593 struct console *event_console_or_selected (Lisp_Object event);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
594
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
595 /* from event-stream.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
596 Lisp_Object allocate_command_builder (Lisp_Object console);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
597 void enqueue_magic_eval_event (void (*fun) (Lisp_Object), Lisp_Object object);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
598 void event_stream_next_event (Lisp_Event *event);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
599 void event_stream_handle_magic_event (Lisp_Event *event);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
600 void event_stream_select_console (struct console *con);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
601 void event_stream_unselect_console (struct console *con);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
602 void event_stream_select_process (Lisp_Process *proc);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
603 void event_stream_unselect_process (Lisp_Process *proc);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
604 USID event_stream_create_stream_pair (void* inhandle, void* outhandle,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
605 Lisp_Object* instream, Lisp_Object* outstream, int flags);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
606 USID event_stream_delete_stream_pair (Lisp_Object instream, Lisp_Object outstream);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
607 void event_stream_quit_p (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
608
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609 struct low_level_timeout
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
610 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
611 int id;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
612 EMACS_TIME time;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
613 struct low_level_timeout *next;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
614 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
615
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
616 int add_low_level_timeout (struct low_level_timeout **timeout_list,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
617 EMACS_TIME thyme);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
618 void remove_low_level_timeout (struct low_level_timeout **timeout_list,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
619 int id);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
620 int get_low_level_timeout_interval (struct low_level_timeout *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
621 timeout_list, EMACS_TIME *interval);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
622 int pop_low_level_timeout (struct low_level_timeout **timeout_list,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
623 EMACS_TIME *time_out);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
624 int event_stream_generate_wakeup (unsigned int milliseconds,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
625 unsigned int vanilliseconds,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
626 Lisp_Object function,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
627 Lisp_Object object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
628 int async_p);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
629 void event_stream_disable_wakeup (int id, int async_p);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
630 void event_stream_deal_with_async_timeout (int interval_id);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
631
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
632 int event_stream_add_async_timeout (EMACS_TIME thyme);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
633 void event_stream_remove_async_timeout (int id);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635 /* from event-stream.c -- focus sanity */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636 extern int focus_follows_mouse;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637 void investigate_frame_change (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
639 void emacs_handle_focus_change_preliminary (Lisp_Object frame_inp_and_dev);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640 void emacs_handle_focus_change_final (Lisp_Object frame_inp_and_dev);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
641
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
642 Lisp_Object extract_this_command_keys_nth_mouse_event (int n);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
643 Lisp_Object extract_vector_nth_mouse_event (Lisp_Object vector, int n);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
644
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
645 void single_console_state (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
646 void any_console_state (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
647 int in_single_console_state (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
648
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
649 extern int emacs_is_blocking;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
651 extern volatile int sigint_happened;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
652
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653 #ifdef HAVE_UNIXOID_EVENT_LOOP
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654 /* from event-unixoid.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
656 /* Ceci n'est pas un pipe. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657 extern int signal_event_pipe[];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659 void signal_fake_event (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
660 void drain_signal_event_pipe (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
661
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
662 extern int fake_event_occurred;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
664 int event_stream_unixoid_select_console (struct console *con);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665 int event_stream_unixoid_unselect_console (struct console *con);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
666 int event_stream_unixoid_select_process (Lisp_Process *proc);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
667 int event_stream_unixoid_unselect_process (Lisp_Process *proc);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
668 int read_event_from_tty_or_stream_desc (Lisp_Event *event,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
669 struct console *con, int fd);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
670 USID event_stream_unixoid_create_stream_pair (void* inhandle, void* outhandle,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
671 Lisp_Object* instream,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
672 Lisp_Object* outstream,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
673 int flags);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
674 USID event_stream_unixoid_delete_stream_pair (Lisp_Object instream,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
675 Lisp_Object outstream);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
676
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
677 /* Beware: this evil macro evaluates its arg many times */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
678 #define FD_TO_USID(fd) ((fd)==0 ? (USID)999999 : ((fd)<0 ? USID_DONTHASH : (USID)(fd)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
679
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
680 #endif /* HAVE_UNIXOID_EVENT_LOOP */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
681
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
682 /* Define this if you want the tty event stream to be used when the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
683 first console is tty, even if HAVE_X_WINDOWS is defined */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
684 /* #define DEBUG_TTY_EVENT_STREAM */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
685
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
686 #endif /* emacs */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
687
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
688 /* #### a hack, until accelerator shit is cleaned up */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
689
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
690 /* This structure is what we use to encapsulate the state of a command sequence
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
691 being composed; key events are executed by adding themselves to the command
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
692 builder; if the command builder is then complete (does not still represent
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
693 a prefix key sequence) it executes the corresponding command.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
694 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
695 struct command_builder
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
696 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
697 struct lcrecord_header header;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
698 Lisp_Object console; /* back pointer to the console this command
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
699 builder is for */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
700 /* Qnil, or a Lisp_Event representing the first event read
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
701 * after the last command completed. Threaded. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
702 /* #### NYI */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
703 Lisp_Object prefix_events;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
704 /* Qnil, or a Lisp_Event representing event in the current
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
705 * keymap-lookup sequence. Subsequent events are threaded via
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
706 * the event's next slot */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
707 Lisp_Object current_events;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
708 /* Last elt of above */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
709 Lisp_Object most_current_event;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
710 /* Last elt before function map code took over. What this means is:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
711 All prefixes up to (but not including) this event have non-nil
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
712 bindings, but the prefix including this event has a nil binding.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
713 Any events in the chain after this one were read solely because
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
714 we're part of a possible function key. If we end up with
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
715 something that's not part of a possible function key, we have to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
716 unread all of those events. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
717 Lisp_Object last_non_munged_event;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
718 /* One set of values for function-key-map, one for key-translation-map */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
719 struct munging_key_translation
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
720 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
721 /* First event that can begin a possible function key sequence
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
722 (to be translated according to function-key-map). Normally
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
723 this is the first event in the chain. However, once we've
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
724 translated a sequence through function-key-map, this will point
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
725 to the first event after the translated sequence: we don't ever
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
726 want to translate any events twice through function-key-map, or
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
727 things could get really screwed up (e.g. if the user created a
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
728 translation loop). If this is nil, then the next-read event is
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
729 the first that can begin a function key sequence. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
730 Lisp_Object first_mungeable_event;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
731 } munge_me[2];
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
732
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
733 Bufbyte *echo_buf;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
734 Bytecount echo_buf_length; /* size of echo_buf */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
735 Bytecount echo_buf_index; /* index into echo_buf
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
736 * -1 before doing echoing for new cmd */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
737 /* Self-insert-command is magic in that it doesn't always push an undo-
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
738 boundary: up to 20 consecutive self-inserts can happen before an undo-
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
739 boundary is pushed. This variable is that counter.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
740 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
741 int self_insert_countdown;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
742 };
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
743
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
744 #endif /* INCLUDED_events_h_ */