snprintf(buf, sizeof buf, "%s:%s:%s",
ch.res_class ? ch.res_class : "",
ch.res_name ? ch.res_name : "", c->name);
- for(i = 0; i < NRULES; i++)
+ for(i = 0; i < LENGTH(rules); i++)
if(regs[i].propregex && !regexec(regs[i].propregex, buf, 1, &tmp, 0)) {
c->isfloating = rules[i].isfloating;
- for(j = 0; regs[i].tagregex && j < NTAGS; j++) {
+ for(j = 0; regs[i].tagregex && j < LENGTH(tags); j++) {
if(!regexec(regs[i].tagregex, tags[j], 1, &tmp, 0)) {
matched = True;
c->tags[j] = True;
if(barwin == ev->window) {
x = 0;
- for(i = 0; i < NTAGS; i++) {
+ for(i = 0; i < LENGTH(tags); i++) {
x += textw(tags[i]);
if(ev->x < x) {
if(ev->button == Button1) {
movemouse(c);
}
else if(ev->button == Button2) {
- if((floating != layout->arrange) && !c->isfixed && c->isfloating)
+ if((floating != layout->arrange) && c->isfloating)
togglefloating(NULL);
else
zoom(NULL);
if(regs)
return;
- regs = emallocz(NRULES * sizeof(Regs));
- for(i = 0; i < NRULES; i++) {
+ regs = emallocz(LENGTH(rules) * sizeof(Regs));
+ for(i = 0; i < LENGTH(rules); i++) {
if(rules[i].prop) {
reg = emallocz(sizeof(regex_t));
if(regcomp(reg, rules[i].prop, REG_EXTENDED))
int i, x;
dc.x = dc.y = 0;
- for(i = 0; i < NTAGS; i++) {
+ for(i = 0; i < LENGTH(tags); i++) {
dc.w = textw(tags[i]);
if(seltags[i]) {
drawtext(tags[i], dc.sel);
idxoftag(const char *tag) {
unsigned int i;
- for(i = 0; (i < NTAGS) && (tags[i] != tag); i++);
- return (i < NTAGS) ? i : 0;
+ for(i = 0; (i < LENGTH(tags)) && (tags[i] != tag); i++);
+ return (i < LENGTH(tags)) ? i : 0;
}
void
isvisible(Client *c) {
unsigned int i;
- for(i = 0; i < NTAGS; i++)
+ for(i = 0; i < LENGTH(tags); i++)
if(c->tags[i] && seltags[i])
return True;
return False;
if(!e) { /* grabkeys */
XUngrabKey(dpy, AnyKey, AnyModifier, root);
- for(i = 0; i < NKEYS; i++) {
+ for(i = 0; i < LENGTH(keys); i++) {
code = XKeysymToKeycode(dpy, keys[i].keysym);
XGrabKey(dpy, code, keys[i].mod, root, True,
GrabModeAsync, GrabModeAsync);
}
ev = &e->xkey;
keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0);
- for(i = 0; i < NKEYS; i++)
+ for(i = 0; i < LENGTH(keys); i++)
if(keysym == keys[i].keysym
&& CLEANMASK(keys[i].mod) == CLEANMASK(ev->state))
{
void
run(void) {
- char *p;
- int r, xfd;
fd_set rd;
+ int xfd;
XEvent ev;
/* main event loop, also reads status text from stdin */
XSync(dpy, False);
xfd = ConnectionNumber(dpy);
readin = True;
+ stext[sizeof stext - 1] = '\0'; /* 0-terminator is never touched */
while(running) {
FD_ZERO(&rd);
if(readin)
eprint("select failed\n");
}
if(FD_ISSET(STDIN_FILENO, &rd)) {
- switch(r = read(STDIN_FILENO, stext, sizeof stext - 1)) {
- case -1:
+ if(stext == fgets(stext, sizeof stext - 1, stdin))
+ stext[strlen(stext) - 1] = '\0'; /* remove tailing '\n' */
+ else
strncpy(stext, strerror(errno), sizeof stext - 1);
- stext[sizeof stext - 1] = '\0';
- readin = False;
- break;
- case 0:
- strncpy(stext, "EOF", 4);
- readin = False;
- break;
- default:
- for(stext[r] = '\0', p = stext + strlen(stext) - 1; p >= stext && *p == '\n'; *p-- = '\0');
- for(; p >= stext && *p != '\n'; --p);
- if(p > stext)
- strncpy(stext, p + 1, sizeof stext);
- }
drawbar();
}
while(XPending(dpy)) {
unsigned int i;
if(!arg) {
- if(++layout == &layouts[NLAYOUTS])
+ if(++layout == &layouts[LENGTH(layouts)])
layout = &layouts[0];
}
else {
- for(i = 0; i < NLAYOUTS; i++)
+ for(i = 0; i < LENGTH(layouts); i++)
if(!strcmp(arg, layouts[i].symbol))
break;
- if(i == NLAYOUTS)
+ if(i == LENGTH(layouts))
return;
layout = &layouts[i];
}
/* init layouts */
mwfact = MWFACT;
layout = &layouts[0];
- for(blw = i = 0; i < NLAYOUTS; i++) {
+ for(blw = i = 0; i < LENGTH(layouts); i++) {
j = textw(layouts[i].symbol);
if(j > blw)
blw = j;
if(!sel)
return;
- for(i = 0; i < NTAGS; i++)
+ for(i = 0; i < LENGTH(tags); i++)
sel->tags[i] = (NULL == arg);
sel->tags[idxoftag(arg)] = True;
arrange();
else
nh = th - 2 * c->border;
}
- resize(c, nx, ny, nw, nh, True);
- if((c->h < bh) || (c->h > nh) || (c->w < bh) || (c->w > nw))
+ resize(c, nx, ny, nw, nh, RESIZEHINTS);
+ if((RESIZEHINTS) && ((c->h < bh) || (c->h > nh) || (c->w < bh) || (c->w > nw)))
/* client doesn't accept size constraints */
resize(c, nx, ny, nw, nh, False);
if(n > 1 && th != wah)
return;
i = idxoftag(arg);
sel->tags[i] = !sel->tags[i];
- for(j = 0; j < NTAGS && !sel->tags[j]; j++);
- if(j == NTAGS)
+ for(j = 0; j < LENGTH(tags) && !sel->tags[j]; j++);
+ if(j == LENGTH(tags))
sel->tags[i] = True; /* at least one tag must be enabled */
arrange();
}
i = idxoftag(arg);
seltags[i] = !seltags[i];
- for(j = 0; j < NTAGS && !seltags[j]; j++);
- if(j == NTAGS)
+ for(j = 0; j < LENGTH(tags) && !seltags[j]; j++);
+ if(j == LENGTH(tags))
seltags[i] = True; /* at least one tag must be viewed */
arrange();
}
unsigned int i;
memcpy(prevtags, seltags, sizeof seltags);
- for(i = 0; i < NTAGS; i++)
+ for(i = 0; i < LENGTH(tags); i++)
seltags[i] = (NULL == arg);
seltags[idxoftag(arg)] = True;
arrange();