changeset: 2344:32204e0b2761
user: Kris Maglione <jg_AT_suckless.org>
date: Mon Aug 25 12:47:56 2008 -0400
files: TODO cmd/wmii.sh.sh cmd/wmii/Makefile cmd/wmii/area.c cmd/wmii/client.c cmd/wmii/column.c cmd/wmii/event.c cmd/wmii/ewmh.c cmd/wmii/float.c cmd/wmii/fns.h cmd/wmii/frame.c cmd/wmii/fs.c cmd/wmii/key.c cmd/wmii/main.c cmd/wmii/message.c cmd/wmii/view.c cmd/wmii9menu.c cmd/wmiir.c config.mk libwmii_hack/hack.c mk/hdr.mk rc/rc.wmii.rc rc/wmiirc.sh util/compile util/genconfig util/link
description:
Best just read the diff.
diff -r 04f222972c9c -r 32204e0b2761 TODO
--- a/TODO Mon Jun 02 22:31:59 2008 -0400
+++ b/TODO Mon Aug 25 12:47:56 2008 -0400
@@ -5,6 +5,9 @@
4.0
* Opaque managed moves. I know I've argued against it, but it may be doable.
+* Clicking layout boxes should do useful things.
+* Collapse/uncollapse frames with the keyboard.
+* Open modes (to replace colmodes).
* Resizable managed area. Maybe. Struts seem to do everything this might.
* New dmenu, with real cursor; snarfable.
diff -r 04f222972c9c -r 32204e0b2761 cmd/wmii.sh.sh
--- a/cmd/wmii.sh.sh Mon Jun 02 22:31:59 2008 -0400
+++ b/cmd/wmii.sh.sh Mon Aug 25 12:47:56 2008 -0400
@@ -73,6 +73,7 @@
!
eval "cat <<!
$(sed "$_sed" | sed '/^[ ]/s/\([$`]\)/\\\1/g')
+!
"
}
diff -r 04f222972c9c -r 32204e0b2761 cmd/wmii/Makefile
--- a/cmd/wmii/Makefile Mon Jun 02 22:31:59 2008 -0400
+++ b/cmd/wmii/Makefile Mon Aug 25 12:47:56 2008 -0400
@@ -10,7 +10,7 @@
LIB = ${LIBIXP}
LDFLAGS += -lm ${LIBX11} -lXext -lXrandr ${LIBICONV} -lregexp9 -lbio -lfmt -lutf
CFLAGS += ${INCX11} ${INCICONV} -DVERSION=\"${VERSION}\" \
- -DIXP_NEEDAPI=86
+ -DIXP_NEEDAPI=97
OBJ = area \
bar \
client \
diff -r 04f222972c9c -r 32204e0b2761 cmd/wmii/area.c
--- a/cmd/wmii/area.c Mon Jun 02 22:31:59 2008 -0400
+++ b/cmd/wmii/area.c Mon Aug 25 12:47:56 2008 -0400
@@ -89,7 +89,10 @@
a = emallocz(sizeof *a);
a->view = v;
a->id = id++;
- a->mode = def.colmode;
+ if(v->area)
+ a->mode = def.colmode;
+ else
+ a->mode = Coldefault;
a->frame = nil;
a->sel = nil;
@@ -245,8 +248,11 @@
if(!a->floating)
v->selcol = area_idx(a);
- if((old_a) && (a->floating != old_a->floating))
+ if((old_a) && (a->floating != old_a->floating)) {
v->revert = old_a;
+ if(v->area->max)
+ view_update(v);
+ }
if(v != screen->sel)
return;
diff -r 04f222972c9c -r 32204e0b2761 cmd/wmii/client.c
--- a/cmd/wmii/client.c Mon Jun 02 22:31:59 2008 -0400
+++ b/cmd/wmii/client.c Mon Aug 25 12:47:56 2008 -0400
@@ -469,8 +469,6 @@
void
client_focus(Client *c) {
/* Round trip. */
- static long id;
- long _id;
if(c && c->group)
c->group->client = c;
@@ -478,9 +476,8 @@
sync();
flushevents(FocusChangeMask, true);
- _id = id++ % 99;
- Dprint(DFocus, "client_focus([%C]%s) %ld\n", c, clientname(c), _id);
- Dprint(DFocus, "\t%02d [%C]%s\n\t=> [%C]%s\n", _id,
+ Dprint(DFocus, "client_focus([%C]%s)\n", c, clientname(c));
+ Dprint(DFocus, "\t[%C]%s\n\t=> [%C]%s\n",
screen->focus, clientname(screen->focus),
c, clientname(c));
if(screen->focus != c) {
diff -r 04f222972c9c -r 32204e0b2761 cmd/wmii/column.c
--- a/cmd/wmii/column.c Mon Jun 02 22:31:59 2008 -0400
+++ b/cmd/wmii/column.c Mon Aug 25 12:47:56 2008 -0400
@@ -129,7 +129,7 @@
nframe = 0;
dy = 0;
- first = nil;
+ first = f;
for(ft=f; ft && ft->collapsed; ft=ft->anext)
;
if(ft && ft != f) {
@@ -513,7 +513,9 @@
f->colr.max.x = a->r.max.x;
if(!f->collapsed)
f->colr.max.y += ((float)f->dy / dy) * surplus;
- assert(f->collapsed ? Dy(f->r) >= 0 : dy > 0);
+ if(btassert("6 full", !(f->collapsed ? Dy(f->r) >= 0 : dy > 0)))
+ warning("Something's fucked: %s:%d:%s()",
+ __FILE__, __LINE__, __func__);
frame_resize(f, f->colr);
}
@@ -527,6 +529,8 @@
Frame *f;
View *v;
+ if(a->floating)
+ float_arrange(a);
if(a->floating || !a->frame)
return;
diff -r 04f222972c9c -r 32204e0b2761 cmd/wmii/event.c
--- a/cmd/wmii/event.c Mon Jun 02 22:31:59 2008 -0400
+++ b/cmd/wmii/event.c Mon Aug 25 12:47:56 2008 -0400
@@ -274,7 +274,7 @@
xtime = ev->time;
ev->state &= valid_mask;
if(ev->window == scr.root.w)
- kpress(scr.root.w, ev->state, (KeyCode) ev->keycode);
+ kpress(scr.root.w, ev->state, (KeyCode)ev->keycode);
}
static void
@@ -325,6 +325,7 @@
mapnotify(XMapEvent *ev) {
Window *w;
+ ignoreenter = ev->serial;
if((w = findwin(ev->window)))
handle(w, map, ev);
}
@@ -333,6 +334,7 @@
unmapnotify(XUnmapEvent *ev) {
Window *w;
+ ignoreenter = ev->serial;
if((w = findwin(ev->window)) && (ev->event == w->parent->w)) {
w->mapped = false;
if(ev->send_event || w->unmapped-- == 0)
diff -r 04f222972c9c -r 32204e0b2761 cmd/wmii/ewmh.c
--- a/cmd/wmii/ewmh.c Mon Jun 02 22:31:59 2008 -0400
+++ b/cmd/wmii/ewmh.c Mon Aug 25 12:47:56 2008 -0400
@@ -6,6 +6,9 @@
#include "fns.h"
Window *ewmhwin;
+
+static void ewmh_getwinstate(Client*);
+static void ewmh_setstate(Client*, Atom, int);
#define Net(x) ("_NET_" x)
#define Action(x) ("_NET_WM_ACTION_" x)
@@ -117,6 +120,7 @@
changeprop_long(&c->w, Net("WM_ALLOWED_ACTIONS"), "ATOM",
allowed, nelem(allowed));
ewmh_getwintype(c);
+ ewmh_getwinstate(c);
ewmh_getstrut(c);
ewmh_updateclientlist();
}
@@ -237,6 +241,18 @@
}
}
+static void
+ewmh_getwinstate(Client *c) {
+ ulong *vals;
+ long n;
+
+ n = getprop_ulong(&c->w, Net("WM_STATE"), "ATOM",
+ 0L, &vals, 16);
+ while(--n >= 0)
+ ewmh_setstate(c, vals[n], On);
+ free(vals);
+}
+
long
ewmh_protocols(Window *w) {
static Prop props[] = {
@@ -297,6 +313,20 @@
view_update(screen->sel);
}
+static void
+ewmh_setstate(Client *c, Atom state, int action) {
+
+ Dprint(DEwmh, "\tSTATE = %A\n", state);
+ if(state == 0)
+ return;
+
+ if(state == STATE("FULLSCREEN"))
+ fullscreen(c, action);
+ else
+ if(state == STATE("DEMANDS_ATTENTION"))
+ client_seturgent(c, action, UrgClient);
+}
+
int
ewmh_clientmessage(XClientMessageEvent *e) {
Client *c;
@@ -328,16 +358,8 @@
return -1;
}
Dprint(DEwmh, "\tAction: %s\n", TOGGLE(action));
- for(i = 1; i <= 2; i++) {
- if(l[i] == 0)
- break;
- Dprint(DEwmh, "\tl[%d] = %A\n", i, l[i]);
- if(l[i] == STATE("FULLSCREEN"))
- fullscreen(c, action);
- else
- if(l[i] == STATE("DEMANDS_ATTENTION"))
- client_seturgent(c, action, UrgClient);
- }
+ ewmh_setstate(c, l[1], action);
+ ewmh_setstate(c, l[2], action);
return 1;
}else
if(msg == NET("ACTIVE_WINDOW")) {
diff -r 04f222972c9c -r 32204e0b2761 cmd/wmii/float.c
--- a/cmd/wmii/float.c Mon Jun 02 22:31:59 2008 -0400
+++ b/cmd/wmii/float.c Mon Aug 25 12:47:56 2008 -0400
@@ -57,6 +57,30 @@
client_resize(f->client, r);
else
frame_resize(f, r);
+}
+
+void
+float_arrange(Area *a) {
+ Frame *f;
+
+ assert(a->floating);
+
+ switch(a->mode) {
+ case Coldefault:
+ for(f=a->frame; f; f=f->anext)
+ f->collapsed = false;
+ break;
+ case Colstack:
+ for(f=a->frame; f; f=f->anext)
+ f->collapsed = (f != a->sel);
+ break;
+ default:
+ die("not reached");
+ break;
+ }
+ for(f=a->frame; f; f=f->anext)
+ f->r = f->floatr;
+ view_update(a->view);
}
static void
@@ -163,6 +187,6 @@
}
}
- f->r = rectsetorigin(f->r, p);
+ f->floatr = rectsetorigin(f->r, p);
}
diff -r 04f222972c9c -r 32204e0b2761 cmd/wmii/fns.h
--- a/cmd/wmii/fns.h Mon Jun 02 22:31:59 2008 -0400
+++ b/cmd/wmii/fns.h Mon Aug 25 12:47:56 2008 -0400
@@ -120,6 +120,7 @@
void ewmh_updateviews(void);
/* float.c */
+void float_arrange(Area*);
void float_attach(Area*, Frame*);
void float_detach(Frame*);
void float_resizeframe(Frame*, Rectangle);
diff -r 04f222972c9c -r 32204e0b2761 cmd/wmii/frame.c
--- a/cmd/wmii/frame.c Mon Jun 02 22:31:59 2008 -0400
+++ b/cmd/wmii/frame.c Mon Aug 25 12:47:56 2008 -0400
@@ -215,6 +215,7 @@
f->client, f->client->name, ignoreenter == e->serial ? " (ignored)" : "");
if(e->detail != NotifyInferior)
if(e->serial != ignoreenter && (f->area->floating || !f->collapsed))
+ if(!(c->w.ewmh.type & TypeSplash))
focus(f->client, false);
}
mouse_checkresize(f, Pt(e->x, e->y), false);
@@ -296,26 +297,30 @@
return h;
}
+#define ADJ(PE, ME) \
+ if(c->fullscreen) \
+ return r; \
+ \
+ if(!floating) { \
+ r.min.x PE 1; \
+ r.min.y PE labelh(def.font); \
+ r.max.x ME 1; \
+ r.max.y ME 1; \
+ }else { \
+ if(!c->borderless) { \
+ r.min.x PE def.border; \
+ r.max.x ME def.border; \
+ r.max.y ME def.border; \
+ } \
+ if(!c->titleless) \
+ r.min.y PE labelh(def.font); \
+ } \
+
Rectangle
frame_rect2client(Client *c, Rectangle r, bool floating) {
- if(c->fullscreen)
- return r;
+ ADJ(+=, -=)
- if(!floating) {
- r.min.x += 1;
- r.min.y += labelh(def.font);
- r.max.x -= 1;
- r.max.y -= 1;
- }else {
- if(!c->borderless) {
- r.min.x += def.border;
- r.max.x -= def.border;
- r.max.y -= def.border;
- }
- if(!c->titleless)
- r.min.y += labelh(def.font);
- }
r.max.x = max(r.max.x, r.min.x+1);
r.max.y = max(r.max.y, r.min.y+1);
return r;
@@ -324,25 +329,12 @@
Rectangle
frame_client2rect(Client *c, Rectangle r, bool floating) {
- if(c->fullscreen)
- return r;
+ ADJ(-=, +=)
- if(!floating) {
- r.min.x -= 1;
- r.min.y -= labelh(def.font);
- r.max.x += 1;
- r.max.y += 1;
- }else {
- if(!c->borderless) {
- r.min.x -= def.border;
- r.max.x += def.border;
- r.max.y += def.border;
- }
- if(!c->titleless)
- r.min.y -= labelh(def.font);
- }
return r;
}
+
+#undef ADJ
void
frame_resize(Frame *f, Rectangle r) {
@@ -364,8 +356,10 @@
return;
}
+ /*
if(f->area->floating)
f->collapsed = false;
+ */
fr = frame_hints(f, r, get_sticky(f->r, r));
if(f->area->floating && !c->strut)
@@ -398,7 +392,7 @@
}
f->crect = rectsubpt(cr, f->r.min);
- if(f->area->floating)
+ if(f->area->floating && !f->collapsed)
f->floatr = f->r;
}
@@ -458,7 +452,7 @@
f->titlebar = insetrect(r, 3);
f->titlebar.max.y += 3;
- /* Odd focus. Ulselected, with keyboard focus. */
+ /* Odd focus. Unselected, with keyboard focus. */
/* Draw a border just inside the titlebar. */
if(c != selclient() && c == screen->focus) {
border(img, insetrect(r, 1), 1, def.normcolor.bg);
@@ -481,7 +475,7 @@
border(img, insetrect(r, -1), 1, def.normcolor.bg);
/* Draw a border on borderless+titleless selected apps. */
- if(c->borderless && c->titleless && c == selclient())
+ if(f->area->floating && c->borderless && c->titleless && c == selclient())
setborder(c->framewin, def.border, def.focuscolor.border);
else
setborder(c->framewin, 0, 0);
@@ -626,6 +620,8 @@
return;
move_focus(old_f, f);
+ if(a->floating)
+ float_arrange(a);
client_focus(f->client);
/*
diff -r 04f222972c9c -r 32204e0b2761 cmd/wmii/fs.c
--- a/cmd/wmii/fs.c Mon Jun 02 22:31:59 2008 -0400
+++ b/cmd/wmii/fs.c Mon Aug 25 12:47:56 2008 -0400
@@ -8,75 +8,22 @@
#include <unistd.h>
#include "fns.h"
-
-/* Datatypes: */
-typedef struct Dirtab Dirtab;
-typedef struct FileId FileId;
-typedef struct PLink PLink;
-typedef struct Pending Pending;
-typedef struct RLink RLink;
-typedef struct Queue Queue;
-
-struct PLink {
- PLink* next;
- PLink* prev;
- IxpFid* fid;
- Queue* queue;
- Pending* pending;
+typedef union IxpFileIdU IxpFileIdU;
+union IxpFileIdU {
+ Bar* bar;
+ Bar** bar_p;
+ CTuple* col;
+ Client* client;
+ Ruleset* rule;
+ View* view;
+ char* buf;
+ void* ref;
};
-struct RLink {
- RLink* next;
- RLink* prev;
- Ixp9Req* req;
-};
+#include <ixp_srvutil.h>
-struct Pending {
- RLink req;
- PLink fids;
-};
-
-struct Queue {
- Queue* link;
- char* dat;
- long len;
-};
-
-static Pending events;
-static Pending pdebug[NDebugOpt];
-
-struct Dirtab {
- char* name;
- uchar qtype;
- uint type;
- uint perm;
- uint flags;
-};
-
-struct FileId {
- FileId* next;
- union {
- Bar* bar;
- Bar** bar_p;
- CTuple* col;
- Client* client;
- PLink* p;
- Ruleset* rule;
- View* view;
- char* buf;
- void* ref;
- } p;
- bool pending;
- uint id;
- uint index;
- Dirtab tab;
- ushort nref;
- uchar volatil;
-};
-
-enum {
- FLHide = 1,
-};
+static IxpPending events;
+static IxpPending pdebug[NDebugOpt];
/* Constants */
enum { /* Dirs */
@@ -115,8 +62,6 @@
/* Global Vars */
/***************/
-FileId *free_fileid;
-
Ixp9Srv p9srv = {
.open= fs_open,
.walk= fs_walk,
@@ -134,7 +79,7 @@
/* ad-hoc file tree. Empty names ("") indicate dynamic entries to be filled
* in by lookup_file
*/
-static Dirtab
+static IxpDirtab
dirtab_root[]= {{".", QTDIR, FsRoot, 0500|DMDIR },
{"rbar", QTDIR, FsDBars, 0700|DMDIR },
{"lbar", QTDIR, FsDBars, 0700|DMDIR },
@@ -169,7 +114,7 @@
{"ctl", QTAPPEND, FsFTctl, 0600|DMAPPEND },
{"index", QTFILE, FsFTindex, 0400 },
{nil}};
-static Dirtab* dirtab[] = {
+static IxpDirtab* dirtab[] = {
[FsRoot] = dirtab_root,
[FsDBars] = dirtab_bars,
[FsDClients] = dirtab_clients,
@@ -178,237 +123,7 @@
[FsDTags] = dirtab_tags,
[FsDTag] = dirtab_tag,
};
-
-/* Utility Functions */
-static FileId *
-get_file(void) {
- FileId *temp;
- if(!free_fileid) {
- uint i = 15;
- temp = emallocz(i * sizeof *temp);
- for(; i; i--) {
- temp->next = free_fileid;
- free_fileid = temp++;
- }
- }
- temp = free_fileid;
- free_fileid = temp->next;
- temp->volatil = 0;
- temp->nref = 1;
- temp->next = nil;
- temp->pending = false;
- return temp;
-}
-
-static void
-free_file(FileId *f) {
- if(--f->nref)
- return;
- free(f->tab.name);
- f->next = free_fileid;
- free_fileid = f;
-}
-
-/* Increase the reference counts of the FileId list */
-static void
-clone_files(FileId *f) {
- for(; f; f=f->next)
- assert(f->nref++);
-}
-
-/* This should be moved to libixp */
-static void
-write_buf(Ixp9Req *r, char *buf, uint len) {
- if(r->ifcall.offset >= len)
- return;
-
- len -= r->ifcall.offset;
- if(len > r->ifcall.count)
- len = r->ifcall.count;
- r->ofcall.data = emalloc(len);
- memcpy(r->ofcall.data, buf + r->ifcall.offset, len);
- r->ofcall.count = len;
-}
-
-/* This should be moved to libixp */
-static void
-write_to_buf(Ixp9Req *r, char **buf, uint *len, uint max) {
- FileId *f;
- char *p;
- uint offset, count;
-
- f = r->fid->aux;
-
- offset = r->ifcall.offset;
- if(f->tab.perm & DMAPPEND)
- offset = *len;
-
- if(offset > *len || r->ifcall.count == 0) {
- r->ofcall.count = 0;
- return;
- }
-
- count = r->ifcall.count;
- if(max && (offset + count > max))
- count = max - offset;
-
- *len = offset + count;
- if(max == 0)
- *buf = erealloc(*buf, *len + 1);
- p = *buf;
-
- memcpy(p+offset, r->ifcall.data, count);
- r->ofcall.count = count;
- p[offset+count] = '\0';
-}
-
-/* This should be moved to libixp */
-static void
-data_to_cstring(Ixp9Req *r) {
- char *p;
- uint i;
-
- i = r->ifcall.count;
- p = r->ifcall.data;
- if(p[i - 1] == '\n')
- i--;
-
- r->ifcall.data = toutf8n(p, i);
- assert(r->ifcall.data);
- free(p);
-}
-
typedef char* (*MsgFunc)(void*, IxpMsg*);
-
-static char*
-message(Ixp9Req *r, MsgFunc fn) {
- char *err, *s, *p, c;
- FileId *f;
- IxpMsg m;
-
- f = r->fid->aux;
-
- data_to_cstring(r);
- s = r->ifcall.data;
-
- err = nil;
- c = *s;
- while(c != '\0') {
- while(*s == '\n')
- s++;
- p = s;
- while(*p != '\0' && *p != '\n')
- p++;
- c = *p;
- *p = '\0';
-
- m = ixp_message(s, p-s, 0);
- s = fn(f->p.ref, &m);
- if(s)
- err = s;
- s = p + 1;
- }
- return err;
-}
-
-/* FIXME: Move to external lib */
-static void
-pending_respond(Ixp9Req *r) {
- FileId *f;
- PLink *p;
- RLink *rl;
- Queue *q;
-
- f = r->fid->aux;
- p = f->p.p;
- assert(f->pending);
- if(p->queue) {
- q = p->queue;
- p->queue = q->link;
- r->ofcall.data = q->dat;
- r->ofcall.count = q->len;
- if(r->aux) {
- rl = r->aux;
- rl->next->prev = rl->prev;
- rl->prev->next = rl->next;
- free(rl);
- }
- respond(r, nil);
- free(q);
- }else {
- rl = emallocz(sizeof *rl);
- rl->req = r;
- rl->next = &p->pending->req;
- rl->prev = rl->next->prev;
- rl->next->prev = rl;
- rl->prev->next = rl;
- r->aux = rl;
- }
-}
-
-static void
-pending_write(Pending *p, char *dat, long n) {
- RLink rl;
- Queue **qp, *q;
- PLink *pp;
- RLink *rp;
-
- if(n == 0)
- return;
-
- if(p->req.next == nil) {
- p->req.next = &p->req;
- p->req.prev = &p->req;
- p->fids.prev = &p->fids;
- p->fids.next = &p->fids;
- }
-
- for(pp=p->fids.next; pp != &p->fids; pp=pp->next) {
- for(qp=&pp->queue; *qp; qp=&qp[0]->link)
- ;
- q = emallocz(sizeof *q);
- q->dat = emalloc(n);
- memcpy(q->dat, dat, n);
- q->len = n;
- *qp = q;
- }
- rl.next = &rl;
- rl.prev = &rl;
- if(p->req.next != &p->req) {
- rl.next = p->req.next;
- rl.prev = p->req.prev;
- p->req.prev = &p->req;
- p->req.next = &p->req;
- }
- rl.prev->next = &rl;
- rl.next->prev = &rl;
- while((rp = rl.next) != &rl)
- pending_respond(rp->req);
-}
-
-static void
-pending_pushfid(Pending *p, IxpFid *f) {
- PLink *pl;
- FileId *fi;
-
- if(p->req.next == nil) {
- p->req.next = &p->req;
- p->req.prev = &p->req;
- p->fids.prev = &p->fids;
- p->fids.next = &p->fids;
- }
-
- fi = f->aux;
- pl = emallocz(sizeof *pl);
- pl->fid = f;
- pl->pending = p;
- pl->next = &p->fids;
- pl->prev = pl->next->prev;
- pl->next->prev = pl;
- pl->prev->next = pl;
- fi->pending = true;
- fi->p.p = pl;
-}
void
event(const char *format, ...) {
@@ -418,10 +133,11 @@
vsnprint(buffer, sizeof buffer, format, ap);
va_end(ap);
- pending_write(&events, buffer, strlen(buffer));
+ ixp_pending_write(&events, buffer, strlen(buffer));
}
static int dflags;
+
bool
setdebug(int flag) {
dflags = flag;
@@ -474,11 +190,13 @@
if(debugfile&flag)
for(i=0; i < nelem(pdebug); i++)
if(flag & (1<<i))
- pending_write(pdebug+i, buf, n);
+ ixp_pending_write(pdebug+i, buf, n);
}
+static uint fs_size(IxpFileId*);
+
static void
-dostat(Stat *s, uint len, FileId *f) {
+dostat(Stat *s, IxpFileId *f) {
s->type = 0;
s->dev = 0;
s->qid.path = QID(f->tab.type, f->id);
@@ -486,8 +204,8 @@
s->qid.type = f->tab.qtype;
s->mode = f->tab.perm;
s->atime = time(nil);
- s->mtime = time(nil);
- s->length = len;
+ s->mtime = s->atime;
+ s->length = fs_size(f);;
s->name = f->tab.name;
s->uid = user;
s->gid = user;
@@ -496,11 +214,11 @@
/* All lookups and directory organization should be performed through
* lookup_file, mostly through the dirtabs[] tree. */
-static FileId *
-lookup_file(FileId *parent, char *name)
+static IxpFileId*
+lookup_file(IxpFileId *parent, char *name)
{
- FileId *ret, *file, **last;
- Dirtab *dir;
+ IxpFileId *ret, *file, **last;
+ IxpDirtab *dir;
Client *c;
View *v;
Bar *b;
@@ -515,7 +233,7 @@
ret = nil;
for(; dir->name; dir++) {
# define push_file(nam) \
- file = get_file(); \
+ file = ixp_srv_getfile(); \
*last = file; \
last = &file->next; \
file->tab = *dir; \
@@ -602,6 +320,7 @@
file->p.bar_p = &screen[0].bar[BLeft];
else
file->p.bar_p = &screen[0].bar[BRight];
+ file->id = (int)(uintptr_t)file->p.bar_p;
break;
case FsFColRules:
file->p.rule = &def.colrules;
@@ -621,92 +340,29 @@
return ret;
}
-static bool
-verify_file(FileId *f) {
- FileId *nf;
- int ret;
-
- if(!f->next)
- return true;
-
- ret = false;
- if(verify_file(f->next)) {
- nf = lookup_file(f->next, f->tab.name);
- if(nf) {
- if(!nf->volatil || nf->p.ref == f->p.ref)
- ret = true;
- free_file(nf);
- }
- }
- return ret;
-}
-
/* Service Functions */
void
fs_attach(Ixp9Req *r) {
- FileId *f = get_file();
+ IxpFileId *f;
+
+ f = ixp_srv_getfile();
f->tab = dirtab[FsRoot][0];
f->tab.name = estrdup("/");
- f->p.ref = nil;
r->fid->aux = f;
r->fid->qid.type = f->tab.qtype;
r->fid->qid.path = QID(f->tab.type, 0);
- r->ofcall.qid = r->fid->qid;
+ r->ofcall.rattach.qid = r->fid->qid;
respond(r, nil);
}
void
fs_walk(Ixp9Req *r) {
- FileId *f, *nf;
- int i;
- f = r->fid->aux;
- clone_files(f);
- for(i=0; i < r->ifcall.nwname; i++) {
- if(!strcmp(r->ifcall.wname[i], "..")) {
- if(f->next) {
- nf=f;
- f=f->next;
- free_file(nf);
- }
- }else{
- nf = lookup_file(f, r->ifcall.wname[i]);
- if(!nf)
- break;
- assert(!nf->next);
- if(strcmp(r->ifcall.wname[i], ".")) {
- nf->next = f;
- f = nf;
- }
- }
- r->ofcall.wqid[i].type = f->tab.qtype;
- r->ofcall.wqid[i].path = QID(f->tab.type, f->id);
- }
- /* There should be a way to do this on freefid() */
- if(i < r->ifcall.nwname) {
- while((nf = f)) {
- f=f->next;
- free_file(nf);
- }
- respond(r, Enofile);
- return;
- }
- /* Remove refs for r->fid if no new fid */
- if(r->ifcall.fid == r->ifcall.newfid) {
- nf = r->fid->aux;
- r->fid->aux = f;
- while((f = nf)) {
- nf = nf->next;
- free_file(f);
- }
- }else
- r->newfid->aux = f;
- r->ofcall.nwqid = i;
- respond(r, nil);
+ ixp_srv_walkandclone(r, lookup_file);
}
static uint
-fs_size(FileId *f) {
+fs_size(IxpFileId *f) {
switch(f->tab.type) {
default:
return 0;
@@ -730,128 +386,99 @@
Stat s;
int size;
char *buf;
- FileId *f;
+ IxpFileId *f;
f = r->fid->aux;
- if(!verify_file(f)) {
+ if(!ixp_srv_verifyfile(f, lookup_file)) {
respond(r, Enofile);
return;
}
- dostat(&s, fs_size(f), f);
- r->ofcall.nstat = size = ixp_sizeof_stat(&s);
+ dostat(&s, f);
+ size = ixp_sizeof_stat(&s);
+ r->ofcall.rstat.nstat = size;
buf = emallocz(size);
m = ixp_message(buf, size, MsgPack);
ixp_pstat(&m, &s);
- r->ofcall.stat = (uchar*)m.data;
+ r->ofcall.rstat.stat = (uchar*)m.data;
respond(r, nil);
}
void
fs_read(Ixp9Req *r) {
char *buf;
- FileId *f, *tf;
- int n, offset;
- ulong size;
+ IxpFileId *f;
+ int n;
f = r->fid->aux;
- if(!verify_file(f)) {
+ if(!ixp_srv_verifyfile(f, lookup_file)) {
respond(r, Enofile);
return;
}
if(f->tab.perm & DMDIR && f->tab.perm & 0400) {
- Stat s;
- IxpMsg m;
-
- size = r->ifcall.count;
- if(size > r->fid->iounit)
- size = r->fid->iounit;
- buf = emallocz(size);
- m = ixp_message(buf, size, MsgPack);
-
- tf = f = lookup_file(f, nil);
- /* Note: f->tab.name == "." so we skip it */
- offset = 0;
- for(f=f->next; f; f=f->next) {
- dostat(&s, fs_size(f), f);
- n = ixp_sizeof_stat(&s);
- if(offset >= r->ifcall.offset) {
- if(size < n)
- break;
- ixp_pstat(&m, &s);
- size -= n;
- }
- offset += n;
- }
- while((f = tf)) {
- tf=tf->next;
- free_file(f);
- }
- r->ofcall.count = m.pos - m.data;
- r->ofcall.data = m.data;
- respond(r, nil);
+ ixp_srv_readdir(r, lookup_file, dostat);
return;
}
else{
if(f->pending) {
- pending_respond(r);
+ ixp_pending_respond(r);
return;
}
switch(f->tab.type) {
case FsFprops:
- write_buf(r, f->p.client->props, strlen(f->p.client->props));
+ ixp_srv_readbuf(r, f->p.client->props, strlen(f->p.client->props));
respond(r, nil);
return;
case FsFColRules:
case FsFTagRules:
- write_buf(r, f->p.rule->string, f->p.rule->size);
+ ixp_srv_readbuf(r, f->p.rule->string, f->p.rule->size);
respond(r, nil);
return;
case FsFKeys:
- write_buf(r, def.keys, def.keyssz);
+ ixp_srv_readbuf(r, def.keys, def.keyssz);
respond(r, nil);
return;
case FsFCtags:
- write_buf(r, f->p.client->tags, strlen(f->p.client->tags));
+ ixp_srv_readbuf(r, f->p.client->tags, strlen(f->p.client->tags));
respond(r, nil);
return;
case FsFClabel:
- write_buf(r, f->p.client->name, strlen(f->p.client->name));
+ ixp_srv_readbuf(r, f->p.client->name, strlen(f->p.client->name));
respond(r, nil);
return;
case FsFBar:
- write_buf(r, f->p.bar->buf, strlen(f->p.bar->buf));
+ ixp_srv_readbuf(r, f->p.bar->buf, strlen(f->p.bar->buf));
respond(r, nil);
return;
case FsFRctl:
buf = readctl_root();
- write_buf(r, buf, strlen(buf));
+ ixp_srv_readbuf(r, buf, strlen(buf));
respond(r, nil);
return;
case FsFCctl:
- if(r->ifcall.offset) {
+ if(r->ifcall.io.offset) {
respond(r, nil);
return;
}
- r->ofcall.data = smprint("%C", f->p.client);
- r->ofcall.count = strlen(r->ofcall.data); /* will die if nil */
+ r->ofcall.io.data = smprint("%C", f->p.client);
+ r->ofcall.io.count = strlen(r->ofcall.io.data); /* will die if nil */
respond(r, nil);
return;
case FsFTindex:
buf = view_index(f->p.view);
n = strlen(buf);
- write_buf(r, buf, n);
+ ixp_srv_readbuf(r, buf, n);
respond(r, nil);
return;
case FsFTctl:
buf = readctl_view(f->p.view);
n = strlen(buf);
- write_buf(r, buf, n);
+ ixp_srv_readbuf(r, buf, n);
respond(r, nil);
return;
}
@@ -865,18 +492,19 @@
void
fs_write(Ixp9Req *r) {
- FileId *f;
+ MsgFunc mf;
+ IxpFileId *f;
char *errstr;
char *p;
uint i;
- if(r->ifcall.count == 0) {
+ if(r->ifcall.io.count == 0) {
respond(r, nil);
return;
}
f = r->fid->aux;
- if(!verify_file(f)) {
+ if(!ixp_srv_verifyfile(f, lookup_file)) {
respond(r, Enofile);
return;
}
@@ -884,55 +512,54 @@
switch(f->tab.type) {
case FsFColRules:
case FsFTagRules:
- write_to_buf(r, &f->p.rule->string, &f->p.rule->size, 0);
+ ixp_srv_writebuf(r, &f->p.rule->string, &f->p.rule->size, 0);
respond(r, nil);
return;
case FsFKeys:
- write_to_buf(r, &def.keys, &def.keyssz, 0);
+ ixp_srv_writebuf(r, &def.keys, &def.keyssz, 0);
respond(r, nil);
return;
case FsFClabel:
- data_to_cstring(r);
- utfecpy(f->p.client->name, f->p.client->name+sizeof(client->name), r->ifcall.data);
+ ixp_srv_data2cstring(r);
+ utfecpy(f->p.client->name, f->p.client->name+sizeof(client->name), r->ifcall.io.data);
frame_draw(f->p.client->sel);
update_class(f->p.client);
- r->ofcall.count = r->ifcall.count;
+ r->ofcall.io.count = r->ifcall.io.count;
respond(r, nil);
return;
case FsFCtags:
- data_to_cstring(r);
- apply_tags(f->p.client, r->ifcall.data);
- r->ofcall.count = r->ifcall.count;
+ ixp_srv_data2cstring(r);
+ apply_tags(f->p.client, r->ifcall.io.data);
+ r->ofcall.io.count = r->ifcall.io.count;
respond(r, nil);
return;
case FsFBar:
i = strlen(f->p.bar->buf);
p = f->p.bar->buf;
- write_to_buf(r, &p, &i, 279);
- r->ofcall.count = i - r->ifcall.offset;
+ ixp_srv_writebuf(r, &p, &i, 279);
+ r->ofcall.io.count = i - r->ifcall.io.offset;
respond(r, nil);
return;
case FsFCctl:
- errstr = message(r, (MsgFunc)message_client);
- r->ofcall.count = r->ifcall.count;
- respond(r, errstr);
- return;
+ mf = (MsgFunc)message_client;
+ goto msg;
case FsFTctl:
- errstr = message(r, (MsgFunc)message_view);
- r->ofcall.count = r->ifcall.count;
- respond(r, errstr);
- return;
+ mf = (MsgFunc)message_view;
+ goto msg;
case FsFRctl:
- errstr = message(r, (MsgFunc)message_root);
- r->ofcall.count = r->ifcall.count;
+ mf = (MsgFunc)message_root;
+ goto msg;
+ msg:
+ errstr = ixp_srv_writectl(r, mf);
+ r->ofcall.io.count = r->ifcall.io.count;
respond(r, errstr);
return;
case FsFEvent:
- if(r->ifcall.data[r->ifcall.count-1] == '\n')
- event("%.*s", (int)r->ifcall.count, r->ifcall.data);
+ if(r->ifcall.io.data[r->ifcall.io.count-1] == '\n')
+ event("%.*s", (int)r->ifcall.io.count, r->ifcall.io.data);
else
- event("%.*s\n", (int)r->ifcall.count, r->ifcall.data);
- r->ofcall.count = r->ifcall.count;
+ event("%.*s\n", (int)r->ifcall.io.count, r->ifcall.io.data);
+ r->ofcall.io.count = r->ifcall.io.count;
respond(r, nil);
return;
}
@@ -945,46 +572,37 @@
void
fs_open(Ixp9Req *r) {
- FileId *f;
+ IxpFileId *f;
f = r->fid->aux;
- if(!verify_file(f)) {
+ if(!ixp_srv_verifyfile(f, lookup_file)) {
respond(r, Enofile);
return;
}
switch(f->tab.type) {
case FsFEvent:
- pending_pushfid(&events, r->fid);
+ ixp_pending_pushfid(&events, r->fid);
break;
case FsFDebug:
- pending_pushfid(pdebug+f->id, r->fid);
+ ixp_pending_pushfid(pdebug+f->id, r->fid);
debugfile |= 1<<f->id;
break;
}
- if((r->ifcall.mode&3) == OEXEC) {
+
+ if((r->ifcall.topen.mode&3) == OEXEC
+ || (r->ifcall.topen.mode&3) != OREAD && !(f->tab.perm & 0200)
+ || (r->ifcall.topen.mode&3) != OWRITE && !(f->tab.perm & 0400)
+ || (r->ifcall.topen.mode & ~(3|OAPPEND|OTRUNC)))
respond(r, Enoperm);
- return;
- }
- if((r->ifcall.mode&3) != OREAD && !(f->tab.perm & 0200)) {
- respond(r, Enoperm);
- return;
- }
- if((r->ifcall.mode&3) != OWRITE && !(f->tab.perm & 0400)) {
- respond(r, Enoperm);
- return;
- }
- if((r->ifcall.mode&~(3|OAPPEND|OTRUNC))) {
- respond(r, Enoperm);
- return;
- }
- respond(r, nil);
+ else
+ respond(r, nil);
}
void
fs_create(Ixp9Req *r) {
- FileId *f;
+ IxpFileId *f;
f = r->fid->aux;
@@ -993,18 +611,18 @@
respond(r, Enoperm);
return;
case FsDBars:
- if(!strlen(r->ifcall.name)) {
+ if(!strlen(r->ifcall.tcreate.name)) {
respond(r, Ebadvalue);
return;
}
- bar_create(f->p.bar_p, r->ifcall.name);
- f = lookup_file(f, r->ifcall.name);
+ bar_create(f->p.bar_p, r->ifcall.tcreate.name);
+ f = lookup_file(f, r->ifcall.tcreate.name);
if(!f) {
respond(r, Enofile);
return;
}
- r->ofcall.qid.type = f->tab.qtype;
- r->ofcall.qid.path = QID(f->tab.type, f->id);
+ r->ofcall.ropen.qid.type = f->tab.qtype;
+ r->ofcall.ropen.qid.path = QID(f->tab.type, f->id);
f->next = r->fid->aux;
r->fid->aux = f;
respond(r, nil);
@@ -1014,9 +632,10 @@
void
fs_remove(Ixp9Req *r) {
- FileId *f = r->fid->aux;
-
- if(!verify_file(f)) {
+ IxpFileId *f;
+
+ f = r->fid->aux;
+ if(!ixp_srv_verifyfile(f, lookup_file)) {
respond(r, Enofile);
return;
}
@@ -1036,36 +655,22 @@
void
fs_clunk(Ixp9Req *r) {
- FileId *f;
- PLink *pl;
- Queue *qu;
+ IxpFileId *f;
char *p, *q;
IxpMsg m;
f = r->fid->aux;
- if(!verify_file(f)) {
+ if(!ixp_srv_verifyfile(f, lookup_file)) {
respond(r, nil);
return;
}
if(f->pending) {
/* Should probably be in freefid */
- pl = f->p.p;
- pl->prev->next = pl->next;
- pl->next->prev = pl->prev;
- while((qu = pl->queue)) {
- pl->queue = qu->link;
- free(qu->dat);
- free(qu);
- };
- switch(f->tab.type) {
- case FsFDebug:
- if(pl->pending->fids.next == &pl->pending->fids)
+ if(ixp_pending_clunk(r)) {
+ if(f->tab.type == FsFDebug)
debugfile &= ~(1<<f->id);
- break;
}
- free(pl);
- respond(r, nil);
return;
}
@@ -1085,8 +690,7 @@
update_keys();
break;
case FsFBar:
- p = toutf8(f->p.bar->buf);
-
+ p = f->p.bar->buf;
m = ixp_message(p, strlen(p), 0);
msg_parsecolors(&m, &f->p.bar->col);
@@ -1097,8 +701,6 @@
q = f->p.bar->text;
utflcpy(q, (char*)m.pos, sizeof ((Bar*)0)->text);
- free(p);
-
bar_draw(screen);
break;
}
@@ -1108,31 +710,25 @@
void
fs_flush(Ixp9Req *r) {
Ixp9Req *or;
- FileId *f;
- RLink *rl;
+ IxpFileId *f;
or = r->oldreq;
f = or->fid->aux;
- if(f->pending) {
- rl = or->aux;
- if(rl) {
- rl->prev->next = rl->next;
- rl->next->prev = rl->prev;
- free(rl);
- }
- }
+ if(f->pending)
+ ixp_pending_flush(r);
+ /* else die() ? */
respond(r->oldreq, Einterrupted);
respond(r, nil);
}
void
fs_freefid(Fid *f) {
- FileId *id, *tid;
+ IxpFileId *id, *tid;
tid = f->aux;
while((id = tid)) {
tid = id->next;
- free_file(id);
+ ixp_srv_freefile(id);
}
}
diff -r 04f222972c9c -r 32204e0b2761 cmd/wmii/key.c
--- a/cmd/wmii/key.c Mon Jun 02 22:31:59 2008 -0400
+++ b/cmd/wmii/key.c Mon Aug 25 12:47:56 2008 -0400
@@ -92,7 +92,7 @@
return nil;
}
-static Key *
+static Key*
getkey(const char *name) {
char buf[128];
char *seq[8];
diff -r 04f222972c9c -r 32204e0b2761 cmd/wmii/main.c
--- a/cmd/wmii/main.c Mon Jun 02 22:31:59 2008 -0400
+++ b/cmd/wmii/main.c Mon Aug 25 12:47:56 2008 -0400
@@ -372,7 +372,7 @@
ixp_listen(&srv, ConnectionNumber(display), nil, check_x_event, closedisplay);
def.border = 1;
- def.colmode = Coldefault;
+ def.colmode = Colstack;
def.font = loadfont(FONT);
def.incmode = ISqueeze;
diff -r 04f222972c9c -r 32204e0b2761 cmd/wmii/message.c
--- a/cmd/wmii/message.c Mon Jun 02 22:31:59 2008 -0400
+++ b/cmd/wmii/message.c Mon Aug 25 12:47:56 2008 -0400
@@ -16,7 +16,7 @@
Ebadvalue[] = "bad value",
Ebadusage[] = "bad usage";
-/* Edit |sort Edit s/"([^"]+)"/L\1/g Edit |tr 'a-z' 'A-Z' */
+/* Edit |sort Edit |sed 's/"([^"]+)"/L\1/g' | tr 'a-z' 'A-Z' */
enum {
LFULLSCREEN,
LURGENT,
@@ -501,6 +501,41 @@
return ret;
}
+static void
+printdebug(int mask) {
+ int i, j;
+
+ for(i=0, j=0; i < nelem(debugtab); i++)
+ if(mask & (1<<i)) {
+ if(j++ > 0) bufprint(" ");
+ bufprint("%s", debugtab[i]);
+ }
+}
+
+char*
+readctl_root(void) {
+ bufclear();
+ bufprint("bar on %s\n", barpostab[screen->barpos]);
+ bufprint("border %d\n", def.border);
+ if(debugflag) {
+ bufprint("debug ");
+ printdebug(debugflag);
+ bufprint("\n");
+ }
+ if(debugfile) {
+ bufprint("debugfile ");
+ printdebug(debugfile);
+ bufprint("\n");
+ }
+ bufprint("focuscolors %s\n", def.focuscolor.colstr);
+ bufprint("font %s\n", def.font->name);
+ bufprint("grabmod %s\n", def.grabmod);
+ bufprint("incmode %s\n", incmodetab[screen->barpos]);
+ bufprint("normcolors %s\n", def.normcolor.colstr);
+ bufprint("view %s\n", screen->sel->name);
+ return buffer;
+}
+
char*
message_view(View *v, IxpMsg *m) {
Area *a;
@@ -555,7 +590,7 @@
case LCOLMODE:
s = msg_getword(m);
a = strarea(v, s);
- if(a == nil || a->floating)
+ if(a == nil) /* || a->floating) */
return Ebadvalue;
s = msg_getword(m);
@@ -581,6 +616,29 @@
return Ebadcmd;
}
/* not reached */
+}
+
+char*
+readctl_view(View *v) {
+ Area *a;
+ uint i;
+
+ bufclear();
+ bufprint("%s\n", v->name);
+
+ /* select <area>[ <frame>] */
+ bufprint("select %a", v->sel);
+ if(v->sel->sel)
+ bufprint(" %d", frame_idx(v->sel->sel));
+ bufprint("\n");
+
+ /* select client <client> */
+ if(v->sel->sel)
+ bufprint("select client %C\n", v->sel->sel->client);
+
+ for(a = v->area->next, i = 1; a; a = a->next, i++)
+ bufprint("colmode %d %s\n", i, column_getmode(a));
+ return buffer;
}
static char*
@@ -1027,65 +1085,6 @@
return nil;
}
-static void
-printdebug(int mask) {
- int i, j;
-
- for(i=0, j=0; i < nelem(debugtab); i++)
- if(mask & (1<<i)) {
- if(j++ > 0)
- bufprint(" ");
- bufprint("%s", debugtab[i]);
- }
-}
-
-char*
-readctl_root(void) {
- bufclear();
- bufprint("bar on %s\n", barpostab[screen->barpos]);
- bufprint("border %d\n", def.border);
- if(debugflag) {
- bufprint("debug ");
- printdebug(debugflag);
- bufprint("\n");
- }
- if(debugfile) {
- bufprint("debugfile ");
- printdebug(debugfile);
- bufprint("\n");
- }
- bufprint("focuscolors %s\n", def.focuscolor.colstr);
- bufprint("font %s\n", def.font->name);
- bufprint("grabmod %s\n", def.grabmod);
- bufprint("incmode %s\n", incmodetab[screen->barpos]);
- bufprint("normcolors %s\n", def.normcolor.colstr);
- bufprint("view %s\n", screen->sel->name);
- return buffer;
-}
-
-char*
-readctl_view(View *v) {
- Area *a;
- uint i;
-
- bufclear();
- bufprint("%s\n", v->name);
-
- /* select <area>[ <frame>] */
- bufprint("select %a", v->sel);
- if(v->sel->sel)
- bufprint(" %d", frame_idx(v->sel->sel));
- bufprint("\n");
-
- /* select client <client> */
- if(v->sel->sel)
- bufprint("select client %C\n", v->sel->sel->client);
-
- for(a = v->area->next, i = 1; a; a = a->next, i++)
- bufprint("colmode %d %s\n", i, column_getmode(a));
- return buffer;
-}
-
void
warning(const char *fmt, ...) {
va_list ap;
diff -r 04f222972c9c -r 32204e0b2761 cmd/wmii/view.c
--- a/cmd/wmii/view.c Mon Jun 02 22:31:59 2008 -0400
+++ b/cmd/wmii/view.c Mon Aug 25 12:47:56 2008 -0400
@@ -252,7 +252,8 @@
for(c=client; c; c=c->next) {
f = c->sel;
- if(f && f->view == v)
+ if(f && f->view == v
+ && !(f->area->max && f->area->floating && f->area != v->sel))
client_resize(c, f->r);
else {
unmap_frame(c);
@@ -304,8 +305,11 @@
c = f->client;
a = v->sel;
- if(client_floats_p(c))
+ if(client_floats_p(c)) {
+ if(v->sel != v->area)
+ v->oldsel = v->sel;
a = v->area;
+ }
else if((ff = client_groupframe(c, v)))
a = ff->area;
else if(starting && v->sel->floating)
diff -r 04f222972c9c -r 32204e0b2761 cmd/wmii9menu.c
--- a/cmd/wmii9menu.c Mon Jun 02 22:31:59 2008 -0400
+++ b/cmd/wmii9menu.c Mon Aug 25 12:47:56 2008 -0400
@@ -35,6 +35,7 @@
* Heavily modified by Kris Maglione for use with wmii.
*/
+#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
diff -r 04f222972c9c -r 32204e0b2761 cmd/wmiir.c
--- a/cmd/wmiir.c Mon Jun 02 22:31:59 2008 -0400
+++ b/cmd/wmiir.c Mon Aug 25 12:47:56 2008 -0400
@@ -147,7 +147,7 @@
if(fid == nil)
fatal("Can't open file '%s': %r\n", file);
- nbuf = 0;
+ nbuf = 1;
for(i=0; i < argc; i++)
nbuf += strlen(argv[i]) + (i > 0);
buf = emalloc(nbuf);
diff -r 04f222972c9c -r 32204e0b2761 config.mk
--- a/config.mk Mon Jun 02 22:31:59 2008 -0400
+++ b/config.mk Mon Aug 25 12:47:56 2008 -0400
@@ -49,7 +49,7 @@
#LD=pcc
# *BSD
-#LIBICONV = -liconv
+#LIBICONV = -L/usr/local/lib -liconv
# +Darwin
#STATIC = # Darwin doesn't like static linking
#SHARED = -dynamiclib
diff -r 04f222972c9c -r 32204e0b2761 libwmii_hack/hack.c
--- a/libwmii_hack/hack.c Mon Jun 02 22:31:59 2008 -0400
+++ b/libwmii_hack/hack.c Mon Aug 25 12:47:56 2008 -0400
@@ -17,8 +17,6 @@
enum {
Timeout = 10,
};
-
-typedef int (*XErrorHandler)(Display*, XErrorEvent*);
static void* xlib;
diff -r 04f222972c9c -r 32204e0b2761 mk/hdr.mk
--- a/mk/hdr.mk Mon Jun 02 22:31:59 2008 -0400
+++ b/mk/hdr.mk Mon Aug 25 12:47:56 2008 -0400
@@ -84,7 +84,7 @@
.man1.install:
set -e; \
- man=$(<:$*.man%=%); \
+ man=1; \
path="$(MAN)/man$$man/$*.$$man"; \
echo INSTALL man $$($(CLEANNAME) "$(BASE)/$*($$man)"); \
cp "$<" "$$path"; \
diff -r 04f222972c9c -r 32204e0b2761 rc/rc.wmii.rc
--- a/rc/rc.wmii.rc Mon Jun 02 22:31:59 2008 -0400
+++ b/rc/rc.wmii.rc Mon Aug 25 12:47:56 2008 -0400
@@ -90,7 +90,7 @@
msg = 'The following client is not responding. What would you like to do?'
resp = `{wihack -transient $client \
xmessage -nearmouse -buttons Kill,Wait -print \
- $msg $wi_nl '' `{wmiir read /client/sel/label}}
+ $msg $wi_nl '' `{wmiir read /client/$client/label}}
if(~ $resp Kill)
wmiir xwrite /client/$client/ctl slay
}&}
diff -r 04f222972c9c -r 32204e0b2761 rc/wmiirc.sh
--- a/rc/wmiirc.sh Mon Jun 02 22:31:59 2008 -0400
+++ b/rc/wmiirc.sh Mon Aug 25 12:47:56 2008 -0400
@@ -211,7 +211,6 @@
# WM Configuration
wmiir write /ctl <<!
- view 1
font $WMII_FONT
focuscolors $WMII_FOCUSCOLORS
normcolors $WMII_NORMCOLORS
diff -r 04f222972c9c -r 32204e0b2761 util/compile
--- a/util/compile Mon Jun 02 22:31:59 2008 -0400
+++ b/util/compile Mon Aug 25 12:47:56 2008 -0400
@@ -11,6 +11,7 @@
[ -n "$noisycc" ] && echo $CC -o $outfile $CFLAGS $@
$CC -o $outfile $CFLAGS $@ >$xtmp 2>&1
status=$?
+[ $? -eq 0 ] || echo $CC -o $outfile $CFLAGS $@ >&2
base=$(echo $BASE | sed 's/,/\\,/g')
re='\([^[:space:]/]*\..:[0-9]\)'
diff -r 04f222972c9c -r 32204e0b2761 util/genconfig
--- a/util/genconfig Mon Jun 02 22:31:59 2008 -0400
+++ b/util/genconfig Mon Aug 25 12:47:56 2008 -0400
@@ -96,7 +96,8 @@
unset val
if [ -z "$def" -o -n "$force" ]; then
echo "$@"
- read -p "$var[$def]$(equals) " val
+ echo -n "$var[$def]$(equals) "
+ read val
echo
fi
diff -r 04f222972c9c -r 32204e0b2761 util/link
--- a/util/link Mon Jun 02 22:31:59 2008 -0400
+++ b/util/link Mon Aug 25 12:47:56 2008 -0400
@@ -24,6 +24,7 @@
[ -n "$noisycc" ] && echo $LD -o $outfile $ofiles $LDFLAGS $args
$LD -o $outfile $ofiles $LDFLAGS $args >$xtmp 2>&1
status=$?
+[ $? -eq 0 ] || $LD -o $outfile $ofiles $LDFLAGS $args >&2
sed 's/.*: In function `[^:]*: *//' $xtmp | egrep . |
egrep -v 'is almost always misused|is dangerous, better use|in statically linked applications requires at runtime'
Received on Sat Aug 30 2008 - 21:49:27 UTC
This archive was generated by hypermail 2.2.0 : Sat Aug 30 2008 - 22:00:09 UTC