dwm-colorschemes-6.5.diff (4731B)
1 From d067cd3815e35c8c5b804893a551d24fa7505e4b Mon Sep 17 00:00:00 2001 2 From: Listeria monocytogenes <listeria@disroot.org> 3 Date: Wed, 26 Jun 2024 11:49:20 -0300 4 Subject: [PATCH] add setscheme() to cycle between colorschemes 5 6 --- 7 config.def.h | 15 +++++++++++---- 8 dwm.c | 49 ++++++++++++++++++++++++++++++++++++++++--------- 9 2 files changed, 51 insertions(+), 13 deletions(-) 10 11 diff --git a/config.def.h b/config.def.h 12 index 9efa774..f87f707 100644 13 --- a/config.def.h 14 +++ b/config.def.h 15 @@ -12,10 +12,16 @@ static const char col_gray2[] = "#444444"; 16 static const char col_gray3[] = "#bbbbbb"; 17 static const char col_gray4[] = "#eeeeee"; 18 static const char col_cyan[] = "#005577"; 19 -static const char *colors[][3] = { 20 - /* fg bg border */ 21 - [SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, 22 - [SchemeSel] = { col_gray4, col_cyan, col_cyan }, 23 +static const char *colors[][SchemeN][3] = { 24 + /* fg bg border */ 25 + { /* dark */ 26 + [SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, 27 + [SchemeSel] = { col_gray4, col_cyan, col_cyan }, 28 + }, 29 + { /* light */ 30 + [SchemeNorm] = { col_gray2, col_gray4, col_gray3 }, 31 + [SchemeSel] = { col_gray1, col_cyan, col_cyan }, 32 + }, 33 }; 34 35 /* tagging */ 36 @@ -85,6 +91,7 @@ static const Key keys[] = { 37 { MODKEY, XK_period, focusmon, {.i = +1 } }, 38 { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } }, 39 { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } }, 40 + { MODKEY, XK_s, setscheme, {.i = +1 } }, 41 TAGKEYS( XK_1, 0) 42 TAGKEYS( XK_2, 1) 43 TAGKEYS( XK_3, 2) 44 diff --git a/dwm.c b/dwm.c 45 index f1d86b2..9c00a09 100644 46 --- a/dwm.c 47 +++ b/dwm.c 48 @@ -59,7 +59,7 @@ 49 50 /* enums */ 51 enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */ 52 -enum { SchemeNorm, SchemeSel }; /* color schemes */ 53 +enum { SchemeNorm, SchemeSel, SchemeN /* keeplast */ }; /* color schemes */ 54 enum { NetSupported, NetWMName, NetWMState, NetWMCheck, 55 NetWMFullscreen, NetActiveWindow, NetWMWindowType, 56 NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */ 57 @@ -202,6 +202,7 @@ static void setfocus(Client *c); 58 static void setfullscreen(Client *c, int fullscreen); 59 static void setlayout(const Arg *arg); 60 static void setmfact(const Arg *arg); 61 +static void setscheme(const Arg *arg); 62 static void setup(void); 63 static void seturgent(Client *c, int urg); 64 static void showhide(Client *c); 65 @@ -262,7 +263,7 @@ static void (*handler[LASTEvent]) (XEvent *) = { 66 static Atom wmatom[WMLast], netatom[NetLast]; 67 static int running = 1; 68 static Cur *cursor[CurLast]; 69 -static Clr **scheme; 70 +static Clr **schemes, **scheme; 71 static Display *dpy; 72 static Drw *drw; 73 static Monitor *mons, *selmon; 74 @@ -486,9 +487,9 @@ cleanup(void) 75 cleanupmon(mons); 76 for (i = 0; i < CurLast; i++) 77 drw_cur_free(drw, cursor[i]); 78 - for (i = 0; i < LENGTH(colors); i++) 79 - free(scheme[i]); 80 - free(scheme); 81 + for (i = 0; i < LENGTH(colors) * SchemeN; i++) 82 + free(schemes[i]); 83 + free(schemes); 84 XDestroyWindow(dpy, wmcheckwin); 85 drw_free(drw); 86 XSync(dpy, False); 87 @@ -1536,10 +1537,37 @@ setmfact(const Arg *arg) 88 arrange(selmon); 89 } 90 91 +void 92 +setscheme(const Arg *arg) 93 +{ 94 + ptrdiff_t si; 95 + Monitor *m; 96 + Client *c; 97 + 98 + /* select default color scheme */ 99 + if (!arg || arg->i == 0) 100 + si = 0; 101 + else 102 + si = (scheme - schemes) + arg->i * SchemeN; 103 + 104 + /* wrap around, won't work if (abs(arg->i) > LENGTH(colors)) */ 105 + if (si < 0) 106 + si += LENGTH(colors) * SchemeN; 107 + else if (si >= LENGTH(colors) * SchemeN) 108 + si -= LENGTH(colors) * SchemeN; 109 + 110 + scheme = &schemes[si]; 111 + 112 + drawbars(); 113 + for (m = mons; m; m = m->next) 114 + for (c = m->clients; c; c = c->next) 115 + XSetWindowBorder(dpy, c->win, scheme[c == selmon->sel ? SchemeSel : SchemeNorm][ColBorder].pixel); 116 +} 117 + 118 void 119 setup(void) 120 { 121 - int i; 122 + int i, j; 123 XSetWindowAttributes wa; 124 Atom utf8string; 125 struct sigaction sa; 126 @@ -1584,9 +1612,12 @@ setup(void) 127 cursor[CurResize] = drw_cur_create(drw, XC_sizing); 128 cursor[CurMove] = drw_cur_create(drw, XC_fleur); 129 /* init appearance */ 130 - scheme = ecalloc(LENGTH(colors), sizeof(Clr *)); 131 - for (i = 0; i < LENGTH(colors); i++) 132 - scheme[i] = drw_scm_create(drw, colors[i], 3); 133 + schemes = ecalloc(LENGTH(colors), SchemeN * sizeof(Clr *)); 134 + for (j = LENGTH(colors) - 1; j >= 0; j--) { 135 + scheme = &schemes[j * SchemeN]; 136 + for (i = 0; i < SchemeN; i++) 137 + scheme[i] = drw_scm_create(drw, colors[j][i], 3); 138 + } 139 /* init bars */ 140 updatebars(); 141 updatestatus(); 142 -- 143 2.47.1 144