diff options
| author | sinanmohd <pcmsinan@gmail.com> | 2021-11-14 17:18:09 +0530 | 
|---|---|---|
| committer | sinanmohd <pcmsinan@gmail.com> | 2021-11-14 17:18:09 +0530 | 
| commit | 58685cc72bba18d42b6223dfda1168e45f4bb69d (patch) | |
| tree | 798f7fe7dc21041cab494dc4915eb717bb2c4d96 | |
| parent | b32bb2bfd20c58e702fb35f4af91118e42628bb0 (diff) | |
xresources patch
| -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 1faaa86..72b0b42 100644 --- a/config.def.h +++ b/config.def.h @@ -184,6 +184,42 @@ static unsigned int defaultattr = 11;  static uint forcemousemod = ShiftMask;  /* + * Xresources preferences to load at startup + */ +ResourcePref resources[] = { +		{ "font",         STRING,  &font }, +		{ "color0",       STRING,  &colorname[0] }, +		{ "color1",       STRING,  &colorname[1] }, +		{ "color2",       STRING,  &colorname[2] }, +		{ "color3",       STRING,  &colorname[3] }, +		{ "color4",       STRING,  &colorname[4] }, +		{ "color5",       STRING,  &colorname[5] }, +		{ "color6",       STRING,  &colorname[6] }, +		{ "color7",       STRING,  &colorname[7] }, +		{ "color8",       STRING,  &colorname[8] }, +		{ "color9",       STRING,  &colorname[9] }, +		{ "color10",      STRING,  &colorname[10] }, +		{ "color11",      STRING,  &colorname[11] }, +		{ "color12",      STRING,  &colorname[12] }, +		{ "color13",      STRING,  &colorname[13] }, +		{ "color14",      STRING,  &colorname[14] }, +		{ "color15",      STRING,  &colorname[15] }, +		{ "background",   STRING,  &colorname[256] }, +		{ "foreground",   STRING,  &colorname[257] }, +		{ "cursorColor",  STRING,  &colorname[258] }, +		{ "termname",     STRING,  &termname }, +		{ "shell",        STRING,  &shell }, +		{ "minlatency",   INTEGER, &minlatency }, +		{ "maxlatency",   INTEGER, &maxlatency }, +		{ "blinktimeout", INTEGER, &blinktimeout }, +		{ "bellvolume",   INTEGER, &bellvolume }, +		{ "tabspaces",    INTEGER, &tabspaces }, +		{ "borderpx",     INTEGER, &borderpx }, +		{ "cwscale",      FLOAT,   &cwscale }, +		{ "chscale",      FLOAT,   &chscale }, +}; + +/*   * Internal mouse shortcuts.   * Beware that overloading Button1 will disable the selection.   */ @@ -14,6 +14,7 @@  #include <X11/keysym.h>  #include <X11/Xft/Xft.h>  #include <X11/XKBlib.h> +#include <X11/Xresource.h>  char *argv0;  #include "arg.h" @@ -45,6 +46,19 @@ typedef struct {  	signed char appcursor; /* application cursor */  } Key; +/* Xresources preferences */ +enum resource_type { +	STRING = 0, +	INTEGER = 1, +	FLOAT = 2 +}; + +typedef struct { +	char *name; +	enum resource_type type; +	void *dst; +} ResourcePref; +  /* X modifiers */  #define XK_ANY_MOD    UINT_MAX  #define XK_NO_MOD     0 @@ -844,8 +858,8 @@ xclear(int x1, int y1, int x2, int y2)  void  xhints(void)  { -	XClassHint class = {opt_name ? opt_name : termname, -	                    opt_class ? opt_class : termname}; +	XClassHint class = {opt_name ? opt_name : "st", +	                    opt_class ? opt_class : "St"};  	XWMHints wm = {.flags = InputHint, .input = 1};  	XSizeHints *sizeh; @@ -1217,8 +1231,6 @@ xinit(int cols, int rows)  	XWindowAttributes attr;  	XVisualInfo vis; -	if (!(xw.dpy = XOpenDisplay(NULL))) -		die("can't open display\n");  	xw.scr = XDefaultScreen(xw.dpy);  	if (!(opt_embed && (parent = strtol(opt_embed, NULL, 0)))) { @@ -2100,6 +2112,59 @@ run(void)  	}  } +int +resource_load(XrmDatabase db, char *name, enum resource_type rtype, void *dst) +{ +	char **sdst = dst; +	int *idst = dst; +	float *fdst = dst; + +	char fullname[256]; +	char fullclass[256]; +	char *type; +	XrmValue ret; + +	snprintf(fullname, sizeof(fullname), "%s.%s", +			opt_name ? opt_name : "st", name); +	snprintf(fullclass, sizeof(fullclass), "%s.%s", +			opt_class ? opt_class : "St", name); +	fullname[sizeof(fullname) - 1] = fullclass[sizeof(fullclass) - 1] = '\0'; + +	XrmGetResource(db, fullname, fullclass, &type, &ret); +	if (ret.addr == NULL || strncmp("String", type, 64)) +		return 1; + +	switch (rtype) { +	case STRING: +		*sdst = ret.addr; +		break; +	case INTEGER: +		*idst = strtoul(ret.addr, NULL, 10); +		break; +	case FLOAT: +		*fdst = strtof(ret.addr, NULL); +		break; +	} +	return 0; +} + +void +config_init(void) +{ +	char *resm; +	XrmDatabase db; +	ResourcePref *p; + +	XrmInitialize(); +	resm = XResourceManagerString(xw.dpy); +	if (!resm) +		return; + +	db = XrmGetStringDatabase(resm); +	for (p = resources; p < resources + LEN(resources); p++) +		resource_load(db, p->name, p->type, p->dst); +} +  void  usage(void)  { @@ -2176,6 +2241,11 @@ run:  	setlocale(LC_CTYPE, "");  	XSetLocaleModifiers(""); + +	if(!(xw.dpy = XOpenDisplay(NULL))) +		die("Can't open display\n"); + +	config_init();  	cols = MAX(cols, 1);  	rows = MAX(rows, 1);  	tnew(cols, rows); | 
