I've also been reading your source out of interest (and time ;)). Must say you have quite a consistent style, and you found a good balance what concerns writing comments.
Not an OO connaisseur myself, what I'm a bit puzzled about are the long conditional constructs in on_press() and on_release(). Partly it seems to handle mapping of specific keys that might not exist in all layouts, but is the rest needed because of conversion between different classes that encode keys?
Expect is a Tcl extension. You can also put Tk in the mix if you want, to create graphical Expect-based applications. You might know Tk from Tkinter (a Python binding to Tk).
Undroidwish [0] is a Tcl/Tk binary that apparently has experimental support for Wayland (through SDL). It's a spin-off from Androwish [1], but more for desktop/embedded systems.
You might have something there, as Expect is supported for Androwish already.
Not an OO connaisseur myself, what I'm a bit puzzled about are the long conditional constructs in on_press() and on_release(). Partly it seems to handle mapping of specific keys that might not exist in all layouts, but is the rest needed because of conversion between different classes that encode keys?