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 appears at bottom     */
      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 the left of input field */
     17 -static const char *colors[SchemeLast][2] = {
     18 +
     19 +static char *prompt      = NULL;      /* -p  option; prompt to the left of input field */
     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 lines */
     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_type rtype, void *dst);
     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, void *dst)
    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 information */
    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 the
    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);