st-xresources-20200604-9ba7ecf.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       st-xresources-20200604-9ba7ecf.diff (4840B)
       ---
            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