mirror of
https://codeberg.org/frosty/dmenu.git
synced 2024-09-19 03:37:05 -04:00
patch: xresources alt
This commit is contained in:
parent
77938d6053
commit
bbf12247e8
44
config.def.h
44
config.def.h
|
@ -3,18 +3,30 @@
|
|||
|
||||
static int topbar = 1; /* -b option; if 0, dmenu appears at bottom */
|
||||
static int fuzzy = 1; /* -F option; if 0, dmenu doesn't use fuzzy matching */
|
||||
|
||||
/* -fn option overrides fonts[0]; default X11 font or font set */
|
||||
static char font[] = "monospace:size=10";
|
||||
static const char *fonts[] = {
|
||||
font,
|
||||
"monospace:size=10"
|
||||
};
|
||||
static const char *prompt = NULL; /* -p option; prompt to the left of input field */
|
||||
static const char *colors[SchemeLast][2] = {
|
||||
/* fg bg */
|
||||
[SchemeNorm] = { "#bbbbbb", "#222222" },
|
||||
[SchemeSel] = { "#eeeeee", "#005577" },
|
||||
[SchemeSelHighlight] = { "#ffc978", "#005577" },
|
||||
[SchemeNormHighlight] = { "#ffc978", "#222222" },
|
||||
[SchemeOut] = { "#000000", "#00ffff" },
|
||||
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 normhifgcolor[] = "#ffc978";
|
||||
static char normhibgcolor[] = "#222222";
|
||||
static char selhifgcolor[] = "#ffc978";
|
||||
static char selhibgcolor[] = "#005577";
|
||||
static char *colors[SchemeLast][2] = {
|
||||
/* fg bg */
|
||||
[SchemeNorm] = { normfgcolor, normbgcolor },
|
||||
[SchemeSel] = { selfgcolor, selbgcolor },
|
||||
[SchemeNormHighlight] = { normhifgcolor, normhibgcolor },
|
||||
[SchemeSelHighlight] = { selhifgcolor, selhibgcolor },
|
||||
[SchemeOut] = { "#000000", "#00ffff" },
|
||||
};
|
||||
/* -l and -g options; controls number of lines and columns in grid if > 0 */
|
||||
static unsigned int lines = 0;
|
||||
|
@ -25,3 +37,19 @@ static unsigned int columns = 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 },
|
||||
{ "normhifgcolor", STRING, &normhifgcolor },
|
||||
{ "normhibgcolor", STRING, &normhibgcolor },
|
||||
{ "selhifgcolor", STRING, &selhifgcolor },
|
||||
{ "selhibgcolor", STRING, &selhibgcolor },
|
||||
{ "prompt", STRING, &prompt },
|
||||
};
|
||||
|
|
69
dmenu.c
69
dmenu.c
|
@ -12,6 +12,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
|
||||
|
@ -59,6 +60,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;
|
||||
|
@ -568,7 +584,7 @@ keypress(XKeyEvent *ev)
|
|||
|
||||
switch(ksym) {
|
||||
default:
|
||||
insert:
|
||||
insert:
|
||||
if (!iscntrl((unsigned char)*buf))
|
||||
insert(buf, len);
|
||||
break;
|
||||
|
@ -727,6 +743,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)
|
||||
{
|
||||
|
@ -881,6 +945,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 */
|
||||
|
|
2
drw.c
2
drw.c
|
@ -181,7 +181,7 @@ drw_clr_create(Drw *drw, Clr *dest, const char *clrname)
|
|||
/* 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;
|
||||
|
|
2
drw.h
2
drw.h
|
@ -40,7 +40,7 @@ void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned in
|
|||
|
||||
/* 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 a new issue