aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJim Blandy1993-05-04 02:39:39 +0000
committerJim Blandy1993-05-04 02:39:39 +0000
commitd82222e114a8fdf1fbe0ca295497186189edd225 (patch)
tree43753de49f4e4a30ccfdae061d27ada84d1c1bd9 /src
parentc2e4f49a68cdfedaca2c2a785a80b64ca677b1fe (diff)
downloademacs-d82222e114a8fdf1fbe0ca295497186189edd225.tar.gz
emacs-d82222e114a8fdf1fbe0ca295497186189edd225.zip
* 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.
Diffstat (limited to 'src')
-rw-r--r--src/termhooks.h34
1 files changed, 22 insertions, 12 deletions
diff --git a/src/termhooks.h b/src/termhooks.h
index 05340f074b5..a410038f5f6 100644
--- a/src/termhooks.h
+++ b/src/termhooks.h
@@ -294,20 +294,30 @@ enum {
294 up_modifier = 1, /* Only used on mouse buttons - always 294 up_modifier = 1, /* Only used on mouse buttons - always
295 turned into a click or a drag modifier 295 turned into a click or a drag modifier
296 before lisp code sees the event. */ 296 before lisp code sees the event. */
297 down_modifier = 128, /* Only used on mouse buttons. */ 297 down_modifier = 2, /* Only used on mouse buttons. */
298 drag_modifier = 256, /* This is never used in the event 298 drag_modifier = 4, /* This is never used in the event
299 queue; it's only used internally by 299 queue; it's only used internally by
300 the window-system-independent code. */ 300 the window-system-independent code. */
301 click_modifier= 512, /* See drag_modifier. */ 301 click_modifier= 8, /* See drag_modifier. */
302 302
303 /* The next four modifier bits are used also 303 /* The next four modifier bits are used also in keyboard events at
304 in keyboard events at the Lisp level. */ 304 the Lisp level.
305 alt_modifier = 0x040000, /* Under X, the XK_Alt_[LR] keysyms. */ 305
306 super_modifier= 0x080000, /* Under X, the XK_Super_[LR] keysyms. */ 306 It's probably not the greatest idea to use the 2^23 bit for any
307 hyper_modifier= 0x100000, /* Under X, the XK_Hyper_[LR] keysyms. */ 307 modifier. It may or may not be the sign bit, depending on
308 shift_modifier= 0x200000, 308 VALBITS, so using it to represent a modifier key means that
309 ctrl_modifier = 0x400000, 309 characters thus modified have different integer equivalents
310 meta_modifier = 0x800000, /* Under X, the XK_Meta_[LR] keysyms. */ 310 depending on the architecture they're running on. Oh, and
311 applying XINT to a character whose 2^23 bit is set sign-extends
312 it, so you get a bunch of bits in the mask you didn't want.
313
314 The CHAR_ macros are defined in lisp.h. */
315 alt_modifier = CHAR_ALT, /* Under X, the XK_Alt_[LR] keysyms. */
316 super_modifier= CHAR_SUPER, /* Under X, the XK_Super_[LR] keysyms. */
317 hyper_modifier= CHAR_HYPER, /* Under X, the XK_Hyper_[LR] keysyms. */
318 shift_modifier= CHAR_SHIFT,
319 ctrl_modifier = CHAR_CTL,
320 meta_modifier = CHAR_META, /* Under X, the XK_Meta_[LR] keysyms. */
311}; 321};
312 322
313#endif 323#endif