1 /* Hooks by which low level terminal operations
2 can be made to call other routines.
3 Copyright (C) 1985, 1986, 1992 Free Software Foundation, Inc.
5 This file is part of GNU Emacs.
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
9 the Free Software Foundation; either version 2, or (at your option)
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.
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. */
22 extern int (*cursor_to_hook
) ();
23 extern int (*raw_cursor_to_hook
) ();
25 extern int (*clear_to_end_hook
) ();
26 extern int (*clear_frame_hook
) ();
27 extern int (*clear_end_of_line_hook
) ();
29 extern int (*ins_del_lines_hook
) ();
31 extern int (*change_line_highlight_hook
) ();
32 extern int (*reassert_line_highlight_hook
) ();
34 extern int (*insert_glyphs_hook
) ();
35 extern int (*write_glyphs_hook
) ();
36 extern int (*delete_glyphs_hook
) ();
38 extern int (*ring_bell_hook
) ();
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
) ();
46 extern int (*read_socket_hook
) ();
48 /* Return the current position of the mouse. This should clear
49 mouse_moved until the next motion event arrives. */
50 extern void (*mouse_position_hook
) ( /* FRAME_PTR *f,
53 unsigned long *time */ );
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
;
60 /* When a frame's focus redirection is changed, this hook tells the
61 window system code to re-decide where to put the highlight. Under
62 X, this means that Emacs lies about where the focus is. */
63 extern void (*frame_rehighlight_hook
) ( /* void */ );
65 /* If nonzero, send all terminal output characters to this stream also. */
66 extern FILE *termscript
;
68 /* Expedient hack: only provide the below definitions to files that
69 are prepared to handle lispy things. XINT is defined iff lisp.h
70 has been included before this file. */
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. */
80 /* What kind of event was this? */
82 no_event
, /* nothing happened. This should never
83 actually appear in the event queue. */
84 ascii_keystroke
, /* The ASCII code is in .code.
85 .frame is the frame in which the key
87 Note that this includes meta-keys, and
88 the modifiers field of the event
90 .timestamp gives a timestamp (in
91 milliseconds) for the keystroke. */
92 non_ascii_keystroke
, /* .code is a number identifying the
93 function key. A code N represents
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
100 .frame is the frame in which the key
102 .timestamp gives a timestamp (in
103 milliseconds) for the keystroke. */
104 mouse_click
, /* The button number is in .code; it must
105 be >= 0 and < NUM_MOUSE_BUTTONS, defined
107 .modifiers holds the state of the
109 .x and .y give the mouse position,
110 in characters, within the window.
111 .frame gives the frame the mouse
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
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.
126 .frame gives the frame the click
128 .timestamp gives a timestamp (in
129 milliseconds) for the click. */
131 frame_selected
, /* The user has moved the focus to another
133 .frame is the frame that should become
134 selected at the next convenient time. */
141 /* This is obviously wrong, but I'm not sure what else I should do.
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",
144 which would mean that files like cm.c and other innocents would be
145 dragged into the set of frame.h users. Maybe the definition of this
146 structure should be elsewhere? In its own file? */
152 int modifiers
; /* See enum below for interpretation. */
155 unsigned long timestamp
;
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)
162 /* Bits in the modifiers member of the input_event structure.
163 Note that reorder_modifiers assumes that the bits are in canonical
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. */
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. */
177 alt_modifier
= 2, /* Under X, the XK_Alt_[LR] keysyms. */
179 hyper_modifier
= 8, /* Under X, the XK_Hyper_[LR] keysyms. */
180 meta_modifier
= 16, /* Under X, the XK_Meta_[LR] keysyms. */
182 super_modifier
= 64, /* Under X, the XK_Super_[LR] keysyms. */
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. */
188 last_modifier
/* This should always be one more than the
189 highest modifier bit defined. */