wmii

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

commit 4a59f072daea51f2271fb1238aa59870e90b27e9
parent 2c72f4386114b4f347aa1dd8a3daaecb8c8b7003
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Fri, 24 Feb 2006 09:52:20 +0100

implemented sendtopage and sendtoarea, added shortcuts in wmiirc


Diffstat:
cmd/wm/area.c | 5++---
cmd/wm/client.c | 44+++++++++++++++++++++++++++++++++++++++++++-
cmd/wm/fs.c | 6++++--
cmd/wm/wm.h | 3++-
rc/wmiirc | 6+++---
5 files changed, 54 insertions(+), 10 deletions(-)

diff --git a/cmd/wm/area.c b/cmd/wm/area.c @@ -72,7 +72,7 @@ select_area(Area *a, char *arg) if(i == -1) return; if(!strncmp(arg, "prev", 5)) { - if(!i) + if(i == 1) i = p->narea - 1; else i--; @@ -80,7 +80,7 @@ select_area(Area *a, char *arg) if(i + 1 < p->narea) i++; else - i = 0; + i = 1; } else { const char *errstr; @@ -95,4 +95,3 @@ select_area(Area *a, char *arg) else p->sel = i; } - diff --git a/cmd/wm/client.c b/cmd/wm/client.c @@ -586,7 +586,7 @@ select_client(Client *c, char *arg) } void -send_client(Client *c, char *arg) { +sendtopage_client(Client *c, char *arg) { const char *errstr; Page *p; int i; @@ -604,3 +604,45 @@ send_client(Client *c, char *arg) { focus_page(p); attach_client(c); } + +void +sendtoarea_client(Client *c, char *arg) { + const char *errstr; + Area *new, *a = c->area; + Page *p = a->page; + int i = area_to_index(a); + + if(i == -1 || a->nclient < 2) + return; + if(!strncmp(arg, "prev", 5)) { + if(i == 1) + new = p->area[p->narea - 1]; + else + new = p->area[i - 1]; + } + else if(!strncmp(arg, "next", 5)) { + if(i < p->narea - 1) + new = p->area[i + 1]; + else + new = p->area[1]; + } + else { + i = cext_strtonum(arg, 1, p->narea, &errstr); + if(errstr) + return; + new = p->area[i - 1]; + } + + cext_array_detach((void **)a->client, c, &a->clientsz); + a->nclient--; + if(a->sel >= a->nclient) + a->sel = 0; + + new->client = (Client **)cext_array_attach( + (void **)new->client, c, sizeof(Client *), &new->clientsz); + new->nclient++; + c->area = new; + arrange_column(a); + arrange_column(new); + focus_client(c, True); +} diff --git a/cmd/wm/fs.c b/cmd/wm/fs.c @@ -1075,8 +1075,10 @@ xwrite(IXPConn *c, Fcall *fcall) cl = page[i1]->area[i2]->client[i3]; if(!strncmp(buf, "kill", 5)) kill_client(cl); - if(!strncmp(buf, "sendto ", 7)) - send_client(cl, &buf[7]); + else if(!strncmp(buf, "sendtopage ", 11)) + sendtopage_client(cl, &buf[11]); + else if(!strncmp(buf, "sendtoarea ", 11)) + sendtoarea_client(cl, &buf[11]); break; default: break; diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h @@ -224,7 +224,8 @@ unsigned int bar_height(Client *c); int cid_to_index(Area *a, unsigned short id); int client_to_index(Client *c); void select_client(Client *c, char *arg); -void send_client(Client *c, char *arg); +void sendtopage_client(Client *c, char *arg); +void sendtoarea_client(Client *c, char *arg); /* event.c */ void init_x_event_handler(); diff --git a/rc/wmiirc b/rc/wmiirc @@ -135,9 +135,9 @@ while(event=`{read}) { case $MODKEY-m xwrite /sel/sel/sel/ctl max case $MODKEY-Return - xwrite /sel/sel/ctl 'swap east' + xwrite /sel/sel/sel/ctl 'sendtoarea prev' case $MODKEY-Shift-Return - xwrite /sel/sel/ctl 'swap west' + xwrite /sel/sel/sel/ctl 'sendtoarea next' case $MODKEY-Control-y wmiir read /new >/dev/null >[2=1] case $MODKEY-h @@ -159,7 +159,7 @@ while(event=`{read}) { case $MODKEY-Shift-[1-9] xwrite /ctl 'select '^`{echo $event|awk -F- '{print $3}'} case $MODKEY-Control-[1-9] - xwrite /sel/sel/sel/ctl 'sendto '^`{echo $event|awk -F- '{print $3}'} + xwrite /sel/sel/sel/ctl 'sendtopage '^`{echo $event|awk -F- '{print $3}'} } } }