st-changealpha-20251027-0.9.3.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
st-changealpha-20251027-0.9.3.diff (2558B)
---
1 diff --git a/config.def.h b/config.def.h
2 index 91ab8ca..8a06176 100644
3 --- a/config.def.h
4 +++ b/config.def.h
5 @@ -93,6 +93,9 @@ char *termname = "st-256color";
6 */
7 unsigned int tabspaces = 8;
8
9 +/* Background opacity */
10 +float alpha_def;
11 +
12 /* Terminal colors (16 first used in escape sequence) */
13 static const char *colorname[] = {
14 /* 8 normal colors */
15 @@ -201,6 +204,9 @@ static Shortcut shortcuts[] = {
16 { TERMMOD, XK_Y, selpaste, {.i = 0} },
17 { ShiftMask, XK_Insert, selpaste, {.i = 0} },
18 { TERMMOD, XK_Num_Lock, numlock, {.i = 0} },
19 + { MODKEY, XK_bracketleft, chgalpha, {.f = -1} }, /* Decrease opacity */
20 + { MODKEY|ShiftMask, XK_braceright, chgalpha, {.f = +1} }, /* Increase opacity */
21 + { MODKEY, XK_bracketright,chgalpha, {.f = 0} }, /* Reset opacity */
22 };
23
24 /*
25 diff --git a/st.h b/st.h
26 index fd3b0d8..3bb587e 100644
27 --- a/st.h
28 +++ b/st.h
29 @@ -124,3 +124,4 @@ extern unsigned int tabspaces;
30 extern unsigned int defaultfg;
31 extern unsigned int defaultbg;
32 extern unsigned int defaultcs;
33 +extern float alpha_def;
34 diff --git a/x.c b/x.c
35 index aa09997..f8c8c1a 100644
36 --- a/x.c
37 +++ b/x.c
38 @@ -59,6 +59,7 @@ static void zoom(const Arg *);
39 static void zoomabs(const Arg *);
40 static void zoomreset(const Arg *);
41 static void ttysend(const Arg *);
42 +static void chgalpha(const Arg *);
43
44 /* config.h for applying patches and the configuration. */
45 #include "config.h"
46 @@ -1147,6 +1148,9 @@ xinit(int cols, int rows)
47 usedfont = (opt_font == NULL)? font : opt_font;
48 xloadfonts(usedfont, 0);
49
50 + /* Backup default alpha value */
51 + alpha_def = alpha;
52 +
53 /* colors */
54 xw.cmap = XDefaultColormap(xw.dpy, xw.scr);
55 xloadcols();
56 @@ -1371,6 +1375,24 @@ xmakeglyphfontspecs(XftGlyphFontSpec *specs, const Glyph *glyphs, int len, int x
57 return numspecs;
58 }
59
60 +void
61 +chgalpha(const Arg *arg)
62 +{
63 + if (arg->f == -1.0f && alpha >= 0.1f)
64 + alpha -= 0.1f;
65 + else if (arg->f == 1.0f && alpha < 1.0f)
66 + alpha += 0.1f;
67 + else if (arg->f == 0.0f)
68 + alpha = alpha_def;
69 + else
70 + return;
71 +
72 + /* Clamp alpha so it never exceeds valid range */
73 + if (alpha < 0.1f)
74 + alpha = 0.1f;
75 + if (alpha > 1.0f)
76 + alpha = 1.0f;
77 +
78 + dc.col[defaultbg].color.alpha = (unsigned short)(0xFFFF * alpha);
79 + /* Required to remove artifacting from borderpx */
80 + cresize(0, 0);
81 + redraw();
82 +}
83 +
84 void
85 xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, int y)
86 {