X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/ab8f100801965f815764803c3befaf58e4ab96d7..5078c8abf35fd1166acd6e2251a65831cc87611d:/src/termhooks.h diff --git a/src/termhooks.h b/src/termhooks.h index 431b183f8d..e129fa2a8a 100644 --- a/src/termhooks.h +++ b/src/termhooks.h @@ -22,35 +22,42 @@ Boston, MA 02111-1307, USA. */ /* Miscellanea. */ +struct glyph; +struct frame; + /* If nonzero, send all terminal output characters to this stream also. */ extern FILE *termscript; +/* Only use prototypes when lisp.h has been included. */ +#ifndef P_ +#define P_(X) () +#endif /* Text display hooks. */ -extern int (*cursor_to_hook) (); -extern int (*raw_cursor_to_hook) (); +extern void (*cursor_to_hook) P_ ((int vpos, int hpos)); +extern void (*raw_cursor_to_hook) P_ ((int, int)); -extern int (*clear_to_end_hook) (); -extern int (*clear_frame_hook) (); -extern int (*clear_end_of_line_hook) (); +extern void (*clear_to_end_hook) P_ ((void)); +extern void (*clear_frame_hook) P_ ((void)); +extern void (*clear_end_of_line_hook) P_ ((int)); -extern int (*ins_del_lines_hook) (); +extern void (*ins_del_lines_hook) P_ ((int, int)); -extern int (*change_line_highlight_hook) (); -extern int (*reassert_line_highlight_hook) (); +extern void (*change_line_highlight_hook) P_ ((int, int, int, int)); +extern void (*reassert_line_highlight_hook) P_ ((int, int)); -extern int (*insert_glyphs_hook) (); -extern int (*write_glyphs_hook) (); -extern int (*delete_glyphs_hook) (); +extern void (*insert_glyphs_hook) P_ ((struct glyph *s, int n)); +extern void (*write_glyphs_hook) P_ ((struct glyph *s, int n)); +extern void (*delete_glyphs_hook) P_ ((int)); -extern int (*ring_bell_hook) (); +extern void (*ring_bell_hook) P_ ((void)); -extern int (*reset_terminal_modes_hook) (); -extern int (*set_terminal_modes_hook) (); -extern int (*update_begin_hook) (); -extern int (*update_end_hook) (); -extern int (*set_terminal_window_hook) (); +extern void (*reset_terminal_modes_hook) P_ ((void)); +extern void (*set_terminal_modes_hook) P_ ((void)); +extern void (*update_begin_hook) P_ ((struct frame *)); +extern void (*update_end_hook) P_ ((struct frame *)); +extern void (*set_terminal_window_hook) P_ ((int)); @@ -61,7 +68,11 @@ enum scroll_bar_part { scroll_bar_handle, scroll_bar_below_handle, scroll_bar_up_arrow, - scroll_bar_down_arrow + scroll_bar_down_arrow, + scroll_bar_to_top, + scroll_bar_to_bottom, + scroll_bar_end_scroll, + scroll_bar_move_ratio }; /* Return the current position of the mouse. @@ -82,12 +93,12 @@ enum scroll_bar_part { This should clear mouse_moved until the next motion event arrives. */ -extern void (*mouse_position_hook) ( /* FRAME_PTR *f, +extern void (*mouse_position_hook) P_ ((struct frame **f, int, Lisp_Object *bar_window, enum scroll_bar_part *part, Lisp_Object *x, Lisp_Object *y, - unsigned long *time */ ); + unsigned long *time)); /* The window system handling code should set this if the mouse has moved since the last call to the mouse_position_hook. Calling that @@ -97,7 +108,7 @@ extern int mouse_moved; /* When a frame's focus redirection is changed, this hook tells the window system code to re-decide where to put the highlight. Under X, this means that Emacs lies about where the focus is. */ -extern void (*frame_rehighlight_hook) ( /* void */ ); +extern void (*frame_rehighlight_hook) P_ ((struct frame *)); /* If we're displaying frames using a window system that can stack frames on top of each other, this hook allows you to bring a frame @@ -109,7 +120,7 @@ extern void (*frame_rehighlight_hook) ( /* void */ ); If RAISE is non-zero, F is brought to the front, before all other windows. If RAISE is zero, F is sent to the back, behind all other windows. */ -extern void (*frame_raise_lower_hook) ( /* FRAME_PTR f, int raise */ ); +extern void (*frame_raise_lower_hook) P_ ((struct frame *f, int raise)); /* Scroll bar hooks. */ @@ -140,8 +151,8 @@ extern void (*frame_raise_lower_hook) ( /* FRAME_PTR f, int raise */ ); of WHOLE characters, starting at POSITION. If WINDOW doesn't yet have a scroll bar, create one for it. */ extern void (*set_vertical_scroll_bar_hook) - ( /* struct window *window, - int portion, int whole, int position */ ); + P_ ((struct window *window, + int portion, int whole, int position)); /* The following three hooks are used when we're doing a thorough @@ -164,11 +175,11 @@ extern void (*set_vertical_scroll_bar_hook) If non-zero, this hook should be safe to apply to any frame, whether or not it can support scroll bars, and whether or not it is currently displaying them. */ -extern void (*condemn_scroll_bars_hook)( /* FRAME_PTR *frame */ ); +extern void (*condemn_scroll_bars_hook) P_ ((struct frame *frame)); /* Unmark WINDOW's scroll bar for deletion in this judgement cycle. Note that it's okay to redeem a scroll bar that is not condemned. */ -extern void (*redeem_scroll_bar_hook)( /* struct window *window */ ); +extern void (*redeem_scroll_bar_hook) P_ ((struct window *window)); /* Remove all scroll bars on FRAME that haven't been saved since the last call to `*condemn_scroll_bars_hook'. @@ -181,17 +192,11 @@ extern void (*redeem_scroll_bar_hook)( /* struct window *window */ ); If non-zero, this hook should be safe to apply to any frame, whether or not it can support scroll bars, and whether or not it is currently displaying them. */ -extern void (*judge_scroll_bars_hook)( /* FRAME_PTR *FRAME */ ); +extern void (*judge_scroll_bars_hook) P_ ((struct frame *FRAME)); /* Input queue declarations and hooks. */ -/* Called to read input events. */ -extern int (*read_socket_hook) (); - -/* Called when a frame's display becomes entirely up to date. */ -extern int (*frame_up_to_date_hook) (); - /* Expedient hack: only provide the below definitions to files that are prepared to handle lispy things. CONSP is defined iff lisp.h has been included before this file. */ @@ -210,6 +215,12 @@ enum event_kind which the key was typed. .timestamp gives a timestamp (in milliseconds) for the keystroke. */ + multibyte_char_keystroke, /* The multibye char code is in .code, + perhaps with modifiers applied. + The others are the same as + ascii_keystroke. This type of event + is generated only when we are using + XIM on X window. */ non_ascii_keystroke, /* .code is a number identifying the function key. A code N represents a key whose name is @@ -235,7 +246,8 @@ enum event_kind .timestamp gives a timestamp (in milliseconds) for the click. */ #ifdef WINDOWSNT - mouse_wheel, /* A mouse-wheel event is generated by a + mouse_wheel, /* A mouse-wheel event is generated + on WINDOWSNT by a wheel on a mouse (e.g., MS Intellimouse). The event contains a delta that corresponds to the amount and direction that the wheel @@ -250,6 +262,10 @@ enum event_kind the wheel event occurred in. .timestamp gives a timestamp (in milliseconds) for the wheel event. */ + language_change_event, /* A language_change event is generated + on WINDOWSNT when the keyboard layout + or input language is changed by the + user. */ #endif scroll_bar_click, /* .code gives the number of the mouse button that was clicked. @@ -273,14 +289,44 @@ enum event_kind selection_clear_event, /* Another X client cleared our selection. */ buffer_switch_event, /* A process filter has switched buffers. */ delete_window_event, /* An X client said "delete this window". */ - menu_bar_event, /* An event generated by the menu bar. + MENU_BAR_EVENT, /* An event generated by the menu bar. The frame_or_window field's cdr holds the Lisp-level event value. (Only the toolkit version uses these.) */ iconify_event, /* An X client iconified this window. */ deiconify_event, /* An X client deiconified this window. */ - menu_bar_activate_event /* A button press in the menu bar + menu_bar_activate_event, /* A button press in the menu bar (toolkit version only). */ + drag_n_drop, /* A drag-n-drop event is generated when + files selected outside of Emacs are dropped + onto an Emacs window. + Currently used only on Windows NT. + .modifiers holds the state of the + modifier keys. + .x and .y give the mouse position, + in characters, within the window. + .frame_or_window is a cons of the frame + in which the drop was made and a list of + the filenames of the dropped files. + .timestamp gives a timestamp (in + milliseconds) for the click. */ + USER_SIGNAL_EVENT, /* A user signal. + code is a number identifying it, + index into lispy_user_signals. */ + + /* Help events. Member `frame_or_window' of the input_event is the + frame on which the event occurred, and member `arg' contains + the help to show. */ + HELP_EVENT, + + /* An event from a tool-bar. Member `arg' of the input event + contains the tool-bar item selected. If `frame_or_window' + and `arg' are equal, this is a prefix event. */ + TOOL_BAR_EVENT, + + /* Queued from XTread_socket on FocusIn events. Translated into + `switch-frame' events in kbd_buffer_get_event, if necessary. */ + FOCUS_IN_EVENT }; /* If a struct input_event has a kind which is selection_request_event @@ -294,11 +340,11 @@ enum event_kind struct input_event { - /* What kind of event was this? */ int kind; - /* For an ascii_keystroke, this is the character. + /* For an ascii_keystroke and multibyte_char_keystroke, this is the + character. For a non_ascii_keystroke, this is the keysym code. For a mouse event, this is the button number. */ /* In WindowsNT, for a mouse wheel event, this is the delta. */ @@ -321,11 +367,18 @@ struct input_event /* This field is last so that struct selection_input_event does not overlap with it. */ Lisp_Object frame_or_window; + + /* Additional event argument. This is used for TOOL_BAR_EVENTs and + HELP_EVENTs and avoids calling Fcons during signal handling. */ + Lisp_Object arg; }; + +/* Called to read input events. */ +extern int (*read_socket_hook) P_ ((int, struct input_event *, int, int)); + +/* Called when a frame's display becomes entirely up to date. */ +extern void (*frame_up_to_date_hook) P_ ((struct frame *)); -/* This is used in keyboard.c, to tell how many buttons we will need - to track the positions of. */ -#define NUM_MOUSE_BUTTONS (5) /* Bits in the modifiers member of the input_event structure. Note that reorder_modifiers assumes that the bits are in canonical