Concerning your approach, many things are still missing (IMO of course). For example, self-insert will replace the selection if there is one, so you should save the selection.
This is expected, and can be solved easily by adding SaveSelection flag to this LFUN. The advantage of my patch is that I can handle all these cases in a uniform way, in a single file (LyXAction.cpp).
Tracking all the lfuns where this happens is more complicated IMO than adding a proper call in eraseSelection and cutSelection (patch coming).
I know your point and I am not objecting your patch. I prefer mine when I have to handle DELETE in mathed in a different way than DELETE in text using your approach (IIRC, cutSelection is not called in mathed DELETE cases). Jose, you can decide which way you prefer. Bo