diff options
| author | Karl Heuer | 1995-06-09 19:15:55 +0000 |
|---|---|---|
| committer | Karl Heuer | 1995-06-09 19:15:55 +0000 |
| commit | 2c834fb35bbe69c629333796a58b98b18c13007b (patch) | |
| tree | ec5bb7d462f100905c948914007ee01d4e6a7dd7 /src | |
| parent | d047c4ebf21104688ff15f0cc3a3882997bb53fd (diff) | |
| download | emacs-2c834fb35bbe69c629333796a58b98b18c13007b.tar.gz emacs-2c834fb35bbe69c629333796a58b98b18c13007b.zip | |
(modify_event_symbol): Mask out high bits here,
and only for certain purposes. table_size now unsigned.
(modify_event_symbol) [HAVE_X_WINDOWS]: Use x_get_keysym_name.
(make_lispy_event): Don't mask high bits here.
Supply -1 as table_size for system-specific keys.
Diffstat (limited to 'src')
| -rw-r--r-- | src/keyboard.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/keyboard.c b/src/keyboard.c index 6e4485b1460..45890ee9944 100644 --- a/src/keyboard.c +++ b/src/keyboard.c | |||
| @@ -440,6 +440,8 @@ Lisp_Object recursive_edit_unwind (), command_loop (); | |||
| 440 | Lisp_Object Fthis_command_keys (); | 440 | Lisp_Object Fthis_command_keys (); |
| 441 | Lisp_Object Qextended_command_history; | 441 | Lisp_Object Qextended_command_history; |
| 442 | 442 | ||
| 443 | extern char *x_get_keysym_name (); | ||
| 444 | |||
| 443 | Lisp_Object Qpolling_period; | 445 | Lisp_Object Qpolling_period; |
| 444 | 446 | ||
| 445 | extern Lisp_Object Vprint_level, Vprint_length; | 447 | extern Lisp_Object Vprint_level, Vprint_length; |
| @@ -3003,11 +3005,11 @@ make_lispy_event (event) | |||
| 3003 | since we can't make a vector long enuf. */ | 3005 | since we can't make a vector long enuf. */ |
| 3004 | if (NILP (system_key_syms)) | 3006 | if (NILP (system_key_syms)) |
| 3005 | system_key_syms = Fcons (Qnil, Qnil); | 3007 | system_key_syms = Fcons (Qnil, Qnil); |
| 3006 | return modify_event_symbol (event->code & 0xffffff, | 3008 | return modify_event_symbol (event->code, |
| 3007 | event->modifiers, | 3009 | event->modifiers, |
| 3008 | Qfunction_key, | 3010 | Qfunction_key, |
| 3009 | current_kboard->Vsystem_key_alist, | 3011 | current_kboard->Vsystem_key_alist, |
| 3010 | 0, &system_key_syms, 0xffffff); | 3012 | 0, &system_key_syms, (unsigned)-1); |
| 3011 | } | 3013 | } |
| 3012 | 3014 | ||
| 3013 | return modify_event_symbol (event->code - 0xff00, | 3015 | return modify_event_symbol (event->code - 0xff00, |
| @@ -3722,12 +3724,13 @@ modify_event_symbol (symbol_num, modifiers, symbol_kind, name_alist, | |||
| 3722 | Lisp_Object name_alist; | 3724 | Lisp_Object name_alist; |
| 3723 | char **name_table; | 3725 | char **name_table; |
| 3724 | Lisp_Object *symbol_table; | 3726 | Lisp_Object *symbol_table; |
| 3725 | int table_size; | 3727 | unsigned int table_size; |
| 3726 | { | 3728 | { |
| 3727 | Lisp_Object value; | 3729 | Lisp_Object value; |
| 3728 | Lisp_Object symbol_int; | 3730 | Lisp_Object symbol_int; |
| 3729 | 3731 | ||
| 3730 | XSETINT (symbol_int, symbol_num); | 3732 | /* Get rid of the "vendor-specific" bit here. */ |
| 3733 | XSETINT (symbol_int, symbol_num & 0xffffff); | ||
| 3731 | 3734 | ||
| 3732 | /* Is this a request for a valid symbol? */ | 3735 | /* Is this a request for a valid symbol? */ |
| 3733 | if (symbol_num < 0 || symbol_num >= table_size) | 3736 | if (symbol_num < 0 || symbol_num >= table_size) |
| @@ -3763,6 +3766,15 @@ modify_event_symbol (symbol_num, modifiers, symbol_kind, name_alist, | |||
| 3763 | else if (name_table[symbol_num]) | 3766 | else if (name_table[symbol_num]) |
| 3764 | value = intern (name_table[symbol_num]); | 3767 | value = intern (name_table[symbol_num]); |
| 3765 | 3768 | ||
| 3769 | #ifdef HAVE_X_WINDOWS | ||
| 3770 | if (NILP (value)) | ||
| 3771 | { | ||
| 3772 | char *name = x_get_keysym_name (symbol_num); | ||
| 3773 | if (name) | ||
| 3774 | value = intern (name); | ||
| 3775 | } | ||
| 3776 | #endif | ||
| 3777 | |||
| 3766 | if (NILP (value)) | 3778 | if (NILP (value)) |
| 3767 | { | 3779 | { |
| 3768 | char buf[20]; | 3780 | char buf[20]; |