* nsterm.m (ns_dumpglyphs_image): dr is a new rect to draw image into,
[bpt/emacs.git] / src / keyboard.h
CommitLineData
284f4730 1/* Declarations useful when processing input.
acaf905b 2 Copyright (C) 1985-1987, 1993, 2001-2012 Free Software Foundation, Inc.
284f4730
JB
3
4This file is part of GNU Emacs.
5
b9b1cc14 6GNU Emacs is free software: you can redistribute it and/or modify
284f4730 7it under the terms of the GNU General Public License as published by
b9b1cc14
GM
8the Free Software Foundation, either version 3 of the License, or
9(at your option) any later version.
284f4730
JB
10
11GNU Emacs is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
b9b1cc14 17along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
284f4730 18
08dc5ae6 19#include "systime.h" /* for EMACS_TIME, Time */
fc0bdb33 20#include "coding.h" /* for ENCODE_UTF_8 and ENCODE_SYSTEM */
4392dfe3 21
15dbb4d6
PE
22INLINE_HEADER_BEGIN
23#ifndef KEYBOARD_INLINE
24# define KEYBOARD_INLINE INLINE
25#endif
26
e34f7f79 27/* Most code should use this macro to access Lisp fields in struct kboard. */
1344aad4 28
e34f7f79 29#define KVAR(kboard, field) ((kboard)->INTERNAL_FIELD (field))
1344aad4 30
6ed8eeff
KL
31/* Each KBOARD represents one logical input stream from which Emacs
32 gets input. If we are using ordinary terminals, it has one KBOARD
33 object for each terminal device.
931e7866
RS
34 Usually each X display screen has its own KBOARD,
35 but when two of them are on the same X server,
36 we assume they share a keyboard and give them one KBOARD in common.
37
38 Some Lisp variables are per-kboard; they are stored in the KBOARD structure
39 and accessed indirectly via a Lisp_Misc_Kboard_Objfwd object.
40
41 So that definition of keyboard macros, and reading of prefix arguments,
42 can happen in parallel on various KBOARDs at once,
43 the state information for those activities is stored in the KBOARD.
44
45 Emacs has two states for reading input:
46
47 ** Any kboard. Emacs can accept input from any KBOARD,
48 and as soon as any of them provides a complete command, Emacs can run it.
49
50 ** Single kboard. Then Emacs is running a command for one KBOARD
51 and can only read input from that KBOARD.
52
53 All input, from all KBOARDs, goes together in a single event queue
54 at interrupt level. read_char sees the events sequentially,
55 but deals with them in accord with the current input state.
56
57 In the any-kboard state, read_key_sequence processes input from any KBOARD
58 immediately. When a new event comes in from a particular KBOARD,
59 read_key_sequence switches to that KBOARD. As a result,
60 as soon as a complete key arrives from some KBOARD or other,
61 Emacs starts executing that key's binding. It switches to the
62 single-kboard state for the execution of that command,
63 so that that command can get input only from its own KBOARD.
64
65 While in the single-kboard state, read_char can consider input only
66 from the current KBOARD. If events come from other KBOARDs, they
67 are put aside for later in the KBOARDs' kbd_queue lists.
68 The flag kbd_queue_has_data in a KBOARD is 1 if this has happened.
df631feb 69 When Emacs goes back to the any-kboard state, it looks at all the KBOARDs
931e7866
RS
70 to find those; and it tries processing their input right away. */
71
72typedef struct kboard KBOARD;
73struct kboard
74 {
75 KBOARD *next_kboard;
76
063c96e6
KH
77 /* If non-nil, a keymap that overrides all others but applies only to
78 this KBOARD. Lisp code that uses this instead of calling read-char
79 can effectively wait for input in the any-kboard state, and hence
80 avoid blocking out the other KBOARDs. See universal-argument in
81 lisp/simple.el for an example. */
e34f7f79 82 Lisp_Object INTERNAL_FIELD (Voverriding_terminal_local_map);
063c96e6 83
334a398c
KH
84 /* Last command executed by the editor command loop, not counting
85 commands that set the prefix argument. */
e34f7f79 86 Lisp_Object INTERNAL_FIELD (Vlast_command);
334a398c 87
70b8d0a4 88 /* Normally same as last-command, but never modified by other commands. */
e34f7f79 89 Lisp_Object INTERNAL_FIELD (Vreal_last_command);
d94a2d9a 90
2e478293 91 /* User-supplied table to translate input characters through. */
e34f7f79 92 Lisp_Object INTERNAL_FIELD (Vkeyboard_translate_table);
a053e86c 93
d2ff5d50 94 /* Last command that may be repeated by `repeat'. */
e34f7f79 95 Lisp_Object INTERNAL_FIELD (Vlast_repeatable_command);
d2ff5d50 96
7e926407 97 /* The prefix argument for the next command, in raw form. */
e34f7f79 98 Lisp_Object INTERNAL_FIELD (Vprefix_arg);
d94a2d9a
RS
99
100 /* Saved prefix argument for the last command, in raw form. */
e34f7f79 101 Lisp_Object INTERNAL_FIELD (Vlast_prefix_arg);
931e7866
RS
102
103 /* Unread events specific to this kboard. */
e34f7f79 104 Lisp_Object INTERNAL_FIELD (kbd_queue);
931e7866
RS
105
106 /* Non-nil while a kbd macro is being defined. */
e34f7f79 107 Lisp_Object INTERNAL_FIELD (defining_kbd_macro);
931e7866
RS
108
109 /* The start of storage for the current keyboard macro. */
110 Lisp_Object *kbd_macro_buffer;
111
112 /* Where to store the next keystroke of the macro. */
113 Lisp_Object *kbd_macro_ptr;
114
115 /* The finalized section of the macro starts at kbd_macro_buffer and
116 ends before this. This is not the same as kbd_macro_ptr, because
117 we advance this to kbd_macro_ptr when a key's command is complete.
118 This way, the keystrokes for "end-kbd-macro" are not included in the
70564478
EZ
119 macro. This also allows us to throw away the events added to the
120 macro by the last command: all the events between kbd_macro_end and
121 kbd_macro_ptr belong to the last command; see
122 cancel-kbd-macro-events. */
931e7866
RS
123 Lisp_Object *kbd_macro_end;
124
125 /* Allocated size of kbd_macro_buffer. */
6d84508d 126 ptrdiff_t kbd_macro_bufsize;
931e7866
RS
127
128 /* Last anonymous kbd macro defined. */
e34f7f79 129 Lisp_Object INTERNAL_FIELD (Vlast_kbd_macro);
931e7866 130
be2f0083 131 /* Alist of system-specific X windows key symbols. */
e34f7f79 132 Lisp_Object INTERNAL_FIELD (Vsystem_key_alist);
be2f0083 133
8955bab8 134 /* Cache for modify_event_symbol. */
e34f7f79 135 Lisp_Object INTERNAL_FIELD (system_key_syms);
8955bab8 136
70b8d0a4 137 /* The kind of display: x, w32, ... */
e34f7f79 138 Lisp_Object INTERNAL_FIELD (Vwindow_system);
70b8d0a4 139
4f4a84ec
SM
140 /* Keymap mapping keys to alternative preferred forms.
141 See the DEFVAR for more documentation. */
e34f7f79 142 Lisp_Object INTERNAL_FIELD (Vlocal_function_key_map);
a053e86c 143
4f4a84ec
SM
144 /* Keymap mapping ASCII function key sequences onto their preferred
145 forms. Initialized by the terminal-specific lisp files. See the
146 DEFVAR for more documentation. */
e34f7f79 147 Lisp_Object INTERNAL_FIELD (Vinput_decode_map);
a053e86c 148
2db45b7b 149 /* Minibufferless frames on this display use this frame's minibuffer. */
e34f7f79 150 Lisp_Object INTERNAL_FIELD (Vdefault_minibuffer_frame);
2db45b7b 151
931e7866
RS
152 /* Number of displays using this KBOARD. Normally 1, but can be
153 larger when you have multiple screens on a single X display. */
154 int reference_count;
155
931e7866 156 /* The text we're echoing in the modeline - partial key sequences,
a35bdffa 157 usually. This is nil when not echoing. */
e34f7f79 158 Lisp_Object INTERNAL_FIELD (echo_string);
931e7866
RS
159
160 /* This flag indicates that events were put into kbd_queue
161 while Emacs was running for some other KBOARD.
162 The flag means that, when Emacs goes into the any-kboard state again,
163 it should check this KBOARD to see if there is a complete command
164 waiting.
165
166 Note that the kbd_queue field can be non-nil even when
167 kbd_queue_has_data is 0. When we push back an incomplete
168 command, then this flag is 0, meaning we don't want to try
169 reading from this KBOARD again until more input arrives. */
170 char kbd_queue_has_data;
171
172 /* Nonzero means echo each character as typed. */
173 char immediate_echo;
174
175 /* If we have echoed a prompt string specified by the user,
a35bdffa 176 this is its length in characters. Otherwise this is -1. */
931e7866
RS
177 char echo_after_prompt;
178 };
179
15dbb4d6
PE
180KEYBOARD_INLINE void
181kset_default_minibuffer_frame (struct kboard *kb, Lisp_Object val)
182{
183 kb->INTERNAL_FIELD (Vdefault_minibuffer_frame) = val;
184}
185KEYBOARD_INLINE void
186kset_defining_kbd_macro (struct kboard *kb, Lisp_Object val)
187{
188 kb->INTERNAL_FIELD (defining_kbd_macro) = val;
189}
190KEYBOARD_INLINE void
191kset_input_decode_map (struct kboard *kb, Lisp_Object val)
192{
193 kb->INTERNAL_FIELD (Vinput_decode_map) = val;
194}
195KEYBOARD_INLINE void
196kset_last_command (struct kboard *kb, Lisp_Object val)
197{
198 kb->INTERNAL_FIELD (Vlast_command) = val;
199}
200KEYBOARD_INLINE void
201kset_last_kbd_macro (struct kboard *kb, Lisp_Object val)
202{
203 kb->INTERNAL_FIELD (Vlast_kbd_macro) = val;
204}
205KEYBOARD_INLINE void
206kset_prefix_arg (struct kboard *kb, Lisp_Object val)
207{
208 kb->INTERNAL_FIELD (Vprefix_arg) = val;
209}
210KEYBOARD_INLINE void
211kset_system_key_alist (struct kboard *kb, Lisp_Object val)
212{
213 kb->INTERNAL_FIELD (Vsystem_key_alist) = val;
214}
215KEYBOARD_INLINE void
216kset_window_system (struct kboard *kb, Lisp_Object val)
217{
218 kb->INTERNAL_FIELD (Vwindow_system) = val;
219}
220
7b00d185 221/* Temporarily used before a frame has been opened. */
931e7866
RS
222extern KBOARD *initial_kboard;
223
224/* In the single-kboard state, this is the kboard
225 from which input is accepted.
226
227 In the any-kboard state, this is the kboard from which we are
228 right now considering input. We can consider input from another
229 kboard, but doing so requires throwing to wrong_kboard_jmpbuf. */
230extern KBOARD *current_kboard;
231
232/* A list of all kboard objects, linked through next_kboard. */
233extern KBOARD *all_kboards;
931e7866 234\f
3300e6fd
PE
235/* Total number of times read_char has returned, modulo UINTMAX_MAX + 1. */
236extern uintmax_t num_input_events;
284f4730 237
eb8c3be9 238/* Nonzero means polling for input is temporarily suppressed. */
284f4730
JB
239extern int poll_suppress_count;
240
49fcd3de
JB
241/* Vector holding the key sequence that invoked the current command.
242 It is reused for each command, and it may be longer than the current
243 sequence; this_command_key_count indicates how many elements
244 actually mean something. */
245extern Lisp_Object this_command_keys;
d311d28c 246extern ptrdiff_t this_command_key_count;
6084b314 247
fd2777e0
JB
248/* The frame in which the last input event occurred, or Qmacro if the
249 last event came from a macro. We use this to determine when to
250 generate switch-frame events. This may be cleared by functions
251 like Fselect_frame, to make sure that a switch-frame event is
252 generated by the next character. */
9e6314a4 253extern Lisp_Object internal_last_event_frame;
284f4730 254\f
fc0bdb33
CY
255extern Lisp_Object Qrecompute_lucid_menubar, Qactivate_menubar_hook;
256
0340dc60
RS
257/* This holds a Lisp vector that holds the properties of a single
258 menu item while decoding it in parse_menu_item.
259 Using a Lisp vector to hold this information while we decode it
260 takes care of protecting all the data from GC. */
261extern Lisp_Object item_properties;
177c0ea7 262
0340dc60
RS
263/* This describes the elements of item_properties.
264 The first element is not a property, it is a pointer to the item properties
265 that is saved for GC protection. */
266#define ITEM_PROPERTY_ITEM 0
267/* The item string. */
268#define ITEM_PROPERTY_NAME 1
df631feb 269/* Start of initialize to nil */
0340dc60
RS
270/* The binding: nil, a command or a keymap. */
271#define ITEM_PROPERTY_DEF 2
272/* The keymap if the binding is a keymap, otherwise nil. */
273#define ITEM_PROPERTY_MAP 3
274/* Nil, :radio or :toggle. */
275#define ITEM_PROPERTY_TYPE 4
276/* Nil or a string describing an equivalent key binding. */
277#define ITEM_PROPERTY_KEYEQ 5
278/* Not nil if a selected toggle box or radio button, otherwise nil. */
279#define ITEM_PROPERTY_SELECTED 6
280/* Place for a help string. Not yet used. */
281#define ITEM_PROPERTY_HELP 7
df631feb 282/* Start of initialize to t */
0340dc60
RS
283/* Last property. */
284/* Not nil if item is enabled. */
285#define ITEM_PROPERTY_ENABLE 8
fc0bdb33 286
fc0bdb33
CY
287/* This holds a Lisp vector that holds the results of decoding
288 the keymaps or alist-of-alists that specify a menu.
289
290 It describes the panes and items within the panes.
291
292 Each pane is described by 3 elements in the vector:
293 t, the pane name, the pane's prefix key.
294 Then follow the pane's items, with 5 elements per item:
295 the item string, the enable flag, the item's value,
296 the definition, and the equivalent keyboard key's description string.
297
298 In some cases, multiple levels of menus may be described.
299 A single vector slot containing nil indicates the start of a submenu.
300 A single vector slot containing lambda indicates the end of a submenu.
301 The submenu follows a menu item which is the way to reach the submenu.
302
303 A single vector slot containing quote indicates that the
304 following items should appear on the right of a dialog box.
305
306 Using a Lisp vector to hold this information while we decode it
307 takes care of protecting all the data from GC. */
308extern Lisp_Object menu_items;
309
310/* If non-nil, means that the global vars defined here are already in use.
311 Used to detect cases where we try to re-enter this non-reentrant code. */
4475bec4 312#if defined USE_GTK || defined USE_MOTIF
fc0bdb33 313extern Lisp_Object menu_items_inuse;
4475bec4 314#endif
fc0bdb33
CY
315
316/* Number of slots currently allocated in menu_items. */
317extern int menu_items_allocated;
318
319/* This is the index in menu_items of the first empty slot. */
320extern int menu_items_used;
321
322/* The number of panes currently recorded in menu_items,
323 excluding those within submenus. */
324extern int menu_items_n_panes;
325
326#define MENU_ITEMS_PANE_NAME 1
327#define MENU_ITEMS_PANE_PREFIX 2
328#define MENU_ITEMS_PANE_LENGTH 3
329
330enum menu_item_idx
331{
332 MENU_ITEMS_ITEM_NAME = 0,
333 MENU_ITEMS_ITEM_ENABLE,
334 MENU_ITEMS_ITEM_VALUE,
335 MENU_ITEMS_ITEM_EQUIV_KEY,
336 MENU_ITEMS_ITEM_DEFINITION,
337 MENU_ITEMS_ITEM_TYPE,
338 MENU_ITEMS_ITEM_SELECTED,
339 MENU_ITEMS_ITEM_HELP,
340 MENU_ITEMS_ITEM_LENGTH
341};
342
383e0970 343extern Lisp_Object unuse_menu_items (Lisp_Object dummy);
fc0bdb33
CY
344
345/* This is how to deal with multibyte text if HAVE_MULTILINGUAL_MENU
346 isn't defined. The use of HAVE_MULTILINGUAL_MENU could probably be
347 confined to an extended version of this with sections of code below
348 using it unconditionally. */
01ef9d36 349#ifndef HAVE_NTGUI
edfda783 350#if defined (USE_GTK) || defined (HAVE_NS)
fc0bdb33
CY
351# define ENCODE_MENU_STRING(str) ENCODE_UTF_8 (str)
352#elif defined HAVE_X_I18N
353#define ENCODE_MENU_STRING(str) ENCODE_SYSTEM (str)
354#else
355#define ENCODE_MENU_STRING(str) string_make_unibyte (str)
356#endif /* USE_GTK */
01ef9d36 357#else /* HAVE_NTGUI */
fc0bdb33
CY
358#define ENCODE_MENU_STRING(str) (str)
359#endif
edfda783 360
42ca4633 361#if defined (HAVE_NS) || defined (HAVE_NTGUI) || defined (USE_GTK)
edfda783
AR
362
363/* Definitions copied from lwlib.h */
364
365enum button_type
366{
367 BUTTON_TYPE_NONE,
368 BUTTON_TYPE_TOGGLE,
369 BUTTON_TYPE_RADIO
370};
371
372/* This structure is based on the one in ../lwlib/lwlib.h, with unused portions
373 removed. No term uses these. */
374typedef struct _widget_value
375{
376 /* name of widget */
377 Lisp_Object lname;
9c5bd55a 378 const char* name;
edfda783 379 /* value (meaning depend on widget type) */
9c5bd55a 380 const char* value;
edfda783
AR
381 /* keyboard equivalent. no implications for XtTranslations */
382 Lisp_Object lkey;
9c5bd55a 383 const char* key;
edfda783
AR
384 /* Help string or nil if none.
385 GC finds this string through the frame's menu_bar_vector
386 or through menu_items. */
387 Lisp_Object help;
388 /* true if enabled */
42ca4633 389 unsigned char enabled;
edfda783 390 /* true if selected */
42ca4633 391 unsigned char selected;
edfda783
AR
392 /* The type of a button. */
393 enum button_type button_type;
394#if defined (HAVE_NTGUI)
395 /* true if menu title */
42ca4633 396 unsigned char title;
edfda783
AR
397#endif
398 /* Contents of the sub-widgets, also selected slot for checkbox */
399 struct _widget_value* contents;
400 /* data passed to callback */
42ca4633 401 void *call_data;
edfda783
AR
402 /* next one in the list */
403 struct _widget_value* next;
42ca4633
J
404#ifdef USE_GTK
405 struct _widget_value *free_list;
406#endif
edfda783 407} widget_value;
edfda783 408
14145fa3 409#endif /* HAVE_NS || HAVE_NTGUI */
15034960 410
0340dc60 411\f
284f4730
JB
412/* Macros for dealing with lispy events. */
413
e0f24100 414/* True if EVENT has data fields describing it (i.e. a mouse click). */
4a2fb8bd 415#define EVENT_HAS_PARAMETERS(event) (CONSP (event))
284f4730 416
53ce28d6
JB
417/* Extract the head from an event.
418 This works on composite and simple events. */
ac501cd9 419#define EVENT_HEAD(event) \
3331fb06 420 (EVENT_HAS_PARAMETERS (event) ? XCAR (event) : (event))
ac501cd9 421
53ce28d6 422/* Extract the starting and ending positions from a composite event. */
3331fb06
KR
423#define EVENT_START(event) (XCAR (XCDR (event)))
424#define EVENT_END(event) (XCAR (XCDR (XCDR (event))))
ac501cd9 425
6765e5b0 426/* Extract the click count from a multi-click event. */
1365f343 427#define EVENT_CLICK_COUNT(event) (Fnth (make_number (2), (event)))
6765e5b0 428
53ce28d6 429/* Extract the fields of a position. */
3331fb06 430#define POSN_WINDOW(posn) (XCAR (posn))
03c975a4
KS
431#define POSN_POSN(posn) (XCAR (XCDR (posn)))
432#define POSN_SET_POSN(posn,x) (XSETCAR (XCDR (posn), (x)))
3331fb06 433#define POSN_WINDOW_POSN(posn) (XCAR (XCDR (XCDR (posn))))
03c975a4 434#define POSN_TIMESTAMP(posn) (XCAR (XCDR (XCDR (XCDR (posn)))))
1365f343 435#define POSN_SCROLLBAR_PART(posn) (Fnth (make_number (4), (posn)))
284f4730 436
6e0adcfa
GM
437/* A cons (STRING . STRING-CHARPOS), or nil in mouse-click events.
438 It's a cons if the click is over a string in the mode line. */
439
03c975a4
KS
440#define POSN_STRING(posn) (Fnth (make_number (4), (posn)))
441
442/* If POSN_STRING is nil, event refers to buffer location. */
443
444#define POSN_INBUFFER_P(posn) (NILP (POSN_STRING (posn)))
445#define POSN_BUFFER_POSN(posn) (Fnth (make_number (5), (posn)))
6e0adcfa 446
284f4730 447/* Some of the event heads. */
6084b314 448extern Lisp_Object Qswitch_frame;
284f4730
JB
449
450/* Properties on event heads. */
955cbe7b 451extern Lisp_Object Qevent_kind;
284f4730
JB
452
453/* The values of Qevent_kind properties. */
955cbe7b 454extern Lisp_Object Qmouse_click;
284f4730 455
e6cba650
DN
456extern Lisp_Object Qhelp_echo;
457
284f4730
JB
458/* Getting the kind of an event head. */
459#define EVENT_HEAD_KIND(event_head) \
460 (Fget ((event_head), Qevent_kind))
461
462/* Symbols to use for non-text mouse positions. */
045dee35 463extern Lisp_Object Qmode_line, Qvertical_line, Qheader_line;
284f4730 464
e6cba650
DN
465/* True while doing kbd input. */
466extern int waiting_for_input;
467
468/* Address (if not 0) of EMACS_TIME to zero out if a SIGIO interrupt
469 happens. */
470extern EMACS_TIME *input_available_clear_time;
471
a411ac43 472#if defined HAVE_WINDOW_SYSTEM && !defined USE_GTK && !defined HAVE_NS
e6cba650 473extern int ignore_mouse_drag_p;
8a1414fa 474#endif
e6cba650 475
e45a249b
JD
476/* The primary selection. */
477extern Lisp_Object QPRIMARY;
478
d748a3db
AS
479/* Forward declaration for prototypes. */
480struct input_event;
481
383e0970
J
482extern Lisp_Object parse_modifiers (Lisp_Object);
483extern Lisp_Object reorder_modifiers (Lisp_Object);
34db673b 484extern Lisp_Object read_char (int, ptrdiff_t, Lisp_Object *, Lisp_Object,
383e0970 485 int *, EMACS_TIME *);
0bcfd7d7 486extern int parse_solitary_modifier (Lisp_Object symbol);
251bc578 487
ec558adc 488
e6cba650
DN
489/* This is like Vthis_command, except that commands never set it. */
490extern Lisp_Object real_this_command;
491
99f3388e
DN
492/* Non-nil disable property on a command means
493 do not execute it; call disabled-command-function's value instead. */
955cbe7b 494extern Lisp_Object QCtoggle, QCradio;
99f3388e
DN
495
496/* An event header symbol HEAD may have a property named
497 Qevent_symbol_element_mask, which is of the form (BASE MODIFIERS);
498 BASE is the base, unmodified version of HEAD, and MODIFIERS is the
499 mask of modifiers applied to it. If present, this is used to help
500 speed up parse_modifiers. */
501extern Lisp_Object Qevent_symbol_element_mask;
502
503/* The timestamp of the last input event we received from the X server.
504 X Windows wants this for selection ownership. */
08dc5ae6 505extern Time last_event_timestamp;
99f3388e 506
3ef1d108
DN
507extern int quit_char;
508
50c77428
DN
509extern int timers_run;
510
4039c786 511extern int menu_separator_name_p (const char *);
ef7417fd 512extern int parse_menu_item (Lisp_Object, int);
0340dc60 513
383e0970
J
514extern void init_kboard (KBOARD *);
515extern void delete_kboard (KBOARD *);
516extern void not_single_kboard_state (KBOARD *);
517extern void push_kboard (struct kboard *);
518extern void push_frame_kboard (struct frame *);
519extern void pop_kboard (void);
520extern void temporarily_switch_to_single_kboard (struct frame *);
521extern void record_asynch_buffer_change (void);
9af30bdf 522extern void input_poll_signal (int);
383e0970
J
523extern void start_polling (void);
524extern void stop_polling (void);
525extern void set_poll_suppress_count (int);
f75beb47 526extern void gobble_input (void);
383e0970
J
527extern int input_polling_used (void);
528extern void clear_input_pending (void);
529extern int requeued_events_pending_p (void);
530extern void bind_polling_period (int);
5994c183 531extern int make_ctrl_char (int) ATTRIBUTE_CONST;
383e0970
J
532extern void stuff_buffered_input (Lisp_Object);
533extern void clear_waiting_for_input (void);
534extern void swallow_events (int);
383e0970
J
535extern int lucid_event_type_list_p (Lisp_Object);
536extern void kbd_buffer_store_event (struct input_event *);
537extern void kbd_buffer_store_event_hold (struct input_event *,
538 struct input_event *);
539extern void kbd_buffer_unget_event (struct input_event *);
383e0970 540extern void poll_for_input_1 (void);
383e0970 541extern void show_help_echo (Lisp_Object, Lisp_Object, Lisp_Object,
f868cd8a 542 Lisp_Object);
383e0970 543extern void gen_help_event (Lisp_Object, Lisp_Object, Lisp_Object,
d311d28c 544 Lisp_Object, ptrdiff_t);
383e0970
J
545extern void kbd_buffer_store_help_event (Lisp_Object, Lisp_Object);
546extern Lisp_Object menu_item_eval_property (Lisp_Object);
547extern int kbd_buffer_events_waiting (int);
548extern void add_user_signal (int, const char *);
549
f75beb47 550extern int tty_read_avail_input (struct terminal *, struct input_event *);
f868cd8a 551extern EMACS_TIME timer_check (void);
da2f2dd9 552extern void mark_kboards (void);
8f1ce423 553
7684e57b
JB
554#ifdef WINDOWSNT
555extern const char *const lispy_function_keys[];
556#endif
15dbb4d6
PE
557
558INLINE_HEADER_END