--- rxvt-unicode/src/xdefaults.C 2011/05/30 18:39:04 1.154 +++ rxvt-unicode/src/xdefaults.C 2011/12/02 09:03:43 1.159 @@ -586,7 +586,7 @@ * "rxvt" "keysym" "0xFF01" * value will be a string */ -int +static int rxvt_define_key (XrmDatabase *database ecb_unused, XrmBindingList bindings ecb_unused, XrmQuarkList quarks, @@ -665,7 +665,7 @@ { unsigned int i; - for (i=0; i < ecb_array_length (keysym_vocabulary); ++i) + for (i = 0; i < ecb_array_length (keysym_vocabulary); ++i) { if (strncmp (str, keysym_vocabulary [i].name, keysym_vocabulary [i].len) == 0) { @@ -692,7 +692,10 @@ return -1; } - keyboard->register_user_translation (sym, state, arg); + wchar_t *ws = rxvt_mbstowcs (arg); + if (!HOOK_INVOKE ((this, HOOK_REGISTER_COMMAND, DT_INT, sym, DT_INT, state, DT_WCS_LEN, ws, wcslen (ws), DT_END))) + keyboard->register_user_translation (sym, state, ws); + free (ws); return 1; } @@ -775,11 +778,18 @@ } } } +#endif /* NO_RESOURCES */ +} +void +rxvt_term::extract_keysym_resources () +{ +#ifndef NO_RESOURCES /* * [R5 or later]: enumerate the resource database */ # ifdef KEYSYM_RESOURCE + XrmDatabase database = XrmGetDatabase (dpy); XrmName name_prefix[3]; XrmClass class_prefix[3]; @@ -793,10 +803,7 @@ XrmEnumerateDatabase (database, name_prefix, class_prefix, XrmEnumOneLevel, rxvt_define_key, NULL); # ifdef RESFALLBACK - name_prefix[0] = XrmStringToName (RESFALLBACK); - name_prefix[1] = XrmStringToName ("keysym"); - class_prefix[0] = XrmStringToName (RESFALLBACK); - class_prefix[1] = XrmStringToName ("Keysym"); + name_prefix[0] = class_prefix[0] = XrmStringToName (RESFALLBACK); /* XXX: Need to check sizeof (rxvt_t) == sizeof (XPointer) */ XrmEnumerateDatabase (database, name_prefix, class_prefix, XrmEnumOneLevel, rxvt_define_key, NULL);