sites

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

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 +