Introduction
Introduction Statistics Contact Development Disclaimer Help
timplemented regexp matching for rules - dwm - [fork] customized build of dwm, …
git clone git://src.adamsgaard.dk/dwm
Log
Files
Refs
README
LICENSE
---
commit bcaf6a7a0f492c3fafc4baabd2dc06f5191417ee
parent f95eed34b46dfe73f1511703e0a9301c9d8d1952
Author: [email protected] <unknown>
Date: Wed, 19 Jul 2006 17:42:08 +0200
implemented regexp matching for rules
Diffstat:
M client.c | 5 +++--
M dwm.h | 17 -----------------
M event.c | 10 +++++++++-
M tag.c | 40 ++++++++++++++++++++++-------…
4 files changed, 40 insertions(+), 32 deletions(-)
---
diff --git a/client.c b/client.c
t@@ -247,8 +247,9 @@ manage(Window w, XWindowAttributes *wa)
GrabModeAsync, GrabModeSync, None, None);
if(!c->isfloat)
- c->isfloat = trans
- || ((c->maxw == c->minw) && (c->maxh == c->minh));
+ c->isfloat = trans || (c->maxw && c->minw &&
+ (c->maxw == c->minw) && (c->maxh == c->minh));
+
setgeom(c);
settitle(c);
diff --git a/dwm.h b/dwm.h
t@@ -30,8 +30,6 @@ typedef struct Client Client;
typedef enum Corner Corner;
typedef struct DC DC;
typedef struct Fnt Fnt;
-typedef struct Key Key;
-typedef struct Rule Rule;
union Arg {
const char **argv;
t@@ -84,20 +82,6 @@ struct Client {
Window title;
};
-struct Rule {
- const char *class;
- const char *instance;
- char *tags[TLast];
- Bool isfloat;
-};
-
-struct Key {
- unsigned long mod;
- KeySym keysym;
- void (*func)(Arg *arg);
- Arg arg;
-};
-
extern char *tags[TLast], stext[1024];
extern int tsel, screen, sx, sy, sw, sh, bx, by, bw, bh, mw;
extern void (*handler[LASTEvent])(XEvent *);
t@@ -108,7 +92,6 @@ extern Client *clients, *sel;
extern Cursor cursor[CurLast];
extern DC dc;
extern Display *dpy;
-extern Key key[];
extern Window root, barwin;
/* client.c */
diff --git a/event.c b/event.c
t@@ -12,6 +12,14 @@
#define MouseMask (ButtonMask | PointerMotionMask)
/* CUSTOMIZE */
+
+typedef struct {
+ unsigned long mod;
+ KeySym keysym;
+ void (*func)(Arg *arg);
+ Arg arg;
+} Key;
+
const char *browse[] = { "firefox", NULL };
const char *gimp[] = { "gimp", NULL };
const char *term[] = {
t@@ -20,7 +28,7 @@ const char *term[] = {
};
const char *xlock[] = { "xlock", NULL };
-Key key[] = {
+static Key key[] = {
/* modifier key …
{ ControlMask, XK_0, appendtag, …
{ ControlMask, XK_1, appendtag, …
diff --git a/tag.c b/tag.c
t@@ -4,15 +4,25 @@
*/
#include "dwm.h"
+#include <regex.h>
+#include <stdio.h>
#include <string.h>
+#include <sys/types.h>
#include <X11/Xutil.h>
/* static */
+typedef struct {
+ const char *pattern;
+ char *tags[TLast];
+ Bool isfloat;
+} Rule;
+
/* CUSTOMIZE */
static Rule rule[] = {
- /* class instance tags …
- { "Firefox-bin", "firefox-bin", { [Twww] = "www" }, …
+ /* class instance tags is…
+ { "Firefox.*", { [Twww] = "www" }, False…
+ { "Gimp.*", { 0 }, …
};
/* extern */
t@@ -164,10 +174,13 @@ replacetag(Arg *arg)
void
settags(Client *c)
{
- XClassHint ch;
+ char classinst[256];
static unsigned int len = rule ? sizeof(rule) / sizeof(rule[0]) : 0;
unsigned int i, j;
+ regex_t regex;
+ regmatch_t tmp;
Bool matched = False;
+ XClassHint ch;
if(!len) {
c->tags[tsel] = tags[tsel];
t@@ -175,24 +188,27 @@ settags(Client *c)
}
if(XGetClassHint(dpy, c->win, &ch)) {
- if(ch.res_class && ch.res_name) {
- for(i = 0; i < len; i++)
- if(!strncmp(rule[i].class, ch.res_class, sizeo…
- && !strncmp(rule[i].instance, ch.res_n…
- {
- for(j = 0; j < TLast; j++)
+ snprintf(classinst, sizeof(classinst), "%s:%s",
+ ch.res_class ? ch.res_class : "",
+ ch.res_name ? ch.res_name : "");
+ for(i = 0; !matched && i < len; i++) {
+ if(!regcomp(&regex, rule[i].pattern, 0)) {
+ if(!regexec(&regex, classinst, 1, &tmp, 0)) {
+ for(j = 0; j < TLast; j++) {
+ if(rule[i].tags[j])
+ matched = True;
c->tags[j] = rule[i].tags[j];
+ }
c->isfloat = rule[i].isfloat;
- matched = True;
- break;
}
+ regfree(&regex);
+ }
}
if(ch.res_class)
XFree(ch.res_class);
if(ch.res_name)
XFree(ch.res_name);
}
-
if(!matched)
c->tags[tsel] = tags[tsel];
}
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.