Mercurial > emacs
comparison src/keyboard.c @ 12173:f31fca0fcdb0
(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.
author | Karl Heuer <kwzh@gnu.org> |
---|---|
date | Fri, 09 Jun 1995 19:15:55 +0000 |
parents | 14d4e014f55f |
children | 3e14d94320f2 |
comparison
equal
deleted
inserted
replaced
12172:58ce63f11008 | 12173:f31fca0fcdb0 |
---|---|
437 extern Lisp_Object Qmenu_enable; | 437 extern Lisp_Object Qmenu_enable; |
438 | 438 |
439 Lisp_Object recursive_edit_unwind (), command_loop (); | 439 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 | |
443 extern char *x_get_keysym_name (); | |
442 | 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; |
446 | 448 |
3001 { | 3003 { |
3002 /* We need to use an alist rather than a vector as the cache | 3004 /* We need to use an alist rather than a vector as the cache |
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, |
3014 event->modifiers, | 3016 event->modifiers, |
3015 Qfunction_key, Qnil, | 3017 Qfunction_key, Qnil, |
3720 unsigned modifiers; | 3722 unsigned modifiers; |
3721 Lisp_Object symbol_kind; | 3723 Lisp_Object symbol_kind; |
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) |
3734 return Qnil; | 3737 return Qnil; |
3735 | 3738 |
3760 /* No; let's create it. */ | 3763 /* No; let's create it. */ |
3761 if (!NILP (name_alist)) | 3764 if (!NILP (name_alist)) |
3762 value = Fcdr_safe (Fassq (symbol_int, name_alist)); | 3765 value = Fcdr_safe (Fassq (symbol_int, 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]); |
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 | |
3765 | 3777 |
3766 if (NILP (value)) | 3778 if (NILP (value)) |
3767 { | 3779 { |
3768 char buf[20]; | 3780 char buf[20]; |
3769 sprintf (buf, "key-%d", symbol_num); | 3781 sprintf (buf, "key-%d", symbol_num); |