commit 3979685fca5cc5200b95a9ecc31da11cc8f9ba03
Author: Britton Leo Kerin <[email protected]>
Date: Fri Jul 8 12:56:02 2016 -0800
Rename most misnamed diff files...
Most of the diffs that don't follow the current agreed-upon naming
scheme are misnamed in the same way. This commit renames all of these
that apply cleanly. Dates are looked up from the short has and added.
diff --git a/dwm.suckless.org/patches/alwaysfullscreen.md
b/dwm.suckless.org/patches/alwaysfullscreen.md
index e4edeec..9d703b8 100644
--- a/dwm.suckless.org/patches/alwaysfullscreen.md
+++ b/dwm.suckless.org/patches/alwaysfullscreen.md
@@ -10,7 +10,7 @@ focusstack().
Download
--------
-* [dwm-cdec978-alwaysfullscreen.diff](dwm-cdec978-alwaysfullscreen.diff)
(323b) (20140220)
+*
[dwm-alwaysfullscreen-git-20130827-cdec978.diff](dwm-alwaysfullscreen-git-20130827-cdec978.diff)
(323b) (20140220)
Author
------
diff --git a/dwm.suckless.org/patches/argbcolor.md
b/dwm.suckless.org/patches/argbcolor.md
index b42ed12..1fef6cd 100644
--- a/dwm.suckless.org/patches/argbcolor.md
+++ b/dwm.suckless.org/patches/argbcolor.md
@@ -13,7 +13,7 @@ just like [ARGB patch for st][1].
Download
--------
- * [dwm-3465bed-argbcolor.diff](dwm-3465bed-argbcolor.diff) (20160307)
+ *
[dwm-argbcolor-git-20151219-3465bed.diff](dwm-argbcolor-git-20151219-3465bed.diff)
(20160307)
Author
diff --git a/dwm.suckless.org/patches/attachabove.md
b/dwm.suckless.org/patches/attachabove.md
index b1e049e..fa2dae0 100644
--- a/dwm.suckless.org/patches/attachabove.md
+++ b/dwm.suckless.org/patches/attachabove.md
@@ -11,9 +11,9 @@ Download
Patches against different versions of dwm are available at
[dwm-clean-patches](https://github.com/jceb/dwm-clean-patches).
- * [dwm-6.1-attachabove.diff](dwm-6.1-attachabove.diff) (1829b) (20151122)
+ * [dwm-attachabove-6.1.diff](dwm-attachabove-6.1.diff) (1829b) (20151122)
* [dwm-git-20120406-attachabove.diff](dwm-git-20120406-attachabove.diff)
(1709b)
- * [dwm-6.0-attachabove.diff](dwm-6.0-attachabove.diff) (1707b) (20120406)
+ * [dwm-attachabove-6.0.diff](dwm-attachabove-6.0.diff) (1707b) (20120406)
* [dwm-5.6.1-attachabove.diff](historical/dwm-5.6.1-attachabove.diff) (1.1K)
(20090817)
Author
diff --git a/dwm.suckless.org/patches/attachaside.md
b/dwm.suckless.org/patches/attachaside.md
index 26a7a31..611d065 100644
--- a/dwm.suckless.org/patches/attachaside.md
+++ b/dwm.suckless.org/patches/attachaside.md
@@ -54,7 +54,7 @@ improved to also attach to the stack on unfocused tags.
### Original
-* [dwm-6.0-attachaside.diff](dwm-6.0-attachaside.diff) (1,6K) (20140412)
+* [dwm-attachaside-6.0.diff](dwm-attachaside-6.0.diff) (1,6K) (20140412)
* [dwm-5.7.2-attachaside.diff](historical/dwm-5.7.2-attachaside.diff) (1.1K)
(20091215)
* [dwm-5.6.1-attachaside.diff](historical/dwm-5.6.1-attachaside.diff) (1.1K)
(20090915)
diff --git a/dwm.suckless.org/patches/autoresize.md
b/dwm.suckless.org/patches/autoresize.md
index 02baeb5..e5c8c4c 100644
--- a/dwm.suckless.org/patches/autoresize.md
+++ b/dwm.suckless.org/patches/autoresize.md
@@ -7,7 +7,7 @@ By default, windows that are not visible when requesting a
resize/move wont get
## Download
* [autoresize.diff](autoresize.diff) autoresize.diff (07.03.2010)
- * [dwm-6.0-autoresize.diff](dwm-6.0-autoresize.diff) (15.04.2013)
+ * [dwm-autoresize-6.0.diff](dwm-autoresize-6.0.diff) (15.04.2013)
## Author
diff --git a/dwm.suckless.org/patches/bottommargin.md
b/dwm.suckless.org/patches/bottommargin.md
index 2dd33ae..c805b97 100644
--- a/dwm.suckless.org/patches/bottommargin.md
+++ b/dwm.suckless.org/patches/bottommargin.md
@@ -6,7 +6,7 @@ Adds a variable margin at the bottom for status or notification
bars
## Download
- * [dwm-6.0-bottommargin.diff](dwm-6.0-bottommargin.diff)
dwm-6.0-bottommargin.diff (07.06.2014)
+ * [dwm-bottommargin-6.0.diff](dwm-bottommargin-6.0.diff)
dwm-bottommargin-6.0.diff (07.06.2014)
## Author
diff --git a/dwm.suckless.org/patches/center.md
b/dwm.suckless.org/patches/center.md
index 4ff47b9..ccc8eb1 100644
--- a/dwm.suckless.org/patches/center.md
+++ b/dwm.suckless.org/patches/center.md
@@ -10,7 +10,7 @@ monitor.
Download
--------
-* [dwm-6.1-center.diff](dwm-6.1-center.diff) (2k) (20151114)
+* [dwm-center-6.1.diff](dwm-center-6.1.diff) (2k) (20151114)
* [dwm-cdec978-center.diff](historical/dwm-cdec978-center.diff) (2k) (20140123)
Author
diff --git a/dwm.suckless.org/patches/centeredmaster.md
b/dwm.suckless.org/patches/centeredmaster.md
index 5c3b112..551fe9c 100644
--- a/dwm.suckless.org/patches/centeredmaster.md
+++ b/dwm.suckless.org/patches/centeredmaster.md
@@ -88,7 +88,7 @@ behind (logs, tests, ...).
## Links
* [centeredmaster.c](centeredmaster.c) - 2015/11/22
-* [dwm-6.1-centeredmaster.diff](dwm-6.1-centeredmaster.diff) - 2015/11/21
+* [dwm-centeredmaster-6.1.diff](dwm-centeredmaster-6.1.diff) - 2015/11/21
[jerome](http://blog.jardinmagique.info) <[email protected]>
diff --git a/dwm.suckless.org/patches/combo.md
b/dwm.suckless.org/patches/combo.md
index 0fc4f12..50e5303 100644
--- a/dwm.suckless.org/patches/combo.md
+++ b/dwm.suckless.org/patches/combo.md
@@ -18,9 +18,9 @@ and view so you could replace all usages if you wanted.
Download
--------
- * [dwm-5.9-combo.diff](dwm-5.9-combo.diff) - 2010-10-30
- * [dwm-6.0-combo.diff](dwm-6.0-combo.diff) - 2012-10-09
- * [dwm-6.1-combo.diff](dwm-6.1-combo.diff) - 2016-01-22
+ * [dwm-combo-5.9.diff](dwm-combo-5.9.diff) - 2010-10-30
+ * [dwm-combo-6.0.diff](dwm-combo-6.0.diff) - 2012-10-09
+ * [dwm-combo-6.1.diff](dwm-combo-6.1.diff) - 2016-01-22
Author
------
diff --git a/dwm.suckless.org/patches/current_desktop.md
b/dwm.suckless.org/patches/current_desktop.md
index c3be18e..1a4b26d 100644
--- a/dwm.suckless.org/patches/current_desktop.md
+++ b/dwm.suckless.org/patches/current_desktop.md
@@ -23,7 +23,7 @@
## Download
- * [dwm-5.8.2-current_desktop.diff](dwm-5.8.2-current_desktop.diff) (dwm
2010604)
+ * [dwm-current_desktop-5.8.2.diff](dwm-current_desktop-5.8.2.diff) (dwm
2010604)
## Author
diff --git a/dwm.suckless.org/patches/dualstatus.md
b/dwm.suckless.org/patches/dualstatus.md
index 58648a6..d059ab7 100644
--- a/dwm.suckless.org/patches/dualstatus.md
+++ b/dwm.suckless.org/patches/dualstatus.md
@@ -11,8 +11,8 @@ xsetroot -name "top text;bottom text"
Download
--------
- * [dwm-6.1-dualstatus.diff](dwm-6.1-dualstatus.diff) (4683b) (20151110)
- * [dwm-6.0-dualstatus.diff](dwm-6.0-dualstatus.diff) (4794b) (20130908)
+ * [dwm-dualstatus-6.1.diff](dwm-dualstatus-6.1.diff) (4683b) (20151110)
+ * [dwm-dualstatus-6.0.diff](dwm-dualstatus-6.0.diff) (4794b) (20130908)
Screenshot
----------
diff --git a/dwm.suckless.org/patches/dwm-3465bed-argbcolor.diff
b/dwm.suckless.org/patches/dwm-3465bed-argbcolor.diff
deleted file mode 100644
index fe6e51e..0000000
--- a/dwm.suckless.org/patches/dwm-3465bed-argbcolor.diff
+++ /dev/null
@@ -1,269 +0,0 @@
-From db0f6c99b236aafb33c21cc57ad4ec493ab4d3b2 Mon Sep 17 00:00:00 2001
-From: "Eon S. Jeon" <[email protected]>
-Date: Mon, 7 Mar 2016 20:17:24 +0900
-Subject: [PATCH] implement ARGB color support
-
----
- config.def.h | 2 ++
- config.mk | 2 +-
- drw.c | 22 +++++++++----------
- drw.h | 7 ++++--
- dwm.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++----------
- 5 files changed, 78 insertions(+), 25 deletions(-)
-
-diff --git a/config.def.h b/config.def.h
-index 7054c06..4448d46 100644
---- a/config.def.h
-+++ b/config.def.h
-@@ -11,6 +11,8 @@ static const char normfgcolor[] = "#bbbbbb";
- static const char selbordercolor[] = "#005577";
- static const char selbgcolor[] = "#005577";
- static const char selfgcolor[] = "#eeeeee";
-+static unsigned int baralpha = 0xd0;
-+static unsigned int borderalpha = OPAQUE;
- static const unsigned int borderpx = 1; /* border pixel of windows */
- static const unsigned int snap = 32; /* snap pixel */
- static const int showbar = 1; /* 0 means no bar */
-diff --git a/config.mk b/config.mk
-index 80dc936..2c62e89 100644
---- a/config.mk
-+++ b/config.mk
-@@ -22,7 +22,7 @@ FREETYPEINC = /usr/include/freetype2
-
- # includes and libs
- INCS = -I${X11INC} -I${FREETYPEINC}
--LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS}
-+LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS} -lXrender
-
- # flags
- CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=2
-DVERSION=\"${VERSION}\" ${XINERAMAFLAGS}
-diff --git a/drw.c b/drw.c
-index f49200b..12e3ebc 100644
---- a/drw.c
-+++ b/drw.c
-@@ -61,7 +61,7 @@ utf8decode(const char *c, long *u, size_t clen)
- }
-
- Drw *
--drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned
int h)
-+drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned
int h, Visual *visual, unsigned int depth, Colormap cmap)
- {
- Drw *drw;
-
-@@ -71,8 +71,11 @@ drw_create(Display *dpy, int screen, Window root, unsigned
int w, unsigned int h
- drw->root = root;
- drw->w = w;
- drw->h = h;
-- drw->drawable = XCreatePixmap(dpy, root, w, h, DefaultDepth(dpy,
screen));
-- drw->gc = XCreateGC(dpy, root, 0, NULL);
-+ drw->visual = visual;
-+ drw->depth = depth;
-+ drw->cmap = cmap;
-+ drw->drawable = XCreatePixmap(dpy, root, w, h, depth);
-+ drw->gc = XCreateGC(dpy, drw->drawable, 0, NULL);
- drw->fontcount = 0;
- XSetLineAttributes(dpy, drw->gc, 1, LineSolid, CapButt, JoinMiter);
-
-@@ -86,7 +89,7 @@ drw_resize(Drw *drw, unsigned int w, unsigned int h)
- drw->h = h;
- if (drw->drawable)
- XFreePixmap(drw->dpy, drw->drawable);
-- drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h,
DefaultDepth(drw->dpy, drw->screen));
-+ drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h, drw->depth);
- }
-
- void
-@@ -180,16 +183,15 @@ drw_font_free(Fnt *font)
- }
-
- Clr *
--drw_clr_create(Drw *drw, const char *clrname)
-+drw_clr_create(Drw *drw, const char *clrname, unsigned int alpha)
- {
- Clr *clr;
-
- clr = ecalloc(1, sizeof(Clr));
-- if (!XftColorAllocName(drw->dpy, DefaultVisual(drw->dpy, drw->screen),
-- DefaultColormap(drw->dpy, drw->screen),
-+ if (!XftColorAllocName(drw->dpy, drw->visual, drw->cmap,
- clrname, &clr->rgb))
- die("error, cannot allocate color '%s'
", clrname);
-- clr->pix = clr->rgb.pixel;
-+ clr->pix = (clr->rgb.pixel & 0x00ffffffU) | (alpha << 24);
-
- return clr;
- }
-@@ -245,9 +247,7 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned
int h, const char *tex
- XSetForeground(drw->dpy, drw->gc, invert ?
- drw->scheme->fg->pix : drw->scheme->bg->pix);
- XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h);
-- d = XftDrawCreate(drw->dpy, drw->drawable,
-- DefaultVisual(drw->dpy, drw->screen),
-- DefaultColormap(drw->dpy, drw->screen));
-+ d = XftDrawCreate(drw->dpy, drw->drawable, drw->visual,
drw->cmap);
- }
-
- curfont = drw->fonts[0];
-diff --git a/drw.h b/drw.h
-index e3b8515..1fed824 100644
---- a/drw.h
-+++ b/drw.h
-@@ -30,6 +30,9 @@ typedef struct {
- Display *dpy;
- int screen;
- Window root;
-+ Visual *visual;
-+ unsigned int depth;
-+ Colormap cmap;
- Drawable drawable;
- GC gc;
- ClrScheme *scheme;
-@@ -43,7 +46,7 @@ typedef struct {
- } Extnts;
-
- /* Drawable abstraction */
--Drw *drw_create(Display *, int, Window, unsigned int, unsigned int);
-+Drw *drw_create(Display *, int, Window, unsigned int, unsigned int, Visual*,
unsigned int, Colormap);
- void drw_resize(Drw *, unsigned int, unsigned int);
- void drw_free(Drw *);
-
-@@ -55,7 +58,7 @@ void drw_font_getexts(Fnt *, const char *, unsigned int,
Extnts *);
- unsigned int drw_font_getexts_width(Fnt *, const char *, unsigned int);
-
- /* Colour abstraction */
--Clr *drw_clr_create(Drw *, const char *);
-+Clr *drw_clr_create(Drw *, const char *, unsigned int);
- void drw_clr_free(Clr *);
-
- /* Cursor abstraction */
-diff --git a/dwm.c b/dwm.c
-index ff7e096..286fb10 100644
---- a/dwm.c
-+++ b/dwm.c
-@@ -57,6 +57,8 @@
- #define TAGMASK ((1 << LENGTH(tags)) - 1)
- #define TEXTW(X) (drw_text(drw, 0, 0, 0, 0, (X), 0) +
drw->fonts[0]->h)
-
-+#define OPAQUE 0xffU
-+
- /* enums */
- enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
- enum { SchemeNorm, SchemeSel, SchemeLast }; /* color schemes */
-@@ -232,6 +234,7 @@ static Monitor *wintomon(Window w);
- static int xerror(Display *dpy, XErrorEvent *ee);
- static int xerrordummy(Display *dpy, XErrorEvent *ee);
- static int xerrorstart(Display *dpy, XErrorEvent *ee);
-+static void xinitvisual();
- static void zoom(const Arg *arg);
-
- /* variables */
-@@ -267,6 +270,11 @@ static Drw *drw;
- static Monitor *mons, *selmon;
- static Window root;
-
-+static int useargb = 0;
-+static Visual *visual;
-+static int depth;
-+static Colormap cmap;
-+
- /* configuration, allows nested code to access above variables */
- #include "config.h"
-
-@@ -1561,7 +1569,8 @@ setup(void)
- sw = DisplayWidth(dpy, screen);
- sh = DisplayHeight(dpy, screen);
- root = RootWindow(dpy, screen);
-- drw = drw_create(dpy, screen, root, sw, sh);
-+ xinitvisual();
-+ drw = drw_create(dpy, screen, root, sw, sh, visual, depth, cmap);
- drw_load_fonts(drw, fonts, LENGTH(fonts));
- if (!drw->fontcount)
- die("no fonts could be loaded.
");
-@@ -1585,12 +1594,12 @@ setup(void)
- cursor[CurResize] = drw_cur_create(drw, XC_sizing);
- cursor[CurMove] = drw_cur_create(drw, XC_fleur);
- /* init appearance */
-- scheme[SchemeNorm].border = drw_clr_create(drw, normbordercolor);
-- scheme[SchemeNorm].bg = drw_clr_create(drw, normbgcolor);
-- scheme[SchemeNorm].fg = drw_clr_create(drw, normfgcolor);
-- scheme[SchemeSel].border = drw_clr_create(drw, selbordercolor);
-- scheme[SchemeSel].bg = drw_clr_create(drw, selbgcolor);
-- scheme[SchemeSel].fg = drw_clr_create(drw, selfgcolor);
-+ scheme[SchemeNorm].border = drw_clr_create(drw, normbordercolor,
borderalpha);
-+ scheme[SchemeNorm].bg = drw_clr_create(drw, normbgcolor, baralpha);
-+ scheme[SchemeNorm].fg = drw_clr_create(drw, normfgcolor, OPAQUE);
-+ scheme[SchemeSel].border = drw_clr_create(drw, selbordercolor,
borderalpha);
-+ scheme[SchemeSel].bg = drw_clr_create(drw, selbgcolor, baralpha);
-+ scheme[SchemeSel].fg = drw_clr_create(drw, selfgcolor, OPAQUE);
- /* init bars */
- updatebars();
- updatestatus();
-@@ -1803,15 +1812,17 @@ updatebars(void)
- Monitor *m;
- XSetWindowAttributes wa = {
- .override_redirect = True,
-- .background_pixmap = ParentRelative,
-+ .background_pixel = 0,
-+ .border_pixel = 0,
-+ .colormap = cmap,
- .event_mask = ButtonPressMask|ExposureMask
- };
- for (m = mons; m; m = m->next) {
- if (m->barwin)
- continue;
-- m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->ww, bh,
0, DefaultDepth(dpy, screen),
-- CopyFromParent, DefaultVisual(dpy,
screen),
--
CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa);
-+ m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->ww, bh,
0, depth,
-+ InputOutput, visual,
-+
CWOverrideRedirect|CWBackPixel|CWBorderPixel|CWColormap|CWEventMask, &wa);
- XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor);
- XMapRaised(dpy, m->barwin);
- }
-@@ -2112,6 +2123,43 @@ xerrorstart(Display *dpy, XErrorEvent *ee)
- }
-
- void
-+xinitvisual()
-+{
-+ XVisualInfo *infos;
-+ XRenderPictFormat *fmt;
-+ int nitems;
-+ int i;
-+
-+ XVisualInfo tpl = {
-+ .screen = screen,
-+ .depth = 32,
-+ .class = TrueColor
-+ };
-+ long masks = VisualScreenMask | VisualDepthMask | VisualClassMask;
-+
-+ infos = XGetVisualInfo(dpy, masks, &tpl, &nitems);
-+ visual = NULL;
-+ for(i = 0; i < nitems; i ++) {
-+ fmt = XRenderFindVisualFormat(dpy, infos[i].visual);
-+ if (fmt->type == PictTypeDirect && fmt->direct.alphaMask) {
-+ visual = infos[i].visual;
-+ depth = infos[i].depth;
-+ cmap = XCreateColormap(dpy, root, visual, AllocNone);
-+ useargb = 1;
-+ break;
-+ }
-+ }
-+
-+ XFree(infos);
-+
-+ if (! visual) {
-+ visual = DefaultVisual(dpy, screen);
-+ depth = DefaultDepth(dpy, screen);
-+ cmap = DefaultColormap(dpy, screen);
-+ }
-+}
-+
-+void
- zoom(const Arg *arg)
- {
- Client *c = selmon->sel;
---
-2.1.4
-
diff --git a/dwm.suckless.org/patches/dwm-5.7.2-nametag.diff
b/dwm.suckless.org/patches/dwm-5.7.2-nametag.diff
deleted file mode 100644
index 6c4d752..0000000
--- a/dwm.suckless.org/patches/dwm-5.7.2-nametag.diff
+++ /dev/null
@@ -1,70 +0,0 @@
-diff -r 2bcd25cce4ab config.def.h
---- a/config.def.h Sun Sep 27 20:20:14 2009 +0100
-+++ b/config.def.h Thu Oct 29 12:27:26 2009 -0700
-@@ -14,7 +14,8 @@
- static const Bool topbar = True; /* False means bottom bar */
-
- /* tagging */
--static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
-+#define MAX_TAGLEN 16
-+static char tags[][MAX_TAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8",
"9" };
-
- static const Rule rules[] = {
- /* class instance title tags mask isfloating
monitor */
-@@ -71,6 +72,7 @@
- { MODKEY, XK_period, focusmon, {.i = +1 } },
- { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
- { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
-+ { MODKEY, XK_n, nametag, {0} },
- TAGKEYS( XK_1, 0)
- TAGKEYS( XK_2, 1)
- TAGKEYS( XK_3, 2)
-diff -r 2bcd25cce4ab config.mk
---- a/config.mk Sun Sep 27 20:20:14 2009 +0100
-+++ b/config.mk Thu Oct 29 12:27:26 2009 -0700
-@@ -19,7 +19,7 @@
- LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 ${XINERAMALIBS}
-
- # flags
--CPPFLAGS = -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS}
-+CPPFLAGS = -D_BSD_SOURCE -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS}
- #CFLAGS = -g -std=c99 -pedantic -Wall -O0 ${INCS} ${CPPFLAGS}
- CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS}
- #LDFLAGS = -g ${LIBS}
-diff -r 2bcd25cce4ab dwm.c
---- a/dwm.c Sun Sep 27 20:20:14 2009 +0100
-+++ b/dwm.c Thu Oct 29 12:27:26 2009 -0700
-@@ -195,6 +195,7 @@
- static void maprequest(XEvent *e);
- static void monocle(Monitor *m);
- static void movemouse(const Arg *arg);
-+static void nametag(const Arg *arg);
- static Client *nexttiled(Client *c);
- static Monitor *ptrtomon(int x, int y);
- static void propertynotify(XEvent *e);
-@@ -1240,6 +1241,25 @@
- }
- }
-
-+void
-+nametag(const Arg *arg) {
-+ char *cp, name[MAX_TAGLEN];
-+ FILE *fp;
-+ int i;
-+
-+ if(!(fp = (FILE*)popen("echo -n | dmenu", "r")))
-+ fprintf(stderr, "dwm: Could not popen 'echo -n | dmenu'
");
-+ cp = fgets(name, MAX_TAGLEN, fp);
-+ pclose(fp);
-+ if(cp == NULL)
-+ return;
-+
-+ for(i = 0; i < LENGTH(tags); i++)
-+ if(selmon->tagset[selmon->seltags] & (1 << i))
-+ memcpy(tags[i], name, MAX_TAGLEN);
-+ drawbars();
-+}
-+
- Client *
- nexttiled(Client *c) {
- for(; c && (c->isfloating || !ISVISIBLE(c)); c = c->next);
diff --git a/dwm.suckless.org/patches/dwm-5.7.2-sizehints.diff
b/dwm.suckless.org/patches/dwm-5.7.2-sizehints.diff
deleted file mode 100644
index 82c2499..0000000
--- a/dwm.suckless.org/patches/dwm-5.7.2-sizehints.diff
+++ /dev/null
@@ -1,24 +0,0 @@
-diff -r 46109f7eeb14 dwm.c
---- a/dwm.c Mon Dec 21 01:14:28 2009 -0500
-+++ b/dwm.c Mon Dec 21 01:16:38 2009 -0500
-@@ -1841,7 +1841,7 @@
-
- if(!XGetWMNormalHints(dpy, c->win, &size, &msize))
- /* size is uninitialized, ensure that size.flags aren't used */
-- size.flags = PSize;
-+ size.flags = 0;
- if(size.flags & PBaseSize) {
- c->basew = size.base_width;
- c->baseh = size.base_height;
-@@ -1880,6 +1880,11 @@
- }
- else
- c->maxa = c->mina = 0.0;
-+ if(size.flags & PSize) {
-+ c->basew = size.base_width;
-+ c->baseh = size.base_height;
-+ c->isfloating = True;
-+ }
- c->isfixed = (c->maxw && c->minw && c->maxh && c->minh
- && c->maxw == c->minw && c->maxh == c->minh);
- }
diff --git a/dwm.suckless.org/patches/dwm-5.8.2-current_desktop.diff
b/dwm.suckless.org/patches/dwm-5.8.2-current_desktop.diff
deleted file mode 100644
index 3f22b9f..0000000
--- a/dwm.suckless.org/patches/dwm-5.8.2-current_desktop.diff
+++ /dev/null
@@ -1,109 +0,0 @@
-diff -r 23b71491e149 dwm.c
---- a/dwm.c Thu Dec 02 10:16:47 2010 +0000
-+++ b/dwm.c Mon Dec 13 08:18:03 2010 -0500
-@@ -57,8 +57,8 @@
- /* enums */
- enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
- enum { ColBorder, ColFG, ColBG, ColLast }; /* color */
--enum { NetSupported, NetWMName, NetWMState,
-- NetWMFullscreen, NetLast }; /* EWMH atoms */
-+enum { NetSupported, NetWMName, NetWMState, NetWMFullscreen,
-+ NetNumberOfDesktops, NetCurrentDesktop, NetLast }; /* EWMH atoms */
- enum { WMProtocols, WMDelete, WMState, WMLast }; /* default atoms */
- enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
- ClkClientWin, ClkRootWin, ClkLast }; /* clicks */
-@@ -212,6 +212,7 @@
- static void setclientstate(Client *c, long state);
- static void setlayout(const Arg *arg);
- static void setmfact(const Arg *arg);
-+static void setnumbdesktops(void);
- static void setup(void);
- static void showhide(Client *c);
- static void sigchld(int unused);
-@@ -227,6 +228,7 @@
- static void unfocus(Client *c, Bool setfocus);
- static void unmanage(Client *c, Bool destroyed);
- static void unmapnotify(XEvent *e);
-+static void updatecurrenddesktop(void);
- static Bool updategeom(void);
- static void updatebarpos(Monitor *m);
- static void updatebars(void);
-@@ -1467,6 +1469,13 @@
- }
-
- void
-+setcurrentdesktop(void){
-+ long data[] = { 0 };
-+ XChangeProperty(dpy, root, netatom[NetCurrentDesktop], XA_CARDINAL,
32,
-+ PropModeReplace, (unsigned char *)data, 1);
-+}
-+
-+void
- setclientstate(Client *c, long state) {
- long data[] = { state, None };
-
-@@ -1502,6 +1511,13 @@
- }
-
- void
-+setnumbdesktops(void){
-+ long data[] = { TAGMASK };
-+ XChangeProperty(dpy, root, netatom[NetNumberOfDesktops], XA_CARDINAL,
32,
-+ PropModeReplace, (unsigned char *)data, 1);
-+}
-+
-+void
- setup(void) {
- XSetWindowAttributes wa;
-
-@@ -1524,6 +1540,8 @@
- netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False);
- netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False);
- netatom[NetWMFullscreen] = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN",
False);
-+ netatom[NetNumberOfDesktops] = XInternAtom(dpy,
"_NET_NUMBER_OF_DESKTOPS", False);
-+ netatom[NetCurrentDesktop] = XInternAtom(dpy, "_NET_CURRENT_DESKTOP",
False);
- /* init cursors */
- cursor[CurNormal] = XCreateFontCursor(dpy, XC_left_ptr);
- cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing);
-@@ -1546,6 +1564,10 @@
- /* EWMH support per view */
- XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32,
- PropModeReplace, (unsigned char *) netatom, NetLast);
-+ /* set EWMH NUMBER_OF_DESKTOPS */
-+ setnumbdesktops();
-+ /* initialize EWMH CURRENT_DESKTOP */
-+ setcurrentdesktop();
- /* select for events */
- wa.cursor = cursor[CurNormal];
- wa.event_mask =
SubstructureRedirectMask|SubstructureNotifyMask|ButtonPressMask
-@@ -1688,6 +1710,7 @@
- selmon->tagset[selmon->seltags] = newtagset;
- arrange(selmon);
- }
-+ updatecurrenddesktop();
- }
-
- void
-@@ -1763,6 +1786,14 @@
- m->by = -bh;
- }
-
-+void
-+updatecurrenddesktop(){
-+ long data[] = { selmon->tagset[selmon->seltags] };
-+
-+ XChangeProperty(dpy, root, netatom[NetCurrentDesktop], XA_CARDINAL,
32,
-+ PropModeReplace, (unsigned char *)data, 1);
-+}
-+
- Bool
- updategeom(void) {
- Bool dirty = False;
-@@ -1948,6 +1979,7 @@
- if(arg->ui & TAGMASK)
- selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
- arrange(selmon);
-+ updatecurrenddesktop();
- }
-
- Client *
diff --git a/dwm.suckless.org/patches/dwm-5.8.2-fibonacci.diff
b/dwm.suckless.org/patches/dwm-5.8.2-fibonacci.diff
deleted file mode 100644
index 78664c8..0000000
--- a/dwm.suckless.org/patches/dwm-5.8.2-fibonacci.diff
+++ /dev/null
@@ -1,85 +0,0 @@
-diff --git a/config.def.h b/config.def.h
-index cca37df..91b91aa 100644
---- a/config.def.h
-+++ b/config.def.h
-@@ -29,1 +29,2 @@
-+#include "fibonacci.c"
- static const Layout layouts[] = {
-@@ -34,3 +35,5 @@
-+ { "[@]", spiral },
-+ { "[\]", dwindle },
- };
-
- /* key definitions */
-diff --git a/fibonacci.c b/fibonacci.c
-new file mode 100644
-index 0000000..fce0a57
---- /dev/null
-+++ b/fibonacci.c
-@@ -0,0 +1,66 @@
-+void
-+fibonacci(Monitor *mon, int s) {
-+ unsigned int i, n, nx, ny, nw, nh;
-+ Client *c;
-+
-+ for(n = 0, c = nexttiled(mon->clients); c; c = nexttiled(c->next), n++);
-+ if(n == 0)
-+ return;
-+
-+ nx = mon->wx;
-+ ny = 0;
-+ nw = mon->ww;
-+ nh = mon->wh;
-+
-+ for(i = 0, c = nexttiled(mon->clients); c; c = nexttiled(c->next)) {
-+ if((i % 2 && nh / 2 > 2 * c->bw)
-+ || (!(i % 2) && nw / 2 > 2 * c->bw)) {
-+ if(i < n - 1) {
-+ if(i % 2)
-+ nh /= 2;
-+ else
-+ nw /= 2;
-+ if((i % 4) == 2 && !s)
-+ nx += nw;
-+ else if((i % 4) == 3 && !s)
-+ ny += nh;
-+ }
-+ if((i % 4) == 0) {
-+ if(s)
-+ ny += nh;
-+ else
-+ ny -= nh;
-+ }
-+ else if((i % 4) == 1)
-+ nx += nw;
-+ else if((i % 4) == 2)
-+ ny += nh;
-+ else if((i % 4) == 3) {
-+ if(s)
-+ nx += nw;
-+ else
-+ nx -= nw;
-+ }
-+ if(i == 0)
-+ {
-+ if(n != 1)
-+ nw = mon->ww * mon->mfact;
-+ ny = mon->wy;
-+ }
-+ else if(i == 1)
-+ nw = mon->ww - nw;
-+ i++;
-+ }
-+ resize(c, nx, ny, nw - 2 * c->bw, nh - 2 * c->bw, False);
-+ }
-+}
-+
-+void
-+dwindle(Monitor *mon) {
-+ fibonacci(mon, 1);
-+}
-+
-+void
-+spiral(Monitor *mon) {
-+ fibonacci(mon, 0);
-+}
diff --git a/dwm.suckless.org/patches/dwm-5.8.2-gridmode.diff
b/dwm.suckless.org/patches/dwm-5.8.2-gridmode.diff
deleted file mode 100644
index 0cbd8e2..0000000
--- a/dwm.suckless.org/patches/dwm-5.8.2-gridmode.diff
+++ /dev/null
@@ -1,43 +0,0 @@
-diff -r 62791cc97f88 config.def.h
---- a/config.def.h Tue Jun 01 17:39:26 2010 +0100
-+++ b/config.def.h Wed Jun 02 13:42:49 2010 +0100
-@@ -29,1 +29,2 @@
-+#include "grid.c"
- static const Layout layouts[] = {
-@@ -34,3 +35,4 @@
-+ { "HHH", grid },
- };
-
- /* key definitions */
-diff -r 62791cc97f88 grid.c
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ b/grid.c Wed Jun 02 13:42:49 2010 +0100
-@@ -0,0 +1,28 @@
-+void
-+grid(Monitor *m) {
-+ unsigned int i, n, cx, cy, cw, ch, aw, ah, cols, rows;
-+ Client *c;
-+
-+ for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next))
-+ n++;
-+
-+ /* grid dimensions */
-+ for(rows = 0; rows <= n/2; rows++)
-+ if(rows*rows >= n)
-+ break;
-+ cols = (rows && (rows - 1) * rows >= n) ? rows - 1 : rows;
-+
-+ /* window geoms (cell height/width) */
-+ ch = m->wh / (rows ? rows : 1);
-+ cw = m->ww / (cols ? cols : 1);
-+ for(i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next)) {
-+ cx = m->wx + (i / rows) * cw;
-+ cy = m->wy + (i % rows) * ch;
-+ /* adjust height/width of last row/column's windows */
-+ ah = ((i + 1) % rows == 0) ? m->wh - ch * rows : 0;
-+ aw = (i >= rows * (cols - 1)) ? m->ww - cw * cols : 0;
-+ resize(c, cx, cy, cw - 2 * c->bw + aw, ch - 2 * c->bw + ah,
False);
-+ i++;
-+ }
-+}
-+
diff --git a/dwm.suckless.org/patches/dwm-5.8.2-monocle_count.diff
b/dwm.suckless.org/patches/dwm-5.8.2-monocle_count.diff
deleted file mode 100644
index 7744ce6..0000000
--- a/dwm.suckless.org/patches/dwm-5.8.2-monocle_count.diff
+++ /dev/null
@@ -1,52 +0,0 @@
-diff -r -U5 dwm-5.8.2/dwm.c dwm-5.8.2_monocle_count/dwm.c
---- dwm-5.8.2/dwm.c 2010-06-04 12:39:15.000000000 +0200
-+++ dwm-5.8.2_monocle_count/dwm.c 2010-06-15 15:52:51.000000000 +0200
-@@ -684,10 +684,12 @@
- void
- drawbar(Monitor *m) {
- int x;
- unsigned int i, occ = 0, urg = 0;
- unsigned long *col;
-+ unsigned int a= 0, s= 0;
-+ char posbuf[10];
- Client *c;
-
- for(c = m->clients; c; c = c->next) {
- occ |= c->tags;
- if(c->isurgent)
-@@ -704,10 +706,22 @@
- }
- dc.w = blw = TEXTW(m->ltsymbol);
- drawtext(m->ltsymbol, dc.norm, False);
- dc.x += dc.w;
- x = dc.x;
-+ if(m->lt[m->sellt]->arrange == monocle){
-+ for(c= nexttiled(m->clients), a= 0, s= 0; c; c=
nexttiled(c->next), a++)
-+ if(c == m->stack)
-+ s= a;
-+ if(!s && a)
-+ s= a;
-+ snprintf(posbuf, LENGTH(posbuf), "[%d/%d]", s, a);
-+ dc.w= TEXTW(posbuf);
-+ drawtext(posbuf, dc.norm, False);
-+ x= dc.x + dc.w;
-+ }
-+
- if(m == selmon) { /* status is only drawn on selected monitor */
- dc.w = TEXTW(stext);
- dc.x = m->ww - dc.w;
- if(dc.x < x) {
- dc.x = x;
-@@ -1184,12 +1198,10 @@
- Client *c;
-
- for(c = m->clients; c; c = c->next)
- if(ISVISIBLE(c))
- n++;
-- if(n > 0) /* override layout symbol */
-- snprintf(m->ltsymbol, sizeof m->ltsymbol, "[%d]", n);
- for(c = nexttiled(m->clients); c; c = nexttiled(c->next))
- resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw,
False);
- }
-
- void
diff --git a/dwm.suckless.org/patches/dwm-5.8.2-statusallmons.diff
b/dwm.suckless.org/patches/dwm-5.8.2-statusallmons.diff
deleted file mode 100644
index 587035b..0000000
--- a/dwm.suckless.org/patches/dwm-5.8.2-statusallmons.diff
+++ /dev/null
@@ -1,39 +0,0 @@
---- ../dwm-5.8.2/dwm.c 2011-03-18 09:51:10.000000000 +0100
-+++ ./dwm.c 2011-03-18 09:52:15.000000000 +0100
-@@ -700,17 +700,13 @@ drawbar(Monitor *m) {
- drawtext(m->ltsymbol, dc.norm, False);
- dc.x += dc.w;
- x = dc.x;
-- if(m == selmon) { /* status is only drawn on selected monitor */
-- dc.w = TEXTW(stext);
-- dc.x = m->ww - dc.w;
-- if(dc.x < x) {
-- dc.x = x;
-- dc.w = m->ww - x;
-- }
-- drawtext(stext, dc.norm, False);
-+ dc.w = TEXTW(stext);
-+ dc.x = m->ww - dc.w;
-+ if(dc.x < x) {
-+ dc.x = x;
-+ dc.w = m->ww - x;
- }
-- else
-- dc.x = m->ww;
-+ drawtext(stext, dc.norm, False);
- if((dc.w = dc.x - x) > bh) {
- dc.x = x;
- if(m->sel) {
-@@ -1917,9 +1913,11 @@ updatetitle(Client *c) {
-
- void
- updatestatus(void) {
-+ Monitor* m;
- if(!gettextprop(root, XA_WM_NAME, stext, sizeof(stext)))
- strcpy(stext, "dwm-"VERSION);
-- drawbar(selmon);
-+ for(m = mons; m; m = m->next)
-+ drawbar(m);
- }
-
- void
diff --git a/dwm.suckless.org/patches/dwm-5.9-combo.diff
b/dwm.suckless.org/patches/dwm-5.9-combo.diff
deleted file mode 100644
index bf3827b..0000000
--- a/dwm.suckless.org/patches/dwm-5.9-combo.diff
+++ /dev/null
@@ -1,72 +0,0 @@
-diff -r c361034c5a1c dwm.c
---- a/dwm.c Sat Sep 11 19:00:18 2010 +0000
-+++ b/dwm.c Thu Nov 25 22:54:04 2010 -0800
-@@ -243,6 +243,11 @@
- static int xerrorstart(Display *dpy, XErrorEvent *ee);
- static void zoom(const Arg *arg);
-
-+static void keyrelease(XEvent *e);
-+static void combotag(const Arg *arg);
-+static void comboview(const Arg *arg);
-+
-+
- /* variables */
- static const char broken[] = "broken";
- static char stext[256];
-@@ -253,6 +258,7 @@
- static unsigned int numlockmask = 0;
- static void (*handler[LASTEvent]) (XEvent *) = {
- [ButtonPress] = buttonpress,
-+ [ButtonRelease] = keyrelease,
- [ClientMessage] = clientmessage,
- [ConfigureRequest] = configurerequest,
- [ConfigureNotify] = configurenotify,
-@@ -260,6 +266,7 @@
- [EnterNotify] = enternotify,
- [Expose] = expose,
- [FocusIn] = focusin,
-+ [KeyRelease] = keyrelease,
- [KeyPress] = keypress,
- [MappingNotify] = mappingnotify,
- [MapRequest] = maprequest,
-@@ -282,6 +289,40 @@
- struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; };
-
- /* function implementations */
-+static int combo = 0;
-+
-+void
-+keyrelease(XEvent *e) {
-+ combo = 0;
-+}
-+
-+void
-+combotag(const Arg *arg) {
-+ if(selmon->sel && arg->ui & TAGMASK) {
-+ if (combo) {
-+ selmon->sel->tags |= arg->ui & TAGMASK;
-+ } else {
-+ combo = 1;
-+ selmon->sel->tags = arg->ui & TAGMASK;
-+ }
-+ arrange(selmon);
-+ }
-+}
-+
-+void
-+comboview(const Arg *arg) {
-+ unsigned newtags = arg->ui & TAGMASK;
-+ if (combo) {
-+ selmon->tagset[selmon->seltags] |= newtags;
-+ } else {
-+ selmon->seltags ^= 1; /*toggle tagset*/
-+ combo = 1;
-+ if (newtags)
-+ selmon->tagset[selmon->seltags] = newtags;
-+ }
-+ arrange(selmon);
-+}
-+
- void
- applyrules(Client *c) {
- const char *class, *instance;
diff --git a/dwm.suckless.org/patches/dwm-5.9-pwkl.diff
b/dwm.suckless.org/patches/dwm-5.9-pwkl.diff
deleted file mode 100644
index 3d16f0f..0000000
--- a/dwm.suckless.org/patches/dwm-5.9-pwkl.diff
+++ /dev/null
@@ -1,61 +0,0 @@
-diff -r 406003e3a01f dwm.c
---- a/dwm.c Mon Sep 27 07:53:44 2010 +0000
-+++ b/dwm.c Wed Oct 13 21:16:04 2010 +0300
-@@ -36,6 +36,7 @@
- #include <X11/Xlib.h>
- #include <X11/Xproto.h>
- #include <X11/Xutil.h>
-+#include <X11/XKBlib.h>
- #ifdef XINERAMA
- #include <X11/extensions/Xinerama.h>
- #endif /* XINERAMA */
-@@ -93,6 +94,7 @@
- Client *snext;
- Monitor *mon;
- Window win;
-+ unsigned char kbdgrp;
- };
-
- typedef struct {
-@@ -821,6 +823,7 @@
- selmon = c->mon;
- if(c->isurgent)
- clearurgent(c);
-+ XkbLockGroup (dpy, XkbUseCoreKbd, c->kbdgrp);
- detachstack(c);
- attachstack(c);
- grabbuttons(c, True);
-@@ -1092,6 +1095,7 @@
- Client *c, *t = NULL;
- Window trans = None;
- XWindowChanges wc;
-+ XkbStateRec kbd_state;
-
- if(!(c = malloc(sizeof(Client))))
- die("fatal: could not malloc() %u bytes
", sizeof(Client));
-@@ -1146,6 +1150,8 @@
- XMapWindow(dpy, c->win);
- setclientstate(c, NormalState);
- arrange(c->mon);
-+ XkbGetState (dpy, XkbUseCoreKbd, &kbd_state);
-+ c->kbdgrp = kbd_state.group;
- }
-
- void
-@@ -1700,12 +1706,16 @@
-
- void
- unfocus(Client *c, Bool setfocus) {
-+ XkbStateRec kbd_state;
-+
- if(!c)
- return;
- grabbuttons(c, False);
- XSetWindowBorder(dpy, c->win, dc.norm[ColBorder]);
- if(setfocus)
- XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
-+ XkbGetState (dpy, XkbUseCoreKbd, &kbd_state);
-+ c->kbdgrp = kbd_state.group;
- }
-
- void
diff --git a/dwm.suckless.org/patches/dwm-5.9-statuscolors.diff
b/dwm.suckless.org/patches/dwm-5.9-statuscolors.diff
deleted file mode 100644
index 1c2c3b4..0000000
--- a/dwm.suckless.org/patches/dwm-5.9-statuscolors.diff
+++ /dev/null
@@ -1,236 +0,0 @@
-diff -up dwm-5.9/config.def.h dwm-5.9-colors/config.def.h
---- dwm-5.9/config.def.h 2011-07-10 16:24:25.000000000 -0400
-+++ dwm-5.9-colors/config.def.h 2011-08-18 02:02:47.033830823 -0400
-@@ -1,13 +1,16 @@
- /* See LICENSE file for copyright and license details. */
-
- /* appearance */
-+#define NUMCOLORS 4 // need at least 3
-+static const char colors[NUMCOLORS][ColLast][8] = {
-+ // border foreground background
-+ { "#cccccc", "#000000", "#cccccc" }, // 0 = normal
-+ { "#0066ff", "#ffffff", "#0066ff" }, // 1 = selected
-+ { "#0066ff", "#0066ff", "#ffffff" }, // 2 = urgent/warning
-+ { "#ff0000", "#ffffff", "#ff0000" }, // 3 = error
-+ // add more here
-+};
- static const char font[] =
"-*-terminus-medium-r-*-*-16-*-*-*-*-*-*-*";
--static const char normbordercolor[] = "#cccccc";
--static const char normbgcolor[] = "#cccccc";
--static const char normfgcolor[] = "#000000";
--static const char selbordercolor[] = "#0066ff";
--static const char selbgcolor[] = "#0066ff";
--static const char selfgcolor[] = "#ffffff";
- static const unsigned int borderpx = 1; /* border pixel of windows */
- static const unsigned int snap = 32; /* snap pixel */
- static const Bool showbar = True; /* False means no bar */
-@@ -45,7 +48,7 @@ static const Layout layouts[] = {
- #define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
-
- /* commands */
--static const char *dmenucmd[] = { "dmenu_run", "-fn", font, "-nb",
normbgcolor, "-nf", normfgcolor, "-sb", selbgcolor, "-sf", selfgcolor, NULL };
-+static const char *dmenucmd[] = { "dmenu_run", "-fn", font, "-nb",
colors[0][ColBG], "-nf", colors[0][ColFG],"-sb", colors[1][ColBG], "-sf",
colors[1][ColFG], NULL };
- static const char *termcmd[] = { "uxterm", NULL };
-
- static Key keys[] = {
-Only in dwm-5.9: config.h
-Only in dwm-5.9: dwm
-diff -up dwm-5.9/dwm.c dwm-5.9-colors/dwm.c
---- dwm-5.9/dwm.c 2011-07-10 16:24:25.000000000 -0400
-+++ dwm-5.9-colors/dwm.c 2011-08-18 02:07:20.788935100 -0400
-@@ -48,6 +48,7 @@
- #define LENGTH(X) (sizeof X / sizeof X[0])
- #define MAX(A, B) ((A) > (B) ? (A) : (B))
- #define MIN(A, B) ((A) < (B) ? (A) : (B))
-+#define MAXCOLORS 8
- #define MOUSEMASK (BUTTONMASK|PointerMotionMask)
- #define WIDTH(X) ((X)->w + 2 * (X)->bw)
- #define HEIGHT(X) ((X)->h + 2 * (X)->bw)
-@@ -97,9 +98,8 @@ struct Client {
-
- typedef struct {
- int x, y, w, h;
-- unsigned long norm[ColLast];
-- unsigned long sel[ColLast];
-- Drawable drawable;
-+ unsigned long colors[MAXCOLORS][ColLast];
-+ Drawable drawable;
- GC gc;
- struct {
- int ascent;
-@@ -175,8 +175,9 @@ static void die(const char *errstr, ...)
- static Monitor *dirtomon(int dir);
- static void drawbar(Monitor *m);
- static void drawbars(void);
--static void drawsquare(Bool filled, Bool empty, Bool invert, unsigned long
col[ColLast]);
--static void drawtext(const char *text, unsigned long col[ColLast], Bool
invert);
-+static void drawcoloredtext(char *text);
-+static void drawsquare(Bool filled, Bool empty, unsigned long col[ColLast]);
-+static void drawtext(const char *text, unsigned long col[ColLast], Bool pad);
- static void enternotify(XEvent *e);
- static void expose(XEvent *e);
- static void focus(Client *c);
-@@ -736,14 +737,13 @@ drawbar(Monitor *m) {
- dc.x = 0;
- for(i = 0; i < LENGTH(tags); i++) {
- dc.w = TEXTW(tags[i]);
-- col = m->tagset[m->seltags] & 1 << i ? dc.sel : dc.norm;
-- drawtext(tags[i], col, urg & 1 << i);
-- drawsquare(m == selmon && selmon->sel && selmon->sel->tags & 1
<< i,
-- occ & 1 << i, urg & 1 << i, col);
-+ col = dc.colors[ (m->tagset[m->seltags] & 1 << i ? 1:(urg & 1
<< i ? 2:0))];
-+ drawtext(tags[i], col, True);
-+ drawsquare(m == selmon && selmon->sel && selmon->sel->tags & 1
<< i, occ & 1 << i, col);
- dc.x += dc.w;
- }
- dc.w = blw = TEXTW(m->ltsymbol);
-- drawtext(m->ltsymbol, dc.norm, False);
-+ drawtext(m->ltsymbol, dc.colors[0], True);
- dc.x += dc.w;
- x = dc.x;
- if(m == selmon) { /* status is only drawn on selected monitor */
-@@ -753,19 +753,19 @@ drawbar(Monitor *m) {
- dc.x = x;
- dc.w = m->ww - x;
- }
-- drawtext(stext, dc.norm, False);
-+ drawcoloredtext(stext);
- }
- else
- dc.x = m->ww;
- if((dc.w = dc.x - x) > bh) {
- dc.x = x;
- if(m->sel) {
-- col = m == selmon ? dc.sel : dc.norm;
-- drawtext(m->sel->name, col, False);
-- drawsquare(m->sel->isfixed, m->sel->isfloating, False,
col);
-+ col = m == selmon ? dc.colors[1] : dc.colors[0];
-+ drawtext(m->sel->name, col, True);
-+ drawsquare(m->sel->isfixed, m->sel->isfloating, col);
- }
- else
-- drawtext(NULL, dc.norm, False);
-+ drawtext(NULL, dc.colors[0], False);
- }
- XCopyArea(dpy, dc.drawable, m->barwin, dc.gc, 0, 0, m->ww, bh, 0, 0);
- XSync(dpy, False);
-@@ -780,10 +780,39 @@ drawbars(void) {
- }
-
- void
--drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]) {
-- int x;
-+drawcoloredtext(char *text) {
-+ Bool first=True;
-+ char *buf = text, *ptr = buf, c = 1;
-+ unsigned long *col = dc.colors[0];
-+ int i, ox = dc.x;
-+
-+ while( *ptr ) {
-+ for( i = 0; *ptr < 0 || *ptr > NUMCOLORS; i++, ptr++);
-+ if( !*ptr ) break;
-+ c=*ptr;
-+ *ptr=0;
-+ if( i ) {
-+ dc.w = selmon->ww - dc.x;
-+ drawtext(buf, col, first);
-+ dc.x += textnw(buf, i) + textnw(&c,1);
-+ if( first ) dc.x += ( dc.font.ascent + dc.font.descent
) / 2;
-+ first = False;
-+ } else if( first ) {
-+ ox = dc.x += textnw(&c,1);
-+ }
-+ *ptr = c;
-+ col = dc.colors[ c-1 ];
-+ buf = ++ptr;
-+ }
-+ if( !first ) dc.x-=(dc.font.ascent+dc.font.descent)/2;
-+ drawtext(buf, col, True);
-+ dc.x = ox;
-+}
-
-- XSetForeground(dpy, dc.gc, col[invert ? ColBG : ColFG]);
-+void
-+drawsquare(Bool filled, Bool empty, unsigned long col[ColLast]) {
-+ int x;
-+ XSetForeground(dpy, dc.gc, col[ ColFG ]);
- x = (dc.font.ascent + dc.font.descent + 2) / 4;
- if(filled)
- XFillRectangle(dpy, dc.drawable, dc.gc, dc.x+1, dc.y+1, x+1,
x+1);
-@@ -792,17 +821,17 @@ drawsquare(Bool filled, Bool empty, Bool
- }
-
- void
--drawtext(const char *text, unsigned long col[ColLast], Bool invert) {
-+drawtext(const char *text, unsigned long col[ColLast], Bool pad) {
- char buf[256];
- int i, x, y, h, len, olen;
-
-- XSetForeground(dpy, dc.gc, col[invert ? ColFG : ColBG]);
-+ XSetForeground(dpy, dc.gc, col[ ColBG ]);
- XFillRectangle(dpy, dc.drawable, dc.gc, dc.x, dc.y, dc.w, dc.h);
- if(!text)
- return;
- olen = strlen(text);
-- h = dc.font.ascent + dc.font.descent;
-- y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent;
-+ h = pad ? (dc.font.ascent + dc.font.descent) : 0;
-+ y = dc.y + ((dc.h + dc.font.ascent - dc.font.descent) / 2);
- x = dc.x + (h / 2);
- /* shorten text if necessary */
- for(len = MIN(olen, sizeof buf); len && textnw(text, len) > dc.w - h;
len--);
-@@ -811,7 +840,7 @@ drawtext(const char *text, unsigned long
- memcpy(buf, text, len);
- if(len < olen)
- for(i = len; i && i > len - 3; buf[--i] = '.');
-- XSetForeground(dpy, dc.gc, col[invert ? ColBG : ColFG]);
-+ XSetForeground(dpy, dc.gc, col[ ColFG ]);
- if(dc.font.set)
- XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf,
len);
- else
-@@ -861,7 +890,7 @@ focus(Client *c) {
- detachstack(c);
- attachstack(c);
- grabbuttons(c, True);
-- XSetWindowBorder(dpy, c->win, dc.sel[ColBorder]);
-+ XSetWindowBorder(dpy, c->win, dc.colors[1][ColBorder]);
- setfocus(c);
- }
- else
-@@ -1137,7 +1166,7 @@ manage(Window w, XWindowAttributes *wa)
- }
- wc.border_width = c->bw;
- XConfigureWindow(dpy, w, CWBorderWidth, &wc);
-- XSetWindowBorder(dpy, w, dc.norm[ColBorder]);
-+ XSetWindowBorder(dpy, w, dc.colors[0][ColBorder]);
- configure(c); /* propagates border_width, if size doesn't change */
- updatesizehints(c);
- updatewmhints(c);
-@@ -1550,12 +1579,11 @@ setup(void) {
- cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing);
- cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur);
- /* init appearance */
-- dc.norm[ColBorder] = getcolor(normbordercolor);
-- dc.norm[ColBG] = getcolor(normbgcolor);
-- dc.norm[ColFG] = getcolor(normfgcolor);
-- dc.sel[ColBorder] = getcolor(selbordercolor);
-- dc.sel[ColBG] = getcolor(selbgcolor);
-- dc.sel[ColFG] = getcolor(selfgcolor);
-+ for(int i=0; i<NUMCOLORS; i++) {
-+ dc.colors[i][ColBorder] = getcolor( colors[i][ColBorder] );
-+ dc.colors[i][ColFG] = getcolor( colors[i][ColFG] );
-+ dc.colors[i][ColBG] = getcolor( colors[i][ColBG] );
-+ }
- dc.drawable = XCreatePixmap(dpy, root, DisplayWidth(dpy, screen), bh,
DefaultDepth(dpy, screen));
- dc.gc = XCreateGC(dpy, root, 0, NULL);
- XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
-@@ -1716,7 +1744,7 @@ unfocus(Client *c, Bool setfocus) {
- if(!c)
- return;
- grabbuttons(c, False);
-- XSetWindowBorder(dpy, c->win, dc.norm[ColBorder]);
-+ XSetWindowBorder(dpy, c->win, dc.colors[0][ColBorder]);
- if(setfocus)
- XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
- }
-Only in dwm-5.9: dwm.o
diff --git a/dwm.suckless.org/patches/dwm-5.9-uselessgap.diff
b/dwm.suckless.org/patches/dwm-5.9-uselessgap.diff
deleted file mode 100644
index 5f2afa9..0000000
--- a/dwm.suckless.org/patches/dwm-5.9-uselessgap.diff
+++ /dev/null
@@ -1,45 +0,0 @@
-diff -r 23b71491e149 config.def.h
---- a/config.def.h Thu Dec 02 10:16:47 2010 +0000
-+++ b/config.def.h Fri Jan 07 08:50:42 2011 +0100
-@@ -9,6 +9,7 @@
- static const char selbgcolor[] = "#0066ff";
- static const char selfgcolor[] = "#ffffff";
- static const unsigned int borderpx = 1; /* border pixel of windows */
-+static const unsigned int gappx = 6; /* gap pixel between windows
*/
- static const unsigned int snap = 32; /* snap pixel */
- static const Bool showbar = True; /* False means no bar */
- static const Bool topbar = True; /* False means bottom bar */
-diff -r 23b71491e149 dwm.c
---- a/dwm.c Thu Dec 02 10:16:47 2010 +0000
-+++ b/dwm.c Fri Jan 07 08:50:42 2011 +0100
-@@ -273,6 +273,8 @@
- static DC dc;
- static Monitor *mons = NULL, *selmon = NULL;
- static Window root;
-+static int globalborder ;
-+static int globalborder ;
-
- /* configuration, allows nested code to access above variables */
- #include "config.h"
-@@ -1329,11 +1331,17 @@
- void
- resizeclient(Client *c, int x, int y, int w, int h) {
- XWindowChanges wc;
-+
-+ if(c->isfloating || selmon->lt[selmon->sellt]->arrange == NULL) {
globalborder = 0 ; }
-+ else {
-+ if (selmon->lt[selmon->sellt]->arrange == monocle) {
globalborder = 0 - borderpx ; }
-+ else { globalborder = gappx ; }
-+ }
-
-- c->oldx = c->x; c->x = wc.x = x;
-- c->oldy = c->y; c->y = wc.y = y;
-- c->oldw = c->w; c->w = wc.width = w;
-- c->oldh = c->h; c->h = wc.height = h;
-+ c->oldx = c->x; c->x = wc.x = x + globalborder ;
-+ c->oldy = c->y; c->y = wc.y = y + globalborder ;
-+ c->oldw = c->w; c->w = wc.width = w - 2 * globalborder ;
-+ c->oldh = c->h; c->h = wc.height = h - 2 * globalborder ;
- wc.border_width = c->bw;
- XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth,
&wc);
- configure(c);
diff --git a/dwm.suckless.org/patches/dwm-5.9-warp.diff
b/dwm.suckless.org/patches/dwm-5.9-warp.diff
deleted file mode 100644
index 085806b..0000000
--- a/dwm.suckless.org/patches/dwm-5.9-warp.diff
+++ /dev/null
@@ -1,55 +0,0 @@
-diff -r cfcfa05033e3 dwm.c
---- a/dwm.c Fri Oct 28 23:45:12 2011 +0100
-+++ b/dwm.c Fri Oct 28 18:43:14 2011 -0700
-@@ -240,6 +240,7 @@
- static void updatetitle(Client *c);
- static void updatewmhints(Client *c);
- static void view(const Arg *arg);
-+static void warp(const Client *c);
- static Client *wintoclient(Window w);
- static Monitor *wintomon(Window w);
- static int xerror(Display *dpy, XErrorEvent *ee);
-@@ -898,6 +899,7 @@
- unfocus(selmon->sel, True);
- selmon = m;
- focus(NULL);
-+ warp(selmon->sel);
- }
-
- void
-@@ -1418,6 +1420,8 @@
- }
- XSync(dpy, False);
- while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
-+ if (m == selmon && (m->tagset[m->seltags] & m->sel->tags))
-+ warp(m->sel);
- }
-
- void
-@@ -1994,6 +1998,26 @@
- arrange(selmon);
- }
-
-+void
-+warp(const Client *c) {
-+ Window dummy;
-+ int x, y, di;
-+ unsigned int dui;
-+
-+ if (!c) {
-+ XWarpPointer(dpy, None, root, 0, 0, 0, 0, selmon->wx +
selmon->ww / 2, selmon->wy + selmon->wh/2);
-+ return;
-+ }
-+
-+ XQueryPointer(dpy, root, &dummy, &dummy, &x, &y, &di, &di, &dui);
-+
-+ if((x > c->x && y > c->y && x < c->x + c->w && y < c->y + c->h) ||
-+ (y > c->mon->by && y < c->mon->by + bh))
-+ return;
-+
-+ XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w / 2, c->h / 2);
-+}
-+
- Client *
- wintoclient(Window w) {
- Client *c;
diff --git a/dwm.suckless.org/patches/dwm-6.0-attachabove.diff
b/dwm.suckless.org/patches/dwm-6.0-attachabove.diff
deleted file mode 100644
index 7ee956d..0000000
--- a/dwm.suckless.org/patches/dwm-6.0-attachabove.diff
+++ /dev/null
@@ -1,63 +0,0 @@
-Author: Jan Christoph Ebersbach <[email protected]>
-URL: http://dwm.suckless.org/patches/attachabove
-attachabove makes new clients attach above the selected client (instead of
-always becoming the new master) – basically how Xmonad does it.
-
-diff -r ec4baab78314 dwm.c
---- a/dwm.c Mon Dec 19 15:38:30 2011 +0100
-+++ b/dwm.c Fri Apr 06 08:23:34 2012 +0200
-@@ -160,6 +160,7 @@
- static void arrange(Monitor *m);
- static void arrangemon(Monitor *m);
- static void attach(Client *c);
-+static void attachabove(Client *c);
- static void attachstack(Client *c);
- static void buttonpress(XEvent *e);
- static void checkotherwm(void);
-@@ -418,6 +419,19 @@
- }
-
- void
-+attachabove(Client *c) {
-+ if(c->mon->sel == NULL || c->mon->sel == c->mon->clients ||
c->mon->sel->isfloating) {
-+ attach(c);
-+ return;
-+ }
-+
-+ Client *at;
-+ for(at = c->mon->clients; at->next != c->mon->sel; at = at->next);
-+ c->next = at->next;
-+ at->next = c;
-+}
-+
-+void
- attachstack(Client *c) {
- c->snext = c->mon->stack;
- c->mon->stack = c;
-@@ -1155,7 +1169,7 @@
- c->isfloating = c->oldstate = trans != None || c->isfixed;
- if(c->isfloating)
- XRaiseWindow(dpy, c->win);
-- attach(c);
-+ attachabove(c);
- attachstack(c);
- XMoveResizeWindow(dpy, c->win, c->x + 2 * sw, c->y, c->w, c->h); /*
some windows require this */
- setclientstate(c, NormalState);
-@@ -1480,7 +1494,7 @@
- detachstack(c);
- c->mon = m;
- c->tags = m->tagset[m->seltags]; /* assign tags of target monitor */
-- attach(c);
-+ attachabove(c);
- attachstack(c);
- focus(NULL);
- arrange(NULL);
-@@ -1900,7 +1914,7 @@
- m->clients = c->next;
- detachstack(c);
- c->mon = mons;
-- attach(c);
-+ attachabove(c);
- attachstack(c);
- }
- if(m == selmon)
diff --git a/dwm.suckless.org/patches/dwm-6.0-attachaside.diff
b/dwm.suckless.org/patches/dwm-6.0-attachaside.diff
deleted file mode 100644
index 352d5ec..0000000
--- a/dwm.suckless.org/patches/dwm-6.0-attachaside.diff
+++ /dev/null
@@ -1,57 +0,0 @@
-diff --git a/dwm.c b/dwm.c
-index 1bbb4b3..b2aa1c8 100644
---- a/dwm.c
-+++ b/dwm.c
-@@ -146,6 +146,7 @@ static Bool applysizehints(Client *c, int *x, int *y, int
*w, int *h, Bool inter
- static void arrange(Monitor *m);
- static void arrangemon(Monitor *m);
- static void attach(Client *c);
-+static void attachaside(Client *c);
- static void attachstack(Client *c);
- static void buttonpress(XEvent *e);
- static void checkotherwm(void);
-@@ -401,6 +402,17 @@ attach(Client *c) {
- }
-
- void
-+attachaside(Client *c) {
-+ Client *at = nexttiled(c->mon->clients);
-+ if(c->mon->sel == NULL || c->mon->sel->isfloating || !at) {
-+ attach(c);
-+ return;
-+ }
-+ c->next = at->next;
-+ at->next = c;
-+}
-+
-+void
- attachstack(Client *c) {
- c->snext = c->mon->stack;
- c->mon->stack = c;
-@@ -1051,7 +1063,7 @@ manage(Window w, XWindowAttributes *wa) {
- c->isfloating = c->oldstate = trans != None || c->isfixed;
- if(c->isfloating)
- XRaiseWindow(dpy, c->win);
-- attach(c);
-+ attachaside(c);
- attachstack(c);
- XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32,
PropModeAppend,
- (unsigned char *) &(c->win), 1);
-@@ -1383,7 +1395,7 @@ sendmon(Client *c, Monitor *m) {
- detachstack(c);
- c->mon = m;
- c->tags = m->tagset[m->seltags]; /* assign tags of target monitor */
-- attach(c);
-+ attachaside(c);
- attachstack(c);
- focus(NULL);
- arrange(NULL);
-@@ -1818,7 +1830,7 @@ updategeom(void) {
- m->clients = c->next;
- detachstack(c);
- c->mon = mons;
-- attach(c);
-+ attachaside(c);
- attachstack(c);
- }
- if(m == selmon)
diff --git a/dwm.suckless.org/patches/dwm-6.0-autoresize.diff
b/dwm.suckless.org/patches/dwm-6.0-autoresize.diff
deleted file mode 100644
index 4bb3104..0000000
--- a/dwm.suckless.org/patches/dwm-6.0-autoresize.diff
+++ /dev/null
@@ -1,35 +0,0 @@
-diff --git a/dwm.c b/dwm.c
-index e3bf6f4..8a2c646 100644
---- a/dwm.c
-+++ b/dwm.c
-@@ -91,7 +91,7 @@ struct Client {
- int basew, baseh, incw, inch, maxw, maxh, minw, minh;
- int bw, oldbw;
- unsigned int tags;
-- Bool isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen;
-+ Bool isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen,
needresize;
- Client *next;
- Client *snext;
- Monitor *mon;
-@@ -633,6 +633,8 @@ configurerequest(XEvent *e) {
- configure(c);
- if(ISVISIBLE(c))
- XMoveResizeWindow(dpy, c->win, c->x, c->y,
c->w, c->h);
-+ else
-+ c->needresize=1;
- }
- else
- configure(c);
-@@ -1663,6 +1665,12 @@ showhide(Client *c) {
- return;
- if(ISVISIBLE(c)) { /* show clients top down */
- XMoveWindow(dpy, c->win, c->x, c->y);
-+ if(c->needresize) {
-+ c->needresize=0;
-+ XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w,
c->h);
-+ } else {
-+ XMoveWindow(dpy, c->win, c->x, c->y);
-+ }
- if((!c->mon->lt[c->mon->sellt]->arrange || c->isfloating) &&
!c->isfullscreen)
- resize(c, c->x, c->y, c->w, c->h, False);
- showhide(c->snext);
diff --git a/dwm.suckless.org/patches/dwm-6.0-bottommargin.diff
b/dwm.suckless.org/patches/dwm-6.0-bottommargin.diff
deleted file mode 100644
index 99ee0b0..0000000
--- a/dwm.suckless.org/patches/dwm-6.0-bottommargin.diff
+++ /dev/null
@@ -1,26 +0,0 @@
-diff --git a/config.def.h b/config.def.h
-index 77ff358..203d354 100644
---- a/config.def.h
-+++ b/config.def.h
-@@ -12,6 +12,7 @@ static const unsigned int borderpx = 1; /* border
pixel of windows */
- static const unsigned int snap = 32; /* snap pixel */
- static const Bool showbar = True; /* False means no bar */
- static const Bool topbar = True; /* False means bottom bar */
-+static const unsigned int bottommargin = 20; /* Margin at the bottom for
another bar */
-
- /* tagging */
- static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
-diff --git a/dwm.c b/dwm.c
-index 1d78655..cece290 100644
---- a/dwm.c
-+++ b/dwm.c
-@@ -1841,6 +1841,9 @@ updatebarpos(Monitor *m) {
- m->wh = m->mh;
- if(m->showbar) {
- m->wh -= bh;
-+ m->wh -= marginbottom;
-+ if(!m->topbar)
-+ m->wy += marginbottom;
- m->by = m->topbar ? m->wy : m->wy + m->wh;
- m->wy = m->topbar ? m->wy + bh : m->wy;
- }
diff --git a/dwm.suckless.org/patches/dwm-6.0-combo.diff
b/dwm.suckless.org/patches/dwm-6.0-combo.diff
deleted file mode 100644
index dfd8b4b..0000000
--- a/dwm.suckless.org/patches/dwm-6.0-combo.diff
+++ /dev/null
@@ -1,74 +0,0 @@
-diff -r c361034c5a1c dwm.c
---- a/dwm.c Sat Sep 11 19:00:18 2010 +0000
-+++ b/dwm.c Thu Nov 25 22:54:04 2010 -0800
-@@ -243,6 +243,11 @@
- static int xerrorstart(Display *dpy, XErrorEvent *ee);
- static void zoom(const Arg *arg);
-
-+static void keyrelease(XEvent *e);
-+static void combotag(const Arg *arg);
-+static void comboview(const Arg *arg);
-+
-+
- /* variables */
- static const char broken[] = "broken";
- static char stext[256];
-@@ -253,6 +258,7 @@
- static unsigned int numlockmask = 0;
- static void (*handler[LASTEvent]) (XEvent *) = {
- [ButtonPress] = buttonpress,
-+ [ButtonRelease] = keyrelease,
- [ClientMessage] = clientmessage,
- [ConfigureRequest] = configurerequest,
- [ConfigureNotify] = configurenotify,
-@@ -260,6 +266,7 @@
- [EnterNotify] = enternotify,
- [Expose] = expose,
- [FocusIn] = focusin,
-+ [KeyRelease] = keyrelease,
- [KeyPress] = keypress,
- [MappingNotify] = mappingnotify,
- [MapRequest] = maprequest,
-@@ -282,6 +289,42 @@
- struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; };
-
- /* function implementations */
-+static int combo = 0;
-+
-+void
-+keyrelease(XEvent *e) {
-+ combo = 0;
-+}
-+
-+void
-+combotag(const Arg *arg) {
-+ if(selmon->sel && arg->ui & TAGMASK) {
-+ if (combo) {
-+ selmon->sel->tags |= arg->ui & TAGMASK;
-+ } else {
-+ combo = 1;
-+ selmon->sel->tags = arg->ui & TAGMASK;
-+ }
-+ focus(NULL);
-+ arrange(selmon);
-+ }
-+}
-+
-+void
-+comboview(const Arg *arg) {
-+ unsigned newtags = arg->ui & TAGMASK;
-+ if (combo) {
-+ selmon->tagset[selmon->seltags] |= newtags;
-+ } else {
-+ selmon->seltags ^= 1; /*toggle tagset*/
-+ combo = 1;
-+ if (newtags)
-+ selmon->tagset[selmon->seltags] = newtags;
-+ }
-+ focus(NULL);
-+ arrange(selmon);
-+}
-+
- void
- applyrules(Client *c) {
- const char *class, *instance;
diff --git a/dwm.suckless.org/patches/dwm-6.0-dualstatus.diff
b/dwm.suckless.org/patches/dwm-6.0-dualstatus.diff
deleted file mode 100644
index bc140fe..0000000
--- a/dwm.suckless.org/patches/dwm-6.0-dualstatus.diff
+++ /dev/null
@@ -1,158 +0,0 @@
-diff --git a/config.def.h b/config.def.h
-index 77ff358..ea9758d 100644
---- a/config.def.h
-+++ b/config.def.h
-@@ -12,6 +12,7 @@ static const unsigned int borderpx = 1; /* border
pixel of windows */
- static const unsigned int snap = 32; /* snap pixel */
- static const Bool showbar = True; /* False means no bar */
- static const Bool topbar = True; /* False means bottom bar */
-+static const Bool extrabar = True; /* False means no extra bar */
-
- /* tagging */
- static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
-@@ -54,6 +55,7 @@ static Key keys[] = {
- { MODKEY, XK_p, spawn, {.v =
dmenucmd } },
- { MODKEY|ShiftMask, XK_Return, spawn, {.v =
termcmd } },
- { MODKEY, XK_b, togglebar, {0} },
-+ { MODKEY, XK_b, toggleextrabar, {0} },
- { MODKEY, XK_j, focusstack, {.i = +1 } },
- { MODKEY, XK_k, focusstack, {.i = -1 } },
- { MODKEY, XK_i, incnmaster, {.i = +1 } },
-diff --git a/dwm.c b/dwm.c
-index 1d78655..b322ff5 100644
---- a/dwm.c
-+++ b/dwm.c
-@@ -154,6 +154,13 @@ typedef struct {
- int monitor;
- } Rule;
-
-+typedef struct {
-+ int y;
-+ Bool show;
-+ Window win;
-+ char text[256];
-+} Bar;
-+
- /* function declarations */
- static void applyrules(Client *c);
- static Bool applysizehints(Client *c, int *x, int *y, int *w, int *h, Bool
interact);
-@@ -229,6 +236,7 @@ static void tagmon(const Arg *arg);
- static int textnw(const char *text, unsigned int len);
- static void tile(Monitor *);
- static void togglebar(const Arg *arg);
-+static void toggleextrabar(const Arg *arg);
- static void togglefloating(const Arg *arg);
- static void toggletag(const Arg *arg);
- static void toggleview(const Arg *arg);
-@@ -283,6 +291,7 @@ static Display *dpy;
- static DC dc;
- static Monitor *mons = NULL, *selmon = NULL;
- static Window root;
-+static Bar eb;
-
- /* configuration, allows nested code to access above variables */
- #include "config.h"
-@@ -495,6 +504,8 @@ cleanup(void) {
- XFreeCursor(dpy, cursor[CurNormal]);
- XFreeCursor(dpy, cursor[CurResize]);
- XFreeCursor(dpy, cursor[CurMove]);
-+ XUnmapWindow(dpy, eb.win);
-+ XDestroyWindow(dpy, eb.win);
- while(mons)
- cleanupmon(mons);
- XSync(dpy, False);
-@@ -584,6 +595,7 @@ configurenotify(XEvent *e) {
- updatebars();
- for(m = mons; m; m = m->next)
- XMoveResizeWindow(dpy, m->barwin, m->wx, m->by,
m->ww, bh);
-+ XMoveResizeWindow(dpy, eb.win, mons->wx, eb.y,
mons->ww, bh);
- focus(NULL);
- arrange(NULL);
- }
-@@ -762,6 +774,10 @@ drawbar(Monitor *m) {
- drawtext(NULL, dc.norm, False);
- }
- XCopyArea(dpy, dc.drawable, m->barwin, dc.gc, 0, 0, m->ww, bh, 0, 0);
-+ dc.x = 0;
-+ dc.w = m->ww;
-+ drawtext(eb.text, dc.norm, False);
-+ XCopyArea(dpy, dc.drawable, eb.win, dc.gc, 0, 0, m->ww, bh, 0, 0);
- XSync(dpy, False);
- }
-
-@@ -1594,6 +1610,7 @@ setup(void) {
- sw = DisplayWidth(dpy, screen);
- sh = DisplayHeight(dpy, screen);
- bh = dc.h = dc.font.height + 2;
-+ eb.show = extrabar;
- updategeom();
- /* init atoms */
- wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);
-@@ -1736,6 +1753,16 @@ togglebar(const Arg *arg) {
- }
-
- void
-+toggleextrabar(const Arg *arg) {
-+ if(selmon == mons) {
-+ eb.show = !eb.show;
-+ updatebarpos(selmon);
-+ XMoveResizeWindow(dpy, eb.win, selmon->wx, eb.y, selmon->ww,
bh);
-+ arrange(selmon);
-+ }
-+}
-+
-+void
- togglefloating(const Arg *arg) {
- if(!selmon->sel)
- return;
-@@ -1833,6 +1860,13 @@ updatebars(void) {
- XDefineCursor(dpy, m->barwin, cursor[CurNormal]);
- XMapRaised(dpy, m->barwin);
- }
-+ if(!eb.win) {
-+ eb.win = XCreateWindow(dpy, root, mons->wx, eb.y, mons->ww, bh,
0, DefaultDepth(dpy, screen),
-+ CopyFromParent, DefaultVisual(dpy,
screen),
-+
CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa);
-+ XDefineCursor(dpy, eb.win, cursor[CurNormal]);
-+ XMapRaised(dpy, eb.win);
-+ }
- }
-
- void
-@@ -1846,6 +1880,13 @@ updatebarpos(Monitor *m) {
- }
- else
- m->by = -bh;
-+ if(m == mons && eb.show) {
-+ m->wh -= bh;
-+ eb.y = topbar ? m->wy + m->wh : m->wy;
-+ m->wy = m->topbar ? m->wy : m->wy + bh;
-+ }
-+ else
-+ eb.y = -bh;
- }
-
- Bool
-@@ -2005,8 +2046,21 @@ updatetitle(Client *c) {
-
- void
- updatestatus(void) {
-- if(!gettextprop(root, XA_WM_NAME, stext, sizeof(stext)))
-+ char text[512];
-+ if(!gettextprop(root, XA_WM_NAME, text, sizeof(text))) {
- strcpy(stext, "dwm-"VERSION);
-+ eb.text[0] = '