sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

commit bba7f8d8ed4cd694718747b29429cdae3feead7a
parent fa4617a6d3057134446dc77e48a2f00fa8412f86
Author: Julius Huelsmann <juliusHuelsmann@gmail.com>
Date:   Mon,  1 Jun 2020 19:02:13 +0200

[st][patch][alpha-focus-highlight] update patch, add patch version for st-0.8.3

Diffstat:
Dst.suckless.org/patches/alpha_focus_highlight/alphaFocus.gif | 0
Mst.suckless.org/patches/alpha_focus_highlight/index.md | 167+++++++++++++++++++++++++++++++++++++++++--------------------------------------
Dst.suckless.org/patches/alpha_focus_highlight/st-alphaFocusHighlight-20191218-2b8333f.diff | 316-------------------------------------------------------------------------------
Dst.suckless.org/patches/alpha_focus_highlight/st-alphaFocusHighlight-20200212-2b8333f.diff | 342-------------------------------------------------------------------------------
Dst.suckless.org/patches/alpha_focus_highlight/st-alphaFocusHighlight-20200216-26cdfeb.diff | 235-------------------------------------------------------------------------------
Dst.suckless.org/patches/alpha_focus_highlight/st-alphafocushighlight-20191107-2b8333f.diff | 223-------------------------------------------------------------------------------
Ast.suckless.org/patches/alpha_focus_highlight/st-focus-20200530-43a395a.diff | 227+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ast.suckless.org/patches/alpha_focus_highlight/st-focus-20200530-patch_alpha.diff | 123+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
8 files changed, 437 insertions(+), 1196 deletions(-)

diff --git a/st.suckless.org/patches/alpha_focus_highlight/alphaFocus.gif b/st.suckless.org/patches/alpha_focus_highlight/alphaFocus.gif Binary files differ. diff --git a/st.suckless.org/patches/alpha_focus_highlight/index.md b/st.suckless.org/patches/alpha_focus_highlight/index.md @@ -1,81 +1,88 @@ -Alpha Focus Highlight Patch -=========================== - -Description ------------ -This patch allows the user to specify two distinct opacity values; one for the -focused- and one for unfocused windows' background. This enables the user to -spot the focused window at a glance. - -The *Alpha Highlight Focus Patch* patch is based on the -[Alpha Patch](https://st.suckless.org/patches/alpha/), -which is already applied in the patch file below. Most of the work has been performed by the -original authors of the Alpha Patch. - -Screenshot ----------- -![Screenshot](alphaFocus.gif) - -Contributions + Bug Reports ---------------------------- -* [Issues](https://github.com/juliusHuelsmann/st/issues?q=is%3Aopen+is%3Aissue+label%3AalphaFocusHighlight) - - -Notes Alpha Patch ------------------ -* Note that *you need an X composite manager* (e.g. compton, xcompmgr) to make - this patch effective. -* The alpha value affects the default background only. -* The color designated by 'defaultbg' should not be used elsewhere. -* Embedding might fail after applying this patch. - - -Notes ------ -* In i3WM, the focus event is triggered twice for one specific window on a workspace (root); - hence the alpha values are applied twice which appears as blinking. -* The patch is applied both to a non-patched version and to a patched version of st - and can be tried out [here](https://github.com/juliusHuelsmann/st). - - -Download ------------------------------------ - -## Based on commit `2b8333f` of `st` (Okt 2019). -*All versions (from old to new)*: -* [Version 1.0 (attached)](st-alphafocushighlight-20191107-2b8333f.diff) -* [Version 1.0 (Github)](https://github.com/juliusHuelsmann/st/releases/download/patchesV3/st-alphaFocusHighlight-20191107-2b8333f.diff) -* [Version1.1 (attached)](st-alphaFocusHighlight-20191218-2b8333f.diff) -* [Version1.1 (Github)](https://github.com/juliusHuelsmann/st/releases/download/patchesV3/st-alphaFocusHighlight-20191218-2b8333f.diff) -* [Version1.2 (attached)](st-alphaFocusHighlight-20200212-2b8333f.diff) -* [Version1.2 (Github)](https://github.com/juliusHuelsmann/st/releases/download/patchesV3/st-alphaFocusHighlight-20200212-2b8333f.diff) - -*Most Recent*: -* [st-alphaFocusHighlight-20200212-2b8333f.diff (Github)](https://github.com/juliusHuelsmann/st/releases/download/patchesV3/st-alphaFocusHighlight-20200212-2b8333f.diff) - -## Based on commit `cd78575` of `st` (February 2020). -*All versions (from old to new)*: -* [Version 1.2 (attached)](st-alphaFocusHighlight-20200216-26cdfeb.diff) - -*Most Recent*: -* [st-alphaFocusHighlight-20200216-26cdfeb.diff (Github)](https://github.com/juliusHuelsmann/st/releases/download/patchesV3/st-alphaFocusHighlight-20200216-26cdfeb.diff) - -Note that patch errors can occur when the code in the st repo is updated. Please report [an -Issue](https://github.com/juliusHuelsmann/st/issues) or contribute a merged patch in that case. - -Authors of the Alpha Patch --------------------------- -* Eon S. Jeon - <esjeon@hyunmu.am> -* pr - <protodev@gmx.net> (0.5 port) -* Laslo Hunhold - <dev@frign.de> (0.6, git ports) -* Ivan J. - <parazyd@dyne.org> (git port) -* Matthew Parnell - <matt@parnmatt.co.uk> (0.7 port) -* Johannes Mayrhofer - <jm.spam@gmx.net> (0.8.1 port) -* Àlex Ramírez <aramirez@posteo.net> (0.8.1 pre-multiplication fix). - - -Authors of the Alpha-Focus Patch --------------------------------- -* [Julius Hülsmann](https://github.com/juliusHuelsmann) - <juliusHuelsmann [at] gmail [dot] com> +Patch for suckless' simple terminal (`st`), which allows the user to specify two distinct opacity +values / background colors; one for the focused- and one for unfocused windows' background. +This enables the user to spot the focused window at a glance. +The patch is based on the [alpha patch](https://st.suckless.org/patches/alpha/); i.e. is to be +applied after applying the alpha patch. + +The patch is released [on this release page](https://github.com/juliusHuelsmann/st/releases) and +[on the suckless page](https://st.suckless.org/patches/alpha_focus_highlight/). +Please [leave a star](https://github.com/juliusHuelsmann/st-focus). + +## Contributions & Bug Reports +* [Report / Solve Patching issues](https://github.com/juliusHuelsmann/st) with a new version of `st` +* [Contributions and Bug reports](https://github.com/juliusHuelsmann/st-focus) + +## Building, customizing and installing the patch +**1. Optional Dependencies** +The opacity functionality of this patch requires an `X composite manager` (e.g. `picom`, `compton`, +`xcompmgr`), which can for instance be installed via `sudo pacman -S picom` on Arch Linux and +launched via `picom -b`. *The composite manager has to be relaunched after booting*. + +**2. Applying the patch** +Apply the patch to `st`'s source code and build code via `patch < [PATCH_NAME]` + +**3. Customization** +This patch performs changes in the `config.def.h` file, which need to be manually merged into a +pre-existing custom `config.h` file. The following four variables can be adapted: +- `alpha`/`alphaUnfocused` opacity of the terminal when focused / not focused. +- `bg`/`bgUnfocused` background color when focused / not focused. + +**4. Build & install** `make; sudo make install` + +## Download +If you want to try out the current version of the patch before patching your own build, +check out [this repository](https://github.com/juliusHuelsmann/st), which contains a +merged version of this patch with a reasonable configuration. + +The patch comes +1. merged into the alpha patch (`alpha + focus`) or +2. for patching on top of an already applied alpha patch (`focus`) + +I recommend downloading the alpha patch from the +[alpha patch](https://st.suckless.org/patches/alpha/) page and using `Patch: focus`, that way you +make sure that you apply the latest version of the alpha patch. + +Note that patch errors can occur when the code in the st repo is updated. +Please report an Issue or contribute a merged patch in that case. + +### Patch: alpha + focus + + +**st-0.8.3** +- [Version 1 (attached)](st-focus-20200530-43a395a.diff) +- Most recent release: [st-focus-20200530-43a395a.diff Github](https://github.com/juliusHuelsmann/st/releases/download/v2/st-focus-20200530-43a395a.diff) + +--- + +### Patch: focus + +**st-0.8.3** +- [Version 1 (attached)](st-focus-20200530-patch_alpha.diff) +- Most recent release: [st-focus-20200530-patch_alpha.diff (Github)](https://github.com/juliusHuelsmann/st/releases/download/v2/st-focus-20200530-patch_alpha.diff) + + +## MISC +**Note:** The benefit of the `alpha` patch and the `Alpha Focus Highlight` patch are the ability to +restrict the transparency only to the background color currently in use, hence keeping the font in +the foreground solid and readable. + +If the goal is to apply transparency independent on the content, you do not require any patch for +`st`, instead add +` +inactive-opacity = 0.2; +active-opacity = 0.8; +` +to your `picom` configuration file and keep a vanilla `st` build. + +If you want to configure `inactive-opacity` and `active-opacity` rules in order to apply opacity to +other applications, but keep the benefits of the st alpha patches, have a look at +[this picom configuration +file](https://github.com/juliusHuelsmann/Config/blob/master/.config/picom/picom.conf), +in which opacity management configured to be performed by `st`. + +# Authors / Contributors +* Julius Hülsmann - <juliusHuelsmann [at] gmail [dot] com> * [glpub](https://github.com/glpub): Fix: erroneous color reset -* [Milos Stojanovic](https://github.com/M4444): Code formatting fix +* [Milos Stojanovic](https://github.com/M4444): Code Formatting +* [Yui](https://github.com/yuwui): Fix spelling errors +* Authors of the shipped alpha patch: [Eon S. Jeon](esjeon@hyunmu.am), [pr](protodev@gmx.net), [Laslo Hunhold](dev@frign.de), [Ivan J.](parazyd@dyne.org), [Matthew Parnell](matt@parnmatt.co.uk), [Johannes Mayrhofer](jm.spam@gmx.net), [Àlex Ramírez](aramirez@posteo.net) diff --git a/st.suckless.org/patches/alpha_focus_highlight/st-alphaFocusHighlight-20191218-2b8333f.diff b/st.suckless.org/patches/alpha_focus_highlight/st-alphaFocusHighlight-20191218-2b8333f.diff @@ -1,316 +0,0 @@ -From 49fbc3f0a3d3524fa37ba4c0129425394b84feed Mon Sep 17 00:00:00 2001 -From: Julius Huelsmann <juliusHuelsmann@gmail.com> -Date: Wed, 6 Nov 2019 21:59:28 +0100 -Subject: [PATCH 1/2] [PATCH:FOCUS]: first version - ---- - config.def.h | 7 ++++++- - config.mk | 2 +- - st.h | 2 ++ - x.c | 59 +++++++++++++++++++++++++++++++++++++++------------- - 4 files changed, 54 insertions(+), 16 deletions(-) - -diff --git a/config.def.h b/config.def.h -index 6ebea98..16f1ebd 100644 ---- a/config.def.h -+++ b/config.def.h -@@ -82,6 +82,10 @@ char *termname = "st-256color"; - */ - unsigned int tabspaces = 8; - -+/* bg opacity */ -+float alpha = 0.8; //< alpha value used when the window is focused. -+float alphaUnfocussed = 0.6; //< alpha value used when the focus is lost -+ - /* Terminal colors (16 first used in escape sequence) */ - static const char *colorname[] = { - /* 8 normal colors */ -@@ -109,6 +113,7 @@ static const char *colorname[] = { - /* more colors can be added after 255 to use with DefaultXX */ - "#cccccc", - "#555555", -+ "black", - }; - - -@@ -117,7 +122,7 @@ static const char *colorname[] = { - * foreground, background, cursor, reverse cursor - */ - unsigned int defaultfg = 7; --unsigned int defaultbg = 0; -+unsigned int defaultbg = 258; - static unsigned int defaultcs = 256; - static unsigned int defaultrcs = 257; - -diff --git a/config.mk b/config.mk -index 0cbb002..1d2f0e2 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 4da3051..0bc69f8 100644 ---- a/st.h -+++ b/st.h -@@ -120,3 +120,5 @@ extern char *termname; - extern unsigned int tabspaces; - extern unsigned int defaultfg; - extern unsigned int defaultbg; -+extern float alpha; -+extern float alphaUnfocussed; -diff --git a/x.c b/x.c -index 5828a3b..45bc960 100644 ---- a/x.c -+++ b/x.c -@@ -4,6 +4,7 @@ - #include <limits.h> - #include <locale.h> - #include <signal.h> -+#include <stdbool.h> - #include <sys/select.h> - #include <time.h> - #include <unistd.h> -@@ -98,6 +99,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; -@@ -233,6 +235,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; -@@ -241,6 +244,7 @@ static char *opt_io = NULL; - static char *opt_line = NULL; - static char *opt_name = NULL; - static char *opt_title = NULL; -+static bool focused = true; - - static int oldbutton = 3; /* button event on startup: 3 = release */ - -@@ -692,7 +696,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); - -@@ -752,6 +756,14 @@ 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); -+ float const usedAlpha = focused ? alpha : alphaUnfocussed; -+ dc.col[defaultbg].color.alpha = (unsigned short)(0xffff * usedAlpha); -+ dc.col[defaultbg].pixel &= 0x00FFFFFF; -+ dc.col[defaultbg].pixel |= (unsigned char)(0xff * usedAlpha) << 24; - loaded = 1; - } - -@@ -1044,11 +1056,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()) -@@ -1058,7 +1082,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 */ -@@ -1078,19 +1102,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); - -@@ -1663,13 +1683,21 @@ focus(XEvent *ev) - XSetICFocus(xw.xic); - win.mode |= MODE_FOCUSED; - xseturgency(0); -- if (IS_SET(MODE_FOCUS)) -- ttywrite("\033[I", 3, 0); -+ if (IS_SET(MODE_FOCUS)) { ttywrite("\033[I", 3, 0); } -+ if (!focused) { -+ focused = true; -+ xloadcols(); -+ redraw(); -+ } - } else { - XUnsetICFocus(xw.xic); - win.mode &= ~MODE_FOCUSED; -- if (IS_SET(MODE_FOCUS)) -- ttywrite("\033[O", 3, 0); -+ if (IS_SET(MODE_FOCUS)) { ttywrite("\033[O", 3, 0); } -+ if (focused) { -+ focused = false; -+ xloadcols(); -+ redraw(); -+ } - } - } - -@@ -1925,6 +1953,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; --- -2.24.1 - - -From b442038e2f28b427f044a6bbd80481251ab532ad Mon Sep 17 00:00:00 2001 -From: "gloom @ t440p" <gloom@t440p> -Date: Tue, 17 Dec 2019 18:43:31 +0800 -Subject: [PATCH 2/2] merge: fix: do not reset terminal colors when - focus/unfocus - -when using scripts which changes shell's -default ANSI colors like base16-shell -then focus/unfocus should not reset -foreground colors to default ones ---- - x.c | 34 ++++++++++++++++++++++------------ - 1 file changed, 22 insertions(+), 12 deletions(-) - -diff --git a/x.c b/x.c -index 45bc960..7482adb 100644 ---- a/x.c -+++ b/x.c -@@ -734,6 +734,20 @@ xloadcolor(int i, const char *name, Color *ncolor) - return XftColorAllocName(xw.dpy, xw.vis, xw.cmap, name, ncolor); - } - -+void -+xloadalpha(void) -+{ -+ /* set alpha value of bg color */ -+ if (opt_alpha) -+ alpha = strtof(opt_alpha, NULL); -+ -+ float const usedAlpha = focused ? alpha : alphaUnfocussed; -+ -+ dc.col[defaultbg].color.alpha = (unsigned short)(0xffff * usedAlpha); -+ dc.col[defaultbg].pixel &= 0x00FFFFFF; -+ dc.col[defaultbg].pixel |= (unsigned char)(0xff * usedAlpha) << 24; -+} -+ - void - xloadcols(void) - { -@@ -749,7 +763,7 @@ xloadcols(void) - dc.col = xmalloc(dc.collen * sizeof(Color)); - } - -- for (i = 0; i < dc.collen; i++) -+ for (i = 0; i < dc.collen; i++) - if (!xloadcolor(i, NULL, &dc.col[i])) { - if (colorname[i]) - die("could not allocate color '%s'\n", colorname[i]); -@@ -757,13 +771,7 @@ xloadcols(void) - die("could not allocate color %d\n", i); - } - -- /* set alpha value of bg color */ -- if (opt_alpha) -- alpha = strtof(opt_alpha, NULL); -- float const usedAlpha = focused ? alpha : alphaUnfocussed; -- dc.col[defaultbg].color.alpha = (unsigned short)(0xffff * usedAlpha); -- dc.col[defaultbg].pixel &= 0x00FFFFFF; -- dc.col[defaultbg].pixel |= (unsigned char)(0xff * usedAlpha) << 24; -+ xloadalpha(); - loaded = 1; - } - -@@ -1683,19 +1691,21 @@ focus(XEvent *ev) - XSetICFocus(xw.xic); - win.mode |= MODE_FOCUSED; - xseturgency(0); -- if (IS_SET(MODE_FOCUS)) { ttywrite("\033[I", 3, 0); } -+ if (IS_SET(MODE_FOCUS)) -+ ttywrite("\033[I", 3, 0); - if (!focused) { - focused = true; -- xloadcols(); -+ xloadalpha(); - redraw(); - } - } else { - XUnsetICFocus(xw.xic); - win.mode &= ~MODE_FOCUSED; -- if (IS_SET(MODE_FOCUS)) { ttywrite("\033[O", 3, 0); } -+ if (IS_SET(MODE_FOCUS)) -+ ttywrite("\033[O", 3, 0); - if (focused) { - focused = false; -- xloadcols(); -+ xloadalpha(); - redraw(); - } - } --- -2.24.1 - diff --git a/st.suckless.org/patches/alpha_focus_highlight/st-alphaFocusHighlight-20200212-2b8333f.diff b/st.suckless.org/patches/alpha_focus_highlight/st-alphaFocusHighlight-20200212-2b8333f.diff @@ -1,342 +0,0 @@ -From 49fbc3f0a3d3524fa37ba4c0129425394b84feed Mon Sep 17 00:00:00 2001 -From: Julius Huelsmann <juliusHuelsmann@gmail.com> -Date: Wed, 6 Nov 2019 21:59:28 +0100 -Subject: [PATCH 1/3] [PATCH:FOCUS]: first version - ---- - config.def.h | 7 ++++++- - config.mk | 2 +- - st.h | 2 ++ - x.c | 59 +++++++++++++++++++++++++++++++++++++++------------- - 4 files changed, 54 insertions(+), 16 deletions(-) - -diff --git a/config.def.h b/config.def.h -index 6ebea98..16f1ebd 100644 ---- a/config.def.h -+++ b/config.def.h -@@ -82,6 +82,10 @@ char *termname = "st-256color"; - */ - unsigned int tabspaces = 8; - -+/* bg opacity */ -+float alpha = 0.8; //< alpha value used when the window is focused. -+float alphaUnfocussed = 0.6; //< alpha value used when the focus is lost -+ - /* Terminal colors (16 first used in escape sequence) */ - static const char *colorname[] = { - /* 8 normal colors */ -@@ -109,6 +113,7 @@ static const char *colorname[] = { - /* more colors can be added after 255 to use with DefaultXX */ - "#cccccc", - "#555555", -+ "black", - }; - - -@@ -117,7 +122,7 @@ static const char *colorname[] = { - * foreground, background, cursor, reverse cursor - */ - unsigned int defaultfg = 7; --unsigned int defaultbg = 0; -+unsigned int defaultbg = 258; - static unsigned int defaultcs = 256; - static unsigned int defaultrcs = 257; - -diff --git a/config.mk b/config.mk -index 0cbb002..1d2f0e2 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 4da3051..0bc69f8 100644 ---- a/st.h -+++ b/st.h -@@ -120,3 +120,5 @@ extern char *termname; - extern unsigned int tabspaces; - extern unsigned int defaultfg; - extern unsigned int defaultbg; -+extern float alpha; -+extern float alphaUnfocussed; -diff --git a/x.c b/x.c -index 5828a3b..45bc960 100644 ---- a/x.c -+++ b/x.c -@@ -4,6 +4,7 @@ - #include <limits.h> - #include <locale.h> - #include <signal.h> -+#include <stdbool.h> - #include <sys/select.h> - #include <time.h> - #include <unistd.h> -@@ -98,6 +99,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; -@@ -233,6 +235,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; -@@ -241,6 +244,7 @@ static char *opt_io = NULL; - static char *opt_line = NULL; - static char *opt_name = NULL; - static char *opt_title = NULL; -+static bool focused = true; - - static int oldbutton = 3; /* button event on startup: 3 = release */ - -@@ -692,7 +696,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); - -@@ -752,6 +756,14 @@ 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); -+ float const usedAlpha = focused ? alpha : alphaUnfocussed; -+ dc.col[defaultbg].color.alpha = (unsigned short)(0xffff * usedAlpha); -+ dc.col[defaultbg].pixel &= 0x00FFFFFF; -+ dc.col[defaultbg].pixel |= (unsigned char)(0xff * usedAlpha) << 24; - loaded = 1; - } - -@@ -1044,11 +1056,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()) -@@ -1058,7 +1082,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 */ -@@ -1078,19 +1102,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); - -@@ -1663,13 +1683,21 @@ focus(XEvent *ev) - XSetICFocus(xw.xic); - win.mode |= MODE_FOCUSED; - xseturgency(0); -- if (IS_SET(MODE_FOCUS)) -- ttywrite("\033[I", 3, 0); -+ if (IS_SET(MODE_FOCUS)) { ttywrite("\033[I", 3, 0); } -+ if (!focused) { -+ focused = true; -+ xloadcols(); -+ redraw(); -+ } - } else { - XUnsetICFocus(xw.xic); - win.mode &= ~MODE_FOCUSED; -- if (IS_SET(MODE_FOCUS)) -- ttywrite("\033[O", 3, 0); -+ if (IS_SET(MODE_FOCUS)) { ttywrite("\033[O", 3, 0); } -+ if (focused) { -+ focused = false; -+ xloadcols(); -+ redraw(); -+ } - } - } - -@@ -1925,6 +1953,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; --- -2.25.0 - - -From b442038e2f28b427f044a6bbd80481251ab532ad Mon Sep 17 00:00:00 2001 -From: "gloom @ t440p" <gloom@t440p> -Date: Tue, 17 Dec 2019 18:43:31 +0800 -Subject: [PATCH 2/3] merge: fix: do not reset terminal colors when - focus/unfocus - -when using scripts which changes shell's -default ANSI colors like base16-shell -then focus/unfocus should not reset -foreground colors to default ones ---- - x.c | 34 ++++++++++++++++++++++------------ - 1 file changed, 22 insertions(+), 12 deletions(-) - -diff --git a/x.c b/x.c -index 45bc960..7482adb 100644 ---- a/x.c -+++ b/x.c -@@ -734,6 +734,20 @@ xloadcolor(int i, const char *name, Color *ncolor) - return XftColorAllocName(xw.dpy, xw.vis, xw.cmap, name, ncolor); - } - -+void -+xloadalpha(void) -+{ -+ /* set alpha value of bg color */ -+ if (opt_alpha) -+ alpha = strtof(opt_alpha, NULL); -+ -+ float const usedAlpha = focused ? alpha : alphaUnfocussed; -+ -+ dc.col[defaultbg].color.alpha = (unsigned short)(0xffff * usedAlpha); -+ dc.col[defaultbg].pixel &= 0x00FFFFFF; -+ dc.col[defaultbg].pixel |= (unsigned char)(0xff * usedAlpha) << 24; -+} -+ - void - xloadcols(void) - { -@@ -749,7 +763,7 @@ xloadcols(void) - dc.col = xmalloc(dc.collen * sizeof(Color)); - } - -- for (i = 0; i < dc.collen; i++) -+ for (i = 0; i < dc.collen; i++) - if (!xloadcolor(i, NULL, &dc.col[i])) { - if (colorname[i]) - die("could not allocate color '%s'\n", colorname[i]); -@@ -757,13 +771,7 @@ xloadcols(void) - die("could not allocate color %d\n", i); - } - -- /* set alpha value of bg color */ -- if (opt_alpha) -- alpha = strtof(opt_alpha, NULL); -- float const usedAlpha = focused ? alpha : alphaUnfocussed; -- dc.col[defaultbg].color.alpha = (unsigned short)(0xffff * usedAlpha); -- dc.col[defaultbg].pixel &= 0x00FFFFFF; -- dc.col[defaultbg].pixel |= (unsigned char)(0xff * usedAlpha) << 24; -+ xloadalpha(); - loaded = 1; - } - -@@ -1683,19 +1691,21 @@ focus(XEvent *ev) - XSetICFocus(xw.xic); - win.mode |= MODE_FOCUSED; - xseturgency(0); -- if (IS_SET(MODE_FOCUS)) { ttywrite("\033[I", 3, 0); } -+ if (IS_SET(MODE_FOCUS)) -+ ttywrite("\033[I", 3, 0); - if (!focused) { - focused = true; -- xloadcols(); -+ xloadalpha(); - redraw(); - } - } else { - XUnsetICFocus(xw.xic); - win.mode &= ~MODE_FOCUSED; -- if (IS_SET(MODE_FOCUS)) { ttywrite("\033[O", 3, 0); } -+ if (IS_SET(MODE_FOCUS)) -+ ttywrite("\033[O", 3, 0); - if (focused) { - focused = false; -- xloadcols(); -+ xloadalpha(); - redraw(); - } - } --- -2.25.0 - - -From dffad320251fbab67181a005436f320717658cf9 Mon Sep 17 00:00:00 2001 -From: M <mc.cm.mail@gmail.com> -Date: Sun, 2 Feb 2020 14:20:52 +0100 -Subject: [PATCH 3/3] Remove stray trailing whitespace - ---- - x.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/x.c b/x.c -index 7482adb..cfbe64d 100644 ---- a/x.c -+++ b/x.c -@@ -763,7 +763,7 @@ xloadcols(void) - dc.col = xmalloc(dc.collen * sizeof(Color)); - } - -- for (i = 0; i < dc.collen; i++) -+ for (i = 0; i < dc.collen; i++) - if (!xloadcolor(i, NULL, &dc.col[i])) { - if (colorname[i]) - die("could not allocate color '%s'\n", colorname[i]); --- -2.25.0 - diff --git a/st.suckless.org/patches/alpha_focus_highlight/st-alphaFocusHighlight-20200216-26cdfeb.diff b/st.suckless.org/patches/alpha_focus_highlight/st-alphaFocusHighlight-20200216-26cdfeb.diff @@ -1,235 +0,0 @@ -From 7538b0b641fa8291b98f65ecc5d140e0e9cc0028 Mon Sep 17 00:00:00 2001 -From: Julius Huelsmann <juliusHuelsmann@gmail.com> -Date: Sun, 16 Feb 2020 18:36:56 +0100 -Subject: [PATCH] alpha_focus: port patch - ---- - config.def.h | 7 +++++- - config.mk | 2 +- - st.h | 2 ++ - x.c | 61 +++++++++++++++++++++++++++++++++++++++++++--------- - 4 files changed, 60 insertions(+), 12 deletions(-) - -diff --git a/config.def.h b/config.def.h -index 546edda..6c6b928 100644 ---- a/config.def.h -+++ b/config.def.h -@@ -82,6 +82,10 @@ char *termname = "st-256color"; - */ - unsigned int tabspaces = 8; - -+/* bg opacity */ -+float alpha = 0.8; //< alpha value used when the window is focused. -+float alphaUnfocussed = 0.6; //< alpha value used when the focus is lost -+ - /* Terminal colors (16 first used in escape sequence) */ - static const char *colorname[] = { - /* 8 normal colors */ -@@ -109,6 +113,7 @@ static const char *colorname[] = { - /* more colors can be added after 255 to use with DefaultXX */ - "#cccccc", - "#555555", -+ "black", - }; - - -@@ -117,7 +122,7 @@ static const char *colorname[] = { - * foreground, background, cursor, reverse cursor - */ - unsigned int defaultfg = 7; --unsigned int defaultbg = 0; -+unsigned int defaultbg = 258; - static unsigned int defaultcs = 256; - static unsigned int defaultrcs = 257; - -diff --git a/config.mk b/config.mk -index 0cbb002..1d2f0e2 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 a1928ca..2009c33 100644 ---- a/st.h -+++ b/st.h -@@ -121,3 +121,5 @@ extern char *termname; - extern unsigned int tabspaces; - extern unsigned int defaultfg; - extern unsigned int defaultbg; -+extern float alpha; -+extern float alphaUnfocussed; -diff --git a/x.c b/x.c -index 1f62129..6d6751d 100644 ---- a/x.c -+++ b/x.c -@@ -4,6 +4,7 @@ - #include <limits.h> - #include <locale.h> - #include <signal.h> -+#include <stdbool.h> - #include <sys/select.h> - #include <time.h> - #include <unistd.h> -@@ -105,6 +106,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; -@@ -242,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; -@@ -250,6 +253,7 @@ static char *opt_io = NULL; - static char *opt_line = NULL; - static char *opt_name = NULL; - static char *opt_title = NULL; -+static bool focused = true; - - static int oldbutton = 3; /* button event on startup: 3 = release */ - -@@ -719,7 +723,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); - -@@ -757,6 +761,20 @@ xloadcolor(int i, const char *name, Color *ncolor) - return XftColorAllocName(xw.dpy, xw.vis, xw.cmap, name, ncolor); - } - -+void -+xloadalpha(void) -+{ -+ /* set alpha value of bg color */ -+ if (opt_alpha) -+ alpha = strtof(opt_alpha, NULL); -+ -+ float const usedAlpha = focused ? alpha : alphaUnfocussed; -+ -+ dc.col[defaultbg].color.alpha = (unsigned short)(0xffff * usedAlpha); -+ dc.col[defaultbg].pixel &= 0x00FFFFFF; -+ dc.col[defaultbg].pixel |= (unsigned char)(0xff * usedAlpha) << 24; -+} -+ - void - xloadcols(void) - { -@@ -779,6 +797,8 @@ xloadcols(void) - else - die("could not allocate color %d\n", i); - } -+ -+ xloadalpha(); - loaded = 1; - } - -@@ -1089,11 +1109,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()) -@@ -1103,7 +1135,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 */ -@@ -1123,19 +1155,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); - -@@ -1716,12 +1744,22 @@ focus(XEvent *ev) - xseturgency(0); - if (IS_SET(MODE_FOCUS)) - ttywrite("\033[I", 3, 0); -+ if (!focused) { -+ focused = true; -+ xloadalpha(); -+ redraw(); -+ } - } else { - if (xw.ime.xic) - XUnsetICFocus(xw.ime.xic); - win.mode &= ~MODE_FOCUSED; - if (IS_SET(MODE_FOCUS)) - ttywrite("\033[O", 3, 0); -+ if (focused) { -+ focused = false; -+ xloadalpha(); -+ redraw(); -+ } - } - } - -@@ -1980,6 +2018,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; --- -2.25.0 - diff --git a/st.suckless.org/patches/alpha_focus_highlight/st-alphafocushighlight-20191107-2b8333f.diff b/st.suckless.org/patches/alpha_focus_highlight/st-alphafocushighlight-20191107-2b8333f.diff @@ -1,223 +0,0 @@ -From 49fbc3f0a3d3524fa37ba4c0129425394b84feed Mon Sep 17 00:00:00 2001 -From: Julius Huelsmann <juliusHuelsmann@gmail.com> -Date: Wed, 6 Nov 2019 21:59:28 +0100 -Subject: [PATCH] [PATCH:FOCUS]: first version - ---- - config.def.h | 7 ++++++- - config.mk | 2 +- - st.h | 2 ++ - x.c | 59 +++++++++++++++++++++++++++++++++++++++------------- - 4 files changed, 54 insertions(+), 16 deletions(-) - -diff --git a/config.def.h b/config.def.h -index 6ebea98..16f1ebd 100644 ---- a/config.def.h -+++ b/config.def.h -@@ -82,6 +82,10 @@ char *termname = "st-256color"; - */ - unsigned int tabspaces = 8; - -+/* bg opacity */ -+float alpha = 0.8; //< alpha value used when the window is focused. -+float alphaUnfocussed = 0.6; //< alpha value used when the focus is lost -+ - /* Terminal colors (16 first used in escape sequence) */ - static const char *colorname[] = { - /* 8 normal colors */ -@@ -109,6 +113,7 @@ static const char *colorname[] = { - /* more colors can be added after 255 to use with DefaultXX */ - "#cccccc", - "#555555", -+ "black", - }; - - -@@ -117,7 +122,7 @@ static const char *colorname[] = { - * foreground, background, cursor, reverse cursor - */ - unsigned int defaultfg = 7; --unsigned int defaultbg = 0; -+unsigned int defaultbg = 258; - static unsigned int defaultcs = 256; - static unsigned int defaultrcs = 257; - -diff --git a/config.mk b/config.mk -index 0cbb002..1d2f0e2 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 4da3051..0bc69f8 100644 ---- a/st.h -+++ b/st.h -@@ -120,3 +120,5 @@ extern char *termname; - extern unsigned int tabspaces; - extern unsigned int defaultfg; - extern unsigned int defaultbg; -+extern float alpha; -+extern float alphaUnfocussed; -diff --git a/x.c b/x.c -index 5828a3b..45bc960 100644 ---- a/x.c -+++ b/x.c -@@ -4,6 +4,7 @@ - #include <limits.h> - #include <locale.h> - #include <signal.h> -+#include <stdbool.h> - #include <sys/select.h> - #include <time.h> - #include <unistd.h> -@@ -98,6 +99,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; -@@ -233,6 +235,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; -@@ -241,6 +244,7 @@ static char *opt_io = NULL; - static char *opt_line = NULL; - static char *opt_name = NULL; - static char *opt_title = NULL; -+static bool focused = true; - - static int oldbutton = 3; /* button event on startup: 3 = release */ - -@@ -692,7 +696,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); - -@@ -752,6 +756,14 @@ 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); -+ float const usedAlpha = focused ? alpha : alphaUnfocussed; -+ dc.col[defaultbg].color.alpha = (unsigned short)(0xffff * usedAlpha); -+ dc.col[defaultbg].pixel &= 0x00FFFFFF; -+ dc.col[defaultbg].pixel |= (unsigned char)(0xff * usedAlpha) << 24; - loaded = 1; - } - -@@ -1044,11 +1056,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()) -@@ -1058,7 +1082,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 */ -@@ -1078,19 +1102,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); - -@@ -1663,13 +1683,21 @@ focus(XEvent *ev) - XSetICFocus(xw.xic); - win.mode |= MODE_FOCUSED; - xseturgency(0); -- if (IS_SET(MODE_FOCUS)) -- ttywrite("\033[I", 3, 0); -+ if (IS_SET(MODE_FOCUS)) { ttywrite("\033[I", 3, 0); } -+ if (!focused) { -+ focused = true; -+ xloadcols(); -+ redraw(); -+ } - } else { - XUnsetICFocus(xw.xic); - win.mode &= ~MODE_FOCUSED; -- if (IS_SET(MODE_FOCUS)) -- ttywrite("\033[O", 3, 0); -+ if (IS_SET(MODE_FOCUS)) { ttywrite("\033[O", 3, 0); } -+ if (focused) { -+ focused = false; -+ xloadcols(); -+ redraw(); -+ } - } - } - -@@ -1925,6 +1953,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; --- -2.24.0 - diff --git a/st.suckless.org/patches/alpha_focus_highlight/st-focus-20200530-43a395a.diff b/st.suckless.org/patches/alpha_focus_highlight/st-focus-20200530-43a395a.diff @@ -0,0 +1,227 @@ +From f4e9ea055675807817ba3648ee7f2de4cc1d0eca Mon Sep 17 00:00:00 2001 +From: Julius Huelsmann <juliusHuelsmann@gmail.com> +Date: Sat, 30 May 2020 12:18:59 +0200 +Subject: [PATCH] patch: focus + +--- + config.def.h | 5 +++++ + config.mk | 2 +- + st.h | 1 + + x.c | 62 +++++++++++++++++++++++++++++++++++++--------------- + 4 files changed, 51 insertions(+), 19 deletions(-) + +diff --git a/config.def.h b/config.def.h +index 0895a1f..577d1f1 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -84,6 +84,9 @@ char *termname = "st-256color"; + */ + unsigned int tabspaces = 8; + ++/* bg opacity */ ++float alpha = 0.8, alphaUnfocused = 0.6; ++ + /* Terminal colors (16 first used in escape sequence) */ + static const char *colorname[] = { + /* 8 normal colors */ +@@ -111,6 +114,7 @@ static const char *colorname[] = { + /* more colors can be added after 255 to use with DefaultXX */ + "#cccccc", + "#555555", ++ "black", + }; + + +@@ -122,6 +126,7 @@ unsigned int defaultfg = 7; + unsigned int defaultbg = 0; + static unsigned int defaultcs = 256; + static unsigned int defaultrcs = 257; ++unsigned int bg = 17, bgUnfocused = 16; + + /* + * Default shape of cursor +diff --git a/config.mk b/config.mk +index beafc35..ddc65ae 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 d978458..b5f1cf6 100644 +--- a/st.h ++++ b/st.h +@@ -122,3 +122,4 @@ extern char *termname; + extern unsigned int tabspaces; + extern unsigned int defaultfg; + extern unsigned int defaultbg; ++extern float alpha, alphaUnfocused; +diff --git a/x.c b/x.c +index e5f1737..2de16cb 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; +@@ -252,6 +254,8 @@ static char *opt_line = NULL; + static char *opt_name = NULL; + static char *opt_title = NULL; + ++static int focused = 0; ++ + static int oldbutton = 3; /* button event on startup: 3 = release */ + + void +@@ -734,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); + +@@ -772,28 +776,38 @@ xloadcolor(int i, const char *name, Color *ncolor) + return XftColorAllocName(xw.dpy, xw.vis, xw.cmap, name, ncolor); + } + ++void ++xloadalpha(void) ++{ ++ float const usedAlpha = focused ? alpha : alphaUnfocused; ++ if (opt_alpha) alpha = strtof(opt_alpha, NULL); ++ dc.col[defaultbg].color.alpha = (unsigned short)(0xffff * usedAlpha); ++ dc.col[defaultbg].pixel &= 0x00FFFFFF; ++ dc.col[defaultbg].pixel |= (unsigned char)(0xff * usedAlpha) << 24; ++} ++ + void + xloadcols(void) + { +- int i; + static int loaded; + Color *cp; + +- if (loaded) { +- for (cp = dc.col; cp < &dc.col[dc.collen]; ++cp) +- XftColorFree(xw.dpy, xw.vis, xw.cmap, cp); +- } else { +- dc.collen = MAX(LEN(colorname), 256); +- dc.col = xmalloc(dc.collen * sizeof(Color)); ++ if (!loaded) { ++ dc.collen = 1 + (defaultbg = MAX(LEN(colorname), 256)); ++ dc.col = xmalloc((dc.collen) * sizeof(Color)); + } + +- for (i = 0; i < dc.collen; i++) ++ for (int i = 0; i+1 < dc.collen; ++i) + if (!xloadcolor(i, NULL, &dc.col[i])) { + if (colorname[i]) + die("could not allocate color '%s'\n", colorname[i]); + else + die("could not allocate color %d\n", i); + } ++ if (dc.collen) // cannot die, as the color is already loaded. ++ xloadcolor(focused ?bg :bgUnfocused, NULL, &dc.col[defaultbg]); ++ ++ xloadalpha(); + loaded = 1; + } + +@@ -1103,11 +1117,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()) +@@ -1117,7 +1143,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 */ +@@ -1137,19 +1163,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); + +@@ -1994,6 +2016,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; +@@ -2045,6 +2070,7 @@ run: + XSetLocaleModifiers(""); + cols = MAX(cols, 1); + rows = MAX(rows, 1); ++ defaultbg = MAX(LEN(colorname), 256); + tnew(cols, rows); + xinit(cols, rows); + xsetenv(); +-- +2.26.2 + diff --git a/st.suckless.org/patches/alpha_focus_highlight/st-focus-20200530-patch_alpha.diff b/st.suckless.org/patches/alpha_focus_highlight/st-focus-20200530-patch_alpha.diff @@ -0,0 +1,123 @@ +From c6c814329bdfc419f50a27b538a1b983ea52a1d3 Mon Sep 17 00:00:00 2001 +From: Julius Huelsmann <juliusHuelsmann@gmail.com> +Date: Sat, 30 May 2020 12:18:59 +0200 +Subject: [PATCH] patch: focus + +--- + config.def.h | 5 +++-- + st.h | 2 +- + x.c | 34 ++++++++++++++++++++-------------- + 3 files changed, 24 insertions(+), 17 deletions(-) + +diff --git a/config.def.h b/config.def.h +index b94b23c..577d1f1 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -85,7 +85,7 @@ char *termname = "st-256color"; + unsigned int tabspaces = 8; + + /* bg opacity */ +-float alpha = 0.8; ++float alpha = 0.8, alphaUnfocused = 0.6; + + /* Terminal colors (16 first used in escape sequence) */ + static const char *colorname[] = { +@@ -123,9 +123,10 @@ static const char *colorname[] = { + * foreground, background, cursor, reverse cursor + */ + unsigned int defaultfg = 7; +-unsigned int defaultbg = 258; ++unsigned int defaultbg = 0; + static unsigned int defaultcs = 256; + static unsigned int defaultrcs = 257; ++unsigned int bg = 17, bgUnfocused = 16; + + /* + * Default shape of cursor +diff --git a/st.h b/st.h +index 2c656af..b5f1cf6 100644 +--- a/st.h ++++ b/st.h +@@ -122,4 +122,4 @@ extern char *termname; + extern unsigned int tabspaces; + extern unsigned int defaultfg; + extern unsigned int defaultbg; +-extern float alpha; ++extern float alpha, alphaUnfocused; +diff --git a/x.c b/x.c +index 50da23c..2de16cb 100644 +--- a/x.c ++++ b/x.c +@@ -254,6 +254,8 @@ static char *opt_line = NULL; + static char *opt_name = NULL; + static char *opt_title = NULL; + ++static int focused = 0; ++ + static int oldbutton = 3; /* button event on startup: 3 = release */ + + void +@@ -774,35 +776,38 @@ xloadcolor(int i, const char *name, Color *ncolor) + return XftColorAllocName(xw.dpy, xw.vis, xw.cmap, name, ncolor); + } + ++void ++xloadalpha(void) ++{ ++ float const usedAlpha = focused ? alpha : alphaUnfocused; ++ if (opt_alpha) alpha = strtof(opt_alpha, NULL); ++ dc.col[defaultbg].color.alpha = (unsigned short)(0xffff * usedAlpha); ++ dc.col[defaultbg].pixel &= 0x00FFFFFF; ++ dc.col[defaultbg].pixel |= (unsigned char)(0xff * usedAlpha) << 24; ++} ++ + void + xloadcols(void) + { +- int i; + static int loaded; + Color *cp; + +- if (loaded) { +- for (cp = dc.col; cp < &dc.col[dc.collen]; ++cp) +- XftColorFree(xw.dpy, xw.vis, xw.cmap, cp); +- } else { +- dc.collen = MAX(LEN(colorname), 256); +- dc.col = xmalloc(dc.collen * sizeof(Color)); ++ if (!loaded) { ++ dc.collen = 1 + (defaultbg = MAX(LEN(colorname), 256)); ++ dc.col = xmalloc((dc.collen) * sizeof(Color)); + } + +- for (i = 0; i < dc.collen; i++) ++ for (int i = 0; i+1 < dc.collen; ++i) + if (!xloadcolor(i, NULL, &dc.col[i])) { + if (colorname[i]) + die("could not allocate color '%s'\n", colorname[i]); + else + die("could not allocate color %d\n", i); + } ++ if (dc.collen) // cannot die, as the color is already loaded. ++ xloadcolor(focused ?bg :bgUnfocused, NULL, &dc.col[defaultbg]); + +- /* 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; ++ xloadalpha(); + loaded = 1; + } + +@@ -2065,6 +2070,7 @@ run: + XSetLocaleModifiers(""); + cols = MAX(cols, 1); + rows = MAX(rows, 1); ++ defaultbg = MAX(LEN(colorname), 256); + tnew(cols, rows); + xinit(cols, rows); + xsetenv(); +-- +2.26.2 +