wmii

git clone git://oldgit.suckless.org/wmii/
Log | Files | Refs | README | LICENSE

commit 15dfca474fa8a7ce75f5d7c80ef3063ad6d32ffe
parent cdc57ca2fdcdf6885877b4cb3273cde969ccc431
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Tue, 30 May 2006 18:28:05 +0200

removed /def/col{width,mode}, added /def/ncol instead, though /def/ncol has no effect atm


Diffstat:
cmd/wm/area.c | 8++------
cmd/wm/fs.c | 124+++++++++++++++++++++++++++++++++++++++++--------------------------------------
cmd/wm/rule.c | 33++++++++++-----------------------
cmd/wm/wm.c | 3++-
cmd/wm/wm.h | 17++++++++++++++---
rc/wmiirc | 2--
6 files changed, 93 insertions(+), 94 deletions(-)

diff --git a/cmd/wm/area.c b/cmd/wm/area.c @@ -21,12 +21,8 @@ create_area(View *v, unsigned int pos) unsigned int w; Area *a = nil; - if(v->area.size > 1) { - if(def.colw) - w = def.colw; - else - w = rect.width / v->area.size - 1; - } + if(v->area.size > 1) + w = rect.width / v->area.size - 1; else w = rect.width; if(w < MIN_COLWIDTH) diff --git a/cmd/wm/fs.c b/cmd/wm/fs.c @@ -41,8 +41,7 @@ enum { WMII_IOUNIT = 2048 }; * /def/rules FsFrules rules * /def/keys FsFkeys keys * /def/grabmod FsFgrabmod grab modifier - * /def/colmode FsFmode column mode - * /def/colwidth FsFcolw column width + * /def/ncol FsFncol column number * /bar/ FsDbars * /bar/lab/ FsDbar * /bar/lab/data FsFdata <arbitrary data which gets displayed> @@ -200,7 +199,7 @@ name_of_qid(Qid wqid[IXP_MAX_WELEM], unsigned short qsel) case FsFselcolors: return "selcolors"; break; case FsFnormcolors: return "normcolors"; break; case FsFfont: return "font"; break; - case FsFcolw: return "colwidth"; break; + case FsFncol: return "ncol"; break; case FsFgrabmod: return "grabmod"; break; case FsFrules: return "rules"; break; case FsFkeys: return "keys"; break; @@ -250,10 +249,7 @@ name_of_qid(Qid wqid[IXP_MAX_WELEM], unsigned short qsel) case FsFmode: if((dir_type == FsDarea) && (i1 == -1 || i2 == -1)) return nil; - if(dir_type == FsDdef) - return "colmode"; - else - return "mode"; + return "mode"; break; case FsFevent: return "event"; break; default: return nil; break; @@ -306,8 +302,8 @@ type_of_name(Qid wqid[IXP_MAX_WELEM], unsigned short qsel, char *name) return FsFnormcolors; if(!strncmp(name, "font", 5)) return FsFfont; - if(!strncmp(name, "colwidth", 9)) - return FsFcolw; + if(!strncmp(name, "ncol", 5)) + return FsFncol; if(!strncmp(name, "grabmod", 8)) return FsFgrabmod; if(!strncmp(name, "keys", 5)) @@ -316,7 +312,7 @@ type_of_name(Qid wqid[IXP_MAX_WELEM], unsigned short qsel, char *name) return FsFrules; if(!strncmp(name, "data", 5)) return FsFdata; - if(!strncmp(name, "mode", 5) || !strncmp(name, "colmode", 8)) + if(!strncmp(name, "mode", 5)) return FsFmode; if((dir_type == FsDbars) && bar_of_name(name)) return FsDbar; @@ -461,7 +457,7 @@ qid_of_name(Qid wqid[IXP_MAX_WELEM], unsigned short qsel, char *name) case FsFborder: case FsFgrabmod: case FsFfont: - case FsFcolw: + case FsFncol: case FsFrules: case FsFselcolors: case FsFnormcolors: @@ -603,15 +599,9 @@ stat_of_name(Stat *stat, char *name, Qid wqid[IXP_MAX_WELEM], unsigned short qse (i1 == bar.size) ? 0 : strlen(bar.data[i1]->data), IXP_DMREAD | IXP_DMWRITE); break; case FsFmode: - { - int i; - if(dir_type == FsDarea) - i = view.data[i1]->area.data[i2]->mode; - else - i = def.colmode; - return pack_stat(stat, wqid, qsel, name, - strlen(str_of_column_mode(i)), IXP_DMREAD | IXP_DMWRITE); - } + return pack_stat(stat, wqid, qsel, name, + strlen(str_of_column_mode(view.data[i1]->area.data[i2]->mode)), + IXP_DMREAD | IXP_DMWRITE); break; case FsFcolors: case FsFselcolors: @@ -624,9 +614,8 @@ stat_of_name(Stat *stat, char *name, Qid wqid[IXP_MAX_WELEM], unsigned short qse case FsFrules: return pack_stat(stat, wqid, qsel, name, def.rules ? strlen(def.rules) : 0, IXP_DMREAD | IXP_DMWRITE); break; - case FsFcolw: - snprintf(buf, sizeof(buf), "%d", def.colw); - return pack_stat(stat, wqid, qsel, name, strlen(buf), IXP_DMREAD | IXP_DMWRITE); + case FsFncol: + return pack_stat(stat, wqid, qsel, name, def.ncol ? strlen(def.ncol) : 0, IXP_DMREAD | IXP_DMWRITE); case FsFfont: return pack_stat(stat, wqid, qsel, name, strlen(def.font), IXP_DMREAD | IXP_DMWRITE); case FsFgrabmod: @@ -965,6 +954,20 @@ xread(IXPConn *c, Fcall *fcall) else if(fcall->count) memcpy(p, def.rules + fcall->offset, fcall->count); break; + case FsFncol: + len = def.ncol ? strlen(def.ncol) : 0; + if(len <= fcall->offset) { + fcall->count = 0; + break; + } + fcall->count = len - fcall->offset; + if(fcall->count > fcall->iounit) { + memcpy(p, def.ncol + fcall->offset, fcall->iounit); + fcall->count = fcall->iounit; + } + else if(fcall->count) + memcpy(p, def.ncol + fcall->offset, fcall->count); + break; default: break; } @@ -1044,9 +1047,7 @@ xread(IXPConn *c, Fcall *fcall) p = ixp_pack_stat(p, &stat); fcall->count += stat_of_name(&stat, "grabmod", m->wqid, m->sel); p = ixp_pack_stat(p, &stat); - fcall->count += stat_of_name(&stat, "colmode", m->wqid, m->sel); - p = ixp_pack_stat(p, &stat); - fcall->count += stat_of_name(&stat, "colwidth", m->wqid, m->sel); + fcall->count += stat_of_name(&stat, "ncol", m->wqid, m->sel); p = ixp_pack_stat(p, &stat); break; case FsDview: @@ -1229,24 +1230,22 @@ xread(IXPConn *c, Fcall *fcall) if((fcall->count = strlen(def.grabmod))) memcpy(p, def.grabmod, fcall->count); break; - case FsFcolw: - snprintf(buf, sizeof(buf), "%d", def.colw); - if((fcall->count = strlen(buf))) - memcpy(p, buf, fcall->count); + case FsFncol: + fcall->count = def.ncol ? strlen(def.ncol) : 0; + if(fcall->count > fcall->iounit) { + memcpy(p, def.ncol, fcall->iounit); + fcall->count = fcall->iounit; + } + else if(fcall->count) + memcpy(p, def.ncol, fcall->count); break; case FsFfont: if((fcall->count = strlen(def.font))) memcpy(p, def.font, fcall->count); break; case FsFmode: - if(dir_type == FsDarea) { - if(!i2) - return Enofile; - i = view.data[i1]->area.data[i2]->mode; - } - else - i = def.colmode; - snprintf(buf, sizeof(buf), "%s", str_of_column_mode(i)); + snprintf(buf, sizeof(buf), "%s", + str_of_column_mode(view.data[i1]->area.data[i2]->mode)); fcall->count = strlen(buf); memcpy(p, buf, fcall->count); break; @@ -1442,6 +1441,20 @@ xwrite(IXPConn *c, Fcall *fcall) memcpy(def.rules + fcall->offset, fcall->data, fcall->count); def.rules[fcall->offset + fcall->count] = 0; break; + case FsFncol: + if(def.ncolsz < fcall->offset + fcall->count + 1) { + def.ncolsz = fcall->offset + fcall->count + 1; + tmp = cext_emallocz(def.ncolsz); + len = def.ncol ? strlen(def.ncol) : 0; + if(len) { + memcpy(tmp, def.ncol, len); + free(def.ncol); + } + def.ncol = tmp; + } + memcpy(def.ncol + fcall->offset, fcall->data, fcall->count); + def.ncol[fcall->offset + fcall->count] = 0; + break; case FsFgeom: if(fcall->count >= sizeof(buf)) return Ebadvalue; @@ -1479,17 +1492,6 @@ xwrite(IXPConn *c, Fcall *fcall) restack_view(view.data[sel]); } break; - case FsFcolw: - if(fcall->count >= sizeof(buf)) - return Ebadvalue; - memcpy(buf, fcall->data, fcall->count); - buf[fcall->count] = 0; - if(sscanf(buf, "%d", &i) != 1) - return Ebadvalue; - if(i && i < MIN_COLWIDTH) - return Ebadvalue; - def.colw = i; - break; case FsFfont: if(def.font) free(def.font); @@ -1507,14 +1509,10 @@ xwrite(IXPConn *c, Fcall *fcall) buf[fcall->count] = 0; if((i = column_mode_of_str(buf)) == -1) return Ebadvalue; - if(dir_type == FsDarea) { - view.data[i1]->area.data[i2]->mode = i; - arrange_column(view.data[i1]->area.data[i2], True); - restack_view(view.data[i1]); - draw_clients(); - } - else - def.colmode = i; + view.data[i1]->area.data[i2]->mode = i; + arrange_column(view.data[i1]->area.data[i2], True); + restack_view(view.data[i1]); + draw_clients(); break; case FsFevent: if(fcall->count >= sizeof(buf)) @@ -1545,8 +1543,16 @@ xclunk(IXPConn *c, Fcall *fcall) type = unpack_type(m->wqid[m->sel].path); if(type == FsFkeys) update_keys(); - else if(type == FsFrules) - update_rules(); + else if(type == FsFrules) { + unsigned int i; + update_rules(&crule, def.rules); + for(i = 0; i < client.size; i++) + apply_rules(client.data[i]); + update_views(); + } + else if(type == FsFncol) { + update_rules(&vrule, def.ncol); + } cext_vdetach(ixp_vector_of_maps(&c->map), m); free(m); fcall->id = RCLUNK; diff --git a/cmd/wm/rule.c b/cmd/wm/rule.c @@ -6,7 +6,6 @@ #include <string.h> #include <stdlib.h> #include <sys/types.h> -#include <regex.h> #include "wm.h" /* basic rule matching language /regex/ -> value @@ -17,14 +16,6 @@ enum { TAGS }; -typedef struct { - regex_t regex; - char values[256]; -} Rule; -VECTOR(RuleVector, Rule *); - -static RuleVector rule; - static Vector * vector_of_rules(RuleVector *rv) { @@ -43,20 +34,19 @@ permit_tag(const char *tag) } void -update_rules() +update_rules(RuleVector *rule, const char *data) { - unsigned int i; int mode = IGNORE; char *p, *r = nil, *v = nil, regex[256], values[256]; - if(!def.rules || !strlen(def.rules)) + if(!data || !strlen(data)) return; - while(rule.size) { - Rule *r = rule.data[0]; - regfree(&r->regex); - cext_vdetach(vector_of_rules(&rule), r); - free(r); + while(rule->size) { + Rule *rul = rule->data[0]; + regfree(&rul->regex); + cext_vdetach(vector_of_rules(rule), rul); + free(rul); } for(p = def.rules; *p; p++) @@ -89,7 +79,7 @@ update_rules() cext_trim(values, " \t/"); if(!regcomp(&rul->regex, regex, 0)) { cext_strlcpy(rul->values, values, sizeof(rul->values)); - cext_vattach(vector_of_rules(&rule), rul); + cext_vattach(vector_of_rules(rule), rul); } else free(rul); @@ -101,9 +91,6 @@ update_rules() } break; } - for(i = 0; i < client.size; i++) - apply_rules(client.data[i]); - update_views(); } void @@ -147,8 +134,8 @@ match(Client *c, const char *prop) unsigned int i; regmatch_t tmpregm; - for(i = 0; i < rule.size; i++) { - Rule *r = rule.data[i]; + for(i = 0; i < crule.size; i++) { + Rule *r = crule.data[i]; if(!regexec(&r->regex, prop, 1, &tmpregm, 0)) if(!strlen(c->tags) || !strncmp(c->tags, "nil", 4)) apply_tags(c, r->values); diff --git a/cmd/wm/wm.c b/cmd/wm/wm.c @@ -295,6 +295,8 @@ main(int argc, char *argv[]) key.size = 0; bar.data = nil; bar.size = 0; + def.ncol = nil; + def.ncolsz = 0; def.rules = nil; def.rulessz = 0; def.keys = nil; @@ -302,7 +304,6 @@ main(int argc, char *argv[]) def.font = strdup(BLITZ_FONT); def.border = 2; def.colmode = Coldefault; - def.colw = 0; cext_strlcpy(def.selcolor, BLITZ_SELCOLORS, sizeof(def.selcolor)); blitz_loadcolor(dpy, &def.sel, screen, def.selcolor); cext_strlcpy(def.normcolor, BLITZ_NORMCOLORS, sizeof(def.normcolor)); diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h @@ -4,6 +4,7 @@ */ #include <stdio.h> +#include <regex.h> #include <X11/Xlib.h> #include <X11/Xutil.h> @@ -70,7 +71,7 @@ enum { FsFmode, FsFtags, FsFindex, - FsFcolw, + FsFncol, FsLast }; @@ -165,7 +166,8 @@ typedef struct { char grabmod[5]; unsigned long mod; int colmode; - unsigned int colw; + char *ncol; + unsigned int ncolsz; } Default; /* global variables */ @@ -173,6 +175,12 @@ VECTOR(ClientVector, Client *); VECTOR(KeyVector, Key *); VECTOR(BarVector, Bar *); +typedef struct { + regex_t regex; + char values[256]; +} Rule; +VECTOR(RuleVector, Rule *); + /* global variables */ ViewVector view; unsigned int sel; @@ -198,6 +206,9 @@ Cursor cursor[CurLast]; unsigned int valid_mask; unsigned int num_lock_mask; void (*handler[LASTEvent]) (XEvent *); +RuleVector crule; +RuleVector vrule; + /* area.c */ Area *create_area(View *v, unsigned int pos); @@ -291,7 +302,7 @@ void snap_move(XRectangle *r, XRectangle *rects, unsigned int num, int snapw, int snaph); /* rule.c */ -void update_rules(); +void update_rules(RuleVector *rule, const char *data); void apply_rules(Client *c); void apply_tags(Client *c, const char *tags); diff --git a/rc/wmiirc b/rc/wmiirc @@ -36,8 +36,6 @@ xwrite /def/border 2 xwrite /def/font $WMII_FONT xwrite /def/selcolors $WMII_SELCOLORS xwrite /def/normcolors $WMII_NORMCOLORS -xwrite /def/colmode default -xwrite /def/colwidth 0 # TAGGING RULES wmiir write /def/rules <<EOF