dwm-flyschemes-6.7-alpha.diff (15584B)
1 diff -upN dwm-6.7/config.def.h dwm-6.7-patched-flyschemes-alpha/config.def.h 2 --- dwm-6.7/config.def.h 2026-01-10 13:33:58.160268753 +0300 3 +++ dwm-6.7-patched-flyschemes-alpha/config.def.h 2026-01-12 17:04:07.189883454 +0300 4 @@ -7,16 +7,22 @@ static const int showbar = 1; 5 static const int topbar = 1; /* 0 means bottom bar */ 6 static const char *fonts[] = { "monospace:size=10" }; 7 static const char dmenufont[] = "monospace:size=10"; 8 -static const char col_gray1[] = "#222222"; 9 -static const char col_gray2[] = "#444444"; 10 -static const char col_gray3[] = "#bbbbbb"; 11 -static const char col_gray4[] = "#eeeeee"; 12 -static const char col_cyan[] = "#005577"; 13 -static const char *colors[][3] = { 14 - /* fg bg border */ 15 - [SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, 16 - [SchemeSel] = { col_gray4, col_cyan, col_cyan }, 17 -}; 18 +static unsigned int baralpha = 0xd0; 19 +static unsigned int borderalpha = OPAQUE; 20 + 21 +#include "flyschemes.h" 22 + 23 +static const char *(*flyschemes[])[3] = { 24 + flyscheme_default, 25 + flyscheme_light, 26 + flyscheme_plan9, 27 + flyscheme_dracula, 28 + flyscheme_solarized, 29 + flyscheme_nord, 30 + flyscheme_gruvbox, 31 + flyscheme_cyberpunk, 32 + NULL /* used to count the number of flyschemes */ 33 + }; 34 35 /* tagging */ 36 static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; 37 @@ -58,7 +64,16 @@ static const Layout layouts[] = { 38 39 /* commands */ 40 static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */ 41 -static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL }; 42 +static const char *dmenucmd[] = { 43 + "dmenu_run", 44 + "-m", dmenumon, 45 + "-fn", dmenufont, 46 + "-nb", "#222222", /* changed as dmenucmd[6] in cycle_flyschemes */ 47 + "-nf", "#bbbbbb", /* changed as dmenucmd[8] in cycle_flyschemes */ 48 + "-sb", "#005577", /* changed as dmenucmd[10] in cycle_flyschemes */ 49 + "-sf", "#eeeeee", /* changed as dmenucmd[12] in cycle_flyschemes */ 50 + NULL 51 +}; 52 static const char *termcmd[] = { "st", NULL }; 53 54 static const Key keys[] = { 55 @@ -74,7 +89,9 @@ static const Key keys[] = { 56 { MODKEY, XK_l, setmfact, {.f = +0.05} }, 57 { MODKEY, XK_Return, zoom, {0} }, 58 { MODKEY, XK_Tab, view, {0} }, 59 - { MODKEY|ShiftMask, XK_c, killclient, {0} }, 60 + { MODKEY|ShiftMask, XK_x, killclient, {0} }, 61 + { MODKEY, XK_c, cycle_flyschemes, { .i = +1 } }, 62 + { MODKEY|ShiftMask, XK_c, cycle_flyschemes, { .i = -1 } }, 63 { MODKEY, XK_t, setlayout, {.v = &layouts[0]} }, 64 { MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, 65 { MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, 66 diff -upN dwm-6.7/config.mk dwm-6.7-patched-flyschemes-alpha/config.mk 67 --- dwm-6.7/config.mk 2026-01-10 13:33:58.160268753 +0300 68 +++ dwm-6.7-patched-flyschemes-alpha/config.mk 2026-01-12 16:59:37.803221192 +0300 69 @@ -23,7 +23,7 @@ FREETYPEINC = /usr/include/freetype2 70 71 # includes and libs 72 INCS = -I${X11INC} -I${FREETYPEINC} 73 -LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS} 74 +LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS} -lXrender 75 76 # flags 77 CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700L -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS} 78 diff -upN dwm-6.7/drw.c dwm-6.7-patched-flyschemes-alpha/drw.c 79 --- dwm-6.7/drw.c 2026-01-10 13:33:58.160268753 +0300 80 +++ dwm-6.7-patched-flyschemes-alpha/drw.c 2026-01-12 17:00:40.136553503 +0300 81 @@ -47,7 +47,7 @@ utf8decode(const char *s_in, long *u, in 82 } 83 84 Drw * 85 -drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h) 86 +drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h, Visual *visual, unsigned int depth, Colormap cmap) 87 { 88 Drw *drw = ecalloc(1, sizeof(Drw)); 89 90 @@ -56,8 +56,11 @@ drw_create(Display *dpy, int screen, Win 91 drw->root = root; 92 drw->w = w; 93 drw->h = h; 94 - drw->drawable = XCreatePixmap(dpy, root, w, h, DefaultDepth(dpy, screen)); 95 - drw->gc = XCreateGC(dpy, root, 0, NULL); 96 + drw->visual = visual; 97 + drw->depth = depth; 98 + drw->cmap = cmap; 99 + drw->drawable = XCreatePixmap(dpy, root, w, h, depth); 100 + drw->gc = XCreateGC(dpy, drw->drawable, 0, NULL); 101 XSetLineAttributes(dpy, drw->gc, 1, LineSolid, CapButt, JoinMiter); 102 103 return drw; 104 @@ -73,7 +76,7 @@ drw_resize(Drw *drw, unsigned int w, uns 105 drw->h = h; 106 if (drw->drawable) 107 XFreePixmap(drw->dpy, drw->drawable); 108 - drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h, DefaultDepth(drw->dpy, drw->screen)); 109 + drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h, drw->depth); 110 } 111 112 void 113 @@ -167,20 +170,20 @@ drw_fontset_free(Fnt *font) 114 } 115 116 void 117 -drw_clr_create(Drw *drw, Clr *dest, const char *clrname) 118 +drw_clr_create(Drw *drw, Clr *dest, const char *clrname, unsigned int alpha) 119 { 120 if (!drw || !dest || !clrname) 121 return; 122 123 - if (!XftColorAllocName(drw->dpy, DefaultVisual(drw->dpy, drw->screen), 124 - DefaultColormap(drw->dpy, drw->screen), 125 + if (!XftColorAllocName(drw->dpy, drw->visual, drw->cmap, 126 clrname, dest)) 127 die("error, cannot allocate color '%s'", clrname); 128 + dest->pixel = (dest->pixel & 0x00ffffffU) | (alpha << 24); 129 } 130 131 /* Create color schemes. */ 132 Clr * 133 -drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount) 134 +drw_scm_create(Drw *drw, const char *clrnames[], const unsigned int clralphas[], size_t clrcount) 135 { 136 size_t i; 137 Clr *ret; 138 @@ -190,7 +193,7 @@ drw_scm_create(Drw *drw, const char *clr 139 return NULL; 140 141 for (i = 0; i < clrcount; i++) 142 - drw_clr_create(drw, &ret[i], clrnames[i]); 143 + drw_clr_create(drw, &ret[i], clrnames[i], clralphas[i]); 144 return ret; 145 } 146 147 @@ -273,9 +276,7 @@ drw_text(Drw *drw, int x, int y, unsigne 148 XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h); 149 if (w < lpad) 150 return x + w; 151 - d = XftDrawCreate(drw->dpy, drw->drawable, 152 - DefaultVisual(drw->dpy, drw->screen), 153 - DefaultColormap(drw->dpy, drw->screen)); 154 + d = XftDrawCreate(drw->dpy, drw->drawable, drw->visual, drw->cmap); 155 x += lpad; 156 w -= lpad; 157 } 158 diff -upN dwm-6.7/drw.h dwm-6.7-patched-flyschemes-alpha/drw.h 159 --- dwm-6.7/drw.h 2026-01-10 13:33:58.160268753 +0300 160 +++ dwm-6.7-patched-flyschemes-alpha/drw.h 2026-01-12 17:01:51.859885671 +0300 161 @@ -20,6 +20,9 @@ typedef struct { 162 Display *dpy; 163 int screen; 164 Window root; 165 + Visual *visual; 166 + unsigned int depth; 167 + Colormap cmap; 168 Drawable drawable; 169 GC gc; 170 Clr *scheme; 171 @@ -27,7 +30,7 @@ typedef struct { 172 } Drw; 173 174 /* Drawable abstraction */ 175 -Drw *drw_create(Display *dpy, int screen, Window win, unsigned int w, unsigned int h); 176 +Drw *drw_create(Display *dpy, int screen, Window win, unsigned int w, unsigned int h, Visual *visual, unsigned int depth, Colormap cmap); 177 void drw_resize(Drw *drw, unsigned int w, unsigned int h); 178 void drw_free(Drw *drw); 179 180 @@ -39,10 +42,10 @@ unsigned int drw_fontset_getwidth_clamp( 181 void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h); 182 183 /* Colorscheme abstraction */ 184 -void drw_clr_create(Drw *drw, Clr *dest, const char *clrname); 185 void drw_clr_free(Drw *drw, Clr *c); 186 -Clr *drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount); 187 void drw_scm_free(Drw *drw, Clr *scm, size_t clrcount); 188 +void drw_clr_create(Drw *drw, Clr *dest, const char *clrname, unsigned int alpha); 189 +Clr *drw_scm_create(Drw *drw, const char *clrnames[], const unsigned int clralphas[], size_t clrcount); 190 191 /* Cursor abstraction */ 192 Cur *drw_cur_create(Drw *drw, int shape); 193 diff -upN dwm-6.7/dwm.1 dwm-6.7-patched-flyschemes-alpha/dwm.1 194 --- dwm-6.7/dwm.1 2026-01-10 13:33:58.160268753 +0300 195 +++ dwm-6.7-patched-flyschemes-alpha/dwm.1 2026-01-12 17:02:25.176551788 +0300 196 @@ -113,9 +113,15 @@ Decrease master area size. 197 .B Mod1\-Return 198 Zooms/cycles focused window to/from master area (tiled layouts only). 199 .TP 200 -.B Mod1\-Shift\-c 201 +.B Mod1\-Shift\-x 202 Close focused window. 203 .TP 204 +.B Mod1\-c 205 +Cycle flyscheme. 206 +.TP 207 +.B Mod1\-Shift\-c 208 +Cycle flyscheme back. 209 +.TP 210 .B Mod1\-Shift\-space 211 Toggle focused window between tiled and floating state. 212 .TP 213 diff -upN dwm-6.7/dwm.c dwm-6.7-patched-flyschemes-alpha/dwm.c 214 --- dwm-6.7/dwm.c 2026-01-10 13:33:58.160268753 +0300 215 +++ dwm-6.7-patched-flyschemes-alpha/dwm.c 2026-01-12 17:02:48.619884740 +0300 216 @@ -56,6 +56,8 @@ 217 #define TAGMASK ((1 << LENGTH(tags)) - 1) 218 #define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad) 219 220 +#define OPAQUE 0xffU 221 + 222 /* enums */ 223 enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */ 224 enum { SchemeNorm, SchemeSel }; /* color schemes */ 225 @@ -141,6 +143,8 @@ typedef struct { 226 } Rule; 227 228 /* function declarations */ 229 +static void cycle_flyschemes(const Arg *arg); 230 +static void update_scheme(); 231 static void applyrules(Client *c); 232 static int applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact); 233 static void arrange(Monitor *m); 234 @@ -231,9 +235,11 @@ static Monitor *wintomon(Window w); 235 static int xerror(Display *dpy, XErrorEvent *ee); 236 static int xerrordummy(Display *dpy, XErrorEvent *ee); 237 static int xerrorstart(Display *dpy, XErrorEvent *ee); 238 +static void xinitvisual(void); 239 static void zoom(const Arg *arg); 240 241 /* variables */ 242 +static unsigned int iflysch = 0; 243 static const char broken[] = "broken"; 244 static char stext[256]; 245 static int screen; 246 @@ -266,6 +272,10 @@ static Display *dpy; 247 static Drw *drw; 248 static Monitor *mons, *selmon; 249 static Window root, wmcheckwin; 250 +static int useargb = 0; 251 +static Visual *visual; 252 +static int depth; 253 +static Colormap cmap; 254 255 /* configuration, allows nested code to access above variables */ 256 #include "config.h" 257 @@ -485,7 +495,7 @@ cleanup(void) 258 cleanupmon(mons); 259 for (i = 0; i < CurLast; i++) 260 drw_cur_free(drw, cursor[i]); 261 - for (i = 0; i < LENGTH(colors); i++) 262 + for (i = 0; i < LENGTH(flyscheme_default); i++) 263 drw_scm_free(drw, scheme[i], 3); 264 free(scheme); 265 XDestroyWindow(dpy, wmcheckwin); 266 @@ -1558,7 +1568,8 @@ setup(void) 267 sw = DisplayWidth(dpy, screen); 268 sh = DisplayHeight(dpy, screen); 269 root = RootWindow(dpy, screen); 270 - drw = drw_create(dpy, screen, root, sw, sh); 271 + xinitvisual(); 272 + drw = drw_create(dpy, screen, root, sw, sh, visual, depth, cmap); 273 if (!drw_fontset_create(drw, fonts, LENGTH(fonts))) 274 die("no fonts could be loaded."); 275 lrpad = drw->fonts->h; 276 @@ -1584,9 +1595,10 @@ setup(void) 277 cursor[CurResize] = drw_cur_create(drw, XC_sizing); 278 cursor[CurMove] = drw_cur_create(drw, XC_fleur); 279 /* init appearance */ 280 - scheme = ecalloc(LENGTH(colors), sizeof(Clr *)); 281 - for (i = 0; i < LENGTH(colors); i++) 282 - scheme[i] = drw_scm_create(drw, colors[i], 3); 283 + unsigned int alphas[] = {borderalpha, baralpha, OPAQUE}; 284 + scheme = ecalloc(LENGTH(flyscheme_default), sizeof(Clr *)); 285 + for (i = 0; i < LENGTH(flyscheme_default); i++) 286 + scheme[i] = drw_scm_create(drw, flyscheme_default[i], alphas, 3); 287 /* init bars */ 288 updatebars(); 289 updatestatus(); 290 @@ -1821,16 +1833,18 @@ updatebars(void) 291 Monitor *m; 292 XSetWindowAttributes wa = { 293 .override_redirect = True, 294 - .background_pixmap = ParentRelative, 295 + .background_pixel = 0, 296 + .border_pixel = 0, 297 + .colormap = cmap, 298 .event_mask = ButtonPressMask|ExposureMask 299 }; 300 XClassHint ch = {"dwm", "dwm"}; 301 for (m = mons; m; m = m->next) { 302 if (m->barwin) 303 continue; 304 - m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->ww, bh, 0, DefaultDepth(dpy, screen), 305 - CopyFromParent, DefaultVisual(dpy, screen), 306 - CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa); 307 + m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->ww, bh, 0, depth, 308 + InputOutput, visual, 309 + CWOverrideRedirect|CWBackPixel|CWBorderPixel|CWColormap|CWEventMask, &wa); 310 XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor); 311 XMapRaised(dpy, m->barwin); 312 XSetClassHint(dpy, m->barwin, &ch); 313 @@ -2129,6 +2143,43 @@ xerrorstart(Display *dpy, XErrorEvent *e 314 } 315 316 void 317 +xinitvisual(void) 318 +{ 319 + XVisualInfo *infos; 320 + XRenderPictFormat *fmt; 321 + int nitems; 322 + int i; 323 + 324 + XVisualInfo tpl = { 325 + .screen = screen, 326 + .depth = 32, 327 + .class = TrueColor 328 + }; 329 + long masks = VisualScreenMask | VisualDepthMask | VisualClassMask; 330 + 331 + infos = XGetVisualInfo(dpy, masks, &tpl, &nitems); 332 + visual = NULL; 333 + for(i = 0; i < nitems; i++) { 334 + fmt = XRenderFindVisualFormat(dpy, infos[i].visual); 335 + if (fmt->type == PictTypeDirect && fmt->direct.alphaMask) { 336 + visual = infos[i].visual; 337 + depth = infos[i].depth; 338 + cmap = XCreateColormap(dpy, root, visual, AllocNone); 339 + useargb = 1; 340 + break; 341 + } 342 + } 343 + 344 + XFree(infos); 345 + 346 + if (!visual) { 347 + visual = DefaultVisual(dpy, screen); 348 + depth = DefaultDepth(dpy, screen); 349 + cmap = DefaultColormap(dpy, screen); 350 + } 351 +} 352 + 353 +void 354 zoom(const Arg *arg) 355 { 356 Client *c = selmon->sel; 357 @@ -2140,6 +2191,37 @@ zoom(const Arg *arg) 358 pop(c); 359 } 360 361 +void 362 +update_scheme() 363 +{ 364 + unsigned int alphas[] = {borderalpha, baralpha, OPAQUE}; 365 + scheme[SchemeNorm] = drw_scm_create(drw, flyschemes[iflysch][SchemeNorm], alphas, 3); 366 + scheme[SchemeSel] = drw_scm_create(drw, flyschemes[iflysch][SchemeSel], alphas, 3); 367 + dmenucmd[6] = flyschemes[iflysch][SchemeNorm][1]; 368 + dmenucmd[8] = flyschemes[iflysch][SchemeNorm][0]; 369 + dmenucmd[10] = flyschemes[iflysch][SchemeSel][1]; 370 + dmenucmd[12] = flyschemes[iflysch][SchemeSel][0]; 371 + Client *cl = selmon->sel; 372 + Client *c; 373 + Monitor *m; 374 + for (m = mons; m; m = m->next) 375 + for (c = m->clients; c; c = c->next) 376 + focus(c); 377 + focus(cl); 378 +} 379 + 380 +void 381 +cycle_flyschemes(const Arg *arg) 382 +{ 383 + int flyschemes_limit = 256; 384 + int i; 385 + for(i = 0; flyschemes[i] != NULL && i < flyschemes_limit; i++) 386 + ; 387 + iflysch += i + arg->i; 388 + iflysch %= i; 389 + update_scheme(); 390 +} 391 + 392 int 393 main(int argc, char *argv[]) 394 { 395 diff -upN dwm-6.7/flyschemes.h dwm-6.7-patched-flyschemes-alpha/flyschemes.h 396 --- dwm-6.7/flyschemes.h 1970-01-01 03:00:00.000000000 +0300 397 +++ dwm-6.7-patched-flyschemes-alpha/flyschemes.h 2026-01-12 16:58:30.953222295 +0300 398 @@ -0,0 +1,42 @@ 399 + 400 +/* loaded on dwm launch, has to be present */ 401 +static const char *flyscheme_default[][3] = { 402 + [SchemeNorm] = { "#bbbbbb", "#222222", "#444444" }, 403 + [SchemeSel] = { "#eeeeee", "#005577", "#005577" }, 404 +}; 405 + 406 +static const char *flyscheme_dracula[][3] = { 407 + [SchemeNorm] = { "#f8f8f2", "#282a36", "#44475a" }, 408 + [SchemeSel] = { "#282a36", "#bd93f9", "#bd93f9" }, 409 +}; 410 + 411 +static const char *flyscheme_solarized[][3] = { 412 + [SchemeNorm] = { "#839496", "#002b36", "#073642" }, 413 + [SchemeSel] = { "#002b36", "#2aa198", "#2aa198" }, 414 +}; 415 + 416 +static const char *flyscheme_nord[][3] = { 417 + [SchemeNorm] = { "#d8dee9", "#2e3440", "#4c566a" }, 418 + [SchemeSel] = { "#2e3440", "#88c0d0", "#88c0d0" }, 419 +}; 420 + 421 +static const char *flyscheme_gruvbox[][3] = { 422 + [SchemeNorm] = { "#ebdbb2", "#282828", "#3c3836" }, 423 + [SchemeSel] = { "#282828", "#fabd2f", "#fabd2f" }, 424 +}; 425 + 426 +static const char *flyscheme_light[][3] = { 427 + [SchemeNorm] = { "#222222", "#eeeeee", "#cccccc" }, 428 + [SchemeSel] = { "#ffffff", "#4a90e2", "#4a90e2" }, 429 +}; 430 + 431 +static const char *flyscheme_plan9[][3] = { 432 + [SchemeNorm] = { "#000000", "#ffffea", "#999999" }, 433 + [SchemeSel] = { "#000000", "#9ecfff", "#9ecfff" }, 434 +}; 435 + 436 +static const char *flyscheme_cyberpunk[][3] = { 437 + [SchemeNorm] = { "#00ffcc", "#0d0221", "#1d1231" }, 438 + [SchemeSel] = { "#0d0221", "#ff00aa", "#ff00aa" }, 439 +}; 440 +