Commit | Line | Data |
---|---|---|
80856e74 JB |
1 | /* Hooks by which low level terminal operations |
2 | can be made to call other routines. | |
429ab54e GM |
3 | Copyright (C) 1985, 1986, 1993, 1994, 2001, 2002, 2003, 2004, |
4 | 2005, 2006, 2007 Free Software Foundation, Inc. | |
80856e74 JB |
5 | |
6 | This file is part of GNU Emacs. | |
7 | ||
8 | GNU Emacs is free software; you can redistribute it and/or modify | |
9 | it under the terms of the GNU General Public License as published by | |
684d6f5b | 10 | the Free Software Foundation; either version 3, or (at your option) |
80856e74 JB |
11 | any later version. |
12 | ||
13 | GNU Emacs is distributed in the hope that it will be useful, | |
14 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 | GNU General Public License for more details. | |
17 | ||
18 | You should have received a copy of the GNU General Public License | |
19 | along with GNU Emacs; see the file COPYING. If not, write to | |
4fc5845f LK |
20 | the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
21 | Boston, MA 02110-1301, USA. */ | |
80856e74 | 22 | |
ec3f896c JB |
23 | \f |
24 | /* Miscellanea. */ | |
25 | ||
6820433e GM |
26 | struct glyph; |
27 | struct frame; | |
28 | ||
ec3f896c JB |
29 | /* If nonzero, send all terminal output characters to this stream also. */ |
30 | extern FILE *termscript; | |
31 | ||
ec5d8db7 AS |
32 | /* Only use prototypes when lisp.h has been included. */ |
33 | #ifndef P_ | |
34 | #define P_(X) () | |
35 | #endif | |
ec3f896c JB |
36 | \f |
37 | /* Text display hooks. */ | |
80856e74 | 38 | |
6820433e | 39 | extern void (*cursor_to_hook) P_ ((int vpos, int hpos)); |
ec5d8db7 | 40 | extern void (*raw_cursor_to_hook) P_ ((int, int)); |
80856e74 | 41 | |
ec5d8db7 AS |
42 | extern void (*clear_to_end_hook) P_ ((void)); |
43 | extern void (*clear_frame_hook) P_ ((void)); | |
44 | extern void (*clear_end_of_line_hook) P_ ((int)); | |
80856e74 | 45 | |
ec5d8db7 | 46 | extern void (*ins_del_lines_hook) P_ ((int, int)); |
80856e74 | 47 | |
6820433e GM |
48 | extern void (*insert_glyphs_hook) P_ ((struct glyph *s, int n)); |
49 | extern void (*write_glyphs_hook) P_ ((struct glyph *s, int n)); | |
ec5d8db7 | 50 | extern void (*delete_glyphs_hook) P_ ((int)); |
80856e74 | 51 | |
ec5d8db7 | 52 | extern void (*ring_bell_hook) P_ ((void)); |
80856e74 | 53 | |
ec5d8db7 AS |
54 | extern void (*reset_terminal_modes_hook) P_ ((void)); |
55 | extern void (*set_terminal_modes_hook) P_ ((void)); | |
56 | extern void (*update_begin_hook) P_ ((struct frame *)); | |
57 | extern void (*update_end_hook) P_ ((struct frame *)); | |
58 | extern void (*set_terminal_window_hook) P_ ((int)); | |
80856e74 | 59 | |
ec3f896c JB |
60 | |
61 | \f | |
62 | /* Multi-frame and mouse support hooks. */ | |
80856e74 | 63 | |
a3c87d4e JB |
64 | enum scroll_bar_part { |
65 | scroll_bar_above_handle, | |
66 | scroll_bar_handle, | |
33d5f42a RS |
67 | scroll_bar_below_handle, |
68 | scroll_bar_up_arrow, | |
6820433e GM |
69 | scroll_bar_down_arrow, |
70 | scroll_bar_to_top, | |
71 | scroll_bar_to_bottom, | |
57207f1e SM |
72 | scroll_bar_end_scroll, |
73 | scroll_bar_move_ratio | |
20a558dc JB |
74 | }; |
75 | ||
76 | /* Return the current position of the mouse. | |
ec3f896c JB |
77 | |
78 | Set *f to the frame the mouse is in, or zero if the mouse is in no | |
79 | Emacs frame. If it is set to zero, all the other arguments are | |
80 | garbage. | |
81 | ||
a3c87d4e JB |
82 | If the motion started in a scroll bar, set *bar_window to the |
83 | scroll bar's window, *part to the part the mouse is currently over, | |
84 | *x to the position of the mouse along the scroll bar, and *y to the | |
85 | overall length of the scroll bar. | |
ec3f896c JB |
86 | |
87 | Otherwise, set *bar_window to Qnil, and *x and *y to the column and | |
88 | row of the character cell the mouse is over. | |
89 | ||
90 | Set *time to the time the mouse was at the returned position. | |
91 | ||
92 | This should clear mouse_moved until the next motion | |
93 | event arrives. */ | |
ec5d8db7 | 94 | extern void (*mouse_position_hook) P_ ((struct frame **f, int, |
ec3f896c | 95 | Lisp_Object *bar_window, |
a3c87d4e | 96 | enum scroll_bar_part *part, |
265a9e55 JB |
97 | Lisp_Object *x, |
98 | Lisp_Object *y, | |
ec5d8db7 | 99 | unsigned long *time)); |
265a9e55 JB |
100 | |
101 | /* The window system handling code should set this if the mouse has | |
102 | moved since the last call to the mouse_position_hook. Calling that | |
103 | hook should clear this. */ | |
104 | extern int mouse_moved; | |
80856e74 | 105 | |
0137dbf7 | 106 | /* When a frame's focus redirection is changed, this hook tells the |
0f79a4ae | 107 | window system code to re-decide where to put the highlight. Under |
265a9e55 | 108 | X, this means that Emacs lies about where the focus is. */ |
ec5d8db7 | 109 | extern void (*frame_rehighlight_hook) P_ ((struct frame *)); |
62c07cc7 | 110 | |
dbc4e1c1 JB |
111 | /* If we're displaying frames using a window system that can stack |
112 | frames on top of each other, this hook allows you to bring a frame | |
113 | to the front, or bury it behind all the other windows. If this | |
114 | hook is zero, that means the device we're displaying on doesn't | |
115 | support overlapping frames, so there's no need to raise or lower | |
116 | anything. | |
117 | ||
118 | If RAISE is non-zero, F is brought to the front, before all other | |
119 | windows. If RAISE is zero, F is sent to the back, behind all other | |
120 | windows. */ | |
ec5d8db7 | 121 | extern void (*frame_raise_lower_hook) P_ ((struct frame *f, int raise)); |
ec3f896c | 122 | |
9416ae44 JD |
123 | /* If the value of the frame parameter changed, whis hook is called. |
124 | For example, if going from fullscreen to not fullscreen this hook | |
125 | may do something OS dependent, like extended window manager hints on X11. */ | |
126 | extern void (*fullscreen_hook) P_ ((struct frame *f)); | |
127 | ||
ec3f896c | 128 | \f |
a3c87d4e | 129 | /* Scroll bar hooks. */ |
ec3f896c | 130 | |
a3c87d4e | 131 | /* The representation of scroll bars is determined by the code which |
ec3f896c JB |
132 | implements them, except for one thing: they must be represented by |
133 | lisp objects. This allows us to place references to them in | |
134 | Lisp_Windows without worrying about those references becoming | |
a3c87d4e | 135 | dangling references when the scroll bar is destroyed. |
ec3f896c JB |
136 | |
137 | The window-system-independent portion of Emacs just refers to | |
a3c87d4e | 138 | scroll bars via their windows, and never looks inside the scroll bar |
ec3f896c | 139 | representation; it always uses hook functions to do all the |
a3c87d4e | 140 | scroll bar manipulation it needs. |
ec3f896c | 141 | |
a3c87d4e JB |
142 | The `vertical_scroll_bar' field of a Lisp_Window refers to that |
143 | window's scroll bar, or is nil if the window doesn't have a | |
144 | scroll bar. | |
ec3f896c | 145 | |
a3c87d4e JB |
146 | The `scroll_bars' and `condemned_scroll_bars' fields of a Lisp_Frame |
147 | are free for use by the scroll bar implementation in any way it sees | |
ec3f896c JB |
148 | fit. They are marked by the garbage collector. */ |
149 | ||
150 | ||
a3c87d4e | 151 | /* Set the vertical scroll bar for WINDOW to have its upper left corner |
ec3f896c JB |
152 | at (TOP, LEFT), and be LENGTH rows high. Set its handle to |
153 | indicate that we are displaying PORTION characters out of a total | |
154 | of WHOLE characters, starting at POSITION. If WINDOW doesn't yet | |
a3c87d4e JB |
155 | have a scroll bar, create one for it. */ |
156 | extern void (*set_vertical_scroll_bar_hook) | |
ec5d8db7 AS |
157 | P_ ((struct window *window, |
158 | int portion, int whole, int position)); | |
20a558dc JB |
159 | |
160 | ||
161 | /* The following three hooks are used when we're doing a thorough | |
a3c87d4e | 162 | redisplay of the frame. We don't explicitly know which scroll bars |
20a558dc JB |
163 | are going to be deleted, because keeping track of when windows go |
164 | away is a real pain - can you say set-window-configuration? | |
165 | Instead, we just assert at the beginning of redisplay that *all* | |
a3c87d4e | 166 | scroll bars are to be removed, and then save scroll bars from the |
b72e4ca8 | 167 | fiery pit when we actually redisplay their window. */ |
20a558dc | 168 | |
a3c87d4e JB |
169 | /* Arrange for all scroll bars on FRAME to be removed at the next call |
170 | to `*judge_scroll_bars_hook'. A scroll bar may be spared if | |
177c0ea7 | 171 | `*redeem_scroll_bar_hook' is applied to its window before the judgement. |
ec3f896c JB |
172 | |
173 | This should be applied to each frame each time its window tree is | |
a3c87d4e JB |
174 | redisplayed, even if it is not displaying scroll bars at the moment; |
175 | if the HAS_SCROLL_BARS flag has just been turned off, only calling | |
176 | this and the judge_scroll_bars_hook will get rid of them. | |
20a558dc | 177 | |
ec3f896c | 178 | If non-zero, this hook should be safe to apply to any frame, |
a3c87d4e | 179 | whether or not it can support scroll bars, and whether or not it is |
ec3f896c | 180 | currently displaying them. */ |
ec5d8db7 | 181 | extern void (*condemn_scroll_bars_hook) P_ ((struct frame *frame)); |
ec3f896c | 182 | |
a3c87d4e JB |
183 | /* Unmark WINDOW's scroll bar for deletion in this judgement cycle. |
184 | Note that it's okay to redeem a scroll bar that is not condemned. */ | |
ec5d8db7 | 185 | extern void (*redeem_scroll_bar_hook) P_ ((struct window *window)); |
20a558dc | 186 | |
a3c87d4e | 187 | /* Remove all scroll bars on FRAME that haven't been saved since the |
177c0ea7 | 188 | last call to `*condemn_scroll_bars_hook'. |
ec3f896c JB |
189 | |
190 | This should be applied to each frame after each time its window | |
a3c87d4e JB |
191 | tree is redisplayed, even if it is not displaying scroll bars at the |
192 | moment; if the HAS_SCROLL_BARS flag has just been turned off, only | |
193 | calling this and condemn_scroll_bars_hook will get rid of them. | |
20a558dc | 194 | |
ec3f896c | 195 | If non-zero, this hook should be safe to apply to any frame, |
a3c87d4e | 196 | whether or not it can support scroll bars, and whether or not it is |
ec3f896c | 197 | currently displaying them. */ |
ec5d8db7 | 198 | extern void (*judge_scroll_bars_hook) P_ ((struct frame *FRAME)); |
20a558dc | 199 | |
ec3f896c JB |
200 | \f |
201 | /* Input queue declarations and hooks. */ | |
20a558dc | 202 | |
80856e74 | 203 | /* Expedient hack: only provide the below definitions to files that |
e0f24100 | 204 | are prepared to handle lispy things. CONSP is defined if lisp.h |
265a9e55 | 205 | has been included before this file. */ |
23c6349c | 206 | #ifdef CONSP |
80856e74 | 207 | |
351c638e RS |
208 | enum event_kind |
209 | { | |
3b8f9651 | 210 | NO_EVENT, /* nothing happened. This should never |
80856e74 | 211 | actually appear in the event queue. */ |
f05ddc05 | 212 | |
3b8f9651 | 213 | ASCII_KEYSTROKE_EVENT, /* The ASCII code is in .code, perhaps |
f05ddc05 JB |
214 | with modifiers applied. |
215 | .modifiers holds the state of the | |
216 | modifier keys. | |
ec3f896c JB |
217 | .frame_or_window is the frame in |
218 | which the key was typed. | |
265a9e55 JB |
219 | .timestamp gives a timestamp (in |
220 | milliseconds) for the keystroke. */ | |
3b8f9651 | 221 | MULTIBYTE_CHAR_KEYSTROKE_EVENT, /* The multibyte char code is in .code, |
4ff939ad KH |
222 | perhaps with modifiers applied. |
223 | The others are the same as | |
7273faa1 | 224 | ASCII_KEYSTROKE_EVENT. */ |
3b8f9651 | 225 | NON_ASCII_KEYSTROKE_EVENT, /* .code is a number identifying the |
80856e74 JB |
226 | function key. A code N represents |
227 | a key whose name is | |
228 | function_key_names[N]; function_key_names | |
229 | is a table in keyboard.c to which you | |
230 | should feel free to add missing keys. | |
231 | .modifiers holds the state of the | |
62c07cc7 | 232 | modifier keys. |
ec3f896c JB |
233 | .frame_or_window is the frame in |
234 | which the key was typed. | |
265a9e55 JB |
235 | .timestamp gives a timestamp (in |
236 | milliseconds) for the keystroke. */ | |
3b8f9651 PJ |
237 | TIMER_EVENT, /* A timer fired. */ |
238 | MOUSE_CLICK_EVENT, /* The button number is in .code; it must | |
a1867fb1 JB |
239 | be >= 0 and < NUM_MOUSE_BUTTONS, defined |
240 | below. | |
80856e74 JB |
241 | .modifiers holds the state of the |
242 | modifier keys. | |
243 | .x and .y give the mouse position, | |
1113d9db | 244 | in characters, within the window. |
ec3f896c JB |
245 | .frame_or_window gives the frame |
246 | the mouse click occurred in. | |
80856e74 JB |
247 | .timestamp gives a timestamp (in |
248 | milliseconds) for the click. */ | |
3ecad19e JR |
249 | WHEEL_EVENT, /* A wheel event is generated by a |
250 | wheel on a mouse (e.g., MS | |
251 | Intellimouse). | |
252 | .modifiers holds the rotate | |
253 | direction (up or down), and the | |
254 | state of the modifier keys. | |
255 | .x and .y give the mouse position, | |
256 | in characters, within the window. | |
257 | .frame_or_window gives the frame | |
258 | the wheel event occurred in. | |
259 | .timestamp gives a timestamp (in | |
260 | milliseconds) for the event. */ | |
9c5501d9 YM |
261 | #if defined (WINDOWSNT) || defined (MAC_OS) |
262 | LANGUAGE_CHANGE_EVENT, /* A LANGUAGE_CHANGE_EVENT is | |
263 | generated on WINDOWSNT or Mac OS | |
264 | when the keyboard layout or input | |
265 | language is changed by the | |
dba46b7c | 266 | user. */ |
ab8f1008 | 267 | #endif |
3b8f9651 | 268 | SCROLL_BAR_CLICK_EVENT, /* .code gives the number of the mouse button |
20a558dc JB |
269 | that was clicked. |
270 | .modifiers holds the state of the modifier | |
271 | keys. | |
80856e74 | 272 | .part is a lisp symbol indicating which |
a3c87d4e | 273 | part of the scroll bar got clicked. |
20a558dc JB |
274 | .x gives the distance from the start of the |
275 | scroll bar of the click; .y gives the total | |
276 | length of the scroll bar. | |
ec3f896c | 277 | .frame_or_window gives the window |
a3c87d4e | 278 | whose scroll bar was clicked in. |
80856e74 JB |
279 | .timestamp gives a timestamp (in |
280 | milliseconds) for the click. */ | |
33d5f42a | 281 | #ifdef WINDOWSNT |
3b8f9651 | 282 | W32_SCROLL_BAR_CLICK_EVENT, /* as for SCROLL_BAR_CLICK, but only generated |
33d5f42a RS |
283 | by MS-Windows scroll bar controls. */ |
284 | #endif | |
3b8f9651 | 285 | SELECTION_REQUEST_EVENT, /* Another X client wants a selection from us. |
0f8dad45 | 286 | See `struct selection_input_event'. */ |
3b8f9651 PJ |
287 | SELECTION_CLEAR_EVENT, /* Another X client cleared our selection. */ |
288 | BUFFER_SWITCH_EVENT, /* A process filter has switched buffers. */ | |
289 | DELETE_WINDOW_EVENT, /* An X client said "delete this window". */ | |
4d92e48d | 290 | MENU_BAR_EVENT, /* An event generated by the menu bar. |
b90afe71 | 291 | The frame_or_window field's cdr holds the |
765a05bc RS |
292 | Lisp-level event value. |
293 | (Only the toolkit version uses these.) */ | |
3b8f9651 PJ |
294 | ICONIFY_EVENT, /* An X client iconified this window. */ |
295 | DEICONIFY_EVENT, /* An X client deiconified this window. */ | |
296 | MENU_BAR_ACTIVATE_EVENT, /* A button press in the menu bar | |
c8b5ebed | 297 | (toolkit version only). */ |
3b8f9651 | 298 | DRAG_N_DROP_EVENT, /* A drag-n-drop event is generated when |
523812cd RS |
299 | files selected outside of Emacs are dropped |
300 | onto an Emacs window. | |
177c0ea7 | 301 | .modifiers holds the state of the |
523812cd RS |
302 | modifier keys. |
303 | .x and .y give the mouse position, | |
304 | in characters, within the window. | |
bf0f0659 YM |
305 | .frame_or_window is the frame in |
306 | which the drop was made. | |
307 | .arg is a platform-dependent | |
308 | representation of the dropped items. | |
523812cd RS |
309 | .timestamp gives a timestamp (in |
310 | milliseconds) for the click. */ | |
4d92e48d GM |
311 | USER_SIGNAL_EVENT, /* A user signal. |
312 | code is a number identifying it, | |
6820433e GM |
313 | index into lispy_user_signals. */ |
314 | ||
4d92e48d GM |
315 | /* Help events. Member `frame_or_window' of the input_event is the |
316 | frame on which the event occurred, and member `arg' contains | |
317 | the help to show. */ | |
6820433e GM |
318 | HELP_EVENT, |
319 | ||
4d92e48d GM |
320 | /* An event from a tool-bar. Member `arg' of the input event |
321 | contains the tool-bar item selected. If `frame_or_window' | |
322 | and `arg' are equal, this is a prefix event. */ | |
0f98c4c2 GM |
323 | TOOL_BAR_EVENT, |
324 | ||
325 | /* Queued from XTread_socket on FocusIn events. Translated into | |
326 | `switch-frame' events in kbd_buffer_get_event, if necessary. */ | |
408b2bfb JD |
327 | FOCUS_IN_EVENT, |
328 | ||
827b15c6 PJ |
329 | /* Generated when mouse moves over window not currently selected. */ |
330 | SELECT_WINDOW_EVENT, | |
331 | ||
408b2bfb JD |
332 | /* Queued from XTread_socket when session manager sends |
333 | save yourself before shutdown. */ | |
0f8dad45 YM |
334 | SAVE_SESSION_EVENT, |
335 | ||
336 | #ifdef MAC_OS | |
337 | /* Generated when an Apple event, a HICommand event, or a Services | |
338 | menu event is received and the corresponding handler is | |
339 | registered. Members `x' and `y' are for the event class and ID | |
8b6361c1 YM |
340 | symbols, respectively. Member `arg' is a Lisp object converted |
341 | from the received Apple event. Parameters for non-Apple events | |
342 | are converted to those in Apple events. */ | |
0f8dad45 YM |
343 | MAC_APPLE_EVENT |
344 | #endif | |
351c638e RS |
345 | }; |
346 | ||
3b8f9651 PJ |
347 | /* If a struct input_event has a kind which is SELECTION_REQUEST_EVENT |
348 | or SELECTION_CLEAR_EVENT, then its contents are really described | |
0f8dad45 | 349 | by `struct selection_input_event'; see xterm.h. */ |
351c638e RS |
350 | |
351 | /* The keyboard input buffer is an array of these structures. Each one | |
352 | represents some sort of input event - a keystroke, a mouse click, or | |
353 | a window system event. These get turned into their lispy forms when | |
354 | they are removed from the event queue. */ | |
355 | ||
f879067d RS |
356 | struct input_event |
357 | { | |
351c638e | 358 | /* What kind of event was this? */ |
a9dff54b | 359 | enum event_kind kind; |
177c0ea7 | 360 | |
3b8f9651 PJ |
361 | /* For an ASCII_KEYSTROKE_EVENT and MULTIBYTE_CHAR_KEYSTROKE_EVENT, |
362 | this is the character. | |
363 | For a NON_ASCII_KEYSTROKE_EVENT, this is the keysym code. | |
9257d374 | 364 | For a mouse event, this is the button number. */ |
ab8f1008 | 365 | /* In WindowsNT, for a mouse wheel event, this is the delta. */ |
653dfe64 | 366 | int code; |
a3c87d4e | 367 | enum scroll_bar_part part; |
ec3f896c | 368 | |
46cfcdb4 RS |
369 | int modifiers; /* See enum below for interpretation. */ |
370 | ||
371 | Lisp_Object x, y; | |
372 | unsigned long timestamp; | |
373 | ||
f879067d | 374 | /* This is padding just to put the frame_or_window field |
0f8dad45 | 375 | past the size of struct selection_input_event. */ |
f879067d RS |
376 | int *padding[2]; |
377 | ||
ec3f896c JB |
378 | /* This field is copied into a vector while the event is in the queue, |
379 | so that garbage collections won't kill it. */ | |
b90afe71 KH |
380 | /* In a menu_bar_event, this is a cons cell whose car is the frame |
381 | and whose cdr is the Lisp object that is the event's value. */ | |
46cfcdb4 RS |
382 | /* This field is last so that struct selection_input_event |
383 | does not overlap with it. */ | |
ec3f896c | 384 | Lisp_Object frame_or_window; |
4d92e48d GM |
385 | |
386 | /* Additional event argument. This is used for TOOL_BAR_EVENTs and | |
387 | HELP_EVENTs and avoids calling Fcons during signal handling. */ | |
388 | Lisp_Object arg; | |
80856e74 | 389 | }; |
ec5d8db7 | 390 | |
5400da8f SM |
391 | #define EVENT_INIT(event) bzero (&(event), sizeof (struct input_event)) |
392 | ||
ec5d8db7 | 393 | /* Called to read input events. */ |
9c46d57b | 394 | extern int (*read_socket_hook) P_ ((int, int, struct input_event *)); |
ec5d8db7 AS |
395 | |
396 | /* Called when a frame's display becomes entirely up to date. */ | |
397 | extern void (*frame_up_to_date_hook) P_ ((struct frame *)); | |
351c638e | 398 | \f |
a1867fb1 | 399 | |
21cec071 JB |
400 | /* Bits in the modifiers member of the input_event structure. |
401 | Note that reorder_modifiers assumes that the bits are in canonical | |
177c0ea7 | 402 | order. |
a1867fb1 JB |
403 | |
404 | The modifiers applied to mouse clicks are rather ornate. The | |
405 | window-system-specific code should store mouse clicks with | |
45288343 JB |
406 | up_modifier or down_modifier set. Having an explicit down modifier |
407 | simplifies some of window-system-independent code; without it, the | |
408 | code would have to recognize down events by checking if the event | |
409 | is a mouse click lacking the click and drag modifiers. | |
410 | ||
411 | The window-system independent code turns all up_modifier events | |
fbcd35bd JB |
412 | bits into drag_modifier, click_modifier, double_modifier, or |
413 | triple_modifier events. The click_modifier has no written | |
414 | representation in the names of the symbols used as event heads, | |
415 | but it does appear in the Qevent_symbol_components property of the | |
416 | event heads. */ | |
80856e74 | 417 | enum { |
a1867fb1 JB |
418 | up_modifier = 1, /* Only used on mouse buttons - always |
419 | turned into a click or a drag modifier | |
420 | before lisp code sees the event. */ | |
d82222e1 JB |
421 | down_modifier = 2, /* Only used on mouse buttons. */ |
422 | drag_modifier = 4, /* This is never used in the event | |
a1867fb1 JB |
423 | queue; it's only used internally by |
424 | the window-system-independent code. */ | |
d82222e1 | 425 | click_modifier= 8, /* See drag_modifier. */ |
fbcd35bd JB |
426 | double_modifier= 16, /* See drag_modifier. */ |
427 | triple_modifier= 32, /* See drag_modifier. */ | |
d82222e1 JB |
428 | |
429 | /* The next four modifier bits are used also in keyboard events at | |
430 | the Lisp level. | |
431 | ||
432 | It's probably not the greatest idea to use the 2^23 bit for any | |
433 | modifier. It may or may not be the sign bit, depending on | |
434 | VALBITS, so using it to represent a modifier key means that | |
435 | characters thus modified have different integer equivalents | |
436 | depending on the architecture they're running on. Oh, and | |
437 | applying XINT to a character whose 2^23 bit is set sign-extends | |
438 | it, so you get a bunch of bits in the mask you didn't want. | |
439 | ||
440 | The CHAR_ macros are defined in lisp.h. */ | |
441 | alt_modifier = CHAR_ALT, /* Under X, the XK_Alt_[LR] keysyms. */ | |
442 | super_modifier= CHAR_SUPER, /* Under X, the XK_Super_[LR] keysyms. */ | |
443 | hyper_modifier= CHAR_HYPER, /* Under X, the XK_Hyper_[LR] keysyms. */ | |
444 | shift_modifier= CHAR_SHIFT, | |
445 | ctrl_modifier = CHAR_CTL, | |
6cd195e2 | 446 | meta_modifier = CHAR_META /* Under X, the XK_Meta_[LR] keysyms. */ |
80856e74 JB |
447 | }; |
448 | ||
80856e74 | 449 | #endif |
ab5796a9 MB |
450 | |
451 | /* arch-tag: 33a00ecc-52b5-4186-a410-8801ac9f087d | |
452 | (do not change this comment) */ |