… | |
… | |
584 | * Define key from XrmEnumerateDatabase. |
584 | * Define key from XrmEnumerateDatabase. |
585 | * quarks will be something like |
585 | * quarks will be something like |
586 | * "rxvt" "keysym" "0xFF01" |
586 | * "rxvt" "keysym" "0xFF01" |
587 | * value will be a string |
587 | * value will be a string |
588 | */ |
588 | */ |
589 | int |
589 | static int |
590 | rxvt_define_key (XrmDatabase *database ecb_unused, |
590 | rxvt_define_key (XrmDatabase *database ecb_unused, |
591 | XrmBindingList bindings ecb_unused, |
591 | XrmBindingList bindings ecb_unused, |
592 | XrmQuarkList quarks, |
592 | XrmQuarkList quarks, |
593 | XrmRepresentation *type ecb_unused, |
593 | XrmRepresentation *type ecb_unused, |
594 | XrmValue *value, |
594 | XrmValue *value, |
… | |
… | |
663 | // parse modifiers |
663 | // parse modifiers |
664 | while (str < key) |
664 | while (str < key) |
665 | { |
665 | { |
666 | unsigned int i; |
666 | unsigned int i; |
667 | |
667 | |
668 | for (i=0; i < ecb_array_length (keysym_vocabulary); ++i) |
668 | for (i = 0; i < ecb_array_length (keysym_vocabulary); ++i) |
669 | { |
669 | { |
670 | if (strncmp (str, keysym_vocabulary [i].name, keysym_vocabulary [i].len) == 0) |
670 | if (strncmp (str, keysym_vocabulary [i].name, keysym_vocabulary [i].len) == 0) |
671 | { |
671 | { |
672 | state |= keysym_vocabulary[i].value; |
672 | state |= keysym_vocabulary[i].value; |
673 | str += keysym_vocabulary[i].len; |
673 | str += keysym_vocabulary[i].len; |
… | |
… | |
690 | sym = strtol (str, &end, 16); |
690 | sym = strtol (str, &end, 16); |
691 | if (*end) |
691 | if (*end) |
692 | return -1; |
692 | return -1; |
693 | } |
693 | } |
694 | |
694 | |
|
|
695 | wchar_t *ws = rxvt_mbstowcs (arg); |
|
|
696 | if (!HOOK_INVOKE ((this, HOOK_REGISTER_COMMAND, DT_INT, sym, DT_INT, state, DT_WCS_LEN, ws, wcslen (ws), DT_END))) |
695 | keyboard->register_user_translation (sym, state, arg); |
697 | keyboard->register_user_translation (sym, state, ws); |
|
|
698 | free (ws); |
696 | return 1; |
699 | return 1; |
697 | } |
700 | } |
698 | |
701 | |
699 | # endif /* KEYSYM_RESOURCE */ |
702 | # endif /* KEYSYM_RESOURCE */ |
700 | #endif /* NO_RESOURCES */ |
703 | #endif /* NO_RESOURCES */ |
… | |
… | |
773 | |
776 | |
774 | set_option (optList[entry].index, s); |
777 | set_option (optList[entry].index, s); |
775 | } |
778 | } |
776 | } |
779 | } |
777 | } |
780 | } |
|
|
781 | #endif /* NO_RESOURCES */ |
|
|
782 | } |
778 | |
783 | |
|
|
784 | void |
|
|
785 | rxvt_term::extract_keysym_resources () |
|
|
786 | { |
|
|
787 | #ifndef NO_RESOURCES |
779 | /* |
788 | /* |
780 | * [R5 or later]: enumerate the resource database |
789 | * [R5 or later]: enumerate the resource database |
781 | */ |
790 | */ |
782 | # ifdef KEYSYM_RESOURCE |
791 | # ifdef KEYSYM_RESOURCE |
|
|
792 | XrmDatabase database = XrmGetDatabase (dpy); |
783 | XrmName name_prefix[3]; |
793 | XrmName name_prefix[3]; |
784 | XrmClass class_prefix[3]; |
794 | XrmClass class_prefix[3]; |
785 | |
795 | |
786 | name_prefix[0] = XrmStringToName (rs[Rs_name]); |
796 | name_prefix[0] = XrmStringToName (rs[Rs_name]); |
787 | name_prefix[1] = XrmStringToName ("keysym"); |
797 | name_prefix[1] = XrmStringToName ("keysym"); |
… | |
… | |
791 | class_prefix[2] = NULLQUARK; |
801 | class_prefix[2] = NULLQUARK; |
792 | /* XXX: Need to check sizeof (rxvt_t) == sizeof (XPointer) */ |
802 | /* XXX: Need to check sizeof (rxvt_t) == sizeof (XPointer) */ |
793 | XrmEnumerateDatabase (database, name_prefix, class_prefix, |
803 | XrmEnumerateDatabase (database, name_prefix, class_prefix, |
794 | XrmEnumOneLevel, rxvt_define_key, NULL); |
804 | XrmEnumOneLevel, rxvt_define_key, NULL); |
795 | # ifdef RESFALLBACK |
805 | # ifdef RESFALLBACK |
796 | name_prefix[0] = XrmStringToName (RESFALLBACK); |
|
|
797 | name_prefix[1] = XrmStringToName ("keysym"); |
|
|
798 | class_prefix[0] = XrmStringToName (RESFALLBACK); |
806 | name_prefix[0] = class_prefix[0] = XrmStringToName (RESFALLBACK); |
799 | class_prefix[1] = XrmStringToName ("Keysym"); |
|
|
800 | /* XXX: Need to check sizeof (rxvt_t) == sizeof (XPointer) */ |
807 | /* XXX: Need to check sizeof (rxvt_t) == sizeof (XPointer) */ |
801 | XrmEnumerateDatabase (database, name_prefix, class_prefix, |
808 | XrmEnumerateDatabase (database, name_prefix, class_prefix, |
802 | XrmEnumOneLevel, rxvt_define_key, NULL); |
809 | XrmEnumOneLevel, rxvt_define_key, NULL); |
803 | # endif |
810 | # endif |
804 | # endif |
811 | # endif |