st-xresources-20200604-9ba7ecf.diff (4840B) - raw


      1 From 2752a599ee01305a435729bfacf43b1dde7cf0ef Mon Sep 17 00:00:00 2001
      2 From: Benji Encalada Mora <benji@encalada.dev>
      3 Date: Thu, 4 Jun 2020 00:41:10 -0500
      4 Subject: [PATCH] fix: replace xfps and actionfps variables
      5 
      6 ---
      7  config.def.h | 36 ++++++++++++++++++++++++
      8  x.c          | 78 +++++++++++++++++++++++++++++++++++++++++++++++++---
      9  2 files changed, 110 insertions(+), 4 deletions(-)
     10 
     11 diff --git a/config.def.h b/config.def.h
     12 index 6f05dce..9b99782 100644
     13 --- a/config.def.h
     14 +++ b/config.def.h
     15 @@ -168,6 +168,42 @@ static unsigned int defaultattr = 11;
     16   */
     17  static uint forcemousemod = ShiftMask;
     18  
     19 +/*
     20 + * Xresources preferences to load at startup
     21 + */
     22 +ResourcePref resources[] = {
     23 +		{ "font",         STRING,  &font },
     24 +		{ "color0",       STRING,  &colorname[0] },
     25 +		{ "color1",       STRING,  &colorname[1] },
     26 +		{ "color2",       STRING,  &colorname[2] },
     27 +		{ "color3",       STRING,  &colorname[3] },
     28 +		{ "color4",       STRING,  &colorname[4] },
     29 +		{ "color5",       STRING,  &colorname[5] },
     30 +		{ "color6",       STRING,  &colorname[6] },
     31 +		{ "color7",       STRING,  &colorname[7] },
     32 +		{ "color8",       STRING,  &colorname[8] },
     33 +		{ "color9",       STRING,  &colorname[9] },
     34 +		{ "color10",      STRING,  &colorname[10] },
     35 +		{ "color11",      STRING,  &colorname[11] },
     36 +		{ "color12",      STRING,  &colorname[12] },
     37 +		{ "color13",      STRING,  &colorname[13] },
     38 +		{ "color14",      STRING,  &colorname[14] },
     39 +		{ "color15",      STRING,  &colorname[15] },
     40 +		{ "background",   STRING,  &colorname[256] },
     41 +		{ "foreground",   STRING,  &colorname[257] },
     42 +		{ "cursorColor",  STRING,  &colorname[258] },
     43 +		{ "termname",     STRING,  &termname },
     44 +		{ "shell",        STRING,  &shell },
     45 +		{ "minlatency",   INTEGER, &minlatency },
     46 +		{ "maxlatency",   INTEGER, &maxlatency },
     47 +		{ "blinktimeout", INTEGER, &blinktimeout },
     48 +		{ "bellvolume",   INTEGER, &bellvolume },
     49 +		{ "tabspaces",    INTEGER, &tabspaces },
     50 +		{ "borderpx",     INTEGER, &borderpx },
     51 +		{ "cwscale",      FLOAT,   &cwscale },
     52 +		{ "chscale",      FLOAT,   &chscale },
     53 +};
     54 +
     55  /*
     56   * Internal mouse shortcuts.
     57   * Beware that overloading Button1 will disable the selection.
     58 diff --git a/x.c b/x.c
     59 index 210f184..76f167f 100644
     60 --- a/x.c
     61 +++ b/x.c
     62 @@ -14,6 +14,7 @@
     63  #include <X11/keysym.h>
     64  #include <X11/Xft/Xft.h>
     65  #include <X11/XKBlib.h>
     66 +#include <X11/Xresource.h>
     67  
     68  char *argv0;
     69  #include "arg.h"
     70 @@ -45,6 +46,19 @@ typedef struct {
     71  	signed char appcursor; /* application cursor */
     72  } Key;
     73  
     74 +/* Xresources preferences */
     75 +enum resource_type {
     76 +	STRING = 0,
     77 +	INTEGER = 1,
     78 +	FLOAT = 2
     79 +};
     80 +
     81 +typedef struct {
     82 +	char *name;
     83 +	enum resource_type type;
     84 +	void *dst;
     85 +} ResourcePref;
     86 +
     87  /* X modifiers */
     88  #define XK_ANY_MOD    UINT_MAX
     89  #define XK_NO_MOD     0
     90 @@ -828,8 +842,8 @@ xclear(int x1, int y1, int x2, int y2)
     91  void
     92  xhints(void)
     93  {
     94 -	XClassHint class = {opt_name ? opt_name : termname,
     95 -	                    opt_class ? opt_class : termname};
     96 +	XClassHint class = {opt_name ? opt_name : "st",
     97 +	                    opt_class ? opt_class : "St"};
     98  	XWMHints wm = {.flags = InputHint, .input = 1};
     99  	XSizeHints *sizeh;
    100  
    101 @@ -1104,8 +1118,6 @@ xinit(int cols, int rows)
    102  	pid_t thispid = getpid();
    103  	XColor xmousefg, xmousebg;
    104  
    105 -	if (!(xw.dpy = XOpenDisplay(NULL)))
    106 -		die("can't open display\n");
    107  	xw.scr = XDefaultScreen(xw.dpy);
    108  	xw.vis = XDefaultVisual(xw.dpy, xw.scr);
    109  
    110 @@ -1964,6 +1976,59 @@ run(void)
    111  	}
    112  }
    113  
    114 +int
    115 +resource_load(XrmDatabase db, char *name, enum resource_type rtype, void *dst)
    116 +{
    117 +	char **sdst = dst;
    118 +	int *idst = dst;
    119 +	float *fdst = dst;
    120 +
    121 +	char fullname[256];
    122 +	char fullclass[256];
    123 +	char *type;
    124 +	XrmValue ret;
    125 +
    126 +	snprintf(fullname, sizeof(fullname), "%s.%s",
    127 +			opt_name ? opt_name : "st", name);
    128 +	snprintf(fullclass, sizeof(fullclass), "%s.%s",
    129 +			opt_class ? opt_class : "St", name);
    130 +	fullname[sizeof(fullname) - 1] = fullclass[sizeof(fullclass) - 1] = '\0';
    131 +
    132 +	XrmGetResource(db, fullname, fullclass, &type, &ret);
    133 +	if (ret.addr == NULL || strncmp("String", type, 64))
    134 +		return 1;
    135 +
    136 +	switch (rtype) {
    137 +	case STRING:
    138 +		*sdst = ret.addr;
    139 +		break;
    140 +	case INTEGER:
    141 +		*idst = strtoul(ret.addr, NULL, 10);
    142 +		break;
    143 +	case FLOAT:
    144 +		*fdst = strtof(ret.addr, NULL);
    145 +		break;
    146 +	}
    147 +	return 0;
    148 +}
    149 +
    150 +void
    151 +config_init(void)
    152 +{
    153 +	char *resm;
    154 +	XrmDatabase db;
    155 +	ResourcePref *p;
    156 +
    157 +	XrmInitialize();
    158 +	resm = XResourceManagerString(xw.dpy);
    159 +	if (!resm)
    160 +		return;
    161 +
    162 +	db = XrmGetStringDatabase(resm);
    163 +	for (p = resources; p < resources + LEN(resources); p++)
    164 +		resource_load(db, p->name, p->type, p->dst);
    165 +}
    166 +
    167  void
    168  usage(void)
    169  {
    170 @@ -2037,6 +2102,11 @@ run:
    171  
    172  	setlocale(LC_CTYPE, "");
    173  	XSetLocaleModifiers("");
    174 +
    175 +	if(!(xw.dpy = XOpenDisplay(NULL)))
    176 +		die("Can't open display\n");
    177 +
    178 +	config_init();
    179  	cols = MAX(cols, 1);
    180  	rows = MAX(rows, 1);
    181  	tnew(cols, rows);
    182 -- 
    183 2.26.2
    184