Since the default rule matching does substring comparisons, using the
fixed string "broken" as a fallback value can complicate or make
unambiguous matching impossible, so this change makes various fallback
strings for unset properties configurable via config.h.
---
config.def.h | 5 +++++
dwm.c | 7 +++----
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git config.def.h config.def.h
index a9ac303..8dfc8b1 100644
--- config.def.h
+++ config.def.h
@@ -43,6 +43,11 @@ static const Layout layouts[] = {
{ "[M]", monocle },
};
+/* Fallback strings for unset window properties. */
+static const char unset_instance_fallback[] = "broken";
+static const char unset_class_fallback[] = "broken";
+static const char unset_name_fallback[] = "broken";
+
/* key definitions */
#define MODKEY Mod1Mask
#define TAGKEYS(KEY,TAG) \
diff --git dwm.c dwm.c
index c98678d..9735e32 100644
--- dwm.c
+++ dwm.c
@@ -235,7 +235,6 @@ static int xerrorstart(Display *dpy, XErrorEvent *ee);
static void zoom(const Arg *arg);
/* variables */
-static const char broken[] = "broken";
static char stext[256];
static int screen;
static int sw, sh; /* X display screen geometry width, height */
@@ -288,8 +287,8 @@ applyrules(Client *c)
c->isfloating = 0;
c->tags = 0;
XGetClassHint(dpy, c->win, &ch);
- class = ch.res_class ? ch.res_class : broken;
- instance = ch.res_name ? ch.res_name : broken;
+ class = ch.res_class ? ch.res_class : unset_class_fallback;
+ instance = ch.res_name ? ch.res_name : unset_instance_fallback;
for (i = 0; i < LENGTH(rules); i++) {
r = &rules[i];
@@ -1998,7 +1997,7 @@ updatetitle(Client *c)
if (!gettextprop(c->win, netatom[NetWMName], c->name, sizeof c->name))
gettextprop(c->win, XA_WM_NAME, c->name, sizeof c->name);
if (c->name[0] == '\0') /* hack to mark broken clients */
- strcpy(c->name, broken);
+ strcpy(c->name, unset_name_fallback);
}
void