296
|
1 /* Hooks by which low level terminal operations
|
|
2 can be made to call other routines.
|
648
|
3 Copyright (C) 1985, 1986, 1992 Free Software Foundation, Inc.
|
296
|
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
|
648
|
9 the Free Software Foundation; either version 2, or (at your option)
|
296
|
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) ();
|
766
|
26 extern int (*clear_frame_hook) ();
|
296
|
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
|
485
|
48 /* Return the current position of the mouse. This should clear
|
|
49 mouse_moved until the next motion event arrives. */
|
766
|
50 extern void (*mouse_position_hook) ( /* FRAME_PTR *f,
|
485
|
51 Lisp_Object *x,
|
|
52 Lisp_Object *y,
|
732
|
53 unsigned long *time */ );
|
296
|
54
|
485
|
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;
|
296
|
59
|
766
|
60 /* When a frame's focus redirection is changed, this hook tells the
|
357
|
61 window system code to re-decide where to put the highlight. Under
|
485
|
62 X, this means that Emacs lies about where the focus is. */
|
766
|
63 extern void (*frame_rehighlight_hook) ( /* void */ );
|
338
|
64
|
296
|
65 /* If nonzero, send all terminal output characters to this stream also. */
|
|
66 extern FILE *termscript;
|
|
67
|
|
68 /* Expedient hack: only provide the below definitions to files that
|
|
69 are prepared to handle lispy things. XINT is defined iff lisp.h
|
485
|
70 has been included before this file. */
|
|
71 #ifdef XINT
|
296
|
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. */
|
338
|
84 ascii_keystroke, /* The ASCII code is in .code.
|
766
|
85 .frame is the frame in which the key
|
338
|
86 was typed.
|
|
87 Note that this includes meta-keys, and
|
|
88 the modifiers field of the event
|
485
|
89 is unused.
|
|
90 .timestamp gives a timestamp (in
|
|
91 milliseconds) for the keystroke. */
|
296
|
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
|
338
|
99 modifier keys.
|
766
|
100 .frame is the frame in which the key
|
485
|
101 was typed.
|
|
102 .timestamp gives a timestamp (in
|
|
103 milliseconds) for the keystroke. */
|
296
|
104 mouse_click, /* The button number is in .code.
|
|
105 .modifiers holds the state of the
|
|
106 modifier keys.
|
|
107 .x and .y give the mouse position,
|
708
|
108 in characters, within the window.
|
766
|
109 .frame gives the frame the mouse
|
296
|
110 click occurred in.
|
|
111 .timestamp gives a timestamp (in
|
|
112 milliseconds) for the click. */
|
|
113 scrollbar_click, /* .code gives the number of the mouse
|
|
114 button that was clicked.
|
|
115 .part is a lisp symbol indicating which
|
|
116 part of the scrollbar got clicked. This
|
|
117 indicates whether the scroll bar was
|
|
118 horizontal or vertical.
|
|
119 .modifiers gives the state of the
|
|
120 modifier keys.
|
|
121 .x gives the distance from the start
|
|
122 of the scroll bar of the click; .y gives
|
|
123 the total length of the scroll bar.
|
766
|
124 .frame gives the frame the click
|
296
|
125 should apply to.
|
|
126 .timestamp gives a timestamp (in
|
|
127 milliseconds) for the click. */
|
338
|
128 #if 0
|
766
|
129 frame_selected, /* The user has moved the focus to another
|
|
130 frame.
|
|
131 .frame is the frame that should become
|
296
|
132 selected at the next convenient time. */
|
338
|
133 #endif
|
296
|
134 } kind;
|
|
135
|
|
136 Lisp_Object code;
|
|
137 Lisp_Object part;
|
732
|
138
|
|
139 /* This is obviously wrong, but I'm not sure what else I should do.
|
766
|
140 Obviously, this should be a FRAME_PTR. But that would require that
|
|
141 every file which #includes this one should also #include "frame.h",
|
732
|
142 which would mean that files like cm.c and other innocents would be
|
766
|
143 dragged into the set of frame.h users. Maybe the definition of this
|
732
|
144 structure should be elsewhere? In its own file? */
|
766
|
145 #ifdef MULTI_FRAME
|
|
146 struct frame *frame;
|
732
|
147 #else
|
766
|
148 int frame;
|
732
|
149 #endif
|
296
|
150 int modifiers; /* See enum below for interpretation. */
|
732
|
151
|
296
|
152 Lisp_Object x, y;
|
648
|
153 unsigned long timestamp;
|
296
|
154 };
|
|
155
|
|
156 /* Bits in the modifiers member of the input_event structure. */
|
|
157 enum {
|
|
158 shift_modifier = 1,
|
|
159 ctrl_modifier = 2,
|
|
160 meta_modifier = 4,
|
|
161 up_modifier = 8, /* This only applies to mouse buttons. */
|
|
162 last_modifier /* This should always be one more than the
|
|
163 highest modifier bit defined. */
|
|
164 };
|
|
165
|
|
166 #define NUM_MODIFIER_COMBOS ((last_modifier-1) << 1)
|
|
167
|
|
168 #endif
|