sites

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

commit 9853ac5ec69ece8085d54ef686fe57d9ce11ef76
parent 4e6fb05fb2bf497cebe4c3529dc12ab26e13bb66
Author: Spencer Williams <spnw@plexwave.org>
Date:   Sun,  2 Jun 2024 16:42:30 -0400

[dwm][patch][autodarkmode] Add patch

Diffstat:
Adwm.suckless.org/patches/autodarkmode/dwm-autodarkmode-20240602-6.5.diff | 175+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Adwm.suckless.org/patches/autodarkmode/index.md | 46++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 221 insertions(+), 0 deletions(-)

diff --git a/dwm.suckless.org/patches/autodarkmode/dwm-autodarkmode-20240602-6.5.diff b/dwm.suckless.org/patches/autodarkmode/dwm-autodarkmode-20240602-6.5.diff @@ -0,0 +1,175 @@ +diff --git a/config.def.h b/config.def.h +index 9efa774..8a8d3be 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -12,11 +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] = { ++static const char *colorsdark[][3] = { + /* fg bg border */ + [SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, + [SchemeSel] = { col_gray4, col_cyan, col_cyan }, + }; ++static const char *colorslight[][3] = { ++ /* fg bg border */ ++ [SchemeNorm] = { col_gray1, col_gray3, col_gray2 }, ++ [SchemeSel] = { col_cyan, col_gray4, col_cyan }, ++}; + + /* tagging */ + static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; +@@ -56,13 +61,14 @@ static const Layout layouts[] = { + #define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } } + + /* commands */ +-static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */ +-static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL }; ++static char dmenumon[2] = "0"; /* component of dmenu{dark,light}, manipulated in spawndmenu() */ ++static const char *dmenudark[] = { "dmenu_run", "-m", dmenumon, "-i", "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL }; ++static const char *dmenulight[] = { "dmenu_run", "-m", dmenumon, "-i", "-fn", dmenufont, "-nb", col_gray3, "-nf", col_gray1, "-sb", col_cyan, "-sf", col_gray4, NULL }; + static const char *termcmd[] = { "st", NULL }; + + static const Key keys[] = { + /* modifier key function argument */ +- { MODKEY, XK_p, spawn, {.v = dmenucmd } }, ++ { MODKEY, XK_p, spawndmenu, {0} }, + { MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } }, + { MODKEY, XK_b, togglebar, {0} }, + { MODKEY, XK_j, focusstack, {.i = +1 } }, +diff --git a/dwm.c b/dwm.c +index f1d86b2..d4e3ddc 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -198,6 +198,7 @@ static void scan(void); + static int sendevent(Client *c, Atom proto); + static void sendmon(Client *c, Monitor *m); + static void setclientstate(Client *c, long state); ++static void setcolormode(int sig); + static void setfocus(Client *c); + static void setfullscreen(Client *c, int fullscreen); + static void setlayout(const Arg *arg); +@@ -206,6 +207,7 @@ static void setup(void); + static void seturgent(Client *c, int urg); + static void showhide(Client *c); + static void spawn(const Arg *arg); ++static void spawndmenu(const Arg *arg); + static void tag(const Arg *arg); + static void tagmon(const Arg *arg); + static void tile(Monitor *m); +@@ -262,11 +264,12 @@ static void (*handler[LASTEvent]) (XEvent *) = { + static Atom wmatom[WMLast], netatom[NetLast]; + static int running = 1; + static Cur *cursor[CurLast]; +-static Clr **scheme; ++static Clr **scheme, **schemedark, **schemelight; + static Display *dpy; + static Drw *drw; + static Monitor *mons, *selmon; + static Window root, wmcheckwin; ++static const char **dmenucmd; + + /* configuration, allows nested code to access above variables */ + #include "config.h" +@@ -486,9 +489,12 @@ 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(colorsdark); i++) { ++ free(schemedark[i]); ++ free(schemelight[i]); ++ } ++ free(schemedark); ++ free(schemelight); + XDestroyWindow(dpy, wmcheckwin); + drw_free(drw); + XSync(dpy, False); +@@ -1442,6 +1448,32 @@ setclientstate(Client *c, long state) + PropModeReplace, (unsigned char *)data, 2); + } + ++void ++setcolormode(int sig) ++{ ++ static const char *file = ".lightmode"; ++ static char *path = NULL; ++ const char *home; ++ size_t size; ++ ++ if (!path && (home = getenv("HOME"))) { ++ size = strlen(home) + 1 + strlen(file) + 1; ++ path = malloc(size); ++ if (!path) ++ die("dwm: malloc failed"); ++ ++ snprintf(path, size, "%s/%s", home, file); ++ } ++ ++ if (access(path, F_OK) == 0) { ++ scheme = schemelight; ++ dmenucmd = dmenulight; ++ } else { ++ scheme = schemedark; ++ dmenucmd = dmenudark; ++ } ++} ++ + int + sendevent(Client *c, Atom proto) + { +@@ -1550,6 +1582,11 @@ setup(void) + sa.sa_handler = SIG_IGN; + sigaction(SIGCHLD, &sa, NULL); + ++ /* set color mode on SIGHUP */ ++ sigemptyset(&sa.sa_mask); ++ sa.sa_handler = setcolormode; ++ sigaction(SIGHUP, &sa, NULL); ++ + /* clean up any zombies (inherited from .xinitrc etc) immediately */ + while (waitpid(-1, NULL, WNOHANG) > 0); + +@@ -1584,9 +1621,13 @@ 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); ++ schemedark = ecalloc(LENGTH(colorsdark), sizeof(Clr *)); ++ schemelight = ecalloc(LENGTH(colorslight), sizeof(Clr *)); ++ for (i = 0; i < LENGTH(colorsdark); i++) { ++ schemedark[i] = drw_scm_create(drw, colorsdark[i], 3); ++ schemelight[i] = drw_scm_create(drw, colorslight[i], 3); ++ } ++ setcolormode(0); + /* init bars */ + updatebars(); + updatestatus(); +@@ -1649,8 +1690,6 @@ spawn(const Arg *arg) + { + struct sigaction sa; + +- if (arg->v == dmenucmd) +- dmenumon[0] = '0' + selmon->num; + if (fork() == 0) { + if (dpy) + close(ConnectionNumber(dpy)); +@@ -1666,6 +1705,13 @@ spawn(const Arg *arg) + } + } + ++void ++spawndmenu(const Arg *arg) ++{ ++ dmenumon[0] = '0' + selmon->num; ++ spawn(&(const Arg){.v = dmenucmd}); ++} ++ + void + tag(const Arg *arg) + { diff --git a/dwm.suckless.org/patches/autodarkmode/index.md b/dwm.suckless.org/patches/autodarkmode/index.md @@ -0,0 +1,46 @@ +autodarkmode +============ + +Description +----------- +This patch lets you define separate dark and light color schemes, and +provides a way to switch between them automatically. + +If dwm finds a file named `.lightmode` in your home directory it will +start up in light mode, otherwise it uses dark mode. dwm re-checks for +this file upon receiving SIGHUP, so you can use tools like +[darkman](https://darkman.whynothugo.nl/) or +[Redshift](http://jonls.dk/redshift/) to change dwm's colors at sunset +and sunrise. + +An example setup is described +[here](https://plexwave.org/blog/auto-dark-mode). + +Configuration +------------- + static const char *colorsdark[][3] = { + /* fg bg border */ + [SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, + [SchemeSel] = { col_gray4, col_cyan, col_cyan }, + }; + static const char *colorslight[][3] = { + /* fg bg border */ + [SchemeNorm] = { col_gray1, col_gray3, col_gray2 }, + [SchemeSel] = { col_cyan, col_gray4, col_cyan }, + }; + + static const char *dmenudark[] = { "dmenu_run", "-m", dmenumon, "-i", "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL }; + static const char *dmenulight[] = { "dmenu_run", "-m", dmenumon, "-i", "-fn", dmenufont, "-nb", col_gray3, "-nf", col_gray1, "-sb", col_cyan, "-sf", col_gray4, NULL }; + + /* You must use spawndmenu instead of spawn for your dmenu bindings */ + static const Key keys[] = { + { MODKEY, XK_p, spawndmenu, {0} }, + } + +Download +-------- +* [dwm-autodarkmode-20240602-6.5.diff](dwm-autodarkmode-20240602-6.5.diff) + +Author +------ +* Spencer Williams - <spnw@plexwave.org>