summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--cwmrc.51
-rw-r--r--group.c14
2 files changed, 9 insertions, 6 deletions
diff --git a/cwmrc.5 b/cwmrc.5
index 39ab221..4e17dbd 100644
--- a/cwmrc.5
+++ b/cwmrc.5
@@ -50,6 +50,7 @@ or if their name and class properties match
 and
 .Ar windowclass ,
 respectively.
+The more specific last match wins.
 .Ar group
 is a number between 0 and 9.
 If
diff --git a/group.c b/group.c
index fd507be..dd96575 100644
--- a/group.c
+++ b/group.c
@@ -412,7 +412,7 @@ group_autogroup(struct client_ctx *cc)
 	struct screen_ctx	*sc = cc->sc;
 	struct autogroupwin	*aw;
 	struct group_ctx	*gc;
-	int			 no = -1;
+	int			 no = -1, both_match = 0;
 	long			*grpno;
 
 	if (cc->app_class == NULL || cc->app_name == NULL)
@@ -429,11 +429,13 @@ group_autogroup(struct client_ctx *cc)
 		XFree(grpno);
 	} else {
 		TAILQ_FOREACH(aw, &Conf.autogroupq, entry) {
-			if (strcmp(aw->class, cc->app_class) == 0 &&
-			    (aw->name == NULL ||
-			    strcmp(aw->name, cc->app_name) == 0)) {
-				no = aw->num;
-				break;
+			if (strcmp(aw->class, cc->app_class) == 0) {
+				if ((aw->name != NULL) &&
+				    (strcmp(aw->name, cc->app_name) == 0)) {
+					no = aw->num;
+					both_match = 1;
+				} else if (aw->name == NULL && !both_match)
+					no = aw->num;
 			}
 		}
 	}