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.
105 .modifiers holds the state of the
107 .x and .y give the mouse position,
108 in characters, within the window.
109 .frame gives the frame the mouse
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
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.
124 .frame gives the frame the click
126 .timestamp gives a timestamp (in
127 milliseconds) for the click. */
129 frame_selected
, /* The user has moved the focus to another
131 .frame is the frame that should become
132 selected at the next convenient time. */
139 /* This is obviously wrong, but I'm not sure what else I should do.
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",
142 which would mean that files like cm.c and other innocents would be
143 dragged into the set of frame.h users. Maybe the definition of this
144 structure should be elsewhere? In its own file? */
150 int modifiers
; /* See enum below for interpretation. */
153 unsigned long timestamp
;
156 /* Bits in the modifiers member of the input_event structure. */
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. */
166 #define NUM_MODIFIER_COMBOS ((last_modifier-1) << 1)