From 195535faccf91b35322fe54e54237152bccad703 Mon Sep 17 00:00:00 2001 From: Luke Smith Date: Mon, 25 Jun 2018 19:28:26 -0400 Subject: [PATCH] wal compatibility added --- README.md | 16 ++++- xresources.patch | 183 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 197 insertions(+), 2 deletions(-) create mode 100644 xresources.patch diff --git a/README.md b/README.md index 9a6c849..f726442 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ Forked from [https://github.com/shiva/st](https://github.com/shiva/st) for simpl + transparency + copy to clipboard (alt-shift-c) ++ Optional compatibility with `Xresources` and `pywal` for dynamic colors + Solarized colors (light and dark toggleable) + vertcenter + scrollback with keyboard @@ -13,8 +14,8 @@ Forked from [https://github.com/shiva/st](https://github.com/shiva/st) for simpl + Default font is system "mono" at 14pt, meaning the font will match your system font. + Hold alt and press either ↑/↓ or the vim keys k/j to move up/down in the terminal. -+ Alt-u and Alt-d scroll back/foward in history a page at a time. -+ Alt-PageUp and Alt-PageDown scroll back/foward in history a page at a time. ++ Alt-u and Alt-d scroll back/forward in history a page at a time. ++ Alt-PageUp and Alt-PageDown scroll back/forward in history a page at a time. + Transparency with solarized colors by default. + Zoom in/out with Alt+Shift+k/j or u/d for larger intervals. @@ -38,6 +39,8 @@ Obviously, `make` is required to build. `fontconfig` is required for the default ## Custom changes (`config.def.h` or `config.h`) +### Solarized + By default, the terminal is transparent with a blackish background. There's a patch file `solarized-alpha-toggle.patch` which you can use to remove the transparency and give it a typical deep, dark blue solarized background. Just run: ``` @@ -46,6 +49,15 @@ patch < solarized-alpha-toggle.patch Then, run `make` & `sudo make install` again to install the new build. You make reverse the solarized background by running the same command as above, but giving `patch` the `-R` option as well. +### `Xresources` and `pywal`/`wal` compatibility + +If you use `wal` to maintain color schemes across your programs, you can use the `xresources.patch`. + +``` +patch < xresources.patch +make && sudo make install +``` + ## Explore `config.h` + Change `colorname[]` array values (88 LOC), default colours are solarized. diff --git a/xresources.patch b/xresources.patch new file mode 100644 index 0000000..2f55477 --- /dev/null +++ b/xresources.patch @@ -0,0 +1,183 @@ +From 9ba79c106145759de6b436dac2e4b8ff5a12bc2e Mon Sep 17 00:00:00 2001 +From: "Devin J. Pohly" +Date: Fri, 9 Mar 2018 14:56:34 -0600 +Subject: [PATCH] Port Xresources patch by @dcat to st-git + +--- + config.h | 35 +++++++++++++++++++++++++++ + x.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- + 2 files changed, 109 insertions(+), 4 deletions(-) + +diff --git a/config.h b/config.h +index 82b1b09..471fe57 100644 +--- a/config.h ++++ b/config.h +@@ -150,6 +150,41 @@ static unsigned int mousebg = 0; + */ + static unsigned int defaultattr = 11; + ++/* ++ * 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 }, ++ { "xfps", INTEGER, &xfps }, ++ { "actionfps", INTEGER, &actionfps }, ++ { "blinktimeout", INTEGER, &blinktimeout }, ++ { "bellvolume", INTEGER, &bellvolume }, ++ { "tabspaces", INTEGER, &tabspaces }, ++ { "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 d43a529..7f29cc2 100644 +--- a/x.c ++++ b/x.c +@@ -14,6 +14,7 @@ + #include + #include + #include ++#include + + static char *argv0; + #include "arg.h" +@@ -43,6 +44,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 +@@ -778,8 +792,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; + +@@ -999,8 +1013,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); + +@@ -1864,6 +1876,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) + { +@@ -1937,6 +2002,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.16.2 +