st

fork of suckless's simple terminal
Index Commits Files Refs README LICENSE
commit c5e92375a9d5f66bbd986c4bd23d10cc7b31bf0c
parent 00085199039ee63acc7b1ecb7e3774a9c3552b2a
Author: Martin J. Kloeckner <martin.cachari@gmail.com>
Date:   Sun,  2 Oct 2022 16:34:24 -0300

Update before applying gruvbox theme

Diffstat:
Mconfig.def.h | 10+++++++---
Mconfig.mk | 2+-
Apatches/st-alpha-20220206-0.8.5.diff | 146+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Apatches/st-gruvbox-dark-0.8.5.diff | 66++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mst.h | 1+
Mx.c | 40++++++++++++++++++++++++++++++----------
6 files changed, 251 insertions(+), 14 deletions(-)
diff --git a/config.def.h b/config.def.h
@@ -5,7 +5,8 @@
  *
  * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
  */
-static char *font = "Liberation Mono:pixelsize=12:antialias=true:autohint=true";
+/* static char *font = "Liberation Mono:pixelsize=12:antialias=true:autohint=true"; */
+static char *font = "JetBrains Mono NL:size=10:antialias=true:autohint=true";
 static int borderpx = 2;
 
 /*
@@ -19,14 +20,14 @@ static int borderpx = 2;
 static char *shell = "/bin/sh";
 char *utmp = NULL;
 /* scroll program: to enable use a string like "scroll" */
-char *scroll = NULL;
+char *scroll = "scroll";
 char *stty_args = "stty raw pass8 nl -echo -iexten -cstopb 38400";
 
 /* identification sequence returned in DA and DECID */
 char *vtiden = "\033[?6c";
 
 /* Kerning / character bounding-box multipliers */
-static float cwscale = 1.0;
+static float cwscale = 1.05;
 static float chscale = 1.0;
 
 /*
@@ -93,6 +94,9 @@ char *termname = "st-256color";
  */
 unsigned int tabspaces = 8;
 
+/* bg opacity */
+float alpha = 0.92;
+
 /* Terminal colors (16 first used in escape sequence) */
 static const char *colorname[] = {
     /* 8 normal colors */
diff --git a/config.mk b/config.mk
@@ -16,7 +16,7 @@ PKG_CONFIG = pkg-config
 INCS = -I$(X11INC) \
        `$(PKG_CONFIG) --cflags fontconfig` \
        `$(PKG_CONFIG) --cflags freetype2`
-LIBS = -L$(X11LIB) -lm -lrt -lX11 -lutil -lXft \
+LIBS = -L$(X11LIB) -lm -lrt -lX11 -lutil -lXft -lXrender\
        `$(PKG_CONFIG) --libs fontconfig` \
        `$(PKG_CONFIG) --libs freetype2`
 
diff --git a/patches/st-alpha-20220206-0.8.5.diff b/patches/st-alpha-20220206-0.8.5.diff
@@ -0,0 +1,146 @@
+diff --git a/config.def.h b/config.def.h
+index 91ab8ca..6af616e 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -93,6 +93,9 @@ char *termname = "st-256color";
+  */
+ unsigned int tabspaces = 8;
+ 
++/* bg opacity */
++float alpha = 0.8;
++
+ /* Terminal colors (16 first used in escape sequence) */
+ static const char *colorname[] = {
+     /* 8 normal colors */
+diff --git a/config.mk b/config.mk
+index 4c4c5d5..0114bad 100644
+--- a/config.mk
++++ b/config.mk
+@@ -16,7 +16,7 @@ PKG_CONFIG = pkg-config
+ INCS = -I$(X11INC) \
+        `$(PKG_CONFIG) --cflags fontconfig` \
+        `$(PKG_CONFIG) --cflags freetype2`
+-LIBS = -L$(X11LIB) -lm -lrt -lX11 -lutil -lXft \
++LIBS = -L$(X11LIB) -lm -lrt -lX11 -lutil -lXft -lXrender\
+        `$(PKG_CONFIG) --libs fontconfig` \
+        `$(PKG_CONFIG) --libs freetype2`
+ 
+diff --git a/st.h b/st.h
+index 519b9bd..8bb533d 100644
+--- a/st.h
++++ b/st.h
+@@ -126,3 +126,4 @@ extern unsigned int tabspaces;
+ extern unsigned int defaultfg;
+ extern unsigned int defaultbg;
+ extern unsigned int defaultcs;
++extern float alpha;
+diff --git a/x.c b/x.c
+index 8a16faa..ddf4178 100644
+--- a/x.c
++++ b/x.c
+@@ -105,6 +105,7 @@ typedef struct {
+     XSetWindowAttributes attrs;
+     int scr;
+     int isfixed; /* is fixed geometry? */
++    int depth; /* bit depth */
+     int l, t; /* left and top offset */
+     int gm; /* geometry mask */
+ } XWindow;
+@@ -243,6 +244,7 @@ static char *usedfont = NULL;
+ static double usedfontsize = 0;
+ static double defaultfontsize = 0;
+ 
++static char *opt_alpha = NULL;
+ static char *opt_class = NULL;
+ static char **opt_cmd  = NULL;
+ static char *opt_embed = NULL;
+@@ -736,7 +738,7 @@ xresize(int col, int row)
+ 
+     XFreePixmap(xw.dpy, xw.buf);
+     xw.buf = XCreatePixmap(xw.dpy, xw.win, win.w, win.h,
+-            DefaultDepth(xw.dpy, xw.scr));
++            xw.depth);
+     XftDrawChange(xw.draw, xw.buf);
+     xclear(0, 0, win.w, win.h);
+ 
+@@ -796,6 +798,13 @@ xloadcols(void)
+             else
+                 die("could not allocate color %d\n", i);
+         }
++
++    /* set alpha value of bg color */
++    if (opt_alpha)
++        alpha = strtof(opt_alpha, NULL);
++    dc.col[defaultbg].color.alpha = (unsigned short)(0xffff * alpha);
++    dc.col[defaultbg].pixel &= 0x00FFFFFF;
++    dc.col[defaultbg].pixel |= (unsigned char)(0xff * alpha) << 24;
+     loaded = 1;
+ }
+ 
+@@ -1118,11 +1127,23 @@ xinit(int cols, int rows)
+     Window parent;
+     pid_t thispid = getpid();
+     XColor xmousefg, xmousebg;
++    XWindowAttributes attr;
++    XVisualInfo vis;
+ 
+     if (!(xw.dpy = XOpenDisplay(NULL)))
+         die("can't open display\n");
+     xw.scr = XDefaultScreen(xw.dpy);
+-    xw.vis = XDefaultVisual(xw.dpy, xw.scr);
++
++    if (!(opt_embed && (parent = strtol(opt_embed, NULL, 0)))) {
++        parent = XRootWindow(xw.dpy, xw.scr);
++        xw.depth = 32;
++    } else {
++        XGetWindowAttributes(xw.dpy, parent, &attr);
++        xw.depth = attr.depth;
++    }
++
++    XMatchVisualInfo(xw.dpy, xw.scr, xw.depth, TrueColor, &vis);
++    xw.vis = vis.visual;
+ 
+     /* font */
+     if (!FcInit())
+@@ -1132,7 +1153,7 @@ xinit(int cols, int rows)
+     xloadfonts(usedfont, 0);
+ 
+     /* colors */
+-    xw.cmap = XDefaultColormap(xw.dpy, xw.scr);
++    xw.cmap = XCreateColormap(xw.dpy, parent, xw.vis, None);
+     xloadcols();
+ 
+     /* adjust fixed window geometry */
+@@ -1152,19 +1173,15 @@ xinit(int cols, int rows)
+         | ButtonMotionMask | ButtonPressMask | ButtonReleaseMask;
+     xw.attrs.colormap = xw.cmap;
+ 
+-    if (!(opt_embed && (parent = strtol(opt_embed, NULL, 0))))
+-        parent = XRootWindow(xw.dpy, xw.scr);
+     xw.win = XCreateWindow(xw.dpy, parent, xw.l, xw.t,
+-            win.w, win.h, 0, XDefaultDepth(xw.dpy, xw.scr), InputOutput,
++            win.w, win.h, 0, xw.depth, InputOutput,
+             xw.vis, CWBackPixel | CWBorderPixel | CWBitGravity
+             | CWEventMask | CWColormap, &xw.attrs);
+ 
+     memset(&gcvalues, 0, sizeof(gcvalues));
+     gcvalues.graphics_exposures = False;
+-    dc.gc = XCreateGC(xw.dpy, parent, GCGraphicsExposures,
+-            &gcvalues);
+-    xw.buf = XCreatePixmap(xw.dpy, xw.win, win.w, win.h,
+-            DefaultDepth(xw.dpy, xw.scr));
++    xw.buf = XCreatePixmap(xw.dpy, xw.win, win.w, win.h, xw.depth);
++    dc.gc = XCreateGC(xw.dpy, xw.buf, GCGraphicsExposures, &gcvalues);
+     XSetForeground(xw.dpy, dc.gc, dc.col[defaultbg].pixel);
+     XFillRectangle(xw.dpy, xw.buf, dc.gc, 0, 0, win.w, win.h);
+ 
+@@ -2019,6 +2036,9 @@ main(int argc, char *argv[])
+     case 'a':
+         allowaltscreen = 0;
+         break;
++    case 'A':
++        opt_alpha = EARGF(usage());
++        break;
+     case 'c':
+         opt_class = EARGF(usage());
+         break;
diff --git a/patches/st-gruvbox-dark-0.8.5.diff b/patches/st-gruvbox-dark-0.8.5.diff
@@ -0,0 +1,66 @@
+diff --git a/config.def.h b/config.def.h
+index 91ab8ca..a068694 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -96,32 +96,24 @@ unsigned int tabspaces = 8;
+ /* Terminal colors (16 first used in escape sequence) */
+ static const char *colorname[] = {
+     /* 8 normal colors */
+-    "black",
+-    "red3",
+-    "green3",
+-    "yellow3",
+-    "blue2",
+-    "magenta3",
+-    "cyan3",
+-    "gray90",
++    [0] = "#282828", /* hard contrast: #1d2021 / soft contrast: #32302f */
++    [1] = "#cc241d", /* red     */
++    [2] = "#98971a", /* green   */
++    [3] = "#d79921", /* yellow  */
++    [4] = "#458588", /* blue    */
++    [5] = "#b16286", /* magenta */
++    [6] = "#689d6a", /* cyan    */
++    [7] = "#a89984", /* white   */
+ 
+     /* 8 bright colors */
+-    "gray50",
+-    "red",
+-    "green",
+-    "yellow",
+-    "#5c5cff",
+-    "magenta",
+-    "cyan",
+-    "white",
+-
+-    [255] = 0,
+-
+-    /* more colors can be added after 255 to use with DefaultXX */
+-    "#cccccc",
+-    "#555555",
+-    "gray90", /* default foreground colour */
+-    "black", /* default background colour */
++    [8]  = "#928374", /* black   */
++    [9]  = "#fb4934", /* red     */
++    [10] = "#b8bb26", /* green   */
++    [11] = "#fabd2f", /* yellow  */
++    [12] = "#83a598", /* blue    */
++    [13] = "#d3869b", /* magenta */
++    [14] = "#8ec07c", /* cyan    */
++    [15] = "#ebdbb2", /* white   */
+ };
+ 
+ 
+@@ -129,9 +121,9 @@ static const char *colorname[] = {
+  * Default colors (colorname index)
+  * foreground, background, cursor, reverse cursor
+  */
+-unsigned int defaultfg = 258;
+-unsigned int defaultbg = 259;
+-unsigned int defaultcs = 256;
++unsigned int defaultfg = 15;
++unsigned int defaultbg = 0;
++unsigned int defaultcs = 15;
+ static unsigned int defaultrcs = 257;
+ 
+ /*
diff --git a/st.h b/st.h
@@ -124,3 +124,4 @@ extern unsigned int tabspaces;
 extern unsigned int defaultfg;
 extern unsigned int defaultbg;
 extern unsigned int defaultcs;
+extern float alpha;
diff --git a/x.c b/x.c
@@ -105,6 +105,7 @@ typedef struct {
     XSetWindowAttributes attrs;
     int scr;
     int isfixed; /* is fixed geometry? */
+    int depth; /* bit depth */
     int l, t; /* left and top offset */
     int gm; /* geometry mask */
 } XWindow;
@@ -243,6 +244,7 @@ static char *usedfont = NULL;
 static double usedfontsize = 0;
 static double defaultfontsize = 0;
 
+static char *opt_alpha = NULL;
 static char *opt_class = NULL;
 static char **opt_cmd  = NULL;
 static char *opt_embed = NULL;
@@ -752,7 +754,7 @@ xresize(int col, int row)
 
     XFreePixmap(xw.dpy, xw.buf);
     xw.buf = XCreatePixmap(xw.dpy, xw.win, win.w, win.h,
-            DefaultDepth(xw.dpy, xw.scr));
+            xw.depth);
     XftDrawChange(xw.draw, xw.buf);
     xclear(0, 0, win.w, win.h);
 
@@ -812,6 +814,13 @@ xloadcols(void)
             else
                 die("could not allocate color %d\n", i);
         }
+
+    /* set alpha value of bg color */
+    if (opt_alpha)
+        alpha = strtof(opt_alpha, NULL);
+    dc.col[defaultbg].color.alpha = (unsigned short)(0xffff * alpha);
+    dc.col[defaultbg].pixel &= 0x00FFFFFF;
+    dc.col[defaultbg].pixel |= (unsigned char)(0xff * alpha) << 24;
     loaded = 1;
 }
 
@@ -1134,11 +1143,23 @@ xinit(int cols, int rows)
     Window parent;
     pid_t thispid = getpid();
     XColor xmousefg, xmousebg;
+    XWindowAttributes attr;
+    XVisualInfo vis;
 
     if (!(xw.dpy = XOpenDisplay(NULL)))
         die("can't open display\n");
     xw.scr = XDefaultScreen(xw.dpy);
-    xw.vis = XDefaultVisual(xw.dpy, xw.scr);
+
+    if (!(opt_embed && (parent = strtol(opt_embed, NULL, 0)))) {
+        parent = XRootWindow(xw.dpy, xw.scr);
+        xw.depth = 32;
+    } else {
+        XGetWindowAttributes(xw.dpy, parent, &attr);
+        xw.depth = attr.depth;
+    }
+
+    XMatchVisualInfo(xw.dpy, xw.scr, xw.depth, TrueColor, &vis);
+    xw.vis = vis.visual;
 
     /* font */
     if (!FcInit())
@@ -1148,7 +1169,7 @@ xinit(int cols, int rows)
     xloadfonts(usedfont, 0);
 
     /* colors */
-    xw.cmap = XDefaultColormap(xw.dpy, xw.scr);
+    xw.cmap = XCreateColormap(xw.dpy, parent, xw.vis, None);
     xloadcols();
 
     /* adjust fixed window geometry */
@@ -1168,19 +1189,15 @@ xinit(int cols, int rows)
         | ButtonMotionMask | ButtonPressMask | ButtonReleaseMask;
     xw.attrs.colormap = xw.cmap;
 
-    if (!(opt_embed && (parent = strtol(opt_embed, NULL, 0))))
-        parent = XRootWindow(xw.dpy, xw.scr);
     xw.win = XCreateWindow(xw.dpy, parent, xw.l, xw.t,
-            win.w, win.h, 0, XDefaultDepth(xw.dpy, xw.scr), InputOutput,
+            win.w, win.h, 0, xw.depth, InputOutput,
             xw.vis, CWBackPixel | CWBorderPixel | CWBitGravity
             | CWEventMask | CWColormap, &xw.attrs);
 
     memset(&gcvalues, 0, sizeof(gcvalues));
     gcvalues.graphics_exposures = False;
-    dc.gc = XCreateGC(xw.dpy, parent, GCGraphicsExposures,
-            &gcvalues);
-    xw.buf = XCreatePixmap(xw.dpy, xw.win, win.w, win.h,
-            DefaultDepth(xw.dpy, xw.scr));
+    xw.buf = XCreatePixmap(xw.dpy, xw.win, win.w, win.h, xw.depth);
+    dc.gc = XCreateGC(xw.dpy, xw.buf, GCGraphicsExposures, &gcvalues);
     XSetForeground(xw.dpy, dc.gc, dc.col[defaultbg].pixel);
     XFillRectangle(xw.dpy, xw.buf, dc.gc, 0, 0, win.w, win.h);
 
@@ -2035,6 +2052,9 @@ main(int argc, char *argv[])
     case 'a':
         allowaltscreen = 0;
         break;
+    case 'A':
+        opt_alpha = EARGF(usage());
+        break;
     case 'c':
         opt_class = EARGF(usage());
         break;