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  {