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;;