diff options
| author | Jim Blandy | 1993-05-04 02:39:39 +0000 |
|---|---|---|
| committer | Jim Blandy | 1993-05-04 02:39:39 +0000 |
| commit | d82222e114a8fdf1fbe0ca295497186189edd225 (patch) | |
| tree | 43753de49f4e4a30ccfdae061d27ada84d1c1bd9 /src | |
| parent | c2e4f49a68cdfedaca2c2a785a80b64ca677b1fe (diff) | |
| download | emacs-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.h | 34 |
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 |