Text editor
One buffer, two editors. The same text, the same widget tree — but Ctrl+B swaps the entire keymap between a nano-style modeless one and a modal vim one, live.
It exists to show the two opposite ways a terminal app teaches its own keys, both of which Fleury gives you for free. nano shows everything always: the shortcut bar along the bottom is a KeyHintBar, which reads the live bindings through KeyBindings.activeOf — no list to maintain. vim reveals on demand: press d, g or the Space leader and pause, and the which-key popup (WhichKey, fed by KeyBindings.pendingOf) lists what can come next.
The modal behavior underneath is ordinary app state. In vim NORMAL the editor declines typed text, so printables route to KeyBindings as commands; in INSERT it claims them. See Key handling.
Try it: press Ctrl+B to switch between nano and vim — the whole shortcut bar changes with it. Then, in vim, press d and pause to see which-key list dd, dw and d$.