Introduction
Introduction Statistics Contact Development Disclaimer Help
tswitched to regexp matching for Rules - dwm - [fork] customized build of dwm, …
git clone git://src.adamsgaard.dk/dwm
Log
Files
Refs
README
LICENSE
---
commit e21d93b7bd5d34f31bc09a576b7d449df5b68c07
parent f504aea13289c7fd25d499d2582558d4e311bfbf
Author: [email protected] <unknown>
Date: Fri, 4 Aug 2006 14:40:32 +0200
switched to regexp matching for Rules
Diffstat:
M config.arg.h | 11 +++++------
M config.default.h | 7 +++----
M config.mk | 8 ++++----
M dwm.h | 1 +
M main.c | 1 +
M tag.c | 68 +++++++++++++++++++++++------…
6 files changed, 65 insertions(+), 31 deletions(-)
---
diff --git a/config.arg.h b/config.arg.h
t@@ -52,11 +52,10 @@ static Key key[] = { \
};
#define RULES \
- const unsigned int two[] = { 2 }; \
static Rule rule[] = { \
- /* class:instance tags isfloat */ \
- { "Firefox.*", two, False }, \
- { "Gimp.*", NULL, True}, \
- { "MPlayer.*", NULL, True}, \
- { "Acroread.*", NULL, True}, \
+ /* class:instance regex tags regex isfloat */ \
+ { "Firefox.*", "net", False }, \
+ { "Gimp.*", NULL, True}, \
+ { "MPlayer.*", NULL, True}, \
+ { "Acroread.*", NULL, True}, \
};
diff --git a/config.default.h b/config.default.h
t@@ -47,9 +47,8 @@ static Key key[] = { \
};
#define RULES \
- const unsigned int two[] = { 2 }; \
static Rule rule[] = { \
- /* class:instance tags isfloat */ \
- { "Firefox.*", two, False }, \
- { "Gimp.*", NULL, True}, \
+ /* class:instance regex tags regex isfloat */ \
+ { "Firefox.*", "2", False }, \
+ { "Gimp.*", NULL, True}, \
};
diff --git a/config.mk b/config.mk
t@@ -15,10 +15,10 @@ INCS = -I/usr/lib -I${X11INC}
LIBS = -L/usr/lib -lc -L${X11LIB} -lX11
# flags
-CFLAGS = -O3 ${INCS} -DVERSION=\"${VERSION}\"
-LDFLAGS = ${LIBS}
-#CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\"
-#LDFLAGS = -g ${LIBS}
+#CFLAGS = -O3 ${INCS} -DVERSION=\"${VERSION}\"
+#LDFLAGS = ${LIBS}
+CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\"
+LDFLAGS = -g ${LIBS}
# compiler
CC = cc
diff --git a/dwm.h b/dwm.h
t@@ -121,6 +121,7 @@ extern int xerror(Display *dsply, XErrorEvent *ee);
extern void appendtag(Arg *arg);
extern void dofloat(Arg *arg);
extern void dotile(Arg *arg);
+extern void initrregs();
extern Client *getnext(Client *c);
extern Client *getprev(Client *c);
extern void replacetag(Arg *arg);
diff --git a/main.c b/main.c
t@@ -210,6 +210,7 @@ main(int argc, char *argv[])
cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur);
grabkeys();
+ initrregs();
for(ntags = 0; tags[ntags]; ntags++);
diff --git a/tag.c b/tag.c
t@@ -5,21 +5,31 @@
#include "dwm.h"
#include <regex.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <X11/Xutil.h>
-/* static */
typedef struct {
- const char *pattern;
- const unsigned int *tags;
+ const char *clpattern;
+ const char *tpattern;
Bool isfloat;
} Rule;
+typedef struct {
+ regex_t *clregex;
+ regex_t *tregex;
+} RReg;
+
+/* static */
+
TAGS
RULES
+static RReg *rreg = NULL;
+static unsigned int len = 0;
+
void (*arrange)(Arg *) = DEFMODE;
/* extern */
t@@ -138,6 +148,35 @@ getprev(Client *c)
}
void
+initrregs()
+{
+ unsigned int i;
+ regex_t *reg;
+
+ if(rreg)
+ return;
+ len = sizeof(rule) / sizeof(rule[0]);
+ rreg = emallocz(len * sizeof(RReg));
+
+ for(i = 0; i < len; i++) {
+ if(rule[i].clpattern) {
+ reg = emallocz(sizeof(regex_t));
+ if(regcomp(reg, rule[i].clpattern, 0))
+ free(reg);
+ else
+ rreg[i].clregex = reg;
+ }
+ if(rule[i].tpattern) {
+ reg = emallocz(sizeof(regex_t));
+ if(regcomp(reg, rule[i].tpattern, 0))
+ free(reg);
+ else
+ rreg[i].tregex = reg;
+ }
+ }
+}
+
+void
replacetag(Arg *arg)
{
int i;
t@@ -154,9 +193,7 @@ void
settags(Client *c)
{
char classinst[256];
- static unsigned int len = sizeof(rule) / sizeof(rule[0]);
- unsigned int i, j, n;
- regex_t regex;
+ unsigned int i, j;
regmatch_t tmp;
Bool matched = False;
XClassHint ch;
t@@ -165,19 +202,16 @@ settags(Client *c)
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)) {
- n = rule[i].tags ?
- sizeof(rule[i].tags) / sizeof(…
- matched = n != 0;
- for(j = 0; j < n; j++)
- c->tags[rule[i].tags[j]] = Tru…
- c->isfloat = rule[i].isfloat;
+ for(i = 0; !matched && i < len; i++)
+ if(rreg[i].clregex && !regexec(rreg[i].clregex, classi…
+ c->isfloat = rule[i].isfloat;
+ for(j = 0; rreg[i].tregex && j < ntags; j++) {
+ if(!regexec(rreg[i].tregex, tags[j], 1…
+ matched = True;
+ c->tags[j] = True;
+ }
}
- regfree(&regex);
}
- }
if(ch.res_class)
XFree(ch.res_class);
if(ch.res_name)
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.