]> code.delx.au - gnu-emacs/blobdiff - src/termhooks.h
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
[gnu-emacs] / src / termhooks.h
index 4d07f67ecfbfff3b583a9c1a4633335717a62f04..a410038f5f6a7e61c1a8afbca67cb11aeae0cd0a 100644 (file)
@@ -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;
 };
-
+\f
 /* 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,20 +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.  */
-  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.  */
-
-  /* The next four modifier bits are used also
-     in keyboard events at the Lisp level.  */
-  alt_modifier =  0x040000,    /* Under X, the XK_Alt_[LR] keysyms.  */
-  super_modifier=  0x080000,   /* Under X, the XK_Super_[LR] keysyms.  */
-  hyper_modifier=  0x100000,   /* Under X, the XK_Hyper_[LR] keysyms.  */
-  shift_modifier=  0x200000,
-  ctrl_modifier        =  0x400000,
-  meta_modifier        =  0x800000,    /* Under X, the XK_Meta_[LR] keysyms.  */
+  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