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