changeset 2659:3e8799eff918

* lisp.h (CHAR_ALT, CHAR_SUPER, CHAR_HYPER): New constants, in case we need them. * termhooks.h (alt_modifier, super_modifier, hyper_modifier, shift_modifier, ctrl_modifier, meta_modifier): Define these in terms of the CHAR_mumble macros, to avoid having the same thing defined in two places. Make the modifier manipulation functions more robust. The old way caused a bug once, and probably would again. * termhooks.h (alt_modifier, super_modifier, hyper_modifier, shift_modifier, ctrl_modifier, meta_modifier): Shift these all down one bit in value, to avoid sign extension problems. * lisp.h (CHAR_META, CHAR_CTL, CHAR_SHIFT): Fix these definitions too. * keyboard.c (lispy_modifier_list): Ignore modifier bits beyond what our table of modifier names can handle. (apply_modifiers): Don't abort if you see extra modifier bits, just remove them.
author Jim Blandy <jimb@redhat.com>
date Tue, 04 May 1993 02:39:39 +0000
parents 8be0a57686cb
children b70f4760d769
files src/termhooks.h
diffstat 1 files changed, 21 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/termhooks.h	Tue May 04 02:39:05 1993 +0000
+++ b/src/termhooks.h	Tue May 04 02:39:39 1993 +0000
@@ -294,20 +294,30 @@
   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.  */
+  click_modifier=   8,		/* See drag_modifier.  */
+
+  /* The next four modifier bits are used also in keyboard events at
+     the Lisp level.
 
-  /* 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.  */
+     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