wmii

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

commit 5df09bbf3f2a09527cdd42efe63a76f761248747
parent e79751781716b14bf4653aaeba2239a470f21174
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Sun,  5 Mar 2006 20:00:18 +0100

slightly switching to tag mechanism (though several updates still needed)


Diffstat:
cmd/wm/client.c | 11-----------
cmd/wm/fs.c | 99+++++++++----------------------------------------------------------------------
cmd/wm/tag.c | 47++++++++++++++++++++++++++---------------------
cmd/wm/wm.h | 1+
rc/wmiirc | 67++++++++++++++++++++++---------------------------------------------
5 files changed, 60 insertions(+), 165 deletions(-)

diff --git a/cmd/wm/client.c b/cmd/wm/client.c @@ -68,14 +68,6 @@ set_client_state(Client * c, int state) } static void -client_name_event(Client *c) -{ - char buf[256]; - snprintf(buf, sizeof(buf), "CN %s\n", c->name); - write_event(buf); -} - -static void client_focus_event(Client *c) { char buf[256]; @@ -104,7 +96,6 @@ focus_client(Client *c) XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); draw_client(c); XSync(dpy, False); - client_name_event(c); client_focus_event(c); if(i > 0 && f->area->mode == Colstack) arrange_area(f->area); @@ -206,8 +197,6 @@ handle_client_property(Client *c, XPropertyEvent *e) } if(c->frame) draw_client(c); - if(c == sel_client()) - client_name_event(c); break; case XA_WM_TRANSIENT_FOR: XGetTransientForHint(dpy, c->win, &c->trans); diff --git a/cmd/wm/fs.c b/cmd/wm/fs.c @@ -50,8 +50,7 @@ static char Enocommand[] = "command not supported"; * /bar/1/colors FsFcolors <#RRGGBB> <#RRGGBB> <#RRGGBB> * /event FsFevent * /ctl FsFctl command interface (root) - * /ws/ FsDws returns new tag - * /ws/ FsDws tag + * /ws/ FsDws ws * /ws/ctl FsFctl command interface (tag) * /ws/sel/ FsDarea * /ws/float/ FsDarea floating clients in area 0 @@ -156,14 +155,7 @@ qid2name(Qid *qid) case FsDkeys: return "keys"; break; case FsDtags: return "tags"; break; case FsDbar: return "bar"; break; - case FsDws: - if(i1 == -1) - return nil; - if(i1 == sel) - return "sel"; - snprintf(buf, sizeof(buf), "%u", i1); - return buf; - break; + case FsDws: return "ws"; break; case FsDlabel: if(i1 == -1) return nil; @@ -245,18 +237,16 @@ name2type(char *name, unsigned char dir_type) unsigned int i; if(!name || !name[0] || !strncmp(name, "/", 2) || !strncmp(name, "..", 3)) return FsDroot; - if(!strncmp(name, "new", 4)) { - switch(dir_type) { - case FsDroot: return FsDws; break; - case FsDbar: return FsDlabel; break; - } - } + if(!strncmp(name, "new", 4) && (dir_type == FsDbar)) + return FsDlabel; if(!strncmp(name, "tags", 5)) { switch(dir_type) { case FsDroot: return FsDtags; break; case FsDclient: return FsFtags; break; } } + if(!strncmp(name, "ws", 3)) + return FsDws; if(!strncmp(name, "bar", 4)) return FsDbar; if(!strncmp(name, "def", 4)) @@ -301,7 +291,6 @@ name2type(char *name, unsigned char dir_type) dyndir: /*fprintf(stderr, "nametotype: dir_type = %d\n", dir_type);*/ switch(dir_type) { - case FsDroot: return FsDws; break; case FsDbar: return FsDlabel; break; case FsDws: return FsDarea; break; case FsDarea: return FsDclient; break; @@ -332,6 +321,10 @@ mkqid(Qid *dir, char *wname, Qid *new, Bool iswalk) new->type = IXP_QTDIR; new->path = mkqpath(type, 0, 0, 0); break; + case FsDws: + new->type = IXP_QTDIR; + new->path = mkqpath(FsDws, ntag ? tag[sel]->id : 0, 0, 0); + break; case FsDlabel: new->type = IXP_QTDIR; if(!strncmp(wname, "new", 4)) { @@ -347,28 +340,6 @@ mkqid(Qid *dir, char *wname, Qid *new, Bool iswalk) new->path = mkqpath(FsDlabel, label[i]->id, 0, 0); } break; - case FsDws: - new->type = IXP_QTDIR; - if(!strncmp(wname, "new", 4)) { - if(iswalk) { - Tag *p = alloc_tag(wname); - new->path = mkqpath(FsDws, p->id, 0, 0); - } - else - new->path = mkqpath(FsDws, 0, 0, 0); - } - else if(!strncmp(wname, "sel", 4)) { - if(!ntag) - return -1; - new->path = mkqpath(FsDws, tag[sel]->id, 0, 0); - } - else { - i = cext_strtonum(wname, 0, 0xffff, &err); - if(err || (i >= ntag)) - return -1; - new->path = mkqpath(FsDws, tag[i]->id, 0, 0); - } - break; case FsDarea: if(dir_i1 == -1) return -1; @@ -653,7 +624,6 @@ xremove(IXPConn *c, Fcall *fcall) { IXPMap *m = ixp_server_fid2map(c, fcall->fid); unsigned char type; - char *ret; int i1 = 0, i2 = 0, i3 = 0; if(!m) @@ -662,10 +632,6 @@ xremove(IXPConn *c, Fcall *fcall) if((i1 == -1) || (i2 == -1) || (i3 == -1)) return Enofile; switch(type) { - case FsDws: - if((ret = destroy_tag(tag[i1]))) - return ret; - break; case FsDlabel: { Label *l = label[i1]; @@ -717,38 +683,6 @@ xread(IXPConn *c, Fcall *fcall) fcall->count = 0; if(fcall->offset) { switch (type) { - case FsDroot: - /* jump to offset */ - len = type2stat(&stat, "ctl", &m->qid); - len += type2stat(&stat, "event", &m->qid); - len += type2stat(&stat, "def", &m->qid); - len += type2stat(&stat, "keys", &m->qid); - len += type2stat(&stat, "bar", &m->qid); - len += type2stat(&stat, "tags", &m->qid); - len += type2stat(&stat, "new", &m->qid); - for(i = 0; i < ntag; i++) { - if(i == sel) - snprintf(buf, sizeof(buf), "%s", "sel"); - else - snprintf(buf, sizeof(buf), "%u", i); - len += type2stat(&stat, buf, &m->qid); - if(len <= fcall->offset) - continue; - break; - } - /* offset found, proceeding */ - for(; i < ntag; i++) { - if(i == sel) - snprintf(buf, sizeof(buf), "%s", "sel"); - else - snprintf(buf, sizeof(buf), "%u", i); - len = type2stat(&stat, buf, &m->qid); - if(fcall->count + len > fcall->iounit) - break; - fcall->count += len; - p = ixp_enc_stat(p, &stat); - } - break; case FsDkeys: /* jump to offset */ len = 0; @@ -884,19 +818,8 @@ xread(IXPConn *c, Fcall *fcall) p = ixp_enc_stat(p, &stat); fcall->count += type2stat(&stat, "tags", &m->qid); p = ixp_enc_stat(p, &stat); - fcall->count += type2stat(&stat, "new", &m->qid); + fcall->count += type2stat(&stat, "ws", &m->qid); p = ixp_enc_stat(p, &stat); - for(i = 0; i < ntag; i++) { - if(i == sel) - snprintf(buf, sizeof(buf), "%s", "sel"); - else - snprintf(buf, sizeof(buf), "%u", i); - len = type2stat(&stat, buf, &m->qid); - if(fcall->count + len > fcall->iounit) - break; - fcall->count += len; - p = ixp_enc_stat(p, &stat); - } break; case FsDkeys: for(i = 0; i < nkey; i++) { diff --git a/cmd/wm/tag.c b/cmd/wm/tag.c @@ -83,7 +83,7 @@ focus_tag(Tag *t) draw_client(client[i]); } } - snprintf(buf, sizeof(buf), "PN %d\n", sel); + snprintf(buf, sizeof(buf), "WS %s\n", t->name); write_event(buf); XChangeProperty(dpy, root, net_atom[NetSelWS], XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &sel, 1); @@ -133,29 +133,34 @@ tid2index(unsigned short id) void select_tag(char *arg) { - unsigned int new = sel; - const char *err; Client *c; + Tag *t = ctag2tag(arg); + if(!t) + return; + focus_tag(t); + if((c = sel_client_of_tag(t))) + focus_client(c); +} - if(!ntag) - return; - if(!strncmp(arg, "prev", 5)) { - if(new <= 1) - new = ntag; - new--; - } else if(!strncmp(arg, "next", 5)) { - if(new < ntag - 1) - new++; - else - new = 1; - } else { - int idx = cext_strtonum(arg, 0, ntag - 1, &err); - if(idx < ntag) - new = idx; +Tag * +ctag2tag(char *name) +{ + unsigned int i; + Tag *t; + + if(!has_ctag(name)) + return nil; + for(i = 0; i < ntag; i++) { + t = tag[i]; + if(!strncmp(t->name, name, strlen(t->name))) + return t; } - focus_tag(tag[new]); - if((c = sel_client_of_tag(tag[new]))) - focus_client(c); + + t = alloc_tag(name); + for(i = 0; i < nclient; i++) + if(strstr(client[i]->tags, name)) + attach_totag(t, client[i]); + return t; } Bool diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h @@ -293,6 +293,7 @@ void select_tag(char *arg); int tag2index(Tag *t); Bool has_ctag(char *tag); void update_ctags(); +Tag *ctag2tag(char *name); /* wm.c */ void scan_wins(); diff --git a/rc/wmiirc b/rc/wmiirc @@ -32,7 +32,6 @@ xwrite /def/snap 20 xwrite /def/font $WMII_FONT xwrite /def/selcolors $WMII_SELCOLORS xwrite /def/normcolors $WMII_NORMCOLORS -xwrite /1/1/capacity 1 # BAR CONFIGURATION while wmiir remove /bar/0 2>/dev/null @@ -41,7 +40,7 @@ do done xwrite /bar/new/colors $WMII_NORMCOLORS xwrite /bar/new/colors $WMII_SELCOLORS -xwrite /bar/0/data 1 +xwrite /bar/0/data nil xwrite /bar/expand 1 # MISC @@ -57,25 +56,20 @@ done <<EOF $MODKEY-Control-c $MODKEY-Control-w,y $MODKEY-Control-q,y -$MODKEY-Control-r $MODKEY-Control-p $MODKEY-Control-a -$MODKEY-Control-y $MODKEY-t -$MODKEY-n $MODKEY-Return +$MODKEY-Shift-Return $MODKEY-h $MODKEY-l $MODKEY-j $MODKEY-k $MODKEY-Tab -$MODKEY-Shift-m -$MODKEY-Shift-s -$MODKEY-Shift-equal -$MODKEY-Shift-h -$MODKEY-Shift-l -$MODKEY-Shift-Return -$MODKEY-Shift-0 +$MODKEY-n +$MODKEY-m +$MODKEY-s +$MODKEY-equal $MODKEY-Shift-1 $MODKEY-Shift-2 $MODKEY-Shift-3 @@ -94,61 +88,44 @@ do set -- $event type="$1"; shift case "$type" in - PN) + WS) xwrite /bar/0/data "$@";; - LB) - case "$2" in - 1) - xwrite /ctl select prev;; - 3|4) - xwrite /ctl select next;; - 5) - xwrite /ctl select prev;; - esac;; K) case "$1" in $MODKEY-Control-c) - xwrite /sel/sel/sel/ctl kill;; + xwrite /ws/sel/sel/ctl kill;; $MODKEY-Control-w,y) wmiirc &;; $MODKEY-Control-q,y) xwrite /ctl quit;; - $MODKEY-Control-r) - wmiir remove /sel;; $MODKEY-Control-p) extern `wmiimenu </tmp/ns.$USER.$DISPLAY/progs` &;; $MODKEY-Control-a) `proglist CONFPREFIX/wmii-3:$HOME/.wmii-3 | wmiimenu` &;; $MODKEY-t) extern xterm &;; + $MODKEY-m) + xwrite /ws/sel/mode max;; + $MODKEY-s) + xwrite /ws/sel/mode stack;; + $MODKEY-equal) + xwrite /ws/sel/mode equal;; $MODKEY-n) - xwrite /sel/sel/sel/ctl sendtoarea new;; - $MODKEY-Shift-m) - xwrite /sel/sel/mode max;; - $MODKEY-Shift-s) - xwrite /sel/sel/mode stack;; - $MODKEY-Shift-equal) - xwrite /sel/sel/mode equal;; + xwrite /ws/sel/sel/ctl sendtoarea new;; $MODKEY-Return) - xwrite /sel/sel/sel/ctl sendtoarea prev;; + xwrite /ws/sel/sel/ctl sendtoarea prev;; $MODKEY-Shift-Return) - xwrite /sel/sel/sel/ctl sendtoarea next;; - $MODKEY-Control-y) - xwrite /new/1/capacity 1;; + xwrite /ws/sel/sel/ctl sendtoarea next;; $MODKEY-h) - xwrite /sel/ctl select prev;; + xwrite /ws/ctl select prev;; $MODKEY-l) - xwrite /sel/ctl select next;; + xwrite /ws/ctl select next;; $MODKEY-Tab) - xwrite /sel/sel/ctl select next;; + xwrite /ws/sel/ctl select next;; $MODKEY-j) - xwrite /sel/sel/ctl select next;; + xwrite /ws/sel/ctl select next;; $MODKEY-k) - xwrite /sel/sel/ctl select prev;; - $MODKEY-Shift-h) - xwrite /ctl select prev;; - $MODKEY-Shift-l) - xwrite /ctl select next;; + xwrite /ws/sel/ctl select prev;; $MODKEY-Shift-[0-9]) xwrite /ctl select `echo $1 | sed 's/.*-//'`;; esac;;