summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Smith <luke@lukesmith.xyz>2018-06-25 19:28:26 -0400
committerLuke Smith <luke@lukesmith.xyz>2018-06-25 19:28:26 -0400
commit195535faccf91b35322fe54e54237152bccad703 (patch)
tree852efbf8f96aa4ef28fdfc5b80dd1febe202f219
parentae9739faedbf43996dd146e321c79747b907d01e (diff)
wal compatibility added
-rw-r--r--README.md16
-rw-r--r--xresources.patch183
2 files changed, 197 insertions, 2 deletions
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" <djpohly@gmail.com>
+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 <X11/keysym.h>
+ #include <X11/Xft/Xft.h>
+ #include <X11/XKBlib.h>
++#include <X11/Xresource.h>
+
+ 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
+