commit bba7f8d8ed4cd694718747b29429cdae3feead7a
Author: Julius Huelsmann <[email protected]>
Date: Mon Jun 1 19:02:13 2020 +0200
[st][patch][alpha-focus-highlight] update patch, add patch version for
st-0.8.3
diff --git a/st.suckless.org/patches/alpha_focus_highlight/alphaFocus.gif
b/st.suckless.org/patches/alpha_focus_highlight/alphaFocus.gif
deleted file mode 100644
index b152f093..00000000
Binary files a/st.suckless.org/patches/alpha_focus_highlight/alphaFocus.gif and
/dev/null differ
diff --git a/st.suckless.org/patches/alpha_focus_highlight/index.md
b/st.suckless.org/patches/alpha_focus_highlight/index.md
index b7075d8c..c63bc0b8 100644
--- 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
-----------
-
-
-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 - <[email protected]>
-* pr - <[email protected]> (0.5 port)
-* Laslo Hunhold - <[email protected]> (0.6, git ports)
-* Ivan J. - <[email protected]> (git port)
-* Matthew Parnell - <[email protected]> (0.7 port)
-* Johannes Mayrhofer - <[email protected]> (0.8.1 port)
-* Àlex Ramírez <[email protected]> (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]([email protected]),
[pr]([email protected]), [Laslo Hunhold]([email protected]), [Ivan
J.]([email protected]), [Matthew Parnell]([email protected]), [Johannes
Mayrhofer]([email protected]), [Àlex Ramírez]([email protected])
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
deleted file mode 100644
index 2caa1fd0..00000000
---
a/st.suckless.org/patches/alpha_focus_highlight/st-alphaFocusHighlight-20191218-2b8333f.diff
+++ /dev/null
@@ -1,316 +0,0 @@
-From 49fbc3f0a3d3524fa37ba4c0129425394b84feed Mon Sep 17 00:00:00 2001
-From: Julius Huelsmann <[email protected]>
-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
", 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
");
- 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("[I", 3, 0);
-+ if (IS_SET(MODE_FOCUS)) { ttywrite("[I", 3, 0); }
-+ if (!focused) {
-+ focused = true;
-+ xloadcols();
-+ redraw();
-+ }
- } else {
- XUnsetICFocus(xw.xic);
- win.mode &= ~MODE_FOCUSED;
-- if (IS_SET(MODE_FOCUS))
-- ttywrite("[O", 3, 0);
-+ if (IS_SET(MODE_FOCUS)) { ttywrite("[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'
", colorname[i]);
-@@ -757,13 +771,7 @@ xloadcols(void)
- die("could not allocate color %d
", 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("[I", 3, 0); }
-+ if (IS_SET(MODE_FOCUS))
-+ ttywrite("[I", 3, 0);
- if (!focused) {
- focused = true;
-- xloadcols();
-+ xloadalpha();
- redraw();
- }
- } else {
- XUnsetICFocus(xw.xic);
- win.mode &= ~MODE_FOCUSED;
-- if (IS_SET(MODE_FOCUS)) { ttywrite("[O", 3, 0); }
-+ if (IS_SET(MODE_FOCUS))
-+ ttywrite("[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
deleted file mode 100644
index 80051f7b..00000000
---
a/st.suckless.org/patches/alpha_focus_highlight/st-alphaFocusHighlight-20200212-2b8333f.diff
+++ /dev/null
@@ -1,342 +0,0 @@
-From 49fbc3f0a3d3524fa37ba4c0129425394b84feed Mon Sep 17 00:00:00 2001
-From: Julius Huelsmann <[email protected]>
-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
", 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
");
- 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("[I", 3, 0);
-+ if (IS_SET(MODE_FOCUS)) { ttywrite("[I", 3, 0); }
-+ if (!focused) {
-+ focused = true;
-+ xloadcols();
-+ redraw();
-+ }
- } else {
- XUnsetICFocus(xw.xic);
- win.mode &= ~MODE_FOCUSED;
-- if (IS_SET(MODE_FOCUS))
-- ttywrite("[O", 3, 0);
-+ if (IS_SET(MODE_FOCUS)) { ttywrite("[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'
", colorname[i]);
-@@ -757,13 +771,7 @@ xloadcols(void)
- die("could not allocate color %d
", 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("[I", 3, 0); }
-+ if (IS_SET(MODE_FOCUS))
-+ ttywrite("[I", 3, 0);
- if (!focused) {
- focused = true;
-- xloadcols();
-+ xloadalpha();
- redraw();
- }
- } else {
- XUnsetICFocus(xw.xic);
- win.mode &= ~MODE_FOCUSED;
-- if (IS_SET(MODE_FOCUS)) { ttywrite("[O", 3, 0); }
-+ if (IS_SET(MODE_FOCUS))
-+ ttywrite("[O", 3, 0);
- if (focused) {
- focused = false;
-- xloadcols();
-+ xloadalpha();
- redraw();
- }
- }
---
-2.25.0
-
-
-From dffad320251fbab67181a005436f320717658cf9 Mon Sep 17 00:00:00 2001
-From: M <[email protected]>
-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'
", 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
deleted file mode 100644
index 85c744bd..00000000
---
a/st.suckless.org/patches/alpha_focus_highlight/st-alphaFocusHighlight-20200216-26cdfeb.diff
+++ /dev/null
@@ -1,235 +0,0 @@
-From 7538b0b641fa8291b98f65ecc5d140e0e9cc0028 Mon Sep 17 00:00:00 2001
-From: Julius Huelsmann <[email protected]>
-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
", 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
");
- 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("[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("[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-focus-20200530-43a395a.diff
similarity index 62%
rename from
st.suckless.org/patches/alpha_focus_highlight/st-alphafocushighlight-20191107-2b8333f.diff
rename to
st.suckless.org/patches/alpha_focus_highlight/st-focus-20200530-43a395a.diff
index 1f74cf9b..5d2c23f9 100644
---
a/st.suckless.org/patches/alpha_focus_highlight/st-alphafocushighlight-20191107-2b8333f.diff
+++
b/st.suckless.org/patches/alpha_focus_highlight/st-focus-20200530-43a395a.diff
@@ -1,31 +1,30 @@
-From 49fbc3f0a3d3524fa37ba4c0129425394b84feed Mon Sep 17 00:00:00 2001
+From f4e9ea055675807817ba3648ee7f2de4cc1d0eca Mon Sep 17 00:00:00 2001
From: Julius Huelsmann <[email protected]>
-Date: Wed, 6 Nov 2019 21:59:28 +0100
-Subject: [PATCH] [PATCH:FOCUS]: first version
+Date: Sat, 30 May 2020 12:18:59 +0200
+Subject: [PATCH] patch: focus
---
- config.def.h | 7 ++++++-
+ config.def.h | 5 +++++
config.mk | 2 +-
- st.h | 2 ++
- x.c | 59 +++++++++++++++++++++++++++++++++++++++-------------
- 4 files changed, 54 insertions(+), 16 deletions(-)
+ st.h | 1 +
+ x.c | 62 +++++++++++++++++++++++++++++++++++++---------------
+ 4 files changed, 51 insertions(+), 19 deletions(-)
diff --git a/config.def.h b/config.def.h
-index 6ebea98..16f1ebd 100644
+index 0895a1f..577d1f1 100644
--- a/config.def.h
+++ b/config.def.h
-@@ -82,6 +82,10 @@ char *termname = "st-256color";
+@@ -84,6 +84,9 @@ 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
++float alpha = 0.8, alphaUnfocused = 0.6;
+
/* Terminal colors (16 first used in escape sequence) */
static const char *colorname[] = {
/* 8 normal colors */
-@@ -109,6 +113,7 @@ static const char *colorname[] = {
+@@ -111,6 +114,7 @@ static const char *colorname[] = {
/* more colors can be added after 255 to use with DefaultXX */
"#cccccc",
"#555555",
@@ -33,17 +32,16 @@ index 6ebea98..16f1ebd 100644
};
-@@ -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;
+@@ -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 0cbb002..1d2f0e2 100644
+index beafc35..ddc65ae 100644
--- a/config.mk
+++ b/config.mk
@@ -16,7 +16,7 @@ PKG_CONFIG = pkg-config
@@ -56,28 +54,19 @@ index 0cbb002..1d2f0e2 100644
`$(PKG_CONFIG) --libs freetype2`
diff --git a/st.h b/st.h
-index 4da3051..0bc69f8 100644
+index d978458..b5f1cf6 100644
--- a/st.h
+++ b/st.h
-@@ -120,3 +120,5 @@ extern char *termname;
+@@ -122,3 +122,4 @@ extern char *termname;
extern unsigned int tabspaces;
extern unsigned int defaultfg;
extern unsigned int defaultbg;
-+extern float alpha;
-+extern float alphaUnfocussed;
++extern float alpha, alphaUnfocused;
diff --git a/x.c b/x.c
-index 5828a3b..45bc960 100644
+index e5f1737..2de16cb 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 {
+@@ -105,6 +105,7 @@ typedef struct {
XSetWindowAttributes attrs;
int scr;
int isfixed; /* is fixed geometry? */
@@ -85,7 +74,7 @@ index 5828a3b..45bc960 100644
int l, t; /* left and top offset */
int gm; /* geometry mask */
} XWindow;
-@@ -233,6 +235,7 @@ static char *usedfont = NULL;
+@@ -243,6 +244,7 @@ static char *usedfont = NULL;
static double usedfontsize = 0;
static double defaultfontsize = 0;
@@ -93,15 +82,16 @@ index 5828a3b..45bc960 100644
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;
+@@ -252,6 +254,8 @@ static char *opt_line = NULL;
static char *opt_name = NULL;
static char *opt_title = NULL;
-+static bool focused = true;
++static int focused = 0;
++
static int oldbutton = 3; /* button event on startup: 3 = release */
-@@ -692,7 +696,7 @@ xresize(int col, int row)
+ 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,
@@ -110,22 +100,54 @@ index 5828a3b..45bc960 100644
XftDrawChange(xw.draw, xw.buf);
xclear(0, 0, win.w, win.h);
-@@ -752,6 +756,14 @@ xloadcols(void)
+@@ -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'
", colorname[i]);
else
die("could not allocate color %d
", 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);
-+ 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;
}
-@@ -1044,11 +1056,23 @@ xinit(int cols, int rows)
+@@ -1103,11 +1117,23 @@ xinit(int cols, int rows)
Window parent;
pid_t thispid = getpid();
XColor xmousefg, xmousebg;
@@ -150,7 +172,7 @@ index 5828a3b..45bc960 100644
/* font */
if (!FcInit())
-@@ -1058,7 +1082,7 @@ xinit(int cols, int rows)
+@@ -1117,7 +1143,7 @@ xinit(int cols, int rows)
xloadfonts(usedfont, 0);
/* colors */
@@ -159,7 +181,7 @@ index 5828a3b..45bc960 100644
xloadcols();
/* adjust fixed window geometry */
-@@ -1078,19 +1102,15 @@ xinit(int cols, int rows)
+@@ -1137,19 +1163,15 @@ xinit(int cols, int rows)
| ButtonMotionMask | ButtonPressMask | ButtonReleaseMask;
xw.attrs.colormap = xw.cmap;
@@ -182,33 +204,7 @@ index 5828a3b..45bc960 100644
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("[I", 3, 0);
-+ if (IS_SET(MODE_FOCUS)) { ttywrite("[I", 3, 0); }
-+ if (!focused) {
-+ focused = true;
-+ xloadcols();
-+ redraw();
-+ }
- } else {
- XUnsetICFocus(xw.xic);
- win.mode &= ~MODE_FOCUSED;
-- if (IS_SET(MODE_FOCUS))
-- ttywrite("[O", 3, 0);
-+ if (IS_SET(MODE_FOCUS)) { ttywrite("[O", 3, 0); }
-+ if (focused) {
-+ focused = false;
-+ xloadcols();
-+ redraw();
-+ }
- }
- }
-
-@@ -1925,6 +1953,9 @@ main(int argc, char *argv[])
+@@ -1994,6 +2016,9 @@ main(int argc, char *argv[])
case 'a':
allowaltscreen = 0;
break;
@@ -218,6 +214,14 @@ index 5828a3b..45bc960 100644
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.24.0
+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
new file mode 100644
index 00000000..4796b52a
--- /dev/null
+++
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 <[email protected]>
+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'
", colorname[i]);
+ else
+ die("could not allocate color %d
", 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
+