mirror of https://github.com/0intro/wmii
A bunch of fixes. Change wmiiloop to let the shell evaluate unindented lines.
This commit is contained in:
parent
37bed5b90c
commit
38dbe10856
|
@ -180,11 +180,12 @@ attach_to_area(Area *a, Frame *f, Bool send) {
|
|||
|
||||
insert_frame(a->sel, f);
|
||||
|
||||
if(a->floating)
|
||||
if(a->floating) {
|
||||
place_frame(f);
|
||||
resize_client(f->client, &f->r);
|
||||
}
|
||||
|
||||
focus_frame(f, False);
|
||||
resize_frame(f, f->r);
|
||||
restack_view(a->view);
|
||||
|
||||
if(!a->floating)
|
||||
|
|
|
@ -100,10 +100,6 @@ draw_bar(WMScreen *s) {
|
|||
uint width, tw, nb, size;
|
||||
float shrink;
|
||||
|
||||
fill(screen->ibuf, s->brect, def.normcolor.bg);
|
||||
if(!s->bar[BarLeft] && !s->bar[BarRight])
|
||||
goto MapBar;
|
||||
|
||||
largest = b = tb = nil;
|
||||
tw = width = nb = size = 0;
|
||||
for(nb = 0; nb < nelem(s->bar); nb++)
|
||||
|
@ -152,13 +148,16 @@ draw_bar(WMScreen *s) {
|
|||
|
||||
if(tb)
|
||||
b->r = rectaddpt(b->r, Pt( tb->r.max.x, 0));
|
||||
}
|
||||
|
||||
r = rectsubpt(s->brect, s->brect.min);
|
||||
fill(screen->ibuf, r, def.normcolor.bg);
|
||||
for(nb = 0; nb < nelem(s->bar); nb++)
|
||||
for(b = s->bar[nb]; b; tb=b, b=b->next) {
|
||||
fill(screen->ibuf, b->r, b->col.bg);
|
||||
drawstring(screen->ibuf, def.font, b->r, align, b->text, b->col.fg);
|
||||
border(screen->ibuf, b->r, 1, b->col.border);
|
||||
}
|
||||
MapBar:
|
||||
r = rectsubpt(s->brect, s->brect.min);
|
||||
copyimage(s->barwin, r, screen->ibuf, ZP);
|
||||
XSync(display, False);
|
||||
}
|
||||
|
|
|
@ -104,7 +104,7 @@ manage_client(Client *c) {
|
|||
r = c->w.r;
|
||||
p.x = def.border;
|
||||
p.y = labelh(def.font);
|
||||
reparent_client(c, c->framewin, p);
|
||||
reparent_client(c, c->framewin, ZP);
|
||||
|
||||
if(!strlen(c->tags))
|
||||
apply_rules(c);
|
||||
|
@ -358,9 +358,9 @@ resize_client(Client *c, Rectangle *r) {
|
|||
map_frame(c);
|
||||
unmap_client(c, IconicState);
|
||||
}else {
|
||||
reshapewin(&c->w, f->crect);
|
||||
map_client(c);
|
||||
reshapewin(c->framewin, f->r);
|
||||
reshapewin(&c->w, f->crect);
|
||||
map_frame(c);
|
||||
configure_client(c);
|
||||
}
|
||||
|
@ -505,18 +505,18 @@ update_client_name(Client *c) {
|
|||
static void
|
||||
updatemwm(Client *c) {
|
||||
enum {
|
||||
All = 1<<0,
|
||||
Border = 1<<1,
|
||||
Title = 1<<3,
|
||||
All = 0x1,
|
||||
Border = 0x2,
|
||||
Title = 0x8,
|
||||
};
|
||||
Rectangle r;
|
||||
ulong *ret, decor;
|
||||
Atom real;
|
||||
int n;
|
||||
|
||||
decor = 0;
|
||||
n = getproperty(&c->w, "_MOTIF_WM_HINTS", "_MOTIF_WM_HINTS", &real,
|
||||
2L, (uchar**)&ret, 1L);
|
||||
|
||||
if(n == 0) {
|
||||
c->borderless = 0;
|
||||
c->titleless = 0;
|
||||
|
|
|
@ -108,7 +108,7 @@ Align get_sticky(Rectangle src, Rectangle dst);
|
|||
void kpress(XWindow, ulong mod, KeyCode);
|
||||
void update_keys();
|
||||
void init_lock_keys();
|
||||
ulong mod_key_of_str(char*);
|
||||
ulong str2modmask(char*);
|
||||
|
||||
/* map.c */
|
||||
MapEnt* mapget(Map*, ulong, int create);
|
||||
|
@ -125,7 +125,7 @@ char * message_root(void*, Message*);
|
|||
char * read_root_ctl();
|
||||
char * message_client(Client*, Message*);
|
||||
char *select_area(Area*, Message*);
|
||||
char *send_client(Frame*, Message*, Bool swap);
|
||||
char *send_client(View*, Message*, Bool swap);
|
||||
|
||||
/* mouse.c */
|
||||
void mouse_resizecol(Divide*);
|
||||
|
|
|
@ -32,7 +32,7 @@ init_lock_keys() {
|
|||
}
|
||||
|
||||
ulong
|
||||
mod_key_of_str(char *val) {
|
||||
str2modmask(char *val) {
|
||||
ulong mod = 0;
|
||||
|
||||
if (strstr(val, "Shift"))
|
||||
|
@ -112,7 +112,7 @@ get_key(const char *name) {
|
|||
else
|
||||
kstr = seq[i];
|
||||
k->key = XKeysymToKeycode(display, XStringToKeysym(kstr));
|
||||
k->mod = mod_key_of_str(seq[i]);
|
||||
k->mod = str2modmask(seq[i]);
|
||||
}
|
||||
if(r) {
|
||||
r->id = id++;
|
||||
|
|
|
@ -145,7 +145,7 @@ init_environment() {
|
|||
|
||||
static void
|
||||
init_atoms() {
|
||||
Atom net[] = { xatom("_NET_SUPPORTED"), xatom("_NET_WM_NAME")};
|
||||
Atom net[] = { xatom("_NET_SUPPORTED"), xatom("_NET_WM_NAME") };
|
||||
|
||||
changeprop(&scr.root, "_NET_SUPPORTED", "ATOM", net, nelem(net));
|
||||
}
|
||||
|
@ -172,8 +172,7 @@ init_cursors() {
|
|||
create_cursor(CurIcon, XC_icon);
|
||||
|
||||
XAllocNamedColor(display, scr.colormap,
|
||||
"black", &black,
|
||||
&dummy);
|
||||
"black", &black, &dummy);
|
||||
pix = XCreateBitmapFromData(
|
||||
display, scr.root.w,
|
||||
(char[]){0}, 1, 1);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/* Copyright ©2006-2007 Kris Maglione <fbsdaemon@gmail.com>
|
||||
* See LICENSE file for license details.
|
||||
*/
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
@ -8,15 +9,84 @@
|
|||
#include "dat.h"
|
||||
#include "fns.h"
|
||||
|
||||
static char Ebadcmd[] = "bad command",
|
||||
Ebadvalue[] = "bad value";
|
||||
|
||||
/* Edit s/"([^"]+)"/L\1/g Edit |tr 'a-z' 'A-Z' */
|
||||
enum {
|
||||
LNOTURGENT,
|
||||
LURGENT,
|
||||
LBORDER,
|
||||
LCOLMODE,
|
||||
LDOWN,
|
||||
LEXEC,
|
||||
LFOCUSCOLORS,
|
||||
LFONT,
|
||||
LGRABMOD,
|
||||
LKILL,
|
||||
LLEFT,
|
||||
LNORMCOLORS,
|
||||
LQUIT,
|
||||
LRIGHT,
|
||||
LSELCOLORS,
|
||||
LSELECT,
|
||||
LSEND,
|
||||
LSWAP,
|
||||
LTOGGLE,
|
||||
LUP,
|
||||
LVIEW,
|
||||
LTILDE,
|
||||
};
|
||||
char *symtab[] = {
|
||||
"NotUrgent",
|
||||
"Urgent",
|
||||
"border",
|
||||
"colmode",
|
||||
"down",
|
||||
"exec",
|
||||
"focuscolors",
|
||||
"font",
|
||||
"grabmod",
|
||||
"kill",
|
||||
"left",
|
||||
"normcolors",
|
||||
"quit",
|
||||
"right",
|
||||
"selcolors",
|
||||
"select",
|
||||
"send",
|
||||
"swap",
|
||||
"toggle",
|
||||
"up",
|
||||
"view",
|
||||
"~",
|
||||
};
|
||||
|
||||
/* Edit ,y/^[a-zA-Z].*\n.* {\n/d
|
||||
* Edit s/^([a-zA-Z].*)\n(.*) {\n/\1 \2;\n/
|
||||
* Edit ,x/^static.*\n/d
|
||||
*/
|
||||
|
||||
#define strecmp(str, const) (strncmp((str), (const), sizeof(const)-1))
|
||||
|
||||
static char Ebadcmd[] = "bad command",
|
||||
Ebadvalue[] = "bad value";
|
||||
static int
|
||||
getsym(char *s) {
|
||||
int i, n, m, cmp;
|
||||
|
||||
n = nelem(symtab);
|
||||
i = 0;
|
||||
while(n) {
|
||||
m = n/2;
|
||||
cmp = strcmp(s, symtab[i+m]);
|
||||
if(cmp == 0)
|
||||
return i+m;
|
||||
if(cmp > 0) {
|
||||
i += m;
|
||||
n = n-m;
|
||||
}
|
||||
else
|
||||
n = m;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void
|
||||
eatrunes(Message *m, int (*p)(Rune), int val) {
|
||||
|
@ -48,13 +118,15 @@ getword(Message *m) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
|
||||
#define strbcmp(str, const) (strncmp((str), (const), sizeof(const)-1))
|
||||
static int
|
||||
getbase(char **s) {
|
||||
if(!strecmp(*s, "0x")) {
|
||||
if(!strbcmp(*s, "0x")) {
|
||||
*s += 2;
|
||||
return 16;
|
||||
}
|
||||
if(strecmp(*s, "0")) {
|
||||
if(!strbcmp(*s, "0")) {
|
||||
*s += 1;
|
||||
return 8;
|
||||
}
|
||||
|
@ -126,30 +198,25 @@ strarea(View *v, char *s) {
|
|||
|
||||
char *
|
||||
message_view(View *v, Message *m) {
|
||||
Client *c;
|
||||
Frame *f;
|
||||
Area *a;
|
||||
char *s;
|
||||
int i;
|
||||
Bool swap;
|
||||
|
||||
s = getword(m);
|
||||
|
||||
if(!strcmp(s, "send")) {
|
||||
swap = False;
|
||||
goto send;
|
||||
}
|
||||
if(!strcmp(s, "swap")) {
|
||||
swap = True;
|
||||
goto send;
|
||||
}
|
||||
if(!strcmp(s, "select"))
|
||||
switch(getsym(s)) {
|
||||
case LSEND:
|
||||
return send_client(v, m, 0);
|
||||
case LSWAP:
|
||||
return send_client(v, m, 1);
|
||||
case LSELECT:
|
||||
return select_area(v->sel, m);
|
||||
if(!strcmp(s, "colmode")) {
|
||||
case LCOLMODE:
|
||||
s = getword(m);
|
||||
|
||||
if((a = strarea(v, s)) == nil || a->floating)
|
||||
return Ebadvalue;
|
||||
|
||||
s = getword(m);
|
||||
if((i = str2colmode(s)) == -1)
|
||||
return Ebadvalue;
|
||||
|
||||
|
@ -161,18 +228,10 @@ message_view(View *v, Message *m) {
|
|||
focus_view(screen, v);
|
||||
draw_frames();
|
||||
return nil;
|
||||
default:
|
||||
return Ebadcmd;
|
||||
}
|
||||
return Ebadcmd;
|
||||
|
||||
send:
|
||||
s = getword(m);
|
||||
|
||||
if(!(c = strclient(v, s)))
|
||||
return Ebadvalue;
|
||||
if(!(f = view_clientframe(v, c)))
|
||||
return Ebadvalue;
|
||||
|
||||
return send_client(f, m, swap);
|
||||
assert(!"can't get here");
|
||||
}
|
||||
|
||||
char *
|
||||
|
@ -203,56 +262,64 @@ parse_colors(Message *m, CTuple *col) {
|
|||
char *
|
||||
message_root(void *p, Message *m) {
|
||||
Font *fn;
|
||||
char *s;
|
||||
char *s, *ret;
|
||||
ulong n;
|
||||
|
||||
ret = nil;
|
||||
s = getword(m);
|
||||
|
||||
if(!strcmp(s, "quit"))
|
||||
switch(getsym(s)) {
|
||||
case LQUIT:
|
||||
srv.running = 0;
|
||||
else if(!strcmp(s, "exec")) {
|
||||
break;
|
||||
case LEXEC:
|
||||
execstr = emalloc(strlen(m->pos) + sizeof("exec "));
|
||||
sprintf(execstr, "exec %s", m->pos);
|
||||
srv.running = 0;
|
||||
}
|
||||
else if(!strcmp(s,"view"))
|
||||
break;
|
||||
case LVIEW:
|
||||
select_view(m->pos);
|
||||
else if(!strcmp(s, "selcolors")) {
|
||||
break;
|
||||
case LSELCOLORS:
|
||||
fprintf(stderr, "%s: warning: selcolors have been removed\n", argv0);
|
||||
return Ebadcmd;
|
||||
}
|
||||
else if(!strcmp(s, "focuscolors"))
|
||||
return parse_colors(m, &def.focuscolor);
|
||||
else if(!strcmp(s, "normcolors"))
|
||||
return parse_colors(m, &def.normcolor);
|
||||
else if(!strcmp(s, "font")) {
|
||||
case LFOCUSCOLORS:
|
||||
ret = parse_colors(m, &def.focuscolor);
|
||||
focus_view(screen, screen->sel);
|
||||
break;
|
||||
case LNORMCOLORS:
|
||||
ret = parse_colors(m, &def.normcolor);
|
||||
focus_view(screen, screen->sel);
|
||||
break;
|
||||
case LFONT:
|
||||
fn = loadfont(m->pos);
|
||||
if(fn) {
|
||||
freefont(def.font);
|
||||
def.font = fn;
|
||||
resize_bar(screen);
|
||||
}else
|
||||
return "can't load font";
|
||||
}
|
||||
else if(!strcmp(s, "border")) {
|
||||
ret = "can't load font";
|
||||
break;
|
||||
case LBORDER:
|
||||
if(!getulong(getword(m), &n))
|
||||
return Ebadvalue;
|
||||
def.border = n;
|
||||
/* XXX: Apply the change */
|
||||
}
|
||||
else if(!strcmp(s, "grabmod")) {
|
||||
break;
|
||||
case LGRABMOD:
|
||||
s = getword(m);
|
||||
n = mod_key_of_str(s);
|
||||
n = str2modmask(s);
|
||||
|
||||
if(!(n & (Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask)))
|
||||
return Ebadvalue;
|
||||
|
||||
strncpy(def.grabmod, s, sizeof(def.grabmod));
|
||||
def.mod = n;
|
||||
}
|
||||
else
|
||||
break;
|
||||
default:
|
||||
return Ebadcmd;
|
||||
return nil;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
char *
|
||||
|
@ -273,104 +340,131 @@ message_client(Client *c, Message *m) {
|
|||
|
||||
s = getword(m);
|
||||
|
||||
if(!strcmp(s, "kill"))
|
||||
switch(getsym(s)) {
|
||||
case LKILL:
|
||||
kill_client(c);
|
||||
else if(!strcmp(s, "Urgent"))
|
||||
break;
|
||||
case LURGENT:
|
||||
set_urgent(c, True, True);
|
||||
else if(!strcmp(s, "NotUrgent"))
|
||||
break;
|
||||
case LNOTURGENT:
|
||||
set_urgent(c, False, True);
|
||||
else
|
||||
break;
|
||||
default:
|
||||
return Ebadcmd;
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
char *
|
||||
send_client(Frame *f, Message *m, Bool swap) {
|
||||
Area *to, *a;
|
||||
Client *c;
|
||||
Frame *tf;
|
||||
View *v;
|
||||
char *s;
|
||||
ulong i;
|
||||
|
||||
static char*
|
||||
send_frame(Frame *f, int sym, Bool swap) {
|
||||
Frame *fp;
|
||||
Area *a;
|
||||
|
||||
a = f->area;
|
||||
v = a->view;
|
||||
c = f->client;
|
||||
|
||||
s = getword(m);
|
||||
|
||||
if(!strcmp(s, "toggle")) {
|
||||
if(!a->floating)
|
||||
to = v->area;
|
||||
else if(c->revert && !c->revert->floating)
|
||||
to = c->revert;
|
||||
else
|
||||
to = v->area->next;
|
||||
goto send_area;
|
||||
}else if(!a->floating) {
|
||||
if(!strcmp(s, "left")) {
|
||||
if(a->floating)
|
||||
switch(sym) {
|
||||
case LUP:
|
||||
fp = f->aprev;
|
||||
if(!fp)
|
||||
return Ebadvalue;
|
||||
for(to=v->area->next; to; to=to->next)
|
||||
if(a == to->next) break;
|
||||
if(!to && !swap && (f->anext || f != a->frame))
|
||||
to=new_column(v, v->area, 0);
|
||||
goto send_area;
|
||||
}
|
||||
else if(!strcmp(s, "right")) {
|
||||
if(a->floating)
|
||||
fp = fp->aprev;
|
||||
break;
|
||||
case LDOWN:
|
||||
fp = f->anext;
|
||||
if(!fp)
|
||||
return Ebadvalue;
|
||||
to = a->next;
|
||||
if(!to && !swap && (f->anext || f != a->frame))
|
||||
to = new_column(v, a, 0);
|
||||
goto send_area;
|
||||
}
|
||||
else if(!strcmp(s, "up")) {
|
||||
tf = f->aprev;
|
||||
if(!tf)
|
||||
return Ebadvalue;
|
||||
tf = tf->aprev;
|
||||
goto send_frame;
|
||||
}
|
||||
else if(!strcmp(s, "down")) {
|
||||
tf = f->anext;
|
||||
if(!tf)
|
||||
return Ebadvalue;
|
||||
goto send_frame;
|
||||
}
|
||||
else {
|
||||
if(!getulong(s, &i) || i == 0)
|
||||
return Ebadvalue;
|
||||
for(to=v->area; to; to=to->next)
|
||||
if(!i--) break;
|
||||
goto send_area;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return Ebadvalue;
|
||||
|
||||
send_frame:
|
||||
if(!swap) {
|
||||
remove_frame(f);
|
||||
insert_frame(tf, f);
|
||||
}else {
|
||||
if(!tf)
|
||||
if(swap) {
|
||||
if(!fp)
|
||||
return Ebadvalue;
|
||||
swap_frames(f, tf);
|
||||
swap_frames(f, fp);
|
||||
}else {
|
||||
remove_frame(f);
|
||||
insert_frame(fp, f);
|
||||
}
|
||||
|
||||
arrange_column(a, False);
|
||||
|
||||
flushevents(EnterWindowMask, False);
|
||||
focus_frame(f, True);
|
||||
update_views();
|
||||
return nil;
|
||||
}
|
||||
|
||||
char *
|
||||
send_client(View *v, Message *m, Bool swap) {
|
||||
Area *to, *a;
|
||||
Frame *f;
|
||||
Client *c;
|
||||
char *s;
|
||||
ulong i;
|
||||
int sym;
|
||||
|
||||
s = getword(m);
|
||||
|
||||
c = strclient(v, s);
|
||||
if(c == nil)
|
||||
return Ebadvalue;
|
||||
|
||||
f = view_clientframe(v, c);
|
||||
if(f == nil)
|
||||
return Ebadvalue;
|
||||
|
||||
a = f->area;
|
||||
to = nil;
|
||||
|
||||
s = getword(m);
|
||||
sym = getsym(s);
|
||||
|
||||
switch(sym) {
|
||||
case LTOGGLE:
|
||||
if(!a->floating)
|
||||
to = v->area;
|
||||
else if(c->revert && !c->revert->floating)
|
||||
to = c->revert;
|
||||
else
|
||||
to = v->area->next;
|
||||
case LUP:
|
||||
case LDOWN:
|
||||
return send_frame(f, sym, swap);
|
||||
case LLEFT:
|
||||
if(a->floating)
|
||||
return Ebadvalue;
|
||||
|
||||
if(a->prev != v->area)
|
||||
to = a->prev;
|
||||
a = v->area;
|
||||
break;
|
||||
case LRIGHT:
|
||||
if(a->floating)
|
||||
return Ebadvalue;
|
||||
|
||||
to = a->next;
|
||||
break;
|
||||
default:
|
||||
if(!getulong(s, &i) || i == 0)
|
||||
return Ebadvalue;
|
||||
|
||||
for(to=v->area; to; to=to->next)
|
||||
if(!i--) break;
|
||||
break;
|
||||
}
|
||||
|
||||
if(!to && !swap && (f->anext || f != a->frame))
|
||||
to = new_column(v, a, 0);
|
||||
|
||||
send_area:
|
||||
if(!to)
|
||||
return Ebadvalue;
|
||||
|
||||
if(!swap)
|
||||
send_to_area(to, f);
|
||||
else if(to->sel)
|
||||
swap_frames(f, to->sel);
|
||||
else
|
||||
return Ebadvalue;
|
||||
|
||||
flushevents(EnterWindowMask, False);
|
||||
focus_frame(f, True);
|
||||
|
@ -378,71 +472,81 @@ send_area:
|
|||
return nil;
|
||||
}
|
||||
|
||||
char *
|
||||
static char*
|
||||
select_frame(Frame *f, int sym) {
|
||||
Frame *fp;
|
||||
Area *a;
|
||||
|
||||
if(!f)
|
||||
return Ebadvalue;
|
||||
a = f->area;
|
||||
|
||||
switch(sym) {
|
||||
case LUP:
|
||||
for(fp = a->frame; fp->anext; fp = fp->anext)
|
||||
if(fp->anext == f) break;
|
||||
break;
|
||||
case LDOWN:
|
||||
fp = f->anext;
|
||||
if(fp == nil)
|
||||
fp = a->frame;
|
||||
break;
|
||||
}
|
||||
|
||||
focus_frame(fp, False);
|
||||
frame_to_top(fp);
|
||||
if(f->view == screen->sel)
|
||||
restack_view(f->view);
|
||||
return nil;
|
||||
}
|
||||
|
||||
char*
|
||||
select_area(Area *a, Message *m) {
|
||||
Frame *p, *f;
|
||||
Area *ap;
|
||||
View *v;
|
||||
char *s;
|
||||
ulong i;
|
||||
int sym;
|
||||
|
||||
v = a->view;
|
||||
f = a->sel;
|
||||
|
||||
s = getword(m);
|
||||
sym = getsym(s);
|
||||
|
||||
|
||||
if(!strcmp(s, "toggle")) {
|
||||
switch(sym) {
|
||||
case LUP:
|
||||
case LDOWN:
|
||||
return select_frame(a->sel, sym);
|
||||
case LTOGGLE:
|
||||
if(!a->floating)
|
||||
ap = v->area;
|
||||
else if(v->revert && v->revert != a)
|
||||
ap = v->revert;
|
||||
else
|
||||
ap = v->area->next;
|
||||
}
|
||||
else if(!strcmp(s, "left")) {
|
||||
break;
|
||||
case LLEFT:
|
||||
if(a->floating)
|
||||
return Ebadvalue;
|
||||
for(ap=v->area->next; ap->next; ap=ap->next)
|
||||
if(ap->next == a) break;
|
||||
}
|
||||
else if(!strcmp(s, "right")) {
|
||||
break;
|
||||
case LRIGHT:
|
||||
if(a->floating)
|
||||
return Ebadvalue;
|
||||
ap = a->next;
|
||||
if(ap == nil)
|
||||
ap = v->area->next;
|
||||
}
|
||||
else if(!strcmp(s, "up")) {
|
||||
if(!f)
|
||||
return Ebadvalue;
|
||||
for(p = f->area->frame; p->anext; p = p->anext)
|
||||
if(p->anext == f) break;
|
||||
goto focus_frame;
|
||||
}
|
||||
else if(!strcmp(s, "down")) {
|
||||
if(!f)
|
||||
return Ebadvalue;
|
||||
p = f->anext;
|
||||
if(p == nil)
|
||||
p = a->frame;
|
||||
goto focus_frame;
|
||||
}
|
||||
else if(!strcmp(s, "~"))
|
||||
break;
|
||||
case LTILDE:
|
||||
ap = v->area;
|
||||
else {
|
||||
break;
|
||||
default:
|
||||
if(!getulong(s, &i) || i == 0)
|
||||
return Ebadvalue;
|
||||
for(ap=v->area->next; ap; ap=ap->next)
|
||||
if(!--i) break;
|
||||
}
|
||||
|
||||
focus_area(ap);
|
||||
return nil;
|
||||
|
||||
focus_frame:
|
||||
focus_frame(p, False);
|
||||
frame_to_top(p);
|
||||
if(v == screen->sel)
|
||||
restack_view(v);
|
||||
return nil;
|
||||
}
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
#!AWKPATH -f
|
||||
BEGIN {
|
||||
arg[1] = "Nop"
|
||||
body = "";
|
||||
writekeys = "wmiir write /keys"
|
||||
print "IFS=''"
|
||||
}
|
||||
|
||||
function addevent() {
|
||||
if(arg[1] == "Key")
|
||||
keys[arg[2]] = 1;
|
||||
|
||||
var = arg[1] "s"
|
||||
print var "=\"$" var " " arg[2] "\""
|
||||
|
||||
gsub("[^a-zA-Z_0-9]", "_", arg[2]);
|
||||
if(body != "")
|
||||
print arg[1] "_" arg[2] "() {" body "\n}"
|
||||
}
|
||||
|
||||
/^(Event|Key|Action)[ \t]/ {
|
||||
addevent()
|
||||
split($0, arg)
|
||||
body = ""
|
||||
}
|
||||
/^[ \t]/ {
|
||||
body = body"\n"$0
|
||||
}
|
||||
|
||||
END {
|
||||
addevent()
|
||||
for(key in keys)
|
||||
print key | writekeys;
|
||||
close(writekeys);
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
#!/bin/sh
|
||||
|
||||
eval "text() {
|
||||
cat <<!
|
||||
$(sed '/^[[:blank:]]/s/\([$`]\)/\\\1/g')
|
||||
!
|
||||
}"
|
||||
|
||||
script() {
|
||||
cat <<'!'
|
||||
BEGIN {
|
||||
arg[1] = "Nop"
|
||||
body = "";
|
||||
writekeys = "wmiir write /keys"
|
||||
print "IFS=''"
|
||||
}
|
||||
|
||||
function addevent() {
|
||||
if(arg[1] == "Key")
|
||||
keys[arg[2]] = 1;
|
||||
|
||||
var = arg[1] "s"
|
||||
print var "=\"$" var " " arg[2] "\""
|
||||
|
||||
gsub("[^a-zA-Z_0-9]", "_", arg[2]);
|
||||
if(body != "")
|
||||
print arg[1] "_" arg[2] "() {" body "\n}"
|
||||
}
|
||||
|
||||
/^(Event|Key|Action)[ \t]/ {
|
||||
addevent()
|
||||
split($0, arg)
|
||||
body = ""
|
||||
}
|
||||
/^[ \t]/ {
|
||||
body = body"\n"$0
|
||||
}
|
||||
|
||||
END {
|
||||
addevent()
|
||||
for(key in keys)
|
||||
print key | writekeys;
|
||||
close(writekeys);
|
||||
}
|
||||
!
|
||||
}
|
||||
|
||||
text | awk "`script`"
|
||||
|
|
@ -125,8 +125,6 @@ eventstuff() {
|
|||
wmiir xwrite /client/sel/ctl kill
|
||||
Key $MODKEY-Shift-t
|
||||
wmiir xwrite "/client/$(wmiir read /client/sel/ctl)/tags" "$(tagsmenu)" &
|
||||
!
|
||||
cat<<!
|
||||
Key $MODKEY-$LEFT
|
||||
wmiir xwrite /tag/sel/ctl select left
|
||||
Key $MODKEY-$RIGHT
|
||||
|
@ -164,9 +162,7 @@ border 1
|
|||
EOF
|
||||
|
||||
# Feed events to `wmiiloop' for processing
|
||||
IFS=''
|
||||
eval $(eventstuff | sed "s/\$MODKEY/$MODKEY/g;s/^[ ]//" | wmiiloop)
|
||||
unset IFS
|
||||
eval "$(eventstuff | sed 's/^[ ]//' | wmiiloop)"
|
||||
|
||||
# Functions
|
||||
Action() {
|
||||
|
|
Loading…
Reference in New Issue