diff options
author | Mike Crute <mike@crute.us> | 2020-12-22 15:58:48 -0800 |
---|---|---|
committer | Mike Crute <mike@crute.us> | 2023-04-25 20:45:27 -0700 |
commit | ba77c544805651604b722f2dafca867843868dd1 (patch) | |
tree | 7263b6bc32e36acd0d4ce219f039c6dde369338b | |
parent | a9e2518e51378e844344eaf4c7f40cffea000b7a (diff) | |
download | st-patched-ba77c544805651604b722f2dafca867843868dd1.tar.bz2 st-patched-ba77c544805651604b722f2dafca867843868dd1.tar.xz st-patched-ba77c544805651604b722f2dafca867843868dd1.zip |
Apply st-xresources-20200604-9ba7ecf
-rw-r--r-- | config.def.h | 36 | ||||
-rw-r--r-- | x.c | 78 |
2 files changed, 110 insertions, 4 deletions
diff --git a/config.def.h b/config.def.h index 91ab8ca..20f1c88 100644 --- a/config.def.h +++ b/config.def.h | |||
@@ -171,6 +171,42 @@ static unsigned int defaultattr = 11; | |||
171 | static uint forcemousemod = ShiftMask; | 171 | static uint forcemousemod = ShiftMask; |
172 | 172 | ||
173 | /* | 173 | /* |
174 | * Xresources preferences to load at startup | ||
175 | */ | ||
176 | ResourcePref resources[] = { | ||
177 | { "font", STRING, &font }, | ||
178 | { "color0", STRING, &colorname[0] }, | ||
179 | { "color1", STRING, &colorname[1] }, | ||
180 | { "color2", STRING, &colorname[2] }, | ||
181 | { "color3", STRING, &colorname[3] }, | ||
182 | { "color4", STRING, &colorname[4] }, | ||
183 | { "color5", STRING, &colorname[5] }, | ||
184 | { "color6", STRING, &colorname[6] }, | ||
185 | { "color7", STRING, &colorname[7] }, | ||
186 | { "color8", STRING, &colorname[8] }, | ||
187 | { "color9", STRING, &colorname[9] }, | ||
188 | { "color10", STRING, &colorname[10] }, | ||
189 | { "color11", STRING, &colorname[11] }, | ||
190 | { "color12", STRING, &colorname[12] }, | ||
191 | { "color13", STRING, &colorname[13] }, | ||
192 | { "color14", STRING, &colorname[14] }, | ||
193 | { "color15", STRING, &colorname[15] }, | ||
194 | { "background", STRING, &colorname[256] }, | ||
195 | { "foreground", STRING, &colorname[257] }, | ||
196 | { "cursorColor", STRING, &colorname[258] }, | ||
197 | { "termname", STRING, &termname }, | ||
198 | { "shell", STRING, &shell }, | ||
199 | { "minlatency", INTEGER, &minlatency }, | ||
200 | { "maxlatency", INTEGER, &maxlatency }, | ||
201 | { "blinktimeout", INTEGER, &blinktimeout }, | ||
202 | { "bellvolume", INTEGER, &bellvolume }, | ||
203 | { "tabspaces", INTEGER, &tabspaces }, | ||
204 | { "borderpx", INTEGER, &borderpx }, | ||
205 | { "cwscale", FLOAT, &cwscale }, | ||
206 | { "chscale", FLOAT, &chscale }, | ||
207 | }; | ||
208 | |||
209 | /* | ||
174 | * Internal mouse shortcuts. | 210 | * Internal mouse shortcuts. |
175 | * Beware that overloading Button1 will disable the selection. | 211 | * Beware that overloading Button1 will disable the selection. |
176 | */ | 212 | */ |
@@ -14,6 +14,7 @@ | |||
14 | #include <X11/keysym.h> | 14 | #include <X11/keysym.h> |
15 | #include <X11/Xft/Xft.h> | 15 | #include <X11/Xft/Xft.h> |
16 | #include <X11/XKBlib.h> | 16 | #include <X11/XKBlib.h> |
17 | #include <X11/Xresource.h> | ||
17 | 18 | ||
18 | char *argv0; | 19 | char *argv0; |
19 | #include "arg.h" | 20 | #include "arg.h" |
@@ -45,6 +46,19 @@ typedef struct { | |||
45 | signed char appcursor; /* application cursor */ | 46 | signed char appcursor; /* application cursor */ |
46 | } Key; | 47 | } Key; |
47 | 48 | ||
49 | /* Xresources preferences */ | ||
50 | enum resource_type { | ||
51 | STRING = 0, | ||
52 | INTEGER = 1, | ||
53 | FLOAT = 2 | ||
54 | }; | ||
55 | |||
56 | typedef struct { | ||
57 | char *name; | ||
58 | enum resource_type type; | ||
59 | void *dst; | ||
60 | } ResourcePref; | ||
61 | |||
48 | /* X modifiers */ | 62 | /* X modifiers */ |
49 | #define XK_ANY_MOD UINT_MAX | 63 | #define XK_ANY_MOD UINT_MAX |
50 | #define XK_NO_MOD 0 | 64 | #define XK_NO_MOD 0 |
@@ -865,8 +879,8 @@ xclear(int x1, int y1, int x2, int y2) | |||
865 | void | 879 | void |
866 | xhints(void) | 880 | xhints(void) |
867 | { | 881 | { |
868 | XClassHint class = {opt_name ? opt_name : termname, | 882 | XClassHint class = {opt_name ? opt_name : "st", |
869 | opt_class ? opt_class : termname}; | 883 | opt_class ? opt_class : "St"}; |
870 | XWMHints wm = {.flags = InputHint, .input = 1}; | 884 | XWMHints wm = {.flags = InputHint, .input = 1}; |
871 | XSizeHints *sizeh; | 885 | XSizeHints *sizeh; |
872 | 886 | ||
@@ -1142,8 +1156,6 @@ xinit(int cols, int rows) | |||
1142 | pid_t thispid = getpid(); | 1156 | pid_t thispid = getpid(); |
1143 | XColor xmousefg, xmousebg; | 1157 | XColor xmousefg, xmousebg; |
1144 | 1158 | ||
1145 | if (!(xw.dpy = XOpenDisplay(NULL))) | ||
1146 | die("can't open display\n"); | ||
1147 | xw.scr = XDefaultScreen(xw.dpy); | 1159 | xw.scr = XDefaultScreen(xw.dpy); |
1148 | xw.vis = XDefaultVisual(xw.dpy, xw.scr); | 1160 | xw.vis = XDefaultVisual(xw.dpy, xw.scr); |
1149 | 1161 | ||
@@ -2021,6 +2033,59 @@ run(void) | |||
2021 | } | 2033 | } |
2022 | } | 2034 | } |
2023 | 2035 | ||
2036 | int | ||
2037 | resource_load(XrmDatabase db, char *name, enum resource_type rtype, void *dst) | ||
2038 | { | ||
2039 | char **sdst = dst; | ||
2040 | int *idst = dst; | ||
2041 | float *fdst = dst; | ||
2042 | |||
2043 | char fullname[256]; | ||
2044 | char fullclass[256]; | ||
2045 | char *type; | ||
2046 | XrmValue ret; | ||
2047 | |||
2048 | snprintf(fullname, sizeof(fullname), "%s.%s", | ||
2049 | opt_name ? opt_name : "st", name); | ||
2050 | snprintf(fullclass, sizeof(fullclass), "%s.%s", | ||
2051 | opt_class ? opt_class : "St", name); | ||
2052 | fullname[sizeof(fullname) - 1] = fullclass[sizeof(fullclass) - 1] = '\0'; | ||
2053 | |||
2054 | XrmGetResource(db, fullname, fullclass, &type, &ret); | ||
2055 | if (ret.addr == NULL || strncmp("String", type, 64)) | ||
2056 | return 1; | ||
2057 | |||
2058 | switch (rtype) { | ||
2059 | case STRING: | ||
2060 | *sdst = ret.addr; | ||
2061 | break; | ||
2062 | case INTEGER: | ||
2063 | *idst = strtoul(ret.addr, NULL, 10); | ||
2064 | break; | ||
2065 | case FLOAT: | ||
2066 | *fdst = strtof(ret.addr, NULL); | ||
2067 | break; | ||
2068 | } | ||
2069 | return 0; | ||
2070 | } | ||
2071 | |||
2072 | void | ||
2073 | config_init(void) | ||
2074 | { | ||
2075 | char *resm; | ||
2076 | XrmDatabase db; | ||
2077 | ResourcePref *p; | ||
2078 | |||
2079 | XrmInitialize(); | ||
2080 | resm = XResourceManagerString(xw.dpy); | ||
2081 | if (!resm) | ||
2082 | return; | ||
2083 | |||
2084 | db = XrmGetStringDatabase(resm); | ||
2085 | for (p = resources; p < resources + LEN(resources); p++) | ||
2086 | resource_load(db, p->name, p->type, p->dst); | ||
2087 | } | ||
2088 | |||
2024 | void | 2089 | void |
2025 | usage(void) | 2090 | usage(void) |
2026 | { | 2091 | { |
@@ -2094,6 +2159,11 @@ run: | |||
2094 | 2159 | ||
2095 | setlocale(LC_CTYPE, ""); | 2160 | setlocale(LC_CTYPE, ""); |
2096 | XSetLocaleModifiers(""); | 2161 | XSetLocaleModifiers(""); |
2162 | |||
2163 | if(!(xw.dpy = XOpenDisplay(NULL))) | ||
2164 | die("Can't open display\n"); | ||
2165 | |||
2166 | config_init(); | ||
2097 | cols = MAX(cols, 1); | 2167 | cols = MAX(cols, 1); |
2098 | rows = MAX(rows, 1); | 2168 | rows = MAX(rows, 1); |
2099 | tnew(cols, rows); | 2169 | tnew(cols, rows); |