| dmenu-xresources-alt-5.0.diff - sites - public wiki contents of suckless.org | |
| git clone git://git.suckless.org/sites | |
| Log | |
| Files | |
| Refs | |
| --- | |
| dmenu-xresources-alt-5.0.diff (5277B) | |
| --- | |
| 1 diff -rupN orig/config.def.h patched/config.def.h | |
| 2 --- orig/config.def.h 2021-04-16 06:30:47.713924755 +0300 | |
| 3 +++ patched/config.def.h 2021-04-16 06:34:14.956933252 +0300 | |
| 4 @@ -2,16 +2,25 @@ | |
| 5 /* Default settings; can be overriden by command line. */ | |
| 6 | |
| 7 static int topbar = 1; /* -b option; if 0, dmenu … | |
| 8 + | |
| 9 /* -fn option overrides fonts[0]; default X11 font or font set */ | |
| 10 +static char font[] = "monospace:size=10"; | |
| 11 static const char *fonts[] = { | |
| 12 - "monospace:size=10" | |
| 13 + font, | |
| 14 + "monospace:size=10", | |
| 15 }; | |
| 16 -static const char *prompt = NULL; /* -p option; prompt to th… | |
| 17 -static const char *colors[SchemeLast][2] = { | |
| 18 + | |
| 19 +static char *prompt = NULL; /* -p option; prompt to the left… | |
| 20 + | |
| 21 +static char normfgcolor[] = "#bbbbbb"; | |
| 22 +static char normbgcolor[] = "#222222"; | |
| 23 +static char selfgcolor[] = "#eeeeee"; | |
| 24 +static char selbgcolor[] = "#005577"; | |
| 25 +static char *colors[SchemeLast][2] = { | |
| 26 /* fg bg */ | |
| 27 - [SchemeNorm] = { "#bbbbbb", "#222222" }, | |
| 28 - [SchemeSel] = { "#eeeeee", "#005577" }, | |
| 29 - [SchemeOut] = { "#000000", "#00ffff" }, | |
| 30 + [SchemeNorm] = { normfgcolor, normbgcolor }, | |
| 31 + [SchemeSel] = { selfgcolor, selbgcolor }, | |
| 32 + [SchemeOut] = { "#000000", "#00ffff" }, | |
| 33 }; | |
| 34 /* -l option; if nonzero, dmenu uses vertical list with given number of… | |
| 35 static unsigned int lines = 0; | |
| 36 @@ -21,3 +30,15 @@ static unsigned int lines = 0; | |
| 37 * for example: " /?\"&[]" | |
| 38 */ | |
| 39 static const char worddelimiters[] = " "; | |
| 40 + | |
| 41 +/* | |
| 42 + * Xresources preferences to load at startup | |
| 43 + */ | |
| 44 +ResourcePref resources[] = { | |
| 45 + { "font", STRING, &font }, | |
| 46 + { "normfgcolor", STRING, &normfgcolor }, | |
| 47 + { "normbgcolor", STRING, &normbgcolor }, | |
| 48 + { "selfgcolor", STRING, &selfgcolor }, | |
| 49 + { "selbgcolor", STRING, &selbgcolor }, | |
| 50 + { "prompt", STRING, &prompt }, | |
| 51 +}; | |
| 52 diff -rupN orig/dmenu.c patched/dmenu.c | |
| 53 --- orig/dmenu.c 2021-04-16 06:30:47.715924755 +0300 | |
| 54 +++ patched/dmenu.c 2021-04-16 06:30:59.668925245 +0300 | |
| 55 @@ -11,6 +11,7 @@ | |
| 56 #include <X11/Xlib.h> | |
| 57 #include <X11/Xatom.h> | |
| 58 #include <X11/Xutil.h> | |
| 59 +#include <X11/Xresource.h> | |
| 60 #ifdef XINERAMA | |
| 61 #include <X11/extensions/Xinerama.h> | |
| 62 #endif | |
| 63 @@ -53,6 +54,21 @@ static XIC xic; | |
| 64 static Drw *drw; | |
| 65 static Clr *scheme[SchemeLast]; | |
| 66 | |
| 67 +/* Xresources preferences */ | |
| 68 +enum resource_type { | |
| 69 + STRING = 0, | |
| 70 + INTEGER = 1, | |
| 71 + FLOAT = 2 | |
| 72 +}; | |
| 73 +typedef struct { | |
| 74 + char *name; | |
| 75 + enum resource_type type; | |
| 76 + void *dst; | |
| 77 +} ResourcePref; | |
| 78 + | |
| 79 +static void load_xresources(void); | |
| 80 +static void resource_load(XrmDatabase db, char *name, enum resource_typ… | |
| 81 + | |
| 82 #include "config.h" | |
| 83 | |
| 84 static int (*fstrncmp)(const char *, const char *, size_t) = strncmp; | |
| 85 @@ -395,7 +411,7 @@ keypress(XKeyEvent *ev) | |
| 86 | |
| 87 switch(ksym) { | |
| 88 default: | |
| 89 -insert: | |
| 90 + insert: | |
| 91 if (!iscntrl(*buf)) | |
| 92 insert(buf, len); | |
| 93 break; | |
| 94 @@ -547,6 +563,54 @@ readstdin(void) | |
| 95 lines = MIN(lines, i); | |
| 96 } | |
| 97 | |
| 98 +void | |
| 99 +resource_load(XrmDatabase db, char *name, enum resource_type rtype, voi… | |
| 100 +{ | |
| 101 + char *sdst = NULL; | |
| 102 + int *idst = NULL; | |
| 103 + float *fdst = NULL; | |
| 104 + sdst = dst; | |
| 105 + idst = dst; | |
| 106 + fdst = dst; | |
| 107 + char fullname[256]; | |
| 108 + char *type; | |
| 109 + XrmValue ret; | |
| 110 + snprintf(fullname, sizeof(fullname), "%s.%s", "dmenu", name); | |
| 111 + fullname[sizeof(fullname) - 1] = '\0'; | |
| 112 + XrmGetResource(db, fullname, "*", &type, &ret); | |
| 113 + if (!(ret.addr == NULL || strncmp("String", type, 64))) | |
| 114 + { | |
| 115 + switch (rtype) { | |
| 116 + case STRING: | |
| 117 + strcpy(sdst, ret.addr); | |
| 118 + break; | |
| 119 + case INTEGER: | |
| 120 + *idst = strtoul(ret.addr, NULL, 10); | |
| 121 + break; | |
| 122 + case FLOAT: | |
| 123 + *fdst = strtof(ret.addr, NULL); | |
| 124 + break; | |
| 125 + } | |
| 126 + } | |
| 127 +} | |
| 128 + | |
| 129 +void | |
| 130 +load_xresources(void) | |
| 131 +{ | |
| 132 + Display *display; | |
| 133 + char *resm; | |
| 134 + XrmDatabase db; | |
| 135 + ResourcePref *p; | |
| 136 + display = XOpenDisplay(NULL); | |
| 137 + resm = XResourceManagerString(display); | |
| 138 + if (!resm) | |
| 139 + return; | |
| 140 + db = XrmGetStringDatabase(resm); | |
| 141 + for (p = resources; p < resources + LENGTH(resources); p++) | |
| 142 + resource_load(db, p->name, p->type, p->dst); | |
| 143 + XCloseDisplay(display); | |
| 144 +} | |
| 145 + | |
| 146 static void | |
| 147 run(void) | |
| 148 { | |
| 149 @@ -700,6 +764,9 @@ main(int argc, char *argv[]) | |
| 150 XWindowAttributes wa; | |
| 151 int i, fast = 0; | |
| 152 | |
| 153 + XrmInitialize(); | |
| 154 + load_xresources(); | |
| 155 + | |
| 156 for (i = 1; i < argc; i++) | |
| 157 /* these options take no arguments */ | |
| 158 if (!strcmp(argv[i], "-v")) { /* prints version in… | |
| 159 diff -rupN orig/drw.c patched/drw.c | |
| 160 --- orig/drw.c 2021-04-16 06:30:47.718924755 +0300 | |
| 161 +++ patched/drw.c 2021-04-16 06:30:59.670925245 +0300 | |
| 162 @@ -208,7 +208,7 @@ drw_clr_create(Drw *drw, Clr *dest, cons | |
| 163 /* Wrapper to create color schemes. The caller has to call free(3) on t… | |
| 164 * returned color scheme when done using it. */ | |
| 165 Clr * | |
| 166 -drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount) | |
| 167 +drw_scm_create(Drw *drw, char *clrnames[], size_t clrcount) | |
| 168 { | |
| 169 size_t i; | |
| 170 Clr *ret; | |
| 171 diff -rupN orig/drw.h patched/drw.h | |
| 172 --- orig/drw.h 2021-04-16 06:30:47.718924755 +0300 | |
| 173 +++ patched/drw.h 2021-04-16 06:30:59.671925245 +0300 | |
| 174 @@ -39,7 +39,7 @@ void drw_font_getexts(Fnt *font, const c | |
| 175 | |
| 176 /* Colorscheme abstraction */ | |
| 177 void drw_clr_create(Drw *drw, Clr *dest, const char *clrname); | |
| 178 -Clr *drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount); | |
| 179 +Clr *drw_scm_create(Drw *drw, char *clrnames[], size_t clrcount); | |
| 180 | |
| 181 /* Cursor abstraction */ | |
| 182 Cur *drw_cur_create(Drw *drw, int shape); |