ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/xdefaults.C
(Generate patch)

Comparing rxvt-unicode/src/xdefaults.C (file contents):
Revision 1.192 by sf-exg, Thu Jul 14 05:33:26 2016 UTC vs.
Revision 1.200 by root, Fri Dec 23 21:46:46 2022 UTC

134#endif 134#endif
135#ifdef MOUSE_WHEEL 135#ifdef MOUSE_WHEEL
136 BOOL (Rs_mouseWheelScrollPage, "mouseWheelScrollPage", NULL, Opt_mouseWheelScrollPage, 0, NULL), 136 BOOL (Rs_mouseWheelScrollPage, "mouseWheelScrollPage", NULL, Opt_mouseWheelScrollPage, 0, NULL),
137#endif 137#endif
138#if ENABLE_FRILLS 138#if ENABLE_FRILLS
139 BOOL (Rs_disablePasteBrackets, "disablePasteBrackets", "dpb", Opt_disablePasteBrackets, 0, "paste bracket suppression"),
139 BOOL (Rs_tripleclickwords, "tripleclickwords", "tcw", Opt_tripleclickwords, 0, "triple click word selection"), 140 BOOL (Rs_tripleclickwords, "tripleclickwords", "tcw", Opt_tripleclickwords, 0, "triple click word selection"),
140 BOOL (Rs_insecure, "insecure", "insecure", Opt_insecure, 0, "enable possibly insecure escape sequences"), 141 BOOL (Rs_insecure, "insecure", "insecure", Opt_insecure, 0, "enable possibly insecure escape sequences"),
141 BOOL (Rs_cursorUnderline, "cursorUnderline", "uc", Opt_cursorUnderline, 0, "underline cursor"), 142 BOOL (Rs_cursorUnderline, "cursorUnderline", "uc", Opt_cursorUnderline, 0, "underline cursor"),
142#endif 143#endif
143#if CURSOR_BLINK 144#if CURSOR_BLINK
219#endif 220#endif
220#if XFT 221#if XFT
221 BOOL (Rs_buffered, "buffered", NULL, Opt_buffered, 0, NULL), 222 BOOL (Rs_buffered, "buffered", NULL, Opt_buffered, 0, NULL),
222#endif 223#endif
223#if ENABLE_FRILLS 224#if ENABLE_FRILLS
225 STRG (Rs_refreshRate, "refreshRate", "fps", "number", "refresh rate / frames per second"),
224 STRG (Rs_depth, "depth", "depth", "number", "depth of visual to request"), 226 STRG (Rs_depth, "depth", "depth", "number", "depth of visual to request"),
225 STRG (Rs_visual, "visual", "visual", "number", "visual id to request"), 227 STRG (Rs_visual, "visual", "visual", "number", "visual id to request"),
226 RSTRG (Rs_transient_for, "transient-for", "windowid"), 228 RSTRG (Rs_transient_for, "transient-for", "windowid"),
227 BOOL (Rs_override_redirect, "override-redirect", "override-redirect", Opt_override_redirect, 0, "set override-redirect on the terminal window"), 229 BOOL (Rs_override_redirect, "override-redirect", "override-redirect", Opt_override_redirect, 0, "override-redirect on the terminal window"),
228 STRG (Rs_pty_fd, NULL, "pty-fd", "fileno", "file descriptor of pty to use"), 230 STRG (Rs_pty_fd, NULL, "pty-fd", "fileno", "file descriptor of pty to use"),
229 BOOL (Rs_hold, "hold", "hold", Opt_hold, 0, "retain window after shell exit"), 231 BOOL (Rs_hold, "hold", "hold", Opt_hold, 0, "retain window after shell exit"),
230 STRG (Rs_ext_bwidth, "externalBorder", "w", "number", "external border in pixels"), 232 STRG (Rs_ext_bwidth, "externalBorder", "w", "number", "external border in pixels"),
231 STRG (Rs_ext_bwidth, NULL, "bw", NULL, NULL), 233 STRG (Rs_ext_bwidth, NULL, "bw", NULL, NULL),
232 STRG (Rs_ext_bwidth, NULL, "borderwidth", NULL, NULL), 234 STRG (Rs_ext_bwidth, NULL, "borderwidth", NULL, NULL),
234 BOOL (Rs_borderLess, "borderLess", "bl", Opt_borderLess, 0, "borderless window"), 236 BOOL (Rs_borderLess, "borderLess", "bl", Opt_borderLess, 0, "borderless window"),
235 STRG (Rs_lineSpace, "lineSpace", "lsp", "number", "number of extra pixels between rows"), 237 STRG (Rs_lineSpace, "lineSpace", "lsp", "number", "number of extra pixels between rows"),
236 STRG (Rs_letterSpace, "letterSpace", "letsp", "number", "letter spacing adjustment"), 238 STRG (Rs_letterSpace, "letterSpace", "letsp", "number", "letter spacing adjustment"),
237#endif 239#endif
238#ifdef BUILTIN_GLYPHS 240#ifdef BUILTIN_GLYPHS
239 BOOL (Rs_skipBuiltinGlyphs, "skipBuiltinGlyphs", "sbg", Opt_skipBuiltinGlyphs, 0, "do not use internal glyphs"), 241 BOOL (Rs_skipBuiltinGlyphs, "skipBuiltinGlyphs", "sbg", Opt_skipBuiltinGlyphs, 0, "use of font glyphs instead of internal glyphs"),
240#endif 242#endif
241#ifdef POINTER_BLANK 243#ifdef POINTER_BLANK
242 RSTRG (Rs_pointerBlankDelay, "pointerBlankDelay", "number"), 244 RSTRG (Rs_pointerBlankDelay, "pointerBlankDelay", "number"),
243#endif 245#endif
244#ifndef NO_BACKSPACE_KEY 246#ifndef NO_BACKSPACE_KEY
252#endif 254#endif
253 STRG (Rs_modifier, "modifier", "mod", "modifier", "meta modifier = alt|meta|hyper|super|mod1|...|mod5"), 255 STRG (Rs_modifier, "modifier", "mod", "modifier", "meta modifier = alt|meta|hyper|super|mod1|...|mod5"),
254 RSTRG (Rs_cutchars, "cutchars", "string"), 256 RSTRG (Rs_cutchars, "cutchars", "string"),
255 RSTRG (Rs_answerbackstring, "answerbackString", "string"), 257 RSTRG (Rs_answerbackstring, "answerbackString", "string"),
256#ifndef NO_SECONDARY_SCREEN 258#ifndef NO_SECONDARY_SCREEN
257 BOOL (Rs_secondaryScreen, "secondaryScreen", "ssc", Opt_secondaryScreen, 0, "enable secondary screen"), 259 BOOL (Rs_secondaryScreen, "secondaryScreen", "ssc", Opt_secondaryScreen, 0, "secondary screen"),
258 BOOL (Rs_secondaryScroll, "secondaryScroll", "ssr", Opt_secondaryScroll, 0, "enable secondary screen scroll"), 260 BOOL (Rs_secondaryScroll, "secondaryScroll", "ssr", Opt_secondaryScroll, 0, "secondary screen scroll"),
261#endif
262#if ENABLE_FRILLS
263 STRG (Rs_rewrapMode, "rewrapMode", "rm", "string", "rewrap mode (auto, always, never)"),
259#endif 264#endif
260#if ENABLE_PERL 265#if ENABLE_PERL
261 RSTRG (Rs_perl_lib, "perl-lib", "string"), //, "colon-separated directories with extension scripts"),TODO 266 RSTRG (Rs_perl_lib, "perl-lib", "string"), //, "colon-separated directories with extension scripts"),TODO
262 RSTRG (Rs_perl_eval, "perl-eval", "perl-eval"), // "string", "code to be evaluated after all extensions have been loaded"),TODO 267 RSTRG (Rs_perl_eval, "perl-eval", "perl-eval"), // "string", "code to be evaluated after all extensions have been loaded"),TODO
263 RSTRG (Rs_perl_ext_1, "perl-ext-common", "string"), //, "colon-separated list of perl extensions to enable"),TODO 268 RSTRG (Rs_perl_ext_1, "perl-ext-common", "string"), //, "colon-separated list of perl extensions to enable"),TODO
624#ifdef KEYSYM_RESOURCE 629#ifdef KEYSYM_RESOURCE
625static void 630static void
626rxvt_define_key (rxvt_term *term, const char *k, const char *v) 631rxvt_define_key (rxvt_term *term, const char *k, const char *v)
627{ 632{
628 term->bind_action (k, v); 633 term->bind_action (k, v);
629}
630
631/*
632 * Define key from XrmEnumerateDatabase.
633 * quarks will be something like
634 * "rxvt" "keysym" "0xFF01"
635 * value will be a string
636 */
637static int
638rxvt_enumerate_helper (
639 XrmDatabase *database ecb_unused,
640 XrmBindingList bindings ecb_unused,
641 XrmQuarkList quarks,
642 XrmRepresentation *type ecb_unused,
643 XrmValue *value,
644 XPointer closure
645)
646{
647 int last;
648
649 for (last = 0; quarks[last] != NULLQUARK; last++) /* look for last quark in list */
650 ;
651
652 rxvt_term *term = (rxvt_term *)(((void **)closure)[0]);
653 void (*cb)(rxvt_term *, const char *, const char *)
654 = (void (*)(rxvt_term *, const char *, const char *))
655 (((void **)closure)[1]);
656
657 cb (term, XrmQuarkToString (quarks[last - 1]), (char *)value->addr);
658
659 return False;
660} 634}
661 635
662/* 636/*
663 * look for something like this (XK_Delete) 637 * look for something like this (XK_Delete)
664 * rxvt*keysym.0xFFFF: "\177" 638 * rxvt*keysym.0xFFFF: "\177"
847 } 821 }
848 } 822 }
849#endif /* NO_RESOURCES */ 823#endif /* NO_RESOURCES */
850} 824}
851 825
826struct rxvt_enumerate_closure
827{
828 rxvt_term *term;
829 void (*cb)(rxvt_term *, const char *, const char *);
830 int specific; // iterate over only a specific subhierarchy
831};
832
833/*
834 * Define key from XrmEnumerateDatabase.
835 * quarks will be something like
836 * "rxvt" "keysym" "0xFF01"
837 * value will be a string
838 */
839static int
840rxvt_enumerate_helper (
841 XrmDatabase *database ecb_unused,
842 XrmBindingList bindings ecb_unused,
843 XrmQuarkList quarks,
844 XrmRepresentation *type ecb_unused,
845 XrmValue *value,
846 XPointer closure
847)
848{
849 const rxvt_enumerate_closure *data = (const rxvt_enumerate_closure *)closure;
850
851 if (*quarks == NULLQUARK) return False;
852
853 // if the quark list starts with a tightly bound quark, we skip it,
854 // as it exactly matched the prefix. Otherwise, it matched because
855 // it started with "*", in which case we assume the prefix is part
856 // of the "*".
857 if (*bindings == XrmBindTightly)
858 {
859 ++quarks, ++bindings; // skip if this is a fixed prefix, rather than a *-match
860 if (*quarks == NULLQUARK) return False;
861 }
862
863 // specific, a bit misleadingly named, is used when a specific "subclass"
864 // is iterated over, e.g. "keysym", and is used to skip one more
865 // component, as well as all generic prefixes
866 // this is a bit of a hack, ideally, keysym (the only user) should use its
867 // own iteration function, but this ought to be less bloated
868 if (data->specific)
869 {
870 ++quarks, ++bindings;
871 if (*quarks == NULLQUARK) return False;
872 }
873
874 char *pattern;
875 if (quarks[1] == NULLQUARK)
876 pattern = XrmQuarkToString (quarks[0]); // single component, fast path
877 else
878 {
879 // multiple components, slow path - should be rare, don't optimize for speed
880 int size = 0;
881
882 for (int i = 0; quarks[i] != NULLQUARK; ++i)
883 size += strlen (XrmQuarkToString (quarks[i])) + 1;
884
885 pattern = rxvt_temp_buf<char> (size + 1);
886
887 // now print all components
888 {
889 char *cur = pattern;
890
891 for (int i = 0; quarks[i] != NULLQUARK; ++i)
892 cur += sprintf (cur, ".%s", XrmQuarkToString (quarks[i]));
893 }
894
895 ++pattern; // skip initial dot
896 }
897
898 data->cb (data->term, pattern, (char *)value->addr);
899
900 return False;
901}
902
852void 903void
853rxvt_term::enumerate_resources (void (*cb)(rxvt_term *, const char *, const char *), const char *name_p, const char *class_p) 904rxvt_term::enumerate_resources (void (*cb)(rxvt_term *, const char *, const char *), const char *name_p, const char *class_p)
854{ 905{
855 /* 906 /*
856 * [R5 or later]: enumerate the resource database 907 * [R5 or later]: enumerate the resource database
857 */ 908 */
909 assert (!name_p == !class_p); // both must be specified, or missing
910
858#ifdef KEYSYM_RESOURCE 911#ifdef KEYSYM_RESOURCE
859 void *closure[2] = { 912 rxvt_enumerate_closure closure = { this, cb, name_p ? 1 : 0 };
860 (void *)this,
861 (void *)cb,
862 };
863 913
864 XrmDatabase database = XrmGetDatabase (dpy); 914 XrmDatabase database = XrmGetDatabase (dpy);
865 XrmName name_prefix[3]; 915 XrmName name_prefix[3];
866 XrmClass class_prefix[3]; 916 XrmClass class_prefix[3];
867 917
870 class_prefix[1] = class_p ? XrmStringToName (class_p) : NULLQUARK; 920 class_prefix[1] = class_p ? XrmStringToName (class_p) : NULLQUARK;
871 class_prefix[2] = NULLQUARK; 921 class_prefix[2] = NULLQUARK;
872 922
873# ifdef RESFALLBACK 923# ifdef RESFALLBACK
874 name_prefix[0] = class_prefix[0] = XrmStringToName (RESFALLBACK); 924 name_prefix[0] = class_prefix[0] = XrmStringToName (RESFALLBACK);
875 /* XXX: Need to check sizeof (rxvt_t) == sizeof (XPointer) */
876 XrmEnumerateDatabase (database, name_prefix, class_prefix, 925 XrmEnumerateDatabase (database, name_prefix, class_prefix,
877 XrmEnumOneLevel, rxvt_enumerate_helper, (XPointer)closure); 926 XrmEnumAllLevels, rxvt_enumerate_helper, (XPointer)&closure);
878# endif 927# endif
879 928
880 name_prefix[0] = class_prefix[0] = XrmStringToName (RESCLASS); 929 name_prefix[0] = class_prefix[0] = XrmStringToName (RESCLASS);
881 XrmEnumerateDatabase (database, name_prefix, class_prefix, 930 XrmEnumerateDatabase (database, name_prefix, class_prefix,
882 XrmEnumOneLevel, rxvt_enumerate_helper, (XPointer)closure); 931 XrmEnumAllLevels, rxvt_enumerate_helper, (XPointer)&closure);
883 932
884 name_prefix[0] = class_prefix[0] = XrmStringToName (rs[Rs_name]); 933 name_prefix[0] = class_prefix[0] = XrmStringToName (rs[Rs_name]);
885 XrmEnumerateDatabase (database, name_prefix, class_prefix, 934 XrmEnumerateDatabase (database, name_prefix, class_prefix,
886 XrmEnumOneLevel, rxvt_enumerate_helper, (XPointer)closure); 935 XrmEnumAllLevels, rxvt_enumerate_helper, (XPointer)&closure);
887#endif 936#endif
888} 937}
889 938
890void 939void
891rxvt_term::extract_keysym_resources () 940rxvt_term::extract_keysym_resources ()

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines