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);