I think I sent this out a long time ago but never followed up on it. :(
According to cwmrc(5) you can configure an autogroup like so:
autogroup group windowname,windowclass
However, parse.y doesn't actually accept that syntax; you have to put
quotes around windowname,windowclass so they're recognized as a single
string value, and then conf_autogroup() splits them apart later.
This diff adds support to parse.y for recognizing the literal syntax
as specified in the man page without the need for quotes (while
retaining support for the quoted values for backwards compatibility).
For example, today you have to put this in your .cwmrc:
autogroup 2 "Navigator,Firefox"
But with this diff you could use the following instead:
autogroup 2 Navigator,Firefox
Index: calmwm.h
===================================================================
RCS file: /work/cvsroot/xenocara/app/cwm/calmwm.h,v
retrieving revision 1.259
diff -p -u -r1.259 calmwm.h
--- calmwm.h 8 Feb 2014 02:49:30 -0000 1.259
+++ calmwm.h 23 Apr 2014 17:32:02 -0000
@@ -500,7 +500,8 @@ void menuq_clear(struct menu_q *);
int parse_config(const char *, struct conf *);
void conf_atoms(void);
-void conf_autogroup(struct conf *, int, const char *);
+void conf_autogroup(struct conf *, int, const char *,
+ const char *);
int conf_bind_kbd(struct conf *, const char *,
const char *);
int conf_bind_mouse(struct conf *, const char *,
Index: conf.c
===================================================================
RCS file: /work/cvsroot/xenocara/app/cwm/conf.c,v
retrieving revision 1.173
diff -p -u -r1.173 conf.c
--- conf.c 21 Apr 2014 12:52:14 -0000 1.173
+++ conf.c 23 Apr 2014 17:18:11 -0000
@@ -78,19 +78,31 @@ conf_cmd_remove(struct conf *c, const ch
}
}
void
-conf_autogroup(struct conf *c, int no, const char *val)
+conf_autogroup(struct conf *c, int no, const char *class, const char *name)
{
struct autogroupwin *aw;
char *p;
+ const char *tmp;
aw = xcalloc(1, sizeof(*aw));
- if ((p = strchr(val, ',')) == NULL) {
- aw->name = NULL;
- aw->class = xstrdup(val);
+ if ((p = strchr(class, ',')) == NULL) {
+ if (name == NULL)
+ aw->name = NULL;
+ else
+ aw->name = xstrdup(name);
+
+ aw->class = xstrdup(class);
} else {
+ tmp = class;
+
*(p++) = '\0';
- aw->name = xstrdup(val);
+
+ if (name == NULL)
+ aw->name = xstrdup(tmp);
+ else
+ aw->name = xstrdup(name);
+
aw->class = xstrdup(p);
}
aw->num = no;
Index: parse.y
===================================================================
RCS file: /work/cvsroot/xenocara/app/cwm/parse.y,v
retrieving revision 1.58
diff -p -u -r1.58 parse.y
--- parse.y 30 Jan 2014 22:41:16 -0000 1.58
+++ parse.y 23 Apr 2014 17:10:49 -0000
@@ -152,8 +152,18 @@ main : FONTNAME STRING {
yyerror("invalid autogroup: %d", $2);
YYERROR;
}
- conf_autogroup(conf, $2, $3);
+ conf_autogroup(conf, $2, $3, NULL);
free($3);
+ }
+ | AUTOGROUP NUMBER STRING ',' STRING {
+ if ($2 < 0 || $2 > 9) {
+ free($3);
+ yyerror("invalid autogroup: %d", $2);
+ YYERROR;
+ }
+ conf_autogroup(conf, $2, $5, $3);
+ free($3);
+ free($5);
}
| IGNORE STRING {
conf_ignore(conf, $2);