sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

st-xresources-20200204-cfdf3f0.diff (5555B)


      1 From cfdf3f0fcd81c3fe29bf4717d3276e078efc5787 Mon Sep 17 00:00:00 2001
      2 From: Malcolm VanOrder <mvanorder1390@gmail.com>
      3 Date: Tue, 4 Feb 2020 00:29:16 -0500
      4 Subject: [PATCH] Apply modified xresources patch to version 0.8.2
      5 
      6 Modified verion of https://git.suckless.org/sites/file/st.suckless.org/patches/xresources/st-xresources-20190105-3be4cf1.diff.html
      7 
      8 * Add doc strings for new functions
      9 * Moved XOpenDisplay back into xinit
     10 * Rename config_init to xresources_init and call it in xinit after
     11   XOpenDisplay.
     12 
     13 Signed-off-by: Malcolm VanOrder <mvanorder1390@gmail.com>
     14 ---
     15  config.def.h | 36 +++++++++++++++++++++
     16  x.c          | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++--
     17  2 files changed, 124 insertions(+), 2 deletions(-)
     18 
     19 diff --git a/config.def.h b/config.def.h
     20 index 546edda..e1457af 100644
     21 --- a/config.def.h
     22 +++ b/config.def.h
     23 @@ -150,6 +150,42 @@ static unsigned int mousebg = 0;
     24   */
     25  static unsigned int defaultattr = 11;
     26  
     27 +/*
     28 + * Xresources preferences to load at startup
     29 + */
     30 +ResourcePref resources[] = {
     31 +		{ "font",         STRING,  &font },
     32 +		{ "color0",       STRING,  &colorname[0] },
     33 +		{ "color1",       STRING,  &colorname[1] },
     34 +		{ "color2",       STRING,  &colorname[2] },
     35 +		{ "color3",       STRING,  &colorname[3] },
     36 +		{ "color4",       STRING,  &colorname[4] },
     37 +		{ "color5",       STRING,  &colorname[5] },
     38 +		{ "color6",       STRING,  &colorname[6] },
     39 +		{ "color7",       STRING,  &colorname[7] },
     40 +		{ "color8",       STRING,  &colorname[8] },
     41 +		{ "color9",       STRING,  &colorname[9] },
     42 +		{ "color10",      STRING,  &colorname[10] },
     43 +		{ "color11",      STRING,  &colorname[11] },
     44 +		{ "color12",      STRING,  &colorname[12] },
     45 +		{ "color13",      STRING,  &colorname[13] },
     46 +		{ "color14",      STRING,  &colorname[14] },
     47 +		{ "color15",      STRING,  &colorname[15] },
     48 +		{ "background",   STRING,  &colorname[256] },
     49 +		{ "foreground",   STRING,  &colorname[257] },
     50 +		{ "cursorColor",  STRING,  &colorname[258] },
     51 +		{ "termname",     STRING,  &termname },
     52 +		{ "shell",        STRING,  &shell },
     53 +		{ "xfps",         INTEGER, &xfps },
     54 +		{ "actionfps",    INTEGER, &actionfps },
     55 +		{ "blinktimeout", INTEGER, &blinktimeout },
     56 +		{ "bellvolume",   INTEGER, &bellvolume },
     57 +		{ "tabspaces",    INTEGER, &tabspaces },
     58 +		{ "borderpx",     INTEGER, &borderpx },
     59 +		{ "cwscale",      FLOAT,   &cwscale },
     60 +		{ "chscale",      FLOAT,   &chscale },
     61 +};
     62 +
     63  /*
     64   * Force mouse select/shortcuts while mask is active (when MODE_MOUSE is set).
     65   * Note that if you want to use ShiftMask with selmasks, set this to an other
     66 diff --git a/x.c b/x.c
     67 index 1f62129..8ccaf58 100644
     68 --- a/x.c
     69 +++ b/x.c
     70 @@ -14,6 +14,7 @@
     71  #include <X11/keysym.h>
     72  #include <X11/Xft/Xft.h>
     73  #include <X11/XKBlib.h>
     74 +#include <X11/Xresource.h>
     75  
     76  static char *argv0;
     77  #include "arg.h"
     78 @@ -45,6 +46,19 @@ typedef struct {
     79  	signed char appcursor; /* application cursor */
     80  } Key;
     81  
     82 +/* Xresources preferences */
     83 +enum resource_type {
     84 +	STRING = 0,
     85 +	INTEGER = 1,
     86 +	FLOAT = 2
     87 +};
     88 +
     89 +typedef struct {
     90 +	char *name;
     91 +	enum resource_type type;
     92 +	void *dst;
     93 +} ResourcePref;
     94 +
     95  /* X modifiers */
     96  #define XK_ANY_MOD    UINT_MAX
     97  #define XK_NO_MOD     0
     98 @@ -813,8 +827,8 @@ xclear(int x1, int y1, int x2, int y2)
     99  void
    100  xhints(void)
    101  {
    102 -	XClassHint class = {opt_name ? opt_name : termname,
    103 -	                    opt_class ? opt_class : termname};
    104 +	XClassHint class = {opt_name ? opt_name : "st",
    105 +	                    opt_class ? opt_class : "St"};
    106  	XWMHints wm = {.flags = InputHint, .input = 1};
    107  	XSizeHints *sizeh;
    108  
    109 @@ -1081,6 +1095,77 @@ xicdestroy(XIC xim, XPointer client, XPointer call)
    110  	return 1;
    111  }
    112  
    113 +/*
    114 + * Function: resource_load
    115 + * -----------------------
    116 + * Load the value of a resource from the provided db
    117 + *
    118 + * db: XrmDatabase to load from
    119 + * name: name of the resource to load
    120 + * rtype: type for resource being loaded
    121 + * dst: pointer to destination for loaded value
    122 + *
    123 + * returns: 1 if no value returned or resource's type is not "String"
    124 + *          0 on success
    125 + */
    126 +int
    127 +resource_load(XrmDatabase db, char *name, enum resource_type rtype, void *dst)
    128 +{
    129 +	char **sdst = dst;
    130 +	int *idst = dst;
    131 +	float *fdst = dst;
    132 +
    133 +	char fullname[256];
    134 +	char fullclass[256];
    135 +	char *type;
    136 +	XrmValue ret;
    137 +
    138 +	snprintf(fullname, sizeof(fullname), "%s.%s",
    139 +			opt_name ? opt_name : "st", name);
    140 +	snprintf(fullclass, sizeof(fullclass), "%s.%s",
    141 +			opt_class ? opt_class : "St", name);
    142 +	fullname[sizeof(fullname) - 1] = fullclass[sizeof(fullclass) - 1] = '\0';
    143 +
    144 +	XrmGetResource(db, fullname, fullclass, &type, &ret);
    145 +	if (ret.addr == NULL || strncmp("String", type, 64))
    146 +		return 1;
    147 +
    148 +	switch (rtype) {
    149 +	case STRING:
    150 +		*sdst = ret.addr;
    151 +		break;
    152 +	case INTEGER:
    153 +		*idst = strtoul(ret.addr, NULL, 10);
    154 +		break;
    155 +	case FLOAT:
    156 +		*fdst = strtof(ret.addr, NULL);
    157 +		break;
    158 +	}
    159 +	return 0;
    160 +}
    161 +
    162 +/*
    163 + * Function: xresources_init
    164 + * -------------------------
    165 + * Initializes xresources values defined in resources
    166 + */
    167 +void
    168 +xresources_init(void)
    169 +{
    170 +	char *resm;
    171 +	XrmDatabase db;
    172 +	ResourcePref *p;
    173 +
    174 +	XrmInitialize();
    175 +	resm = XResourceManagerString(xw.dpy);
    176 +	if (!resm)
    177 +		return;
    178 +
    179 +	db = XrmGetStringDatabase(resm);
    180 +	for (p = resources; p < resources + LEN(resources); p++)
    181 +		resource_load(db, p->name, p->type, p->dst);
    182 +}
    183 +
    184  void
    185  xinit(int cols, int rows)
    186  {
    187 @@ -1092,6 +1177,7 @@ xinit(int cols, int rows)
    188  
    189  	if (!(xw.dpy = XOpenDisplay(NULL)))
    190  		die("can't open display\n");
    191 +	xresources_init();
    192  	xw.scr = XDefaultScreen(xw.dpy);
    193  	xw.vis = XDefaultVisual(xw.dpy, xw.scr);
    194  
    195 -- 
    196 2.25.0
    197