So I see that it actually isn't possible to do what I want, that the write operations to an event file are limited to just positional information. That's unfortunate, I had really hoped it was possible to simulate events via an external program. .../src/libacme/acme.c: int winwriteevent(Win *w, Event *e) { char buf[100]; snprint(buf, sizeof buf, "%c%c%d %d \n", e->c1, e->c2, e->q0, e->q1); return fswrite(wfid(w, "event"), buf, strlen(buf)); }