# HG changeset patch # User Stefan Monnier # Date 1017809373 0 # Node ID 4c66bc116ca91ec25d1c8cff50230408cc5a39f0 # Parent d38932df86fc63a87b9f7dbd1481b8bf233a7e93 (make_lispy_event): Handle unknown keysyms together with system-specific keysyms. Use it also for unknown function keys. diff -r d38932df86fc -r 4c66bc116ca9 src/keyboard.c --- a/src/keyboard.c Tue Apr 02 23:14:41 2002 +0000 +++ b/src/keyboard.c Wed Apr 03 04:49:33 2002 +0000 @@ -4762,21 +4762,6 @@ (sizeof (lispy_accent_keys) / sizeof (lispy_accent_keys[0]))); - /* Handle system-specific keysyms. */ - if (event->code & (1 << 28)) - { - /* We need to use an alist rather than a vector as the cache - since we can't make a vector long enuf. */ - if (NILP (current_kboard->system_key_syms)) - current_kboard->system_key_syms = Fcons (Qnil, Qnil); - return modify_event_symbol (event->code, - event->modifiers, - Qfunction_key, - current_kboard->Vsystem_key_alist, - 0, ¤t_kboard->system_key_syms, - (unsigned) -1); - } - #ifdef XK_kana_A if (event->code >= 0x400 && event->code < 0x500) return modify_event_symbol (event->code - 0x400, @@ -4796,30 +4781,26 @@ iso_lispy_function_keys, &func_key_syms, (sizeof (iso_lispy_function_keys) / sizeof (iso_lispy_function_keys[0]))); - else -#endif - -#ifdef HAVE_X_WINDOWS - if (event->code - FUNCTION_KEY_OFFSET < 0 +#endif + + /* Handle system-specific or unknown keysyms. */ + if (event->code & (1 << 28) + || event->code - FUNCTION_KEY_OFFSET < 0 || (event->code - FUNCTION_KEY_OFFSET - >= sizeof lispy_function_keys / sizeof *lispy_function_keys)) - { - /* EVENT->code is an unknown keysym, for example someone - assigned `ccaron' to a key in a locale where - XmbLookupString doesn't return a translation for it. */ - char *name; - Lisp_Object symbol; - - BLOCK_INPUT; - /* This returns a pointer to a static area. Don't free it. */ - name = XKeysymToString (event->code); - symbol = name ? intern (name) : Qnil; - UNBLOCK_INPUT; - - if (!NILP (symbol)) - return apply_modifiers (event->modifiers, symbol); - } -#endif /* HAVE_X_WINDOWS */ + >= sizeof lispy_function_keys / sizeof *lispy_function_keys) + || !lispy_function_keys[event->code - FUNCTION_KEY_OFFSET]) + { + /* We need to use an alist rather than a vector as the cache + since we can't make a vector long enuf. */ + if (NILP (current_kboard->system_key_syms)) + current_kboard->system_key_syms = Fcons (Qnil, Qnil); + return modify_event_symbol (event->code, + event->modifiers, + Qfunction_key, + current_kboard->Vsystem_key_alist, + 0, ¤t_kboard->system_key_syms, + (unsigned) -1); + } return modify_event_symbol (event->code - FUNCTION_KEY_OFFSET, event->modifiers,