xresources patch
This commit is contained in:
parent
8d576549cc
commit
ebd5bc66cc
30
config.def.h
30
config.def.h
@ -9,14 +9,22 @@ static int centered = 0; /* -c option; centers dmenu on scree
|
|||||||
static int min_width = 500; /* minimum width when centered */
|
static int min_width = 500; /* minimum width when centered */
|
||||||
static const unsigned int alpha = 0xf0;
|
static const unsigned int alpha = 0xf0;
|
||||||
/* -fn option overrides fonts[0]; default X11 font or font set */
|
/* -fn option overrides fonts[0]; default X11 font or font set */
|
||||||
|
|
||||||
|
static char font[] = "monospace:size=10";
|
||||||
static const char *fonts[] = {
|
static const char *fonts[] = {
|
||||||
"monospace:size=10"
|
font,
|
||||||
|
"monospace:size=10",
|
||||||
};
|
};
|
||||||
static const char *prompt = NULL; /* -p option; prompt to the left of input field */
|
static char *prompt = NULL; /* -p option; prompt to the left of input field */
|
||||||
static const char *colors[SchemeLast][2] = {
|
|
||||||
|
static char normfgcolor[] = "#bbbbbb";
|
||||||
|
static char normbgcolor[] = "#222222";
|
||||||
|
static char selfgcolor[] = "#eeeeee";
|
||||||
|
static char selbgcolor[] = "#005577";
|
||||||
|
static char *colors[SchemeLast][2] = {
|
||||||
/* fg bg */
|
/* fg bg */
|
||||||
[SchemeNorm] = { "#bbbbbb", "#222222" },
|
[SchemeNorm] = { normfgcolor, normbgcolor },
|
||||||
[SchemeSel] = { "#eeeeee", "#005577" },
|
[SchemeSel] = { selfgcolor, selbgcolor },
|
||||||
[SchemeOut] = { "#000000", "#00ffff" },
|
[SchemeOut] = { "#000000", "#00ffff" },
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -40,3 +48,15 @@ static const char worddelimiters[] = " ";
|
|||||||
|
|
||||||
/* -n option; preselected item starting from 0 */
|
/* -n option; preselected item starting from 0 */
|
||||||
static unsigned int preselected = 0;
|
static unsigned int preselected = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Xresources preferences to load at startup
|
||||||
|
*/
|
||||||
|
ResourcePref resources[] = {
|
||||||
|
{ "font", STRING, &font },
|
||||||
|
{ "normfgcolor", STRING, &normfgcolor },
|
||||||
|
{ "normbgcolor", STRING, &normbgcolor },
|
||||||
|
{ "selfgcolor", STRING, &selfgcolor },
|
||||||
|
{ "selbgcolor", STRING, &selbgcolor },
|
||||||
|
{ "prompt", STRING, &prompt },
|
||||||
|
};
|
||||||
|
67
dmenu.c
67
dmenu.c
@ -13,6 +13,7 @@
|
|||||||
#include <X11/Xatom.h>
|
#include <X11/Xatom.h>
|
||||||
#include <X11/Xproto.h>
|
#include <X11/Xproto.h>
|
||||||
#include <X11/Xutil.h>
|
#include <X11/Xutil.h>
|
||||||
|
#include <X11/Xresource.h>
|
||||||
#ifdef XINERAMA
|
#ifdef XINERAMA
|
||||||
#include <X11/extensions/Xinerama.h>
|
#include <X11/extensions/Xinerama.h>
|
||||||
#endif
|
#endif
|
||||||
@ -64,6 +65,21 @@ static Visual *visual;
|
|||||||
static int depth;
|
static int depth;
|
||||||
static Colormap cmap;
|
static Colormap cmap;
|
||||||
|
|
||||||
|
/* Xresources preferences */
|
||||||
|
enum resource_type {
|
||||||
|
STRING = 0,
|
||||||
|
INTEGER = 1,
|
||||||
|
FLOAT = 2
|
||||||
|
};
|
||||||
|
typedef struct {
|
||||||
|
char *name;
|
||||||
|
enum resource_type type;
|
||||||
|
void *dst;
|
||||||
|
} ResourcePref;
|
||||||
|
|
||||||
|
static void load_xresources(void);
|
||||||
|
static void resource_load(XrmDatabase db, char *name, enum resource_type rtype, void *dst);
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
static char * cistrstr(const char *s, const char *sub);
|
static char * cistrstr(const char *s, const char *sub);
|
||||||
@ -706,6 +722,54 @@ readstdin(void)
|
|||||||
lines = MIN(lines, i);
|
lines = MIN(lines, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
resource_load(XrmDatabase db, char *name, enum resource_type rtype, void *dst)
|
||||||
|
{
|
||||||
|
char *sdst = NULL;
|
||||||
|
int *idst = NULL;
|
||||||
|
float *fdst = NULL;
|
||||||
|
sdst = dst;
|
||||||
|
idst = dst;
|
||||||
|
fdst = dst;
|
||||||
|
char fullname[256];
|
||||||
|
char *type;
|
||||||
|
XrmValue ret;
|
||||||
|
snprintf(fullname, sizeof(fullname), "%s.%s", "dmenu", name);
|
||||||
|
fullname[sizeof(fullname) - 1] = '\0';
|
||||||
|
XrmGetResource(db, fullname, "*", &type, &ret);
|
||||||
|
if (!(ret.addr == NULL || strncmp("String", type, 64)))
|
||||||
|
{
|
||||||
|
switch (rtype) {
|
||||||
|
case STRING:
|
||||||
|
strcpy(sdst, ret.addr);
|
||||||
|
break;
|
||||||
|
case INTEGER:
|
||||||
|
*idst = strtoul(ret.addr, NULL, 10);
|
||||||
|
break;
|
||||||
|
case FLOAT:
|
||||||
|
*fdst = strtof(ret.addr, NULL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
load_xresources(void)
|
||||||
|
{
|
||||||
|
Display *display;
|
||||||
|
char *resm;
|
||||||
|
XrmDatabase db;
|
||||||
|
ResourcePref *p;
|
||||||
|
display = XOpenDisplay(NULL);
|
||||||
|
resm = XResourceManagerString(display);
|
||||||
|
if (!resm)
|
||||||
|
return;
|
||||||
|
db = XrmGetStringDatabase(resm);
|
||||||
|
for (p = resources; p < resources + LENGTH(resources); p++)
|
||||||
|
resource_load(db, p->name, p->type, p->dst);
|
||||||
|
XCloseDisplay(display);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
run(void)
|
run(void)
|
||||||
{
|
{
|
||||||
@ -881,6 +945,9 @@ main(int argc, char *argv[])
|
|||||||
XWindowAttributes wa;
|
XWindowAttributes wa;
|
||||||
int i, fast = 0;
|
int i, fast = 0;
|
||||||
|
|
||||||
|
XrmInitialize();
|
||||||
|
load_xresources();
|
||||||
|
|
||||||
for (i = 1; i < argc; i++)
|
for (i = 1; i < argc; i++)
|
||||||
/* these options take no arguments */
|
/* these options take no arguments */
|
||||||
if (!strcmp(argv[i], "-v")) { /* prints version information */
|
if (!strcmp(argv[i], "-v")) { /* prints version information */
|
||||||
|
2
drw.c
2
drw.c
@ -199,7 +199,7 @@ drw_clr_create(Drw *drw, Clr *dest, const char *clrname, unsigned int alpha)
|
|||||||
/* Wrapper to create color schemes. The caller has to call free(3) on the
|
/* Wrapper to create color schemes. The caller has to call free(3) on the
|
||||||
* returned color scheme when done using it. */
|
* returned color scheme when done using it. */
|
||||||
Clr *
|
Clr *
|
||||||
drw_scm_create(Drw *drw, const char *clrnames[], const unsigned int alphas[], size_t clrcount)
|
drw_scm_create(Drw *drw, char *clrnames[], const unsigned int alphas[], size_t clrcount)
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
Clr *ret;
|
Clr *ret;
|
||||||
|
2
drw.h
2
drw.h
@ -43,7 +43,7 @@ void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned in
|
|||||||
|
|
||||||
/* Colorscheme abstraction */
|
/* Colorscheme abstraction */
|
||||||
void drw_clr_create(Drw *drw, Clr *dest, const char *clrname, unsigned int alpha);
|
void drw_clr_create(Drw *drw, Clr *dest, const char *clrname, unsigned int alpha);
|
||||||
Clr *drw_scm_create(Drw *drw, const char *clrnames[], const unsigned int alphas[], size_t clrcount);
|
Clr *drw_scm_create(Drw *drw, char *clrnames[], const unsigned int alphas[], size_t clrcount);
|
||||||
|
|
||||||
/* Cursor abstraction */
|
/* Cursor abstraction */
|
||||||
Cur *drw_cur_create(Drw *drw, int shape);
|
Cur *drw_cur_create(Drw *drw, int shape);
|
||||||
|
182
patches/dmenu-xresources-alt-5.0.diff
Normal file
182
patches/dmenu-xresources-alt-5.0.diff
Normal file
@ -0,0 +1,182 @@
|
|||||||
|
diff -rupN orig/config.def.h patched/config.def.h
|
||||||
|
--- orig/config.def.h 2021-04-16 06:30:47.713924755 +0300
|
||||||
|
+++ patched/config.def.h 2021-04-16 06:34:14.956933252 +0300
|
||||||
|
@@ -2,16 +2,25 @@
|
||||||
|
/* Default settings; can be overriden by command line. */
|
||||||
|
|
||||||
|
static int topbar = 1; /* -b option; if 0, dmenu appears at bottom */
|
||||||
|
+
|
||||||
|
/* -fn option overrides fonts[0]; default X11 font or font set */
|
||||||
|
+static char font[] = "monospace:size=10";
|
||||||
|
static const char *fonts[] = {
|
||||||
|
- "monospace:size=10"
|
||||||
|
+ font,
|
||||||
|
+ "monospace:size=10",
|
||||||
|
};
|
||||||
|
-static const char *prompt = NULL; /* -p option; prompt to the left of input field */
|
||||||
|
-static const char *colors[SchemeLast][2] = {
|
||||||
|
+
|
||||||
|
+static char *prompt = NULL; /* -p option; prompt to the left of input field */
|
||||||
|
+
|
||||||
|
+static char normfgcolor[] = "#bbbbbb";
|
||||||
|
+static char normbgcolor[] = "#222222";
|
||||||
|
+static char selfgcolor[] = "#eeeeee";
|
||||||
|
+static char selbgcolor[] = "#005577";
|
||||||
|
+static char *colors[SchemeLast][2] = {
|
||||||
|
/* fg bg */
|
||||||
|
- [SchemeNorm] = { "#bbbbbb", "#222222" },
|
||||||
|
- [SchemeSel] = { "#eeeeee", "#005577" },
|
||||||
|
- [SchemeOut] = { "#000000", "#00ffff" },
|
||||||
|
+ [SchemeNorm] = { normfgcolor, normbgcolor },
|
||||||
|
+ [SchemeSel] = { selfgcolor, selbgcolor },
|
||||||
|
+ [SchemeOut] = { "#000000", "#00ffff" },
|
||||||
|
};
|
||||||
|
/* -l option; if nonzero, dmenu uses vertical list with given number of lines */
|
||||||
|
static unsigned int lines = 0;
|
||||||
|
@@ -21,3 +30,15 @@ static unsigned int lines = 0;
|
||||||
|
* for example: " /?\"&[]"
|
||||||
|
*/
|
||||||
|
static const char worddelimiters[] = " ";
|
||||||
|
+
|
||||||
|
+/*
|
||||||
|
+ * Xresources preferences to load at startup
|
||||||
|
+ */
|
||||||
|
+ResourcePref resources[] = {
|
||||||
|
+ { "font", STRING, &font },
|
||||||
|
+ { "normfgcolor", STRING, &normfgcolor },
|
||||||
|
+ { "normbgcolor", STRING, &normbgcolor },
|
||||||
|
+ { "selfgcolor", STRING, &selfgcolor },
|
||||||
|
+ { "selbgcolor", STRING, &selbgcolor },
|
||||||
|
+ { "prompt", STRING, &prompt },
|
||||||
|
+};
|
||||||
|
diff -rupN orig/dmenu.c patched/dmenu.c
|
||||||
|
--- orig/dmenu.c 2021-04-16 06:30:47.715924755 +0300
|
||||||
|
+++ patched/dmenu.c 2021-04-16 06:30:59.668925245 +0300
|
||||||
|
@@ -11,6 +11,7 @@
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include <X11/Xatom.h>
|
||||||
|
#include <X11/Xutil.h>
|
||||||
|
+#include <X11/Xresource.h>
|
||||||
|
#ifdef XINERAMA
|
||||||
|
#include <X11/extensions/Xinerama.h>
|
||||||
|
#endif
|
||||||
|
@@ -53,6 +54,21 @@ static XIC xic;
|
||||||
|
static Drw *drw;
|
||||||
|
static Clr *scheme[SchemeLast];
|
||||||
|
|
||||||
|
+/* Xresources preferences */
|
||||||
|
+enum resource_type {
|
||||||
|
+ STRING = 0,
|
||||||
|
+ INTEGER = 1,
|
||||||
|
+ FLOAT = 2
|
||||||
|
+};
|
||||||
|
+typedef struct {
|
||||||
|
+ char *name;
|
||||||
|
+ enum resource_type type;
|
||||||
|
+ void *dst;
|
||||||
|
+} ResourcePref;
|
||||||
|
+
|
||||||
|
+static void load_xresources(void);
|
||||||
|
+static void resource_load(XrmDatabase db, char *name, enum resource_type rtype, void *dst);
|
||||||
|
+
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
static int (*fstrncmp)(const char *, const char *, size_t) = strncmp;
|
||||||
|
@@ -395,7 +411,7 @@ keypress(XKeyEvent *ev)
|
||||||
|
|
||||||
|
switch(ksym) {
|
||||||
|
default:
|
||||||
|
-insert:
|
||||||
|
+ insert:
|
||||||
|
if (!iscntrl(*buf))
|
||||||
|
insert(buf, len);
|
||||||
|
break;
|
||||||
|
@@ -547,6 +563,54 @@ readstdin(void)
|
||||||
|
lines = MIN(lines, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
+void
|
||||||
|
+resource_load(XrmDatabase db, char *name, enum resource_type rtype, void *dst)
|
||||||
|
+{
|
||||||
|
+ char *sdst = NULL;
|
||||||
|
+ int *idst = NULL;
|
||||||
|
+ float *fdst = NULL;
|
||||||
|
+ sdst = dst;
|
||||||
|
+ idst = dst;
|
||||||
|
+ fdst = dst;
|
||||||
|
+ char fullname[256];
|
||||||
|
+ char *type;
|
||||||
|
+ XrmValue ret;
|
||||||
|
+ snprintf(fullname, sizeof(fullname), "%s.%s", "dmenu", name);
|
||||||
|
+ fullname[sizeof(fullname) - 1] = '\0';
|
||||||
|
+ XrmGetResource(db, fullname, "*", &type, &ret);
|
||||||
|
+ if (!(ret.addr == NULL || strncmp("String", type, 64)))
|
||||||
|
+ {
|
||||||
|
+ switch (rtype) {
|
||||||
|
+ case STRING:
|
||||||
|
+ strcpy(sdst, ret.addr);
|
||||||
|
+ break;
|
||||||
|
+ case INTEGER:
|
||||||
|
+ *idst = strtoul(ret.addr, NULL, 10);
|
||||||
|
+ break;
|
||||||
|
+ case FLOAT:
|
||||||
|
+ *fdst = strtof(ret.addr, NULL);
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+load_xresources(void)
|
||||||
|
+{
|
||||||
|
+ Display *display;
|
||||||
|
+ char *resm;
|
||||||
|
+ XrmDatabase db;
|
||||||
|
+ ResourcePref *p;
|
||||||
|
+ display = XOpenDisplay(NULL);
|
||||||
|
+ resm = XResourceManagerString(display);
|
||||||
|
+ if (!resm)
|
||||||
|
+ return;
|
||||||
|
+ db = XrmGetStringDatabase(resm);
|
||||||
|
+ for (p = resources; p < resources + LENGTH(resources); p++)
|
||||||
|
+ resource_load(db, p->name, p->type, p->dst);
|
||||||
|
+ XCloseDisplay(display);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
run(void)
|
||||||
|
{
|
||||||
|
@@ -700,6 +764,9 @@ main(int argc, char *argv[])
|
||||||
|
XWindowAttributes wa;
|
||||||
|
int i, fast = 0;
|
||||||
|
|
||||||
|
+ XrmInitialize();
|
||||||
|
+ load_xresources();
|
||||||
|
+
|
||||||
|
for (i = 1; i < argc; i++)
|
||||||
|
/* these options take no arguments */
|
||||||
|
if (!strcmp(argv[i], "-v")) { /* prints version information */
|
||||||
|
diff -rupN orig/drw.c patched/drw.c
|
||||||
|
--- orig/drw.c 2021-04-16 06:30:47.718924755 +0300
|
||||||
|
+++ patched/drw.c 2021-04-16 06:30:59.670925245 +0300
|
||||||
|
@@ -208,7 +208,7 @@ drw_clr_create(Drw *drw, Clr *dest, cons
|
||||||
|
/* Wrapper to create color schemes. The caller has to call free(3) on the
|
||||||
|
* returned color scheme when done using it. */
|
||||||
|
Clr *
|
||||||
|
-drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount)
|
||||||
|
+drw_scm_create(Drw *drw, char *clrnames[], size_t clrcount)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
Clr *ret;
|
||||||
|
diff -rupN orig/drw.h patched/drw.h
|
||||||
|
--- orig/drw.h 2021-04-16 06:30:47.718924755 +0300
|
||||||
|
+++ patched/drw.h 2021-04-16 06:30:59.671925245 +0300
|
||||||
|
@@ -39,7 +39,7 @@ void drw_font_getexts(Fnt *font, const c
|
||||||
|
|
||||||
|
/* Colorscheme abstraction */
|
||||||
|
void drw_clr_create(Drw *drw, Clr *dest, const char *clrname);
|
||||||
|
-Clr *drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount);
|
||||||
|
+Clr *drw_scm_create(Drw *drw, char *clrnames[], size_t clrcount);
|
||||||
|
|
||||||
|
/* Cursor abstraction */
|
||||||
|
Cur *drw_cur_create(Drw *drw, int shape);
|
Loading…
Reference in New Issue
Block a user