… | |
… | |
627 | |
627 | |
628 | #ifndef NO_RESOURCES |
628 | #ifndef NO_RESOURCES |
629 | /*----------------------------------------------------------------------*/ |
629 | /*----------------------------------------------------------------------*/ |
630 | |
630 | |
631 | # ifdef KEYSYM_RESOURCE |
631 | # ifdef KEYSYM_RESOURCE |
|
|
632 | static void |
|
|
633 | rxvt_define_key (rxvt_term *term, const char *k, const char *v) |
|
|
634 | { |
|
|
635 | term->bind_action (k, v); |
|
|
636 | } |
|
|
637 | |
632 | /* |
638 | /* |
633 | * Define key from XrmEnumerateDatabase. |
639 | * Define key from XrmEnumerateDatabase. |
634 | * quarks will be something like |
640 | * quarks will be something like |
635 | * "rxvt" "keysym" "0xFF01" |
641 | * "rxvt" "keysym" "0xFF01" |
636 | * value will be a string |
642 | * value will be a string |
637 | */ |
643 | */ |
638 | static int |
644 | static int |
|
|
645 | rxvt_keysym_enumerate_helper ( |
639 | rxvt_define_key (XrmDatabase *database ecb_unused, |
646 | XrmDatabase *database ecb_unused, |
640 | XrmBindingList bindings ecb_unused, |
647 | XrmBindingList bindings ecb_unused, |
641 | XrmQuarkList quarks, |
648 | XrmQuarkList quarks, |
642 | XrmRepresentation *type ecb_unused, |
649 | XrmRepresentation *type ecb_unused, |
643 | XrmValue *value, |
650 | XrmValue *value, |
644 | XPointer closure) |
651 | XPointer closure |
|
|
652 | ) |
645 | { |
653 | { |
646 | rxvt_term *term = (rxvt_term *)closure; |
|
|
647 | int last; |
654 | int last; |
648 | |
655 | |
649 | for (last = 0; quarks[last] != NULLQUARK; last++) /* look for last quark in list */ |
656 | for (last = 0; quarks[last] != NULLQUARK; last++) /* look for last quark in list */ |
650 | ; |
657 | ; |
651 | |
658 | |
652 | last--; |
659 | rxvt_term *term = (rxvt_term *)(((void **)closure)[0]); |
|
|
660 | void (*cb)(rxvt_term *, const char *, const char *) |
|
|
661 | = (void (*)(rxvt_term *, const char *, const char *)) |
|
|
662 | (((void **)closure)[1]); |
|
|
663 | |
653 | term->bind_action (XrmQuarkToString (quarks[last]), (char *)value->addr); |
664 | cb (term, XrmQuarkToString (quarks[last - 1]), (char *)value->addr); |
|
|
665 | |
654 | return False; |
666 | return False; |
655 | } |
667 | } |
656 | |
668 | |
657 | /* |
669 | /* |
658 | * look for something like this (XK_Delete) |
670 | * look for something like this (XK_Delete) |
… | |
… | |
831 | } |
843 | } |
832 | #endif /* NO_RESOURCES */ |
844 | #endif /* NO_RESOURCES */ |
833 | } |
845 | } |
834 | |
846 | |
835 | void |
847 | void |
836 | rxvt_term::extract_keysym_resources () |
848 | rxvt_term::enumerate_keysym_resources (void (*cb)(rxvt_term *, const char *, const char *)) |
837 | { |
849 | { |
838 | #ifndef NO_RESOURCES |
850 | #ifndef NO_RESOURCES |
839 | /* |
851 | /* |
840 | * [R5 or later]: enumerate the resource database |
852 | * [R5 or later]: enumerate the resource database |
841 | */ |
853 | */ |
842 | # ifdef KEYSYM_RESOURCE |
854 | # ifdef KEYSYM_RESOURCE |
|
|
855 | void *closure[2] = { |
|
|
856 | (void *)this, |
|
|
857 | (void *)cb, |
|
|
858 | }; |
|
|
859 | |
843 | XrmDatabase database = XrmGetDatabase (dpy); |
860 | XrmDatabase database = XrmGetDatabase (dpy); |
844 | XrmName name_prefix[3]; |
861 | XrmName name_prefix[3]; |
845 | XrmClass class_prefix[3]; |
862 | XrmClass class_prefix[3]; |
846 | |
863 | |
847 | name_prefix[0] = XrmStringToName (rs[Rs_name]); |
864 | name_prefix[0] = XrmStringToName (rs[Rs_name]); |
… | |
… | |
850 | class_prefix[0] = XrmStringToName (RESCLASS); |
867 | class_prefix[0] = XrmStringToName (RESCLASS); |
851 | class_prefix[1] = XrmStringToName ("Keysym"); |
868 | class_prefix[1] = XrmStringToName ("Keysym"); |
852 | class_prefix[2] = NULLQUARK; |
869 | class_prefix[2] = NULLQUARK; |
853 | /* XXX: Need to check sizeof (rxvt_t) == sizeof (XPointer) */ |
870 | /* XXX: Need to check sizeof (rxvt_t) == sizeof (XPointer) */ |
854 | XrmEnumerateDatabase (database, name_prefix, class_prefix, |
871 | XrmEnumerateDatabase (database, name_prefix, class_prefix, |
855 | XrmEnumOneLevel, rxvt_define_key, (XPointer)this); |
872 | XrmEnumOneLevel, rxvt_keysym_enumerate_helper, (XPointer)closure); |
856 | # ifdef RESFALLBACK |
873 | # ifdef RESFALLBACK |
857 | name_prefix[0] = class_prefix[0] = XrmStringToName (RESFALLBACK); |
874 | name_prefix[0] = class_prefix[0] = XrmStringToName (RESFALLBACK); |
858 | /* XXX: Need to check sizeof (rxvt_t) == sizeof (XPointer) */ |
875 | /* XXX: Need to check sizeof (rxvt_t) == sizeof (XPointer) */ |
859 | XrmEnumerateDatabase (database, name_prefix, class_prefix, |
876 | XrmEnumerateDatabase (database, name_prefix, class_prefix, |
860 | XrmEnumOneLevel, rxvt_define_key, (XPointer)this); |
877 | XrmEnumOneLevel, rxvt_keysym_enumerate_helper, (XPointer)closure); |
861 | # endif |
878 | # endif |
862 | # endif |
879 | # endif |
863 | |
880 | |
864 | #endif /* NO_RESOURCES */ |
881 | #endif /* NO_RESOURCES */ |
865 | } |
882 | } |
866 | |
883 | |
|
|
884 | void |
|
|
885 | rxvt_term::extract_keysym_resources () |
|
|
886 | { |
|
|
887 | enumerate_keysym_resources (rxvt_define_key); |
|
|
888 | } |
|
|
889 | |
867 | /*----------------------- end-of-file (C source) -----------------------*/ |
890 | /*----------------------- end-of-file (C source) -----------------------*/ |
|
|
891 | |