I like how you extracted modes out of Vim. Maybe also extract Normal mode, and have two functions on each mode: `enter` and `leave`? Will this work or is it more complicated?