wmii

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

commit 391f88e730b55dccd9d3bfc8d73840af7af87e47
parent 7819b8686147ed8e274ddcce52624b63afc6d554
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Fri, 14 Apr 2006 12:03:44 +0200

implemented /def/colmode containing the default column mode


Diffstat:
cmd/wm/area.c | 1+
cmd/wm/fs.c | 57++++++++++++++++++++++++++++++++++++++++++---------------
cmd/wm/wm.c | 1+
cmd/wm/wm.h | 4+++-
4 files changed, 47 insertions(+), 16 deletions(-)

diff --git a/cmd/wm/area.c b/cmd/wm/area.c @@ -26,6 +26,7 @@ create_area(View *v) a->id = id++; a->rect = rect; a->rect.height = rect.height - brect.height; + a->mode = def.colmode; if(v->area.size > 1) a->rect.width = rect.width / (v->area.size - 1); cext_vattach(vector_of_areas(&v->area), a); diff --git a/cmd/wm/fs.c b/cmd/wm/fs.c @@ -40,6 +40,8 @@ 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 * /tags FsFtags * /bar/ FsDbars * /bar/lab/ FsDbar @@ -223,9 +225,14 @@ qid2name(Qid *qid) return "class"; break; case FsFmode: - if(i1 == -1 || i2 == -1) + if((qid->dir_type == FsDarea) && (i1 == -1 || i2 == -1)) + return nil; + else if(qid->dir_type != FsDdef) return nil; - return "mode"; + if(qid->dir_type == FsDdef) + return "colmode"; + else + return "mode"; break; case FsFevent: return "event"; break; default: return nil; break; @@ -276,7 +283,7 @@ name2type(char *name, unsigned char dir_type) return FsFrules; if(!strncmp(name, "data", 5)) return FsFdata; - if(!strncmp(name, "mode", 5)) + if(!strncmp(name, "mode", 5) || !strncmp(name, "colmode", 8)) return FsFmode; if((dir_type == FsDbars) && bar_of_name(name)) return FsDbar; @@ -398,7 +405,9 @@ mkqid(Qid *dir, char *wname, Qid *new) goto Mkfile; break; case FsFmode: - if(dir_i1 == -1 || dir_i2 == -1 || dir_type != FsDarea) + if((dir_type == FsDarea) && (dir_i1 == -1 || dir_i2 == -1)) + return -1; + if(dir_type != FsDdef) return -1; goto Mkfile; break; @@ -546,8 +555,14 @@ type2stat(Stat *stat, char *wname, Qid *dir) IXP_DMREAD | IXP_DMWRITE); break; case FsFmode: - return mkstat(stat, dir, wname, strlen(str_of_column_mode(view.data[dir_i1]->area.data[dir_i2]->mode)), - IXP_DMREAD | IXP_DMWRITE); + { + int i; + if(dir_type == FsDarea) + i = view.data[dir_i1]->area.data[dir_i2]->mode; + else + i = def.colmode; + return mkstat(stat, dir, wname, strlen(str_of_column_mode(i)), IXP_DMREAD | IXP_DMWRITE); + } break; case FsFcolors: case FsFselcolors: @@ -976,6 +991,8 @@ xread(IXPConn *c, Fcall *fcall) p = ixp_enc_stat(p, &stat); fcall->count += type2stat(&stat, "grabmod", &m->qid); p = ixp_enc_stat(p, &stat); + fcall->count += type2stat(&stat, "colmode", &m->qid); + p = ixp_enc_stat(p, &stat); break; case FsDview: if(view.size) { @@ -1153,9 +1170,14 @@ xread(IXPConn *c, Fcall *fcall) memcpy(p, def.font, fcall->count); break; case FsFmode: - if(!i2) - return Enofile; - snprintf(buf, sizeof(buf), "%s", str_of_column_mode(view.data[i1]->area.data[i2]->mode)); + if(m->qid.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)); fcall->count = strlen(buf); memcpy(p, buf, fcall->count); break; @@ -1378,18 +1400,23 @@ xwrite(IXPConn *c, Fcall *fcall) resize_bar(); break; case FsFmode: - if(!i2) - return Enofile; if(fcall->count > sizeof(buf)) return Ebadvalue; + if(m->qid.dir_type == FsDarea && !i2) + return Enofile; memcpy(buf, fcall->data, fcall->count); buf[fcall->count] = 0; if((i = column_mode_of_str(buf)) == -1) return Ebadvalue; - view.data[i1]->area.data[i2]->mode = i; - arrange_column(view.data[i1]->area.data[i2], True); - if(view.data[i1]->area.data[i2]->frame.size == 1) /* little hack to update the tagbar */ - draw_client(view.data[i1]->area.data[i2]->frame.data[view.data[i1]->area.data[i2]->sel]->client); + if(m->qid.dir_type == FsDarea) { + view.data[i1]->area.data[i2]->mode = i; + arrange_column(view.data[i1]->area.data[i2], True); + if(view.data[i1]->area.data[i2]->frame.size == 1) /* little hack to update the tagbar */ + draw_client(view.data[i1]->area.data[i2] + ->frame.data[view.data[i1]->area.data[i2]->sel]->client); + } + else + def.colmode = i; break; case FsFevent: if(fcall->count > sizeof(buf)) diff --git a/cmd/wm/wm.c b/cmd/wm/wm.c @@ -292,6 +292,7 @@ main(int argc, char *argv[]) def.keyssz = 0; def.font = strdup(BLITZ_FONT); def.border = 2; + def.colmode = Coldefault; cext_strlcpy(def.selcolor, BLITZ_SELCOLORS, sizeof(def.selcolor)); blitz_loadcolor(dpy, screen, def.selcolor, &def.sel); cext_strlcpy(def.normcolor, BLITZ_NORMCOLORS, sizeof(def.normcolor)); diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h @@ -60,7 +60,8 @@ enum { FsFrules, FsFclass, FsFmode, - FsFtags + FsFtags, + FsFcolw }; enum { MIN_COLWIDTH = 64 }; @@ -152,6 +153,7 @@ typedef struct { unsigned int rulessz; char grabmod[5]; unsigned long mod; + int colmode; } Default; /* global variables */