X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/a3c87d4e63e999a3ed18efe60d6b36da3a48a314..4c8975adc59705c9620aa8816e0982dc47ab456b:/src/termhooks.h diff --git a/src/termhooks.h b/src/termhooks.h index 9a96b046e4..a410038f5f 100644 --- a/src/termhooks.h +++ b/src/termhooks.h @@ -1,6 +1,6 @@ /* Hooks by which low level terminal operations can be made to call other routines. - Copyright (C) 1985, 1986, 1992, 1993 Free Software Foundation, Inc. + Copyright (C) 1985, 1986, 1993 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -190,18 +190,11 @@ extern int (*read_socket_hook) (); has been included before this file. */ #ifdef XINT -/* The keyboard input buffer is an array of these structures. Each one - represents some sort of input event - a keystroke, a mouse click, or - a window system event. These get turned into their lispy forms when - they are removed from the event queue. */ - -struct input_event { - - /* What kind of event was this? */ - enum { - no_event, /* nothing happened. This should never +enum event_kind +{ + no_event, /* nothing happened. This should never actually appear in the event queue. */ - ascii_keystroke, /* The ASCII code is in .code. + ascii_keystroke, /* The ASCII code is in .code. .frame_or_window is the frame in which the key was typed. Note that this includes meta-keys, and @@ -209,7 +202,7 @@ struct input_event { is unused. .timestamp gives a timestamp (in milliseconds) for the keystroke. */ - non_ascii_keystroke, /* .code is a number identifying the + non_ascii_keystroke, /* .code is a number identifying the function key. A code N represents a key whose name is function_key_names[N]; function_key_names @@ -221,7 +214,7 @@ struct input_event { which the key was typed. .timestamp gives a timestamp (in milliseconds) for the keystroke. */ - mouse_click, /* The button number is in .code; it must + mouse_click, /* The button number is in .code; it must be >= 0 and < NUM_MOUSE_BUTTONS, defined below. .modifiers holds the state of the @@ -232,7 +225,7 @@ struct input_event { the mouse click occurred in. .timestamp gives a timestamp (in milliseconds) for the click. */ - scroll_bar_click, /* .code gives the number of the mouse button + scroll_bar_click, /* .code gives the number of the mouse button that was clicked. .modifiers holds the state of the modifier keys. @@ -245,7 +238,24 @@ struct input_event { whose scroll bar was clicked in. .timestamp gives a timestamp (in milliseconds) for the click. */ - } kind; + selection_request_event, /* Another X client wants a selection from us. + See `struct selection_event'. */ + selection_clear_event, /* Another X client cleared our selection. */ +}; + +/* If a struct input_event has a kind which is selection_request_event + or selection_clear_event, then its contents are really described + by `struct selection_event'; see xterm.h. */ + +/* The keyboard input buffer is an array of these structures. Each one + represents some sort of input event - a keystroke, a mouse click, or + a window system event. These get turned into their lispy forms when + they are removed from the event queue. */ + +struct input_event { + + /* What kind of event was this? */ + enum event_kind kind; Lisp_Object code; enum scroll_bar_part part; @@ -259,7 +269,7 @@ struct input_event { Lisp_Object x, y; unsigned long timestamp; }; - + /* This is used in keyboard.c, to tell how many buttons we will need to track the positions of. */ #define NUM_MOUSE_BUTTONS (5) @@ -284,19 +294,30 @@ enum { up_modifier = 1, /* Only used on mouse buttons - always turned into a click or a drag modifier before lisp code sees the event. */ - alt_modifier = 2, /* Under X, the XK_Alt_[LR] keysyms. */ - ctrl_modifier = 4, - hyper_modifier= 8, /* Under X, the XK_Hyper_[LR] keysyms. */ - meta_modifier = 16, /* Under X, the XK_Meta_[LR] keysyms. */ - shift_modifier= 32, - super_modifier= 64, /* Under X, the XK_Super_[LR] keysyms. */ - down_modifier = 128, /* Only used on mouse buttons. */ - drag_modifier = 256, /* This is never used in the event + down_modifier = 2, /* Only used on mouse buttons. */ + drag_modifier = 4, /* This is never used in the event queue; it's only used internally by the window-system-independent code. */ - click_modifier= 512, /* See drag_modifier. */ - last_modifier /* This should always be one more than the - highest modifier bit defined. */ + click_modifier= 8, /* See drag_modifier. */ + + /* The next four modifier bits are used also in keyboard events at + the Lisp level. + + It's probably not the greatest idea to use the 2^23 bit for any + modifier. It may or may not be the sign bit, depending on + VALBITS, so using it to represent a modifier key means that + characters thus modified have different integer equivalents + depending on the architecture they're running on. Oh, and + applying XINT to a character whose 2^23 bit is set sign-extends + it, so you get a bunch of bits in the mask you didn't want. + + The CHAR_ macros are defined in lisp.h. */ + alt_modifier = CHAR_ALT, /* Under X, the XK_Alt_[LR] keysyms. */ + super_modifier= CHAR_SUPER, /* Under X, the XK_Super_[LR] keysyms. */ + hyper_modifier= CHAR_HYPER, /* Under X, the XK_Hyper_[LR] keysyms. */ + shift_modifier= CHAR_SHIFT, + ctrl_modifier = CHAR_CTL, + meta_modifier = CHAR_META, /* Under X, the XK_Meta_[LR] keysyms. */ }; #endif