You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
184 lines
4.7 KiB
184 lines
4.7 KiB
From 2752a599ee01305a435729bfacf43b1dde7cf0ef Mon Sep 17 00:00:00 2001 |
|
From: Benji Encalada Mora <benji@encalada.dev> |
|
Date: Thu, 4 Jun 2020 00:41:10 -0500 |
|
Subject: [PATCH] fix: replace xfps and actionfps variables |
|
|
|
--- |
|
config.def.h | 36 ++++++++++++++++++++++++ |
|
x.c | 78 +++++++++++++++++++++++++++++++++++++++++++++++++--- |
|
2 files changed, 110 insertions(+), 4 deletions(-) |
|
|
|
diff --git a/config.def.h b/config.def.h |
|
index 6f05dce..9b99782 100644 |
|
--- a/config.def.h |
|
+++ b/config.def.h |
|
@@ -168,6 +168,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. |
|
diff --git a/x.c b/x.c |
|
index 210f184..76f167f 100644 |
|
--- a/x.c |
|
+++ b/x.c |
|
@@ -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 |
|
@@ -828,8 +842,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; |
|
|
|
@@ -1104,8 +1118,6 @@ xinit(int cols, int rows) |
|
pid_t thispid = getpid(); |
|
XColor xmousefg, xmousebg; |
|
|
|
- if (!(xw.dpy = XOpenDisplay(NULL))) |
|
- die("can't open display\n"); |
|
xw.scr = XDefaultScreen(xw.dpy); |
|
xw.vis = XDefaultVisual(xw.dpy, xw.scr); |
|
|
|
@@ -1964,6 +1976,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) |
|
{ |
|
@@ -2037,6 +2102,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); |
|
-- |
|
2.26.2 |
|
|
|
|