apply patch dwm-autodarkmode-20250224-6.5.diff
This commit is contained in:
14
config.def.h
14
config.def.h
@@ -12,12 +12,17 @@ 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 },
|
||||
[SchemeHid] = { col_cyan, col_gray1, 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" };
|
||||
@@ -57,14 +62,15 @@ 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 };
|
||||
|
||||
#include "exitdwm.c"
|
||||
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, focusstackvis, {.i = +1 } },
|
||||
|
||||
76
dwm.c
76
dwm.c
@@ -157,6 +157,7 @@ static void checkotherwm(void);
|
||||
static void cleanup(void);
|
||||
static void cleanupmon(Monitor *mon);
|
||||
static void clientmessage(XEvent *e);
|
||||
static void colormodehandler(int sig);
|
||||
static void configure(Client *c);
|
||||
static void configurenotify(XEvent *e);
|
||||
static void configurerequest(XEvent *e);
|
||||
@@ -207,6 +208,7 @@ static int sendevent(Client *c, Atom proto);
|
||||
static void sendmon(Client *c, Monitor *m);
|
||||
static void setclientstate(Client *c, long state);
|
||||
static void setclienttagprop(Client *c);
|
||||
static void setcolormode(void);
|
||||
static void setfocus(Client *c);
|
||||
static void setfullscreen(Client *c, int fullscreen);
|
||||
static void setlayout(const Arg *arg);
|
||||
@@ -221,6 +223,7 @@ static void sigchld(int unused);
|
||||
static void sighup(int unused);
|
||||
static void sigterm(int unused);
|
||||
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);
|
||||
@@ -279,11 +282,13 @@ static Atom wmatom[WMLast], netatom[NetLast];
|
||||
static int restart = 0;
|
||||
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;
|
||||
static int colormodechanged;
|
||||
|
||||
/* configuration, allows nested code to access above variables */
|
||||
#include "config.h"
|
||||
@@ -518,9 +523,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);
|
||||
@@ -563,6 +571,12 @@ clientmessage(XEvent *e)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
colormodehandler(int sig)
|
||||
{
|
||||
colormodechanged = 1;
|
||||
}
|
||||
|
||||
void
|
||||
configure(Client *c)
|
||||
{
|
||||
@@ -1363,6 +1377,10 @@ propertynotify(XEvent *e)
|
||||
Window trans;
|
||||
XPropertyEvent *ev = &e->xproperty;
|
||||
|
||||
if (colormodechanged) {
|
||||
setcolormode();
|
||||
colormodechanged = 0;
|
||||
}
|
||||
if ((ev->window == root) && (ev->atom == XA_WM_NAME))
|
||||
updatestatus();
|
||||
else if (ev->state == PropertyDelete)
|
||||
@@ -1592,6 +1610,32 @@ setclientstate(Client *c, long state)
|
||||
PropModeReplace, (unsigned char *)data, 2);
|
||||
}
|
||||
|
||||
void
|
||||
setcolormode(void)
|
||||
{
|
||||
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)
|
||||
{
|
||||
@@ -1700,6 +1744,11 @@ setup(void)
|
||||
sa.sa_handler = SIG_IGN;
|
||||
sigaction(SIGCHLD, &sa, NULL);
|
||||
|
||||
/* set color mode on SIGHUP */
|
||||
sigemptyset(&sa.sa_mask);
|
||||
sa.sa_handler = colormodehandler;
|
||||
sigaction(SIGHUP, &sa, NULL);
|
||||
|
||||
/* clean up any zombies (inherited from .xinitrc etc) immediately */
|
||||
while (waitpid(-1, NULL, WNOHANG) > 0);
|
||||
|
||||
@@ -1738,9 +1787,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();
|
||||
/* init bars */
|
||||
updatebars();
|
||||
updatestatus();
|
||||
@@ -1862,8 +1915,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));
|
||||
@@ -1887,6 +1938,13 @@ setclienttagprop(Client *c)
|
||||
PropModeReplace, (unsigned char *) data, 2);
|
||||
}
|
||||
|
||||
void
|
||||
spawndmenu(const Arg *arg)
|
||||
{
|
||||
dmenumon[0] = '0' + selmon->num;
|
||||
spawn(&(const Arg){.v = dmenucmd});
|
||||
}
|
||||
|
||||
void
|
||||
tag(const Arg *arg)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user