This is a keymap facility for Common Lisp inspired by Emacsy (keymap.scm) which is inspired by Emacs.
Support prefix keys to other keymaps. For instance, if you prefix my-mode-map with C-c, then all bindings for my-mode will be accessible after pressing C-c.
List all bindings matching a given prefix. (Also known as which-key in Emacs.)
List the bindings associated to a command.
Support multiple inheritance.
Support keycode.
Validate keyspec at compile time.
define-key can set multiple bindings in a single call.
Support multiple scheme to make it easy to switch between, say, Emacs-style and VI-style bindings. This orthogonality to keymaps composes better than having multiple keymaps: changing scheme applies to the entire program, which is easier than looping through all keymaps to change them.
Translate keyspecs as a fallback. For instance if shift-a is not bound, check A.
Behaviour can be customized with global parameters such as *print-shortcut*.
The compose function can merge multiple keymaps together.
Support multiple arguments when that makes sense (e.g. multiple keymaps for lookup-key).
Key remapping à-la Emacs.
Typed keymaps, i.e. keymaps where bound values can only be of a given type. This is convenient to catch typos, for instance when binding 'FOO instead of #'FOO.