Fixed typos.
[bpt/emacs.git] / src / termhooks.h
CommitLineData
80856e74
JB
1/* Hooks by which low level terminal operations
2 can be made to call other routines.
ffd56f97 3 Copyright (C) 1985, 1986, 1992 Free Software Foundation, Inc.
80856e74
JB
4
5This file is part of GNU Emacs.
6
7GNU Emacs is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
ffd56f97 9the Free Software Foundation; either version 2, or (at your option)
80856e74
JB
10any later version.
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
18along with GNU Emacs; see the file COPYING. If not, write to
19the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
20
21
22extern int (*cursor_to_hook) ();
23extern int (*raw_cursor_to_hook) ();
24
25extern int (*clear_to_end_hook) ();
0137dbf7 26extern int (*clear_frame_hook) ();
80856e74
JB
27extern int (*clear_end_of_line_hook) ();
28
29extern int (*ins_del_lines_hook) ();
30
31extern int (*change_line_highlight_hook) ();
32extern int (*reassert_line_highlight_hook) ();
33
34extern int (*insert_glyphs_hook) ();
35extern int (*write_glyphs_hook) ();
36extern int (*delete_glyphs_hook) ();
37
38extern int (*ring_bell_hook) ();
39
40extern int (*reset_terminal_modes_hook) ();
41extern int (*set_terminal_modes_hook) ();
42extern int (*update_begin_hook) ();
43extern int (*update_end_hook) ();
44extern int (*set_terminal_window_hook) ();
45
46extern int (*read_socket_hook) ();
47
265a9e55
JB
48/* Return the current position of the mouse. This should clear
49 mouse_moved until the next motion event arrives. */
0137dbf7 50extern void (*mouse_position_hook) ( /* FRAME_PTR *f,
265a9e55
JB
51 Lisp_Object *x,
52 Lisp_Object *y,
e5d77022 53 unsigned long *time */ );
265a9e55
JB
54
55/* The window system handling code should set this if the mouse has
56 moved since the last call to the mouse_position_hook. Calling that
57 hook should clear this. */
58extern int mouse_moved;
80856e74 59
0137dbf7 60/* When a frame's focus redirection is changed, this hook tells the
0f79a4ae 61 window system code to re-decide where to put the highlight. Under
265a9e55 62 X, this means that Emacs lies about where the focus is. */
0137dbf7 63extern void (*frame_rehighlight_hook) ( /* void */ );
62c07cc7 64
80856e74 65/* If nonzero, send all terminal output characters to this stream also. */
80856e74
JB
66extern FILE *termscript;
67
80856e74
JB
68/* Expedient hack: only provide the below definitions to files that
69 are prepared to handle lispy things. XINT is defined iff lisp.h
265a9e55
JB
70 has been included before this file. */
71#ifdef XINT
80856e74
JB
72
73/* The keyboard input buffer is an array of these structures. Each one
74 represents some sort of input event - a keystroke, a mouse click, or
75 a window system event. These get turned into their lispy forms when
76 they are removed from the event queue. */
77
78struct input_event {
79
80 /* What kind of event was this? */
81 enum {
82 no_event, /* nothing happened. This should never
83 actually appear in the event queue. */
62c07cc7 84 ascii_keystroke, /* The ASCII code is in .code.
0137dbf7 85 .frame is the frame in which the key
62c07cc7
JB
86 was typed.
87 Note that this includes meta-keys, and
88 the modifiers field of the event
265a9e55
JB
89 is unused.
90 .timestamp gives a timestamp (in
91 milliseconds) for the keystroke. */
80856e74
JB
92 non_ascii_keystroke, /* .code is a number identifying the
93 function key. A code N represents
94 a key whose name is
95 function_key_names[N]; function_key_names
96 is a table in keyboard.c to which you
97 should feel free to add missing keys.
98 .modifiers holds the state of the
62c07cc7 99 modifier keys.
0137dbf7 100 .frame is the frame in which the key
265a9e55
JB
101 was typed.
102 .timestamp gives a timestamp (in
103 milliseconds) for the keystroke. */
a1867fb1
JB
104 mouse_click, /* The button number is in .code; it must
105 be >= 0 and < NUM_MOUSE_BUTTONS, defined
106 below.
80856e74
JB
107 .modifiers holds the state of the
108 modifier keys.
109 .x and .y give the mouse position,
1113d9db 110 in characters, within the window.
0137dbf7 111 .frame gives the frame the mouse
80856e74
JB
112 click occurred in.
113 .timestamp gives a timestamp (in
114 milliseconds) for the click. */
115 scrollbar_click, /* .code gives the number of the mouse
116 button that was clicked.
117 .part is a lisp symbol indicating which
118 part of the scrollbar got clicked. This
119 indicates whether the scroll bar was
120 horizontal or vertical.
121 .modifiers gives the state of the
122 modifier keys.
123 .x gives the distance from the start
124 of the scroll bar of the click; .y gives
125 the total length of the scroll bar.
0137dbf7 126 .frame gives the frame the click
80856e74
JB
127 should apply to.
128 .timestamp gives a timestamp (in
129 milliseconds) for the click. */
62c07cc7 130#if 0
0137dbf7
JB
131 frame_selected, /* The user has moved the focus to another
132 frame.
133 .frame is the frame that should become
80856e74 134 selected at the next convenient time. */
62c07cc7 135#endif
80856e74
JB
136 } kind;
137
138 Lisp_Object code;
139 Lisp_Object part;
e5d77022
JB
140
141/* This is obviously wrong, but I'm not sure what else I should do.
0137dbf7
JB
142 Obviously, this should be a FRAME_PTR. But that would require that
143 every file which #includes this one should also #include "frame.h",
e5d77022 144 which would mean that files like cm.c and other innocents would be
0137dbf7 145 dragged into the set of frame.h users. Maybe the definition of this
e5d77022 146 structure should be elsewhere? In its own file? */
0137dbf7
JB
147#ifdef MULTI_FRAME
148 struct frame *frame;
e5d77022 149#else
0137dbf7 150 int frame;
e5d77022 151#endif
80856e74 152 int modifiers; /* See enum below for interpretation. */
e5d77022 153
80856e74 154 Lisp_Object x, y;
ffd56f97 155 unsigned long timestamp;
80856e74
JB
156};
157
a1867fb1
JB
158/* This is used in keyboard.c, to tell how many buttons we will need
159 to track the positions of. */
160#define NUM_MOUSE_BUTTONS (5)
161
21cec071
JB
162/* Bits in the modifiers member of the input_event structure.
163 Note that reorder_modifiers assumes that the bits are in canonical
a1867fb1
JB
164 order.
165
166 The modifiers applied to mouse clicks are rather ornate. The
167 window-system-specific code should store mouse clicks with
168 up_modifier or down_modifier set; the window-system independent
169 code turns all up_modifier events into either drag_modifier or
170 click_modifier. The click_modifier has no written representation
171 in the names of the symbols used as event heads, but it does appear
172 in the Qevent_symbol_components property of the event heads. */
80856e74 173enum {
a1867fb1
JB
174 up_modifier = 1, /* Only used on mouse buttons - always
175 turned into a click or a drag modifier
176 before lisp code sees the event. */
21cec071
JB
177 alt_modifier = 2, /* Under X, the XK_Alt_[LR] keysyms. */
178 ctrl_modifier = 4,
179 hyper_modifier= 8, /* Under X, the XK_Hyper_[LR] keysyms. */
180 meta_modifier = 16, /* Under X, the XK_Meta_[LR] keysyms. */
181 shift_modifier= 32,
182 super_modifier= 64, /* Under X, the XK_Super_[LR] keysyms. */
a1867fb1
JB
183 down_modifier = 128, /* Only used on mouse buttons. */
184 drag_modifier = 256, /* This is never used in the event
185 queue; it's only used internally by
186 the window-system-independent code. */
187 click_modifier= 512, /* See drag_modifier. */
80856e74
JB
188 last_modifier /* This should always be one more than the
189 highest modifier bit defined. */
190};
191
80856e74 192#endif