st-xresources-20200204-cfdf3f0.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) 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