Do I understand the design? I think the design is that an event invokes the local inset's dispatch() function, which either handles it or passes it up to it's parent inset. If this is not the design dare I suggest this is what it should be? Things like end would work everywhere for free, presumably because nothing special catches it so it ends up being handled by a global inset that catches everything nobody else handles.
This requires nestable insets with a parent pointer or reference, but nestable insets are the right thing anyway if LyX wants to move a subset of *TeX format or it is important to easily generate natural *TeX. It might be moderately easy to leave the big switch in place while insets are being converted. Unfortunately I am not in a position to volunteer right now... too much thesis clean up and a bastion host needs a really solid http gateway to forward "safe" requests to "internal" servers ("safe" means things like no nulls, no ..\, no unicode and that sort of thing). Once those are out of way I might look into a maximal corresondance generator for two LyX buffers and see whether someone follows up with a GUI. Complexity will depend on whether it has to handle huge documents or not---so knowing whether something that managed at most 20,000 words would be enough or the ability to deal with 200,000 word documents would help. -- Duncan (-: "software industry, the: unique industry where selling substandard goods is legal and you can charge extra for fixing the problems."