commit 4c8e7b5d6ed1f1a7f3bb91ad757d21aca372effd
parent d5a61a4c7efb91bb211d4bde7c3e19ac2e60d2ff
Author: Juan Ignacio Díaz <diazjignacio@gmail.com>
Date: Mon, 22 Apr 2024 15:10:10 -0300
[dwm][patch][colorschemes] Add patch
This patch allows you to define multiple colorschemes and cycle between
them.
Diffstat:
2 files changed, 151 insertions(+), 0 deletions(-)
diff --git a/dwm.suckless.org/patches/colorschemes/dwm-colorschemes-6.5.diff b/dwm.suckless.org/patches/colorschemes/dwm-colorschemes-6.5.diff
@@ -0,0 +1,128 @@
+From 3f7b5b2ebdbd43f562229085802a16e1b1a4ee22 Mon Sep 17 00:00:00 2001
+From: Listeria monocytogenes <listeria@disroot.org>
+Date: Mon, 22 Apr 2024 14:28:01 -0300
+Subject: [PATCH] add setscheme() to cycle between colorschemes
+
+---
+ config.def.h | 15 +++++++++++----
+ dwm.c | 33 ++++++++++++++++++++++++---------
+ 2 files changed, 35 insertions(+), 13 deletions(-)
+
+diff --git a/config.def.h b/config.def.h
+index 9efa774..f87f707 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -12,10 +12,16 @@ static const char col_gray2[] = "#444444";
+ static const char col_gray3[] = "#bbbbbb";
+ static const char col_gray4[] = "#eeeeee";
+ static const char col_cyan[] = "#005577";
+-static const char *colors[][3] = {
+- /* fg bg border */
+- [SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
+- [SchemeSel] = { col_gray4, col_cyan, col_cyan },
++static const char *colors[][SchemeN][3] = {
++ /* fg bg border */
++ { /* dark */
++ [SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
++ [SchemeSel] = { col_gray4, col_cyan, col_cyan },
++ },
++ { /* light */
++ [SchemeNorm] = { col_gray2, col_gray4, col_gray3 },
++ [SchemeSel] = { col_gray1, col_cyan, col_cyan },
++ },
+ };
+
+ /* tagging */
+@@ -85,6 +91,7 @@ static const Key keys[] = {
+ { MODKEY, XK_period, focusmon, {.i = +1 } },
+ { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
+ { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
++ { MODKEY, XK_s, setscheme, {.i = +1 } },
+ TAGKEYS( XK_1, 0)
+ TAGKEYS( XK_2, 1)
+ TAGKEYS( XK_3, 2)
+diff --git a/dwm.c b/dwm.c
+index f1d86b2..53b1eaf 100644
+--- a/dwm.c
++++ b/dwm.c
+@@ -59,7 +59,7 @@
+
+ /* enums */
+ enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
+-enum { SchemeNorm, SchemeSel }; /* color schemes */
++enum { SchemeNorm, SchemeSel, SchemeN /* keeplast */ }; /* color schemes */
+ enum { NetSupported, NetWMName, NetWMState, NetWMCheck,
+ NetWMFullscreen, NetActiveWindow, NetWMWindowType,
+ NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */
+@@ -202,6 +202,7 @@ static void setfocus(Client *c);
+ static void setfullscreen(Client *c, int fullscreen);
+ static void setlayout(const Arg *arg);
+ static void setmfact(const Arg *arg);
++static void setscheme(const Arg *arg);
+ static void setup(void);
+ static void seturgent(Client *c, int urg);
+ static void showhide(Client *c);
+@@ -262,7 +263,7 @@ static void (*handler[LASTEvent]) (XEvent *) = {
+ static Atom wmatom[WMLast], netatom[NetLast];
+ static int running = 1;
+ static Cur *cursor[CurLast];
+-static Clr **scheme;
++static Clr **schemes, **scheme;
+ static Display *dpy;
+ static Drw *drw;
+ static Monitor *mons, *selmon;
+@@ -486,9 +487,9 @@ cleanup(void)
+ cleanupmon(mons);
+ for (i = 0; i < CurLast; i++)
+ drw_cur_free(drw, cursor[i]);
+- for (i = 0; i < LENGTH(colors); i++)
+- free(scheme[i]);
+- free(scheme);
++ for (i = 0; i < LENGTH(colors) * SchemeN; i++)
++ free(schemes[i]);
++ free(schemes);
+ XDestroyWindow(dpy, wmcheckwin);
+ drw_free(drw);
+ XSync(dpy, False);
+@@ -1536,10 +1537,21 @@ setmfact(const Arg *arg)
+ arrange(selmon);
+ }
+
++void
++setscheme(const Arg *arg)
++{
++ scheme += arg->i * SchemeN;
++ if (scheme < schemes)
++ scheme = schemes + (LENGTH(colors) - 1) * SchemeN;
++ else if (scheme >= schemes + LENGTH(colors) * SchemeN)
++ scheme = schemes;
++ drawbars();
++}
++
+ void
+ setup(void)
+ {
+- int i;
++ int i, j;
+ XSetWindowAttributes wa;
+ Atom utf8string;
+ struct sigaction sa;
+@@ -1584,9 +1596,12 @@ setup(void)
+ cursor[CurResize] = drw_cur_create(drw, XC_sizing);
+ cursor[CurMove] = drw_cur_create(drw, XC_fleur);
+ /* init appearance */
+- scheme = ecalloc(LENGTH(colors), sizeof(Clr *));
+- for (i = 0; i < LENGTH(colors); i++)
+- scheme[i] = drw_scm_create(drw, colors[i], 3);
++ schemes = ecalloc(LENGTH(colors), SchemeN * sizeof(Clr **));
++ for (j = LENGTH(colors) - 1; j >= 0; j--) {
++ scheme = &schemes[j * SchemeN];
++ for (i = 0; i < SchemeN; i++)
++ scheme[i] = drw_scm_create(drw, colors[j][i], 3);
++ }
+ /* init bars */
+ updatebars();
+ updatestatus();
+--
+2.44.0
+
diff --git a/dwm.suckless.org/patches/colorschemes/index.md b/dwm.suckless.org/patches/colorschemes/index.md
@@ -0,0 +1,23 @@
+colorschemes
+============
+
+Description
+-----------
+This patches provides the ability to cycle between any number of colorschemes
+defined in config.h.
+
+Usage
+-----
+Append alternative colorschemes to the `colors[]` array.
+
+Default keybindings
+--------------------
+* `s` - Cycle between colorschemes.
+
+Download
+--------
+* [dwm-colorschemes-6.5.diff](dwm-colorschemes-6.5.diff) (2024-04-22)
+
+Authors
+-------
+* Listeria monocytogenes <listeria@disroot.org>