Commit d82222e1 authored by Jim Blandy's avatar Jim Blandy

* 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.
parent c2e4f49a
......@@ -294,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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment