Commit | Line | Data |
---|---|---|
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 | |
5 | This file is part of GNU Emacs. | |
6 | ||
7 | GNU Emacs is free software; you can redistribute it and/or modify | |
8 | it under the terms of the GNU General Public License as published by | |
ffd56f97 | 9 | the Free Software Foundation; either version 2, or (at your option) |
80856e74 JB |
10 | any later version. |
11 | ||
12 | GNU Emacs is distributed in the hope that it will be useful, | |
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | GNU General Public License for more details. | |
16 | ||
17 | You should have received a copy of the GNU General Public License | |
18 | along with GNU Emacs; see the file COPYING. If not, write to | |
19 | the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ | |
20 | ||
21 | ||
22 | extern int (*cursor_to_hook) (); | |
23 | extern int (*raw_cursor_to_hook) (); | |
24 | ||
25 | extern int (*clear_to_end_hook) (); | |
0137dbf7 | 26 | extern int (*clear_frame_hook) (); |
80856e74 JB |
27 | extern int (*clear_end_of_line_hook) (); |
28 | ||
29 | extern int (*ins_del_lines_hook) (); | |
30 | ||
31 | extern int (*change_line_highlight_hook) (); | |
32 | extern int (*reassert_line_highlight_hook) (); | |
33 | ||
34 | extern int (*insert_glyphs_hook) (); | |
35 | extern int (*write_glyphs_hook) (); | |
36 | extern int (*delete_glyphs_hook) (); | |
37 | ||
38 | extern int (*ring_bell_hook) (); | |
39 | ||
40 | extern int (*reset_terminal_modes_hook) (); | |
41 | extern int (*set_terminal_modes_hook) (); | |
42 | extern int (*update_begin_hook) (); | |
43 | extern int (*update_end_hook) (); | |
44 | extern int (*set_terminal_window_hook) (); | |
45 | ||
46 | extern 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 | 50 | extern 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. */ | |
58 | extern 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 | 63 | extern void (*frame_rehighlight_hook) ( /* void */ ); |
62c07cc7 | 64 | |
80856e74 | 65 | /* If nonzero, send all terminal output characters to this stream also. */ |
80856e74 JB |
66 | extern 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 | ||
78 | struct 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 | 173 | enum { |
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 |