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:
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}'}
}
}
}